@telia-ace/widget-services 1.0.8 → 1.0.11

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/index.js CHANGED
@@ -1,264 +1,137 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
- var __hasOwnProp = Object.prototype.hasOwnProperty;
4
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
- var __spreadValues = (a, b) => {
7
- for (var prop in b || (b = {}))
8
- if (__hasOwnProp.call(b, prop))
9
- __defNormalProp(a, prop, b[prop]);
10
- if (__getOwnPropSymbols)
11
- for (var prop of __getOwnPropSymbols(b)) {
12
- if (__propIsEnum.call(b, prop))
13
- __defNormalProp(a, prop, b[prop]);
14
- }
15
- return a;
16
- };
17
- var __async = (__this, __arguments, generator) => {
18
- return new Promise((resolve, reject) => {
19
- var fulfilled = (value) => {
20
- try {
21
- step(generator.next(value));
22
- } catch (e) {
23
- reject(e);
24
- }
25
- };
26
- var rejected = (value) => {
27
- try {
28
- step(generator.throw(value));
29
- } catch (e) {
30
- reject(e);
31
- }
32
- };
33
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
34
- step((generator = generator.apply(__this, __arguments)).next());
35
- });
1
+ var M = Object.defineProperty;
2
+ var T = Object.getOwnPropertySymbols;
3
+ var R = Object.prototype.hasOwnProperty, B = Object.prototype.propertyIsEnumerable;
4
+ var k = (e, t, n) => t in e ? M(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n, f = (e, t) => {
5
+ for (var n in t || (t = {}))
6
+ R.call(t, n) && k(e, n, t[n]);
7
+ if (T)
8
+ for (var n of T(t))
9
+ B.call(t, n) && k(e, n, t[n]);
10
+ return e;
36
11
  };
37
- import { lock, hash, deepClone } from "@telia-ace/widget-utilities";
38
- var StorageMedium = /* @__PURE__ */ ((StorageMedium2) => {
39
- StorageMedium2["Cookie"] = "cookie";
40
- StorageMedium2["Local"] = "local";
41
- StorageMedium2["Session"] = "session";
42
- return StorageMedium2;
43
- })(StorageMedium || {});
44
- var StorageScope = /* @__PURE__ */ ((StorageScope2) => {
45
- StorageScope2["Tenant"] = "tenant";
46
- StorageScope2["Implementation"] = "implementation";
47
- StorageScope2["Widget"] = "widget";
48
- return StorageScope2;
49
- })(StorageScope || {});
50
- var StorageCategory = /* @__PURE__ */ ((StorageCategory2) => {
51
- StorageCategory2["Necessary"] = "necessary";
52
- StorageCategory2["Functional"] = "functional";
53
- StorageCategory2["Analytical"] = "analytical";
54
- StorageCategory2["Marketing"] = "marketing";
55
- return StorageCategory2;
56
- })(StorageCategory || {});
57
- const createStorageWriter = (container, key, category, options = {}) => {
58
- return isNotAllowedAsync(container, category).then((notAllowed) => {
59
- return (value) => {
60
- processStorage(container);
61
- return isNotAllowedAsync(container, category).then((notAllowed2) => {
62
- if (notAllowed2) {
63
- return;
64
- }
65
- const {
66
- scope = StorageScope.Widget,
67
- medium = StorageMedium.Session,
68
- duration
69
- } = options;
70
- const store = createEmptyStore();
71
- store[scope][key] = createValue(value, category, duration);
72
- if (medium === StorageMedium.Cookie)
73
- return setCookieStoreAsync(container, store);
74
- else
75
- return setApplicationStoreAsync(container, medium, store);
76
- });
77
- };
78
- });
79
- };
80
- const readStorage = (container, key, medium = StorageMedium.Session) => {
81
- processStorage(container);
82
- if (typeof key === "undefined") {
83
- return Promise.resolve(void 0);
84
- }
85
- if (medium === StorageMedium.Cookie)
86
- return getCookieStoreAsync(container).then((store) => getValue(store, key));
87
- else
88
- return getApplicationStoreAsync(container, medium).then((store) => getValue(store, key));
89
- };
90
- const hasEntries = (object) => !!Object.entries(object).filter(([_, value]) => typeof value !== "undefined").length;
91
- const cleanUndefined = (object) => Object.entries(object).filter(([_, value]) => typeof value !== "undefined").forEach(([key, { value }]) => {
92
- if (typeof value === "undefined") {
93
- delete object[key];
94
- }
12
+ var S = (e, t, n) => new Promise((r, a) => {
13
+ var o = (i) => {
14
+ try {
15
+ c(n.next(i));
16
+ } catch (m) {
17
+ a(m);
18
+ }
19
+ }, s = (i) => {
20
+ try {
21
+ c(n.throw(i));
22
+ } catch (m) {
23
+ a(m);
24
+ }
25
+ }, c = (i) => i.done ? r(i.value) : Promise.resolve(i.value).then(o, s);
26
+ c((n = n.apply(e, t)).next());
95
27
  });
96
- const mergeAndClean = (target, source) => {
97
- const merged = {
98
- tenant: __spreadValues(__spreadValues({}, target.tenant), source.tenant),
99
- implementation: __spreadValues(__spreadValues({}, target.implementation), source.implementation),
100
- widget: __spreadValues(__spreadValues({}, target.widget), source.widget)
28
+ import { Logger as g, lock as p, hash as V, deepClone as F } from "@telia-ace/widget-utilities";
29
+ var l = /* @__PURE__ */ ((e) => (e.Cookie = "cookie", e.Local = "local", e.Session = "session", e))(l || {}), A = /* @__PURE__ */ ((e) => (e.Tenant = "tenant", e.Implementation = "implementation", e.Widget = "widget", e))(A || {}), d = /* @__PURE__ */ ((e) => (e.Necessary = "necessary", e.Functional = "functional", e.Analytical = "analytical", e.Marketing = "marketing", e))(d || {});
30
+ const q = (e, t, n, r = {}) => W(e, n).then((a) => (process.env.NODE_ENV !== "production" && a && g.warn(`createStorageWriter: Attempted to create storage writer using unallowed category.
31
+ Key: ${t}
32
+ Category: ${JSON.stringify(n)}
33
+ Options: ${JSON.stringify(r)}`), (o) => (x(e), W(e, n).then((s) => {
34
+ if (s) {
35
+ process.env.NODE_ENV !== "production" && g.warn(`storageWriter: Attempted to write to storage using unallowed category.
36
+ Key: ${t}
37
+ Category: ${JSON.stringify(n)}
38
+ Value: ${JSON.stringify(o)}
39
+ Options: ${JSON.stringify(r)}`);
40
+ return;
41
+ }
42
+ const {
43
+ scope: c = A.Widget,
44
+ medium: i = l.Session,
45
+ duration: m
46
+ } = r, u = H();
47
+ return u[c][t] = K(o, n, m), i === l.Cookie ? Z(e, u) : te(e, i, u);
48
+ })))), z = (e, t, n = l.Session) => (x(e), typeof t == "undefined" ? (process.env.NODE_ENV !== "production" && g.warn("readStorage: Undefined key passed when reading storage. ", t, n), Promise.resolve(void 0)) : n === l.Cookie ? Y(e).then((r) => N(r, t)) : ee(e, n).then((r) => N(r, t))), y = (e) => !!Object.entries(e).filter(([t, n]) => typeof n != "undefined").length, P = (e) => Object.entries(e).filter(([t, n]) => typeof n != "undefined").forEach(([t, { value: n }]) => {
49
+ typeof n == "undefined" && delete e[t];
50
+ }), j = (e, t) => {
51
+ const n = {
52
+ tenant: f(f({}, e.tenant), t.tenant),
53
+ implementation: f(f({}, e.implementation), t.implementation),
54
+ widget: f(f({}, e.widget), t.widget)
101
55
  };
102
- cleanUndefined(merged.tenant);
103
- cleanUndefined(merged.implementation);
104
- cleanUndefined(merged.widget);
105
- return merged;
106
- };
107
- const getLongestExpirationDate = (store) => {
108
- const expirationDates = Object.entries(store).reduce((acc, storeEntry) => {
109
- const [_, container] = storeEntry;
110
- Object.entries(container).forEach((containerEntry) => {
111
- const [_2, { expiration }] = containerEntry;
112
- if (expiration)
113
- acc.push(expiration);
114
- });
115
- return acc;
116
- }, []);
117
- return expirationDates.slice().sort((a, b) => new Date(b).valueOf() - new Date(a).valueOf()).shift() || createExpirationDate();
118
- };
119
- const createStorageKeys = (container) => {
56
+ return P(n.tenant), P(n.implementation), P(n.widget), n;
57
+ }, G = (e) => Object.entries(e).reduce((n, r) => {
58
+ const [a, o] = r;
59
+ return Object.entries(o).forEach((s) => {
60
+ const [c, { expiration: i }] = s;
61
+ i && n.push(i);
62
+ }), n;
63
+ }, []).slice().sort((n, r) => new Date(r).valueOf() - new Date(n).valueOf()).shift() || E(), $ = (e) => {
120
64
  const {
121
- name: widgetName,
122
- implementation: { name: implementationName, tenant: tenantName }
123
- } = container.get("$widget");
65
+ name: t,
66
+ implementation: { name: n, tenant: r }
67
+ } = e.get("$widget");
124
68
  return [
125
- `humany_${tenantName}`,
126
- `humany_${hash(tenantName + implementationName)}`,
127
- `humany_${hash(tenantName + implementationName + widgetName)}`
69
+ `humany_${r}`,
70
+ `humany_${V(r + n)}`,
71
+ `humany_${V(r + n + t)}`
128
72
  ];
129
- };
130
- const getCookie = (cookieName) => {
131
- const regExp = new RegExp(`(?:^|;)\\s?${cookieName}=(.*?)(?:;|$)`, "i");
132
- const cookie = document.cookie.match(regExp);
133
- const value = cookie && cookie[1] && JSON.parse(cookie[1]);
134
- return value || void 0;
135
- };
136
- const setCookie = (cookieName, value, expires) => {
137
- const cookie = `${cookieName}=${JSON.stringify(value).trim()};`;
138
- const expiration = `expires=${new Date(expires).toUTCString()};`;
139
- const path = "path=/";
140
- return document.cookie = `${cookie} ${expiration} ${path}`;
141
- };
142
- const getCookieStore = (container) => {
143
- const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);
144
- const tenant = getCookie(tenantKey) || {};
145
- const implementation = getCookie(implementationKey) || {};
146
- const widget = getCookie(widgetKey) || {};
147
- return {
148
- tenant,
149
- implementation,
150
- widget
151
- };
152
- };
153
- const setCookieStore = (container, store) => {
154
- const current = getCookieStore(container);
155
- const merged = mergeAndClean(current, store);
156
- const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);
157
- const { tenant, implementation, widget } = merged;
158
- const expirationDate = getLongestExpirationDate(store);
159
- const deleteDate = createExpirationDate({ days: -1 });
160
- setCookie(tenantKey, tenant, hasEntries(tenant) ? expirationDate : deleteDate);
161
- setCookie(implementationKey, implementation, hasEntries(implementation) ? expirationDate : deleteDate);
162
- setCookie(widgetKey, widget, hasEntries(widget) ? expirationDate : deleteDate);
163
- };
164
- const getApplicationStore = (container, storage) => {
165
- const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);
166
- const tenant = storage.getItem(tenantKey) || "{}";
167
- const implementation = storage.getItem(implementationKey) || "{}";
168
- const widget = storage.getItem(widgetKey) || "{}";
73
+ }, J = (e) => {
74
+ const t = new RegExp(`(?:^|;)\\s?${e}=(.*?)(?:;|$)`, "i"), n = document.cookie.match(t);
75
+ return n && n[1] && JSON.parse(n[1]) || void 0;
76
+ }, _ = (e, t, n) => {
77
+ const r = `${e}=${JSON.stringify(t).trim()}`, a = `expires=${new Date(n).toUTCString()}`, o = "path=/", s = "SameSite=None;Secure";
78
+ return document.cookie = `${r}; ${a}; ${o}; ${s}`;
79
+ }, I = (e) => {
80
+ const [t, n, r] = $(e), a = J(t) || {}, o = J(n) || {}, s = J(r) || {};
169
81
  return {
170
- tenant: JSON.parse(tenant),
171
- implementation: JSON.parse(implementation),
172
- widget: JSON.parse(widget)
82
+ tenant: a,
83
+ implementation: o,
84
+ widget: s
173
85
  };
174
- };
175
- const setApplicationStore = (container, applicationStorage, store) => {
176
- const current = getApplicationStore(container, applicationStorage);
177
- const merged = mergeAndClean(current, store);
178
- const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);
179
- const { tenant, implementation, widget } = merged;
180
- hasEntries(tenant) ? applicationStorage.setItem(tenantKey, JSON.stringify(tenant)) : applicationStorage.removeItem(tenantKey);
181
- hasEntries(implementation) ? applicationStorage.setItem(implementationKey, JSON.stringify(implementation)) : applicationStorage.removeItem(implementationKey);
182
- hasEntries(widget) ? applicationStorage.setItem(widgetKey, JSON.stringify(widget)) : applicationStorage.removeItem(widgetKey);
183
- };
184
- const createEmptyStore = () => ({ tenant: {}, implementation: {}, widget: {} });
185
- const isExpired = (isoDateString) => {
186
- if (!isoDateString)
187
- return false;
188
- return !!isoDateString && new Date() > new Date(isoDateString);
189
- };
190
- const getValue = (store, key) => {
191
- const storedValue = store.widget[key] || store.implementation[key] || store.tenant[key];
192
- return storedValue == null ? void 0 : storedValue.value;
193
- };
194
- const createValue = (value, category, duration) => {
195
- if (duration) {
196
- return {
197
- value,
198
- category,
199
- expiration: typeof duration === "object" ? createExpirationDate(duration) : duration
200
- };
201
- }
86
+ }, U = (e, t) => {
87
+ const n = I(e), r = j(n, t), [a, o, s] = $(e), { tenant: c, implementation: i, widget: m } = r, u = G(t), C = E({ days: -1 });
88
+ _(a, c, y(c) ? u : C), _(o, i, y(i) ? u : C), _(s, m, y(m) ? u : C);
89
+ }, w = (e, t) => {
90
+ const [n, r, a] = $(e), o = t.getItem(n) || "{}", s = t.getItem(r) || "{}", c = t.getItem(a) || "{}";
202
91
  return {
203
- value,
204
- category
92
+ tenant: JSON.parse(o),
93
+ implementation: JSON.parse(s),
94
+ widget: JSON.parse(c)
205
95
  };
206
- };
207
- const processStore = (store, policy) => {
208
- const clone = deepClone(store);
209
- Object.entries(clone).forEach(([_, storageContainer]) => {
210
- Object.entries(storageContainer).forEach(([key, storedValue]) => {
211
- const { expiration, category } = storedValue;
212
- if (isExpired(expiration) || isNotAllowed(policy, category))
213
- storageContainer[key] = createValue(void 0, category, expiration);
96
+ }, D = (e, t, n) => {
97
+ const r = w(e, t), a = j(r, n), [o, s, c] = $(e), { tenant: i, implementation: m, widget: u } = a;
98
+ y(i) ? t.setItem(o, JSON.stringify(i)) : t.removeItem(o), y(m) ? t.setItem(s, JSON.stringify(m)) : t.removeItem(s), y(u) ? t.setItem(c, JSON.stringify(u)) : t.removeItem(c);
99
+ }, H = () => ({ tenant: {}, implementation: {}, widget: {} }), Q = (e) => e ? !!e && new Date() > new Date(e) : !1, N = (e, t) => {
100
+ const n = e.widget[t] || e.implementation[t] || e.tenant[t];
101
+ return n == null ? void 0 : n.value;
102
+ }, K = (e, t, n) => n ? {
103
+ value: e,
104
+ category: t,
105
+ expiration: typeof n == "object" ? E(n) : n
106
+ } : {
107
+ value: e,
108
+ category: t
109
+ }, h = (e, t) => {
110
+ const n = F(e);
111
+ return Object.entries(n).forEach(([r, a]) => {
112
+ Object.entries(a).forEach(([o, s]) => {
113
+ const { expiration: c, category: i } = s;
114
+ (Q(c) || X(t, i)) && (a[o] = K(void 0, i, c));
214
115
  });
215
- });
216
- return clone;
217
- };
218
- const isNotAllowedAsync = (container, category) => {
219
- return readStorage(container, "storagePolicy", StorageMedium.Cookie).then((policy = [StorageCategory.Necessary]) => !!category && policy.indexOf(category) === -1);
220
- };
221
- const isNotAllowed = (policy = [StorageCategory.Necessary], category) => {
222
- return !!category && policy.indexOf(category) === -1;
223
- };
224
- const processStorage = (container) => {
225
- const cookieStore = getCookieStore(container);
226
- const localStore = getApplicationStore(container, window.localStorage);
227
- const sessionStore = getApplicationStore(container, sessionStorage);
228
- const policy = getValue(cookieStore, "storagePolicy");
229
- const [processedCookieStore, processedLocalStore, processedSessionStore] = [
230
- cookieStore,
231
- localStore,
232
- sessionStore
233
- ].map((store) => processStore(store, policy));
234
- setCookieStore(container, processedCookieStore);
235
- setApplicationStore(container, window.localStorage, processedLocalStore);
236
- setApplicationStore(container, window.sessionStorage, processedSessionStore);
237
- };
238
- const createExpirationDate = (options = { days: 30 }) => {
239
- const { days = 0, hours = 0, minutes = 0, seconds = 0 } = options;
240
- const date = new Date();
241
- date.setTime(date.getTime() + hours * 60 * 60 * 1e3);
242
- date.setTime(date.getTime() + days * 24 * 60 * 60 * 1e3);
243
- date.setTime(date.getTime() + minutes * 60 * 1e3);
244
- date.setTime(date.getTime() + seconds * 1e3);
245
- return date.toISOString();
246
- };
247
- const getCookieStoreAsync = (container) => {
248
- return lock(document)(() => getCookieStore(container));
249
- };
250
- const setCookieStoreAsync = (container, store) => {
251
- return lock(document)(() => setCookieStore(container, store));
116
+ }), n;
117
+ }, W = (e, t) => z(e, "storagePolicy", l.Cookie).then((n = [d.Necessary]) => !!t && n.indexOf(t) === -1), X = (e = [d.Necessary], t) => !!t && e.indexOf(t) === -1, x = (e) => {
118
+ const t = I(e), n = w(e, window.localStorage), r = w(e, sessionStorage), a = N(t, "storagePolicy"), [o, s, c] = [
119
+ t,
120
+ n,
121
+ r
122
+ ].map((i) => h(i, a));
123
+ U(e, o), D(e, window.localStorage, s), D(e, window.sessionStorage, c);
124
+ }, E = (e = { days: 30 }) => {
125
+ const { days: t = 0, hours: n = 0, minutes: r = 0, seconds: a = 0 } = e, o = new Date();
126
+ return o.setTime(o.getTime() + n * 60 * 60 * 1e3), o.setTime(o.getTime() + t * 24 * 60 * 60 * 1e3), o.setTime(o.getTime() + r * 60 * 1e3), o.setTime(o.getTime() + a * 1e3), o.toISOString();
127
+ }, Y = (e) => p(document)(() => I(e)), Z = (e, t) => p(document)(() => U(e, t)), ee = (e, t) => {
128
+ const n = t === l.Local ? window.localStorage : window.sessionStorage;
129
+ return p(n)(() => w(e, n));
130
+ }, te = (e, t, n) => {
131
+ const r = t === l.Local ? window.localStorage : window.sessionStorage;
132
+ return p(r)(() => D(e, r, n));
252
133
  };
253
- const getApplicationStoreAsync = (container, type) => {
254
- const storage = type === StorageMedium.Local ? window.localStorage : window.sessionStorage;
255
- return lock(storage)(() => getApplicationStore(container, storage));
256
- };
257
- const setApplicationStoreAsync = (container, type, store) => {
258
- const storage = type === StorageMedium.Local ? window.localStorage : window.sessionStorage;
259
- return lock(storage)(() => setApplicationStore(container, storage, store));
260
- };
261
- class LegacyStorage {
134
+ class b {
262
135
  constructor() {
263
136
  this.memory = {
264
137
  tenant: {},
@@ -266,166 +139,133 @@ class LegacyStorage {
266
139
  widget: {}
267
140
  };
268
141
  }
269
- setItem(_0, _1) {
270
- return __async(this, arguments, function* (key, value, options = {}) {
271
- return lock(this)(() => {
272
- const processedStore = processStore(this.memory, [StorageCategory.Necessary]);
273
- const { scope = StorageScope.Tenant, expiration } = options;
274
- processedStore[scope][key] = createValue(value, StorageCategory.Necessary, (expiration == null ? void 0 : expiration.toISOString()) || createExpirationDate());
275
- this.memory = processedStore;
142
+ setItem(a, o) {
143
+ return S(this, arguments, function* (t, n, r = {}) {
144
+ return p(this)(() => {
145
+ const s = h(this.memory, [d.Necessary]), { scope: c = A.Tenant, expiration: i } = r;
146
+ s[c][t] = K(n, d.Necessary, (i == null ? void 0 : i.toISOString()) || E()), this.memory = s, process.env.NODE_ENV !== "production" && g.warn(`StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value stored temporarily in memory.
147
+ Key: ${t}
148
+ Value: ${JSON.stringify(n)}
149
+ Options: ${JSON.stringify(r)}
150
+ Memory: ${JSON.stringify(s)}`);
276
151
  });
277
152
  });
278
153
  }
279
- getItem(key) {
280
- return __async(this, null, function* () {
281
- return lock(this)(() => {
282
- const processedStore = processStore(this.memory, [StorageCategory.Necessary]);
283
- const value = getValue(processedStore, key);
284
- this.memory = processedStore;
285
- return value;
154
+ getItem(t) {
155
+ return S(this, null, function* () {
156
+ return p(this)(() => {
157
+ const n = h(this.memory, [d.Necessary]);
158
+ process.env.NODE_ENV !== "production" && g.warn(`StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value fetched from legacy memory storage.
159
+ Key: ${t}
160
+ Memory: ${JSON.stringify(n)}`);
161
+ const r = N(n, t);
162
+ return this.memory = n, r;
286
163
  });
287
164
  });
288
165
  }
289
- removeItem(key) {
290
- return __async(this, null, function* () {
291
- return lock(this)(() => {
292
- const processedStore = processStore(this.memory, [StorageCategory.Necessary]);
293
- delete processedStore.tenant[key];
294
- delete processedStore.implementation[key];
295
- delete processedStore.widget[key];
296
- this.memory = processedStore;
166
+ removeItem(t) {
167
+ return S(this, null, function* () {
168
+ return p(this)(() => {
169
+ const n = h(this.memory, [d.Necessary]);
170
+ delete n.tenant[t], delete n.implementation[t], delete n.widget[t], this.memory = n, process.env.NODE_ENV !== "production" && g.warn(`StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value removed from memory.
171
+ Key: ${t}
172
+ Memory: ${JSON.stringify(n)}`);
297
173
  });
298
174
  });
299
175
  }
300
176
  clear() {
301
- return __async(this, null, function* () {
177
+ return S(this, null, function* () {
302
178
  return Promise.resolve();
303
179
  });
304
180
  }
305
181
  }
306
- class LegacyStorageProvider {
182
+ class ie {
307
183
  constructor() {
308
- this.cookies = new LegacyStorage();
309
- this.session = new LegacyStorage();
310
- this.local = new LegacyStorage();
184
+ this.cookies = new b(), this.session = new b(), this.local = new b();
311
185
  }
312
186
  }
313
- globalThis && globalThis.__spreadArrays || function() {
314
- for (var s = 0, i = 0, il = arguments.length; i < il; i++)
315
- s += arguments[i].length;
316
- for (var r = Array(s), k = 0, i = 0; i < il; i++)
317
- for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
318
- r[k] = a[j];
319
- return r;
320
- };
321
- var ConfigurationScope;
322
- (function(ConfigurationScope2) {
323
- ConfigurationScope2["Implementation"] = "implementation";
324
- ConfigurationScope2["Widget"] = "widget";
325
- })(ConfigurationScope || (ConfigurationScope = {}));
326
- var ConfigurationStage;
327
- (function(ConfigurationStage2) {
328
- ConfigurationStage2["Pre"] = "pre";
329
- ConfigurationStage2["Post"] = "post";
330
- })(ConfigurationStage || (ConfigurationStage = {}));
331
- function fallbackIfUndefined(value, fallback) {
332
- if (typeof value === "undefined") {
333
- return fallback;
334
- }
335
- return value;
187
+ globalThis && globalThis.__spreadArrays;
188
+ var v;
189
+ (function(e) {
190
+ e.Implementation = "implementation", e.Widget = "widget";
191
+ })(v || (v = {}));
192
+ var O;
193
+ (function(e) {
194
+ e.Pre = "pre", e.Post = "post";
195
+ })(O || (O = {}));
196
+ function L(e, t) {
197
+ return typeof e == "undefined" ? t : e;
336
198
  }
337
- var ConfigurationApiBuilder = function() {
338
- function ConfigurationApiBuilder2(part) {
339
- if (part === void 0) {
340
- part = {};
341
- }
342
- this.part = part;
199
+ var ne = function() {
200
+ function e(t) {
201
+ t === void 0 && (t = {}), this.part = t;
343
202
  }
344
- ConfigurationApiBuilder2.prototype.createCommand = function(name, factoryOrOptions, factory) {
345
- var _this = this;
346
- var descriptor;
347
- if (typeof factoryOrOptions === "function") {
348
- descriptor = {
349
- scope: ConfigurationScope.Widget,
350
- stage: ConfigurationStage.Post,
351
- defaultArgs: void 0,
352
- handlerResolver: factoryOrOptions
353
- };
354
- } else {
355
- descriptor = {
356
- scope: fallbackIfUndefined(factoryOrOptions.scope, ConfigurationScope.Widget),
357
- stage: fallbackIfUndefined(factoryOrOptions.stage, ConfigurationStage.Post),
358
- defaultArgs: factoryOrOptions.defaultArgs,
359
- handlerResolver: factory
360
- };
361
- }
362
- var part = this.part;
363
- var sections = name.split(".");
364
- sections.forEach(function(ns, i) {
365
- var last = i === sections.length - 1;
366
- if (last) {
367
- if (!part[ns]) {
368
- part[ns] = function() {
369
- return descriptor;
370
- };
371
- }
372
- } else {
373
- part = _this.part[ns] = _this.part[ns] || {};
374
- }
375
- });
376
- return this;
377
- };
378
- ConfigurationApiBuilder2.prototype.get = function() {
203
+ return e.prototype.createCommand = function(t, n, r) {
204
+ var a = this, o;
205
+ typeof n == "function" ? o = {
206
+ scope: v.Widget,
207
+ stage: O.Post,
208
+ defaultArgs: void 0,
209
+ handlerResolver: n
210
+ } : o = {
211
+ scope: L(n.scope, v.Widget),
212
+ stage: L(n.stage, O.Post),
213
+ defaultArgs: n.defaultArgs,
214
+ handlerResolver: r
215
+ };
216
+ var s = this.part, c = t.split(".");
217
+ return c.forEach(function(i, m) {
218
+ var u = m === c.length - 1;
219
+ u ? s[i] || (s[i] = function() {
220
+ return o;
221
+ }) : s = a.part[i] = a.part[i] || {};
222
+ }), this;
223
+ }, e.prototype.get = function() {
379
224
  return this.part;
380
- };
381
- return ConfigurationApiBuilder2;
382
- }();
383
- var createConfigurationApi = function(factory) {
384
- var builder = new ConfigurationApiBuilder({});
385
- factory(builder);
386
- return builder.get();
225
+ }, e;
226
+ }(), re = function(e) {
227
+ var t = new ne({});
228
+ return e(t), t.get();
387
229
  };
388
- var storagePolicyConfigurationApi = createConfigurationApi((builder) => {
389
- builder.createCommand("storage", (context) => (options = {}) => {
390
- const { consent } = options;
391
- if (typeof consent !== "undefined") {
392
- if (typeof consent !== "number" && typeof consent !== "string" && !Array.isArray(consent)) {
230
+ const ae = re((e) => {
231
+ e.createCommand("storage", (t) => (n = {}) => {
232
+ const { consent: r } = n;
233
+ if (typeof r != "undefined") {
234
+ if (typeof r != "number" && typeof r != "string" && !Array.isArray(r)) {
235
+ process.env.NODE_ENV !== "production" && g.warn(`storagePolicyConfigurationApi: passed consent is not valid. Consent either has to be a number, a string, an array of strings or an array of numbers.
236
+ Passed consent: ${JSON.stringify(r)}`);
393
237
  return;
394
238
  }
395
- if (Array.isArray(consent) && !consent.every((c) => typeof c === "number" || typeof c === "string")) {
239
+ if (Array.isArray(r) && !r.every((o) => typeof o == "number" || typeof o == "string")) {
240
+ process.env.NODE_ENV !== "production" && g.warn(`storagePolicyConfigurationApi: passed consent is not valid. Consent either has to be a number, a string, an array of strings or an array of numbers.
241
+ Passed consent: ${JSON.stringify(r)}`);
396
242
  return;
397
243
  }
398
- const policy = [
399
- StorageCategory.Necessary,
400
- StorageCategory.Functional,
401
- StorageCategory.Analytical,
402
- StorageCategory.Marketing
403
- ].filter((category, index, array) => {
404
- if (typeof consent === "number") {
405
- return consent > index;
406
- } else if (typeof consent === "string") {
407
- return array.indexOf(consent) + 1 > index;
408
- } else if (Array.isArray(consent)) {
409
- return consent.findIndex((c) => {
410
- return c === index + 1 || c === category;
411
- }) > -1;
412
- } else {
413
- return true;
414
- }
415
- });
416
- if (policy.indexOf(StorageCategory.Necessary) === -1) {
417
- policy.unshift(StorageCategory.Necessary);
418
- }
419
- return createStorageWriter(context.container, "storagePolicy", StorageCategory.Necessary, {
420
- medium: StorageMedium.Cookie,
421
- scope: StorageScope.Tenant,
244
+ const a = [
245
+ d.Necessary,
246
+ d.Functional,
247
+ d.Analytical,
248
+ d.Marketing
249
+ ].filter((o, s, c) => typeof r == "number" ? r > s : typeof r == "string" ? c.indexOf(r) + 1 > s : Array.isArray(r) ? r.findIndex((i) => i === s + 1 || i === o) > -1 : !0);
250
+ return a.indexOf(d.Necessary) === -1 && (process.env.NODE_ENV !== "production" && g.warn(`storagePolicyConfigurationApi: passed consent does not include category: '${d.Necessary}'. Consent has to atleast include the '${d.Necessary}' category.
251
+ Passed consent: ${JSON.stringify(r)}`), a.unshift(d.Necessary)), q(t.container, "storagePolicy", d.Necessary, {
252
+ medium: l.Cookie,
253
+ scope: A.Tenant,
422
254
  duration: { days: 365 }
423
- }).then((write) => write(policy)).then(() => {
424
- processStorage(context.container);
425
- context.events.dispatch("storage:policy-changed", policy);
255
+ }).then((o) => o(a)).then(() => {
256
+ x(t.container), t.events.dispatch("storage:policy-changed", a);
426
257
  });
427
258
  }
428
259
  });
429
260
  });
430
- export { StorageCategory, StorageMedium, LegacyStorageProvider as StorageProvider, StorageScope, LegacyStorage as StorageService, createStorageWriter, readStorage, storagePolicyConfigurationApi };
261
+ export {
262
+ d as StorageCategory,
263
+ l as StorageMedium,
264
+ ie as StorageProvider,
265
+ A as StorageScope,
266
+ b as StorageService,
267
+ q as createStorageWriter,
268
+ z as readStorage,
269
+ ae as storagePolicyConfigurationApi
270
+ };
431
271
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/storage/types.ts","../src/storage/storage.ts","../src/storage/utils.ts","../src/storage/legacy-storage-provider.ts","../../../node_modules/@webprovisions/platform/lib-esm/configuration/configurator.js","../../../node_modules/@webprovisions/platform/lib-esm/configuration/api-builder.js","../src/storage/storage-policy-configuration-api.ts"],"sourcesContent":["export enum StorageMedium {\r\n Cookie = 'cookie',\r\n Local = 'local',\r\n Session = 'session',\r\n}\r\n\r\nexport enum StorageScope {\r\n Tenant = 'tenant',\r\n Implementation = 'implementation',\r\n Widget = 'widget',\r\n}\r\n\r\nexport type Store = {\r\n tenant: StorageContainer;\r\n implementation: StorageContainer;\r\n widget: StorageContainer;\r\n};\r\n\r\nexport type StorageContainer = { [key: string]: StoredValue };\r\n\r\nexport type StoredValue = {\r\n value: any;\r\n expiration?: string;\r\n category: StorageCategory;\r\n};\r\n\r\nexport enum StorageCategory {\r\n Necessary = 'necessary',\r\n Functional = 'functional',\r\n Analytical = 'analytical',\r\n Marketing = 'marketing',\r\n}\r\n\r\nexport type StorageWriter = (value?: any) => Promise<void>;\r\n\r\nexport type StorageConfigurationOptions = {\r\n consent?: StorageConsent;\r\n};\r\n\r\nexport type StorageConsent = number | number[] | StorageCategory | StorageCategory[];\r\n\r\nexport type Duration = {\r\n days?: number;\r\n hours?: number;\r\n minutes?: number;\r\n seconds?: number;\r\n};\r\n\r\nexport type StorageWriterOptions = {\r\n scope?: StorageScope;\r\n duration?: Duration;\r\n medium?: StorageMedium;\r\n};\r\n","import { Logger } from '@telia-ace/widget-utilities';\r\nimport { Container } from '@webprovisions/platform';\r\nimport {\r\n StorageCategory,\r\n StorageMedium,\r\n StorageScope,\r\n StorageWriter,\r\n StorageWriterOptions,\r\n} from './types';\r\nimport {\r\n createEmptyStore,\r\n createValue,\r\n getApplicationStoreAsync,\r\n getCookieStoreAsync,\r\n getValue,\r\n isNotAllowedAsync,\r\n processStorage,\r\n setApplicationStoreAsync,\r\n setCookieStoreAsync,\r\n} from './utils';\r\n\r\n/**\r\n * Creates a writer to be used to write to cookie, local or session storage.\r\n * @param container Widget Container.\r\n * @param key Key to use when writing.\r\n * @param category StorageCategory to use when writing.\r\n * @param options StorageWriterOptions to use when writing default {scope: StorageScope.Widget, medium = StorageMedium.Session, duration = infinite }.\r\n * @returns a function to be used to write a value to the storage using given settings.\r\n */\r\nexport const createStorageWriter = (\r\n container: Container,\r\n key: string,\r\n category: StorageCategory,\r\n options: StorageWriterOptions = {}\r\n): Promise<StorageWriter> => {\r\n return isNotAllowedAsync(container, category).then((notAllowed) => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (notAllowed) {\r\n Logger.warn(\r\n `createStorageWriter: Attempted to create storage writer using unallowed category.\r\n Key: ${key}\r\n Category: ${JSON.stringify(category)}\r\n Options: ${JSON.stringify(options)}`\r\n );\r\n }\r\n }\r\n\r\n return (value: any) => {\r\n processStorage(container);\r\n\r\n return isNotAllowedAsync(container, category).then((notAllowed) => {\r\n if (notAllowed) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn(\r\n `storageWriter: Attempted to write to storage using unallowed category.\r\n Key: ${key}\r\n Category: ${JSON.stringify(category)}\r\n Value: ${JSON.stringify(value)}\r\n Options: ${JSON.stringify(options)}`\r\n );\r\n }\r\n return;\r\n }\r\n\r\n const {\r\n scope = StorageScope.Widget,\r\n medium = StorageMedium.Session,\r\n duration,\r\n } = options;\r\n\r\n const store = createEmptyStore();\r\n store[scope][key] = createValue(value, category, duration);\r\n\r\n if (medium === StorageMedium.Cookie) return setCookieStoreAsync(container, store);\r\n else return setApplicationStoreAsync(container, medium, store);\r\n });\r\n };\r\n });\r\n};\r\n\r\n/**\r\n * Read the widget cookie, local or session storage.\r\n * @param container Widget Container.\r\n * @param key Key to read.\r\n * @param medium Storage medium to read from (default: session).\r\n * @returns the value stored with passed key.\r\n */\r\nexport const readStorage = <Type>(\r\n container: Container,\r\n key: string,\r\n medium: StorageMedium = StorageMedium.Session\r\n): Promise<Type | undefined> => {\r\n processStorage(container);\r\n\r\n if (typeof key === 'undefined') {\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn('readStorage: Undefined key passed when reading storage. ', key, medium);\r\n }\r\n return Promise.resolve(undefined);\r\n }\r\n\r\n if (medium === StorageMedium.Cookie)\r\n return getCookieStoreAsync(container).then((store) => getValue(store, key));\r\n else return getApplicationStoreAsync(container, medium).then((store) => getValue(store, key));\r\n};\r\n","import { deepClone, hash, lock, mergeDeep } from '@telia-ace/widget-utilities';\r\nimport { Container, Widget } from '@webprovisions/platform';\r\nimport { readStorage } from './storage';\r\nimport {\r\n Duration,\r\n StorageCategory,\r\n StorageContainer,\r\n StorageMedium,\r\n Store,\r\n StoredValue,\r\n} from './types';\r\n\r\nconst hasEntries = (object: object) =>\r\n !!Object.entries(object).filter(([_, value]) => typeof value !== 'undefined').length;\r\n\r\nconst cleanUndefined = (object: StorageContainer) =>\r\n Object.entries(object)\r\n .filter(([_, value]) => typeof value !== 'undefined')\r\n .forEach(([key, { value }]) => {\r\n if (typeof value === 'undefined') {\r\n delete object[key];\r\n }\r\n });\r\n\r\nconst mergeAndClean = (target: Store, source: Store): Store => {\r\n const merged: Store = {\r\n tenant: { ...target.tenant, ...source.tenant },\r\n implementation: { ...target.implementation, ...source.implementation },\r\n widget: { ...target.widget, ...source.widget }\r\n };\r\n\r\n cleanUndefined(merged.tenant);\r\n cleanUndefined(merged.implementation);\r\n cleanUndefined(merged.widget);\r\n\r\n return merged;\r\n};\r\n\r\nconst getLongestExpirationDate = (store: Store): string => {\r\n const expirationDates = Object.entries(store).reduce<string[]>((acc, storeEntry) => {\r\n const [_, container] = storeEntry;\r\n Object.entries(container).forEach((containerEntry) => {\r\n const [_, { expiration }] = containerEntry;\r\n if (expiration) acc.push(expiration);\r\n });\r\n return acc;\r\n }, []);\r\n\r\n return (\r\n expirationDates\r\n .slice()\r\n .sort((a, b) => new Date(b).valueOf() - new Date(a).valueOf())\r\n .shift() || createExpirationDate()\r\n );\r\n};\r\n\r\nconst createStorageKeys = (\r\n container: Container\r\n): [tenant: string, implementation: string, widget: string] => {\r\n const {\r\n name: widgetName,\r\n implementation: { name: implementationName, tenant: tenantName },\r\n } = <Widget>container.get('$widget');\r\n\r\n return [\r\n `humany_${tenantName}`,\r\n `humany_${hash(tenantName + implementationName)}`,\r\n `humany_${hash(tenantName + implementationName + widgetName)}`,\r\n ];\r\n};\r\n\r\nconst getCookie = <Type>(cookieName: string): Type | undefined => {\r\n const regExp = new RegExp(`(?:^|;)\\\\s?${cookieName}=(.*?)(?:;|$)`, 'i');\r\n const cookie = document.cookie.match(regExp);\r\n const value = cookie && cookie[1] && JSON.parse(cookie[1]);\r\n\r\n return value || undefined;\r\n};\r\n\r\nconst setCookie = (cookieName: string, value: any, expires: string) => {\r\n const cookie = `${cookieName}=${JSON.stringify(value).trim()};`;\r\n const expiration = `expires=${new Date(expires).toUTCString()};`;\r\n const path = 'path=/';\r\n return (document.cookie = `${cookie} ${expiration} ${path}`);\r\n};\r\n\r\nconst getCookieStore = (container: Container): Store => {\r\n const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);\r\n const tenant = getCookie<StorageContainer>(tenantKey) || {};\r\n const implementation = getCookie<StorageContainer>(implementationKey) || {};\r\n const widget = getCookie<StorageContainer>(widgetKey) || {};\r\n\r\n return {\r\n tenant,\r\n implementation,\r\n widget,\r\n };\r\n};\r\n\r\nconst setCookieStore = (container: Container, store: Store): void => {\r\n const current = getCookieStore(container);\r\n const merged = mergeAndClean(current, store);\r\n\r\n const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);\r\n const { tenant, implementation, widget } = merged;\r\n const expirationDate = getLongestExpirationDate(store);\r\n const deleteDate = createExpirationDate({ days: -1 });\r\n\r\n setCookie(tenantKey, tenant, hasEntries(tenant) ? expirationDate : deleteDate);\r\n setCookie(\r\n implementationKey,\r\n implementation,\r\n hasEntries(implementation) ? expirationDate : deleteDate\r\n );\r\n setCookie(widgetKey, widget, hasEntries(widget) ? expirationDate : deleteDate);\r\n};\r\n\r\nconst getApplicationStore = (container: Container, storage: Storage): Store => {\r\n const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);\r\n const tenant = storage.getItem(tenantKey) || '{}';\r\n const implementation = storage.getItem(implementationKey) || '{}';\r\n const widget = storage.getItem(widgetKey) || '{}';\r\n\r\n return {\r\n tenant: JSON.parse(tenant),\r\n implementation: JSON.parse(implementation),\r\n widget: JSON.parse(widget),\r\n };\r\n};\r\n\r\nconst setApplicationStore = (\r\n container: Container,\r\n applicationStorage: Storage,\r\n store: Store\r\n): void => {\r\n const current = getApplicationStore(container, applicationStorage);\r\n const merged = mergeAndClean(current, store);\r\n\r\n const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);\r\n const { tenant, implementation, widget } = merged;\r\n\r\n hasEntries(tenant)\r\n ? applicationStorage.setItem(tenantKey, JSON.stringify(tenant))\r\n : applicationStorage.removeItem(tenantKey);\r\n hasEntries(implementation)\r\n ? applicationStorage.setItem(implementationKey, JSON.stringify(implementation))\r\n : applicationStorage.removeItem(implementationKey);\r\n hasEntries(widget)\r\n ? applicationStorage.setItem(widgetKey, JSON.stringify(widget))\r\n : applicationStorage.removeItem(widgetKey);\r\n};\r\n\r\nexport const createEmptyStore = (): Store => ({ tenant: {}, implementation: {}, widget: {} });\r\n\r\nexport const isExpired = (isoDateString?: string) => {\r\n if (!isoDateString) return false;\r\n return !!isoDateString && new Date() > new Date(isoDateString);\r\n};\r\n\r\nexport const getValue = <Type>(store: Store, key: string): Type | undefined => {\r\n const storedValue = store.widget[key] || store.implementation[key] || store.tenant[key];\r\n return storedValue?.value;\r\n};\r\n\r\nexport const createValue = (\r\n value: any,\r\n category: StorageCategory,\r\n duration?: Duration | string\r\n): StoredValue => {\r\n if (duration) {\r\n return {\r\n value,\r\n category,\r\n expiration: typeof duration === 'object' ? createExpirationDate(duration) : duration,\r\n };\r\n }\r\n return {\r\n value,\r\n category,\r\n };\r\n};\r\n\r\nexport const processStore = (store: Store, policy?: StorageCategory[]): Store => {\r\n const clone = deepClone(store);\r\n\r\n Object.entries(clone).forEach(([_, storageContainer]) => {\r\n Object.entries(storageContainer).forEach(([key, storedValue]) => {\r\n const { expiration, category } = storedValue;\r\n\r\n if (isExpired(expiration) || isNotAllowed(policy, category))\r\n storageContainer[key] = createValue(undefined, category, expiration);\r\n });\r\n });\r\n\r\n return clone;\r\n};\r\n\r\n/**\r\n * @param category Storage Category.\r\n * @param policy Current Storage Policy.\r\n * @returns true if not allowed, false if allowed.\r\n */\r\nexport const isNotAllowedAsync = (\r\n container: Container,\r\n category?: StorageCategory\r\n): Promise<boolean> => {\r\n return readStorage<StorageCategory[]>(container, 'storagePolicy', StorageMedium.Cookie).then(\r\n (policy = [StorageCategory.Necessary]) => !!category && policy.indexOf(category) === -1\r\n );\r\n};\r\n\r\n/**\r\n * @param category Storage Category.\r\n * @param policy Current Storage Policy.\r\n * @returns true if not allowed, false if allowed.\r\n */\r\nexport const isNotAllowed = (\r\n policy: StorageCategory[] = [StorageCategory.Necessary],\r\n category?: StorageCategory\r\n): boolean => {\r\n return !!category && policy.indexOf(category) === -1;\r\n};\r\n\r\n/**\r\n * Processes storage and removes items if they are expired or if\r\n * the storage policy is defined and the category of the stored\r\n * value is not allowed.\r\n * @param container Widget Container\r\n */\r\nexport const processStorage = (container: Container): void => {\r\n const cookieStore = getCookieStore(container);\r\n const localStore = getApplicationStore(container, window.localStorage);\r\n const sessionStore = getApplicationStore(container, sessionStorage);\r\n const policy = getValue<StorageCategory[]>(cookieStore, 'storagePolicy');\r\n\r\n const [processedCookieStore, processedLocalStore, processedSessionStore] = [\r\n cookieStore,\r\n localStore,\r\n sessionStore,\r\n ].map((store) => processStore(store, policy));\r\n\r\n setCookieStore(container, processedCookieStore);\r\n setApplicationStore(container, window.localStorage, processedLocalStore);\r\n setApplicationStore(container, window.sessionStorage, processedSessionStore);\r\n};\r\n\r\n/**\r\n * Creates an expiration date string with the passed options.\r\n * @param options Duration options.\r\n * @returns ISO formatted date string.\r\n */\r\nexport const createExpirationDate = (options: Duration = { days: 30 }): string => {\r\n const { days = 0, hours = 0, minutes = 0, seconds = 0 } = options;\r\n const date = new Date();\r\n date.setTime(date.getTime() + hours * 60 * 60 * 1000);\r\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\r\n date.setTime(date.getTime() + minutes * 60 * 1000);\r\n date.setTime(date.getTime() + seconds * 1000);\r\n return date.toISOString();\r\n};\r\n\r\nexport const getCookieStoreAsync = (container: Container): Promise<Store> => {\r\n return lock(document)(() => getCookieStore(container));\r\n};\r\n\r\nexport const setCookieStoreAsync = (container: Container, store: Store): Promise<any> => {\r\n return lock(document)(() => setCookieStore(container, store));\r\n};\r\n\r\nexport const getApplicationStoreAsync = (\r\n container: Container,\r\n type: StorageMedium.Local | StorageMedium.Session\r\n): Promise<Store> => {\r\n const storage = type === StorageMedium.Local ? window.localStorage : window.sessionStorage;\r\n return lock(storage)(() => getApplicationStore(container, storage));\r\n};\r\n\r\nexport const setApplicationStoreAsync = (\r\n container: Container,\r\n type: StorageMedium.Local | StorageMedium.Session,\r\n store: Store\r\n): Promise<void> => {\r\n const storage = type === StorageMedium.Local ? window.localStorage : window.sessionStorage;\r\n return lock(storage)(() => setApplicationStore(container, storage, store));\r\n};\r\n","import { lock, Logger } from '@telia-ace/widget-utilities';\r\nimport { StorageCategory } from '.';\r\nimport { StorageScope, Store } from './types';\r\nimport { createExpirationDate, createValue, getValue, processStore } from './utils';\r\n\r\ntype LegacyOptions = {\r\n scope?: StorageScope;\r\n expiration?: Date;\r\n};\r\n\r\ninterface LegacyMedium {\r\n setItem(key: string, value: any, options?: LegacyOptions): Promise<void>;\r\n getItem(key: string): Promise<any>;\r\n removeItem(key: string): Promise<void>;\r\n clear(): Promise<void>;\r\n}\r\n\r\nexport class LegacyStorage implements LegacyMedium {\r\n private memory: Store = {\r\n tenant: {},\r\n implementation: {},\r\n widget: {},\r\n };\r\n async setItem(key: string, value: any, options: LegacyOptions = {}): Promise<void> {\r\n return lock(this)(() => {\r\n const processedStore = processStore(this.memory, [StorageCategory.Necessary]);\r\n const { scope = StorageScope.Tenant, expiration } = options;\r\n\r\n processedStore[scope][key] = createValue(\r\n value,\r\n StorageCategory.Necessary,\r\n expiration?.toISOString() || createExpirationDate()\r\n );\r\n this.memory = processedStore;\r\n\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn(\r\n `StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value stored temporarily in memory.\r\n Key: ${key}\r\n Value: ${JSON.stringify(value)}\r\n Options: ${JSON.stringify(options)}\r\n Memory: ${JSON.stringify(processedStore)}`\r\n );\r\n }\r\n });\r\n }\r\n async getItem(key: string): Promise<any> {\r\n return lock(this)(() => {\r\n const processedStore = processStore(this.memory, [StorageCategory.Necessary]);\r\n\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn(\r\n `StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value fetched from legacy memory storage.\r\n Key: ${key}\r\n Memory: ${JSON.stringify(processedStore)}`\r\n );\r\n }\r\n\r\n const value = getValue(processedStore, key);\r\n this.memory = processedStore;\r\n\r\n return value;\r\n });\r\n }\r\n async removeItem(key: string): Promise<void> {\r\n return lock(this)(() => {\r\n const processedStore = processStore(this.memory, [StorageCategory.Necessary]);\r\n\r\n delete processedStore.tenant[key];\r\n delete processedStore.implementation[key];\r\n delete processedStore.widget[key];\r\n this.memory = processedStore;\r\n\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn(\r\n `StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value removed from memory.\r\n Key: ${key}\r\n Memory: ${JSON.stringify(processedStore)}`\r\n );\r\n }\r\n });\r\n }\r\n async clear(): Promise<void> {\r\n return Promise.resolve();\r\n }\r\n}\r\n\r\nexport default class LegacyStorageProvider {\r\n cookies: LegacyStorage;\r\n session: LegacyStorage;\r\n local: LegacyStorage;\r\n constructor() {\r\n this.cookies = new LegacyStorage();\r\n this.session = new LegacyStorage();\r\n this.local = new LegacyStorage();\r\n }\r\n}\r\n","var __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { selectWidgets } from '../selectors';\r\nimport ns from '../namespace';\r\nvar internal = ns();\r\nexport var matchInstructions = function (instructions, stage, widget) {\r\n return instructions.filter(function (instruction) {\r\n return instruction.stage === stage\r\n && selectWidgets(instruction.selector)(widget);\r\n });\r\n};\r\nexport function clearContextRoot(contextRoot) {\r\n var environment = contextRoot.container.get('$environment');\r\n var configurationCache = internal(environment).configurationCache;\r\n if (configurationCache) {\r\n configurationCache = configurationCache\r\n .filter(function (item) { return item[0] !== contextRoot; });\r\n internal(environment).configurationCache = configurationCache;\r\n }\r\n}\r\nexport var ConfigurationScope;\r\n(function (ConfigurationScope) {\r\n ConfigurationScope[\"Implementation\"] = \"implementation\";\r\n ConfigurationScope[\"Widget\"] = \"widget\";\r\n})(ConfigurationScope || (ConfigurationScope = {}));\r\nexport var ConfigurationStage;\r\n(function (ConfigurationStage) {\r\n /**\r\n * Configurations to be applied BEFORE a widget is configured.\r\n */\r\n ConfigurationStage[\"Pre\"] = \"pre\";\r\n /**\r\n * Configurations to be applied AFTER a widget is configured\r\n */\r\n ConfigurationStage[\"Post\"] = \"post\";\r\n})(ConfigurationStage || (ConfigurationStage = {}));\r\nvar constructApi = function (target, apiDefinition, applyCommand) {\r\n Object.keys(apiDefinition).forEach(function (key) {\r\n var commandDescriptorOrApiPart = apiDefinition[key];\r\n if (typeof commandDescriptorOrApiPart === 'function') {\r\n var commandDescriptor_1 = commandDescriptorOrApiPart();\r\n if (typeof commandDescriptor_1.defaultArgs !== 'undefined') {\r\n applyCommand.apply(void 0, __spreadArrays([commandDescriptor_1], commandDescriptor_1.defaultArgs));\r\n }\r\n target[key] = (function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var trackedCommandDescriptor = Object.assign({}, commandDescriptor_1, { handlerResolver: commandDescriptor_1.handlerResolver.bind({}) });\r\n applyCommand.apply(void 0, __spreadArrays([trackedCommandDescriptor], args));\r\n return target;\r\n });\r\n }\r\n else {\r\n target[key] = constructApi({}, commandDescriptorOrApiPart, applyCommand);\r\n }\r\n });\r\n return target;\r\n};\r\nvar resolveContextRoot = function (widget, scope) {\r\n switch (scope) {\r\n case ConfigurationScope.Implementation:\r\n return widget.implementation;\r\n case ConfigurationScope.Widget:\r\n return widget;\r\n }\r\n};\r\nvar createConfiguratorObject = function (target, selector, implementation, apiDefinitions) {\r\n apiDefinitions.forEach(function (definition) {\r\n constructApi(target, definition, function (commandDescriptor) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n var instruction = {\r\n selector: selector,\r\n stage: commandDescriptor.stage,\r\n handler: function (widget) {\r\n var contextRoot = resolveContextRoot(widget, commandDescriptor.scope);\r\n var context = { container: contextRoot.container, events: contextRoot.events };\r\n var resolveHandler = commandDescriptor.handlerResolver;\r\n var commandHandler = resolveHandler(context);\r\n // The configuration cache prevents the same combination of 'contextRoot' and\r\n // 'commandHandler' to be executed more than once. Let's say a commandHandler\r\n // is scoped to 'Implementation', then it will match all containing widgets, but\r\n // the unique commandHandler instance should be executed only once (else the\r\n // commandHandler will configure the implementation context once for every widget).\r\n var configurationCache = internal(implementation.environment).configurationCache;\r\n if (!configurationCache) {\r\n configurationCache = internal(implementation.environment).configurationCache = [];\r\n }\r\n if (!configurationCache.find(function (item) {\r\n return item.indexOf(contextRoot) > -1 && item.indexOf(resolveHandler) > -1;\r\n })) {\r\n configurationCache.push([contextRoot, resolveHandler]);\r\n return Promise.resolve(commandHandler.apply(void 0, args));\r\n }\r\n },\r\n };\r\n implementation.instructions.push(instruction);\r\n });\r\n });\r\n return target;\r\n};\r\nexport function createConfigurator(implementation, configurationAPIs) {\r\n function configurator(selector) {\r\n return createConfiguratorObject({}, selector, implementation, configurationAPIs);\r\n }\r\n return createConfiguratorObject(configurator, '*', implementation, configurationAPIs);\r\n}\r\n//# sourceMappingURL=configurator.js.map","import { ConfigurationScope, ConfigurationStage } from './configurator';\r\nfunction fallbackIfUndefined(value, fallback) {\r\n if (typeof value === 'undefined') {\r\n return fallback;\r\n }\r\n return value;\r\n}\r\nvar ConfigurationApiBuilder = /** @class */ (function () {\r\n function ConfigurationApiBuilder(part) {\r\n if (part === void 0) { part = {}; }\r\n this.part = part;\r\n }\r\n ConfigurationApiBuilder.prototype.createCommand = function (name, factoryOrOptions, factory) {\r\n var _this = this;\r\n var descriptor;\r\n if (typeof factoryOrOptions === 'function') {\r\n descriptor = {\r\n scope: ConfigurationScope.Widget,\r\n stage: ConfigurationStage.Post,\r\n defaultArgs: undefined,\r\n handlerResolver: factoryOrOptions,\r\n };\r\n }\r\n else {\r\n descriptor = {\r\n scope: fallbackIfUndefined(factoryOrOptions.scope, ConfigurationScope.Widget),\r\n stage: fallbackIfUndefined(factoryOrOptions.stage, ConfigurationStage.Post),\r\n defaultArgs: factoryOrOptions.defaultArgs,\r\n handlerResolver: factory,\r\n };\r\n }\r\n var part = this.part;\r\n var sections = name.split('.');\r\n sections.forEach(function (ns, i) {\r\n var last = i === sections.length - 1;\r\n if (last) {\r\n if (!part[ns]) {\r\n part[ns] = function () { return descriptor; };\r\n }\r\n }\r\n else {\r\n part = (_this.part[ns] = (_this.part[ns] || {}));\r\n }\r\n });\r\n return this;\r\n };\r\n ConfigurationApiBuilder.prototype.get = function () {\r\n return this.part;\r\n };\r\n return ConfigurationApiBuilder;\r\n}());\r\nexport { ConfigurationApiBuilder };\r\nexport var createConfigurationApi = function (factory) {\r\n var builder = new ConfigurationApiBuilder({});\r\n factory(builder);\r\n return builder.get();\r\n};\r\n//# sourceMappingURL=api-builder.js.map","import { Logger } from '@telia-ace/widget-utilities';\r\nimport { createConfigurationApi } from '@webprovisions/platform';\r\nimport { createStorageWriter } from './storage';\r\nimport { StorageCategory, StorageConfigurationOptions, StorageMedium, StorageScope } from './types';\r\nimport { processStorage } from './utils';\r\n\r\nexport default createConfigurationApi((builder) => {\r\n builder.createCommand('storage', (context) => (options: StorageConfigurationOptions = {}) => {\r\n const { consent } = options;\r\n if (typeof consent !== 'undefined') {\r\n if (\r\n typeof consent !== 'number' &&\r\n typeof consent !== 'string' &&\r\n !Array.isArray(consent)\r\n ) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn(\r\n `storagePolicyConfigurationApi: passed consent is not valid. Consent either has to be a number, a string, an array of strings or an array of numbers.\r\n Passed consent: ${JSON.stringify(consent)}`\r\n );\r\n }\r\n return;\r\n }\r\n\r\n if (\r\n Array.isArray(consent) &&\r\n !(consent as string[]).every(\r\n (c: any) => typeof c === 'number' || typeof c === 'string'\r\n )\r\n ) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn(\r\n `storagePolicyConfigurationApi: passed consent is not valid. Consent either has to be a number, a string, an array of strings or an array of numbers.\r\n Passed consent: ${JSON.stringify(consent)}`\r\n );\r\n }\r\n return;\r\n }\r\n\r\n const policy: StorageCategory[] = [\r\n StorageCategory.Necessary,\r\n StorageCategory.Functional,\r\n StorageCategory.Analytical,\r\n StorageCategory.Marketing,\r\n ].filter((category, index, array) => {\r\n if (typeof consent === 'number') {\r\n // Passed consent is a category level (number)\r\n // Include the passed category level and all categories below it\r\n return consent > index;\r\n } else if (typeof consent === 'string') {\r\n // Passed consent is a category (string)\r\n // Include the passed category and all categories below its level\r\n return array.indexOf(consent) + 1 > index;\r\n } else if (Array.isArray(consent)) {\r\n // Passed consent is an array with category levels (number), categories (string) or both\r\n // Include all categories in passed array\r\n return (\r\n consent.findIndex((c: number | StorageCategory) => {\r\n return c === index + 1 || c === category;\r\n }) > -1\r\n );\r\n } else {\r\n return true;\r\n }\r\n });\r\n\r\n if (policy.indexOf(StorageCategory.Necessary) === -1) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn(\r\n `storagePolicyConfigurationApi: passed consent does not include category: '${\r\n StorageCategory.Necessary\r\n }'. Consent has to atleast include the '${\r\n StorageCategory.Necessary\r\n }' category.\r\n Passed consent: ${JSON.stringify(consent)}`\r\n );\r\n }\r\n policy.unshift(StorageCategory.Necessary);\r\n }\r\n\r\n return createStorageWriter(\r\n context.container,\r\n 'storagePolicy',\r\n StorageCategory.Necessary,\r\n {\r\n medium: StorageMedium.Cookie,\r\n scope: StorageScope.Tenant,\r\n duration: { days: 365 },\r\n }\r\n )\r\n .then((write) => write(policy))\r\n .then(() => {\r\n processStorage(context.container);\r\n\r\n context.events.dispatch('storage:policy-changed', policy);\r\n });\r\n }\r\n });\r\n});\r\n"],"names":["this"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/storage/types.ts","../src/storage/storage.ts","../src/storage/utils.ts","../src/storage/legacy-storage-provider.ts","../../../node_modules/@webprovisions/platform/lib-esm/configuration/configurator.js","../../../node_modules/@webprovisions/platform/lib-esm/configuration/api-builder.js","../src/storage/storage-policy-configuration-api.ts"],"sourcesContent":["export enum StorageMedium {\r\n Cookie = 'cookie',\r\n Local = 'local',\r\n Session = 'session',\r\n}\r\n\r\nexport enum StorageScope {\r\n Tenant = 'tenant',\r\n Implementation = 'implementation',\r\n Widget = 'widget',\r\n}\r\n\r\nexport type Store = {\r\n tenant: StorageContainer;\r\n implementation: StorageContainer;\r\n widget: StorageContainer;\r\n};\r\n\r\nexport type StorageContainer = { [key: string]: StoredValue };\r\n\r\nexport type StoredValue = {\r\n value: any;\r\n expiration?: string;\r\n category: StorageCategory;\r\n};\r\n\r\nexport enum StorageCategory {\r\n Necessary = 'necessary',\r\n Functional = 'functional',\r\n Analytical = 'analytical',\r\n Marketing = 'marketing',\r\n}\r\n\r\nexport type StorageWriter = (value?: any) => Promise<void>;\r\n\r\nexport type StorageConfigurationOptions = {\r\n consent?: StorageConsent;\r\n};\r\n\r\nexport type StorageConsent = number | number[] | StorageCategory | StorageCategory[];\r\n\r\nexport type Duration = {\r\n days?: number;\r\n hours?: number;\r\n minutes?: number;\r\n seconds?: number;\r\n};\r\n\r\nexport type StorageWriterOptions = {\r\n scope?: StorageScope;\r\n duration?: Duration;\r\n medium?: StorageMedium;\r\n};\r\n","import { Logger } from '@telia-ace/widget-utilities';\r\nimport { Container } from '@webprovisions/platform';\r\nimport {\r\n StorageCategory,\r\n StorageMedium,\r\n StorageScope,\r\n StorageWriter,\r\n StorageWriterOptions,\r\n} from './types';\r\nimport {\r\n createEmptyStore,\r\n createValue,\r\n getApplicationStoreAsync,\r\n getCookieStoreAsync,\r\n getValue,\r\n isNotAllowedAsync,\r\n processStorage,\r\n setApplicationStoreAsync,\r\n setCookieStoreAsync,\r\n} from './utils';\r\n\r\n/**\r\n * Creates a writer to be used to write to cookie, local or session storage.\r\n * @param container Widget Container.\r\n * @param key Key to use when writing.\r\n * @param category StorageCategory to use when writing.\r\n * @param options StorageWriterOptions to use when writing default {scope: StorageScope.Widget, medium = StorageMedium.Session, duration = infinite }.\r\n * @returns a function to be used to write a value to the storage using given settings.\r\n */\r\nexport const createStorageWriter = (\r\n container: Container,\r\n key: string,\r\n category: StorageCategory,\r\n options: StorageWriterOptions = {}\r\n): Promise<StorageWriter> => {\r\n return isNotAllowedAsync(container, category).then((notAllowed) => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (notAllowed) {\r\n Logger.warn(\r\n `createStorageWriter: Attempted to create storage writer using unallowed category.\r\n Key: ${key}\r\n Category: ${JSON.stringify(category)}\r\n Options: ${JSON.stringify(options)}`\r\n );\r\n }\r\n }\r\n\r\n return (value: any) => {\r\n processStorage(container);\r\n\r\n return isNotAllowedAsync(container, category).then((notAllowed) => {\r\n if (notAllowed) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn(\r\n `storageWriter: Attempted to write to storage using unallowed category.\r\n Key: ${key}\r\n Category: ${JSON.stringify(category)}\r\n Value: ${JSON.stringify(value)}\r\n Options: ${JSON.stringify(options)}`\r\n );\r\n }\r\n return;\r\n }\r\n\r\n const {\r\n scope = StorageScope.Widget,\r\n medium = StorageMedium.Session,\r\n duration,\r\n } = options;\r\n\r\n const store = createEmptyStore();\r\n store[scope][key] = createValue(value, category, duration);\r\n\r\n if (medium === StorageMedium.Cookie) return setCookieStoreAsync(container, store);\r\n else return setApplicationStoreAsync(container, medium, store);\r\n });\r\n };\r\n });\r\n};\r\n\r\n/**\r\n * Read the widget cookie, local or session storage.\r\n * @param container Widget Container.\r\n * @param key Key to read.\r\n * @param medium Storage medium to read from (default: session).\r\n * @returns the value stored with passed key.\r\n */\r\nexport const readStorage = <Type>(\r\n container: Container,\r\n key: string,\r\n medium: StorageMedium = StorageMedium.Session\r\n): Promise<Type | undefined> => {\r\n processStorage(container);\r\n\r\n if (typeof key === 'undefined') {\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn('readStorage: Undefined key passed when reading storage. ', key, medium);\r\n }\r\n return Promise.resolve(undefined);\r\n }\r\n\r\n if (medium === StorageMedium.Cookie)\r\n return getCookieStoreAsync(container).then((store) => getValue(store, key));\r\n else return getApplicationStoreAsync(container, medium).then((store) => getValue(store, key));\r\n};\r\n","import { deepClone, hash, lock } from '@telia-ace/widget-utilities';\r\nimport { Container, Widget } from '@webprovisions/platform';\r\nimport { readStorage } from './storage';\r\nimport {\r\n Duration,\r\n StorageCategory,\r\n StorageContainer,\r\n StorageMedium,\r\n Store,\r\n StoredValue\r\n} from './types';\r\n\r\nconst hasEntries = (object: object) =>\r\n !!Object.entries(object).filter(([_, value]) => typeof value !== 'undefined').length;\r\n\r\nconst cleanUndefined = (object: StorageContainer) =>\r\n Object.entries(object)\r\n .filter(([_, value]) => typeof value !== 'undefined')\r\n .forEach(([key, { value }]) => {\r\n if (typeof value === 'undefined') {\r\n delete object[key];\r\n }\r\n });\r\n\r\nconst mergeAndClean = (target: Store, source: Store): Store => {\r\n const merged: Store = {\r\n tenant: { ...target.tenant, ...source.tenant },\r\n implementation: { ...target.implementation, ...source.implementation },\r\n widget: { ...target.widget, ...source.widget }\r\n };\r\n\r\n cleanUndefined(merged.tenant);\r\n cleanUndefined(merged.implementation);\r\n cleanUndefined(merged.widget);\r\n\r\n return merged;\r\n};\r\n\r\nconst getLongestExpirationDate = (store: Store): string => {\r\n const expirationDates = Object.entries(store).reduce<string[]>((acc, storeEntry) => {\r\n const [_, container] = storeEntry;\r\n Object.entries(container).forEach((containerEntry) => {\r\n const [_, { expiration }] = containerEntry;\r\n if (expiration) acc.push(expiration);\r\n });\r\n return acc;\r\n }, []);\r\n\r\n return (\r\n expirationDates\r\n .slice()\r\n .sort((a, b) => new Date(b).valueOf() - new Date(a).valueOf())\r\n .shift() || createExpirationDate()\r\n );\r\n};\r\n\r\nconst createStorageKeys = (\r\n container: Container\r\n): [tenant: string, implementation: string, widget: string] => {\r\n const {\r\n name: widgetName,\r\n implementation: { name: implementationName, tenant: tenantName },\r\n } = <Widget>container.get('$widget');\r\n\r\n return [\r\n `humany_${tenantName}`,\r\n `humany_${hash(tenantName + implementationName)}`,\r\n `humany_${hash(tenantName + implementationName + widgetName)}`,\r\n ];\r\n};\r\n\r\nconst getCookie = <Type>(cookieName: string): Type | undefined => {\r\n const regExp = new RegExp(`(?:^|;)\\\\s?${cookieName}=(.*?)(?:;|$)`, 'i');\r\n const cookie = document.cookie.match(regExp);\r\n const value = cookie && cookie[1] && JSON.parse(cookie[1]);\r\n\r\n return value || undefined;\r\n};\r\n\r\nconst setCookie = (cookieName: string, value: any, expires: string) => {\r\n const cookie = `${cookieName}=${JSON.stringify(value).trim()}`;\r\n const expiration = `expires=${new Date(expires).toUTCString()}`;\r\n const path = 'path=/';\r\n const options = 'SameSite=None;Secure'\r\n return (document.cookie = `${cookie}; ${expiration}; ${path}; ${options}`);\r\n};\r\n\r\nconst getCookieStore = (container: Container): Store => {\r\n const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);\r\n const tenant = getCookie<StorageContainer>(tenantKey) || {};\r\n const implementation = getCookie<StorageContainer>(implementationKey) || {};\r\n const widget = getCookie<StorageContainer>(widgetKey) || {};\r\n\r\n return {\r\n tenant,\r\n implementation,\r\n widget,\r\n };\r\n};\r\n\r\nconst setCookieStore = (container: Container, store: Store): void => {\r\n const current = getCookieStore(container);\r\n const merged = mergeAndClean(current, store);\r\n\r\n const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);\r\n const { tenant, implementation, widget } = merged;\r\n const expirationDate = getLongestExpirationDate(store);\r\n const deleteDate = createExpirationDate({ days: -1 });\r\n\r\n setCookie(tenantKey, tenant, hasEntries(tenant) ? expirationDate : deleteDate);\r\n setCookie(\r\n implementationKey,\r\n implementation,\r\n hasEntries(implementation) ? expirationDate : deleteDate\r\n );\r\n setCookie(widgetKey, widget, hasEntries(widget) ? expirationDate : deleteDate);\r\n};\r\n\r\nconst getApplicationStore = (container: Container, storage: Storage): Store => {\r\n const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);\r\n const tenant = storage.getItem(tenantKey) || '{}';\r\n const implementation = storage.getItem(implementationKey) || '{}';\r\n const widget = storage.getItem(widgetKey) || '{}';\r\n\r\n return {\r\n tenant: JSON.parse(tenant),\r\n implementation: JSON.parse(implementation),\r\n widget: JSON.parse(widget),\r\n };\r\n};\r\n\r\nconst setApplicationStore = (\r\n container: Container,\r\n applicationStorage: Storage,\r\n store: Store\r\n): void => {\r\n const current = getApplicationStore(container, applicationStorage);\r\n const merged = mergeAndClean(current, store);\r\n\r\n const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);\r\n const { tenant, implementation, widget } = merged;\r\n\r\n hasEntries(tenant)\r\n ? applicationStorage.setItem(tenantKey, JSON.stringify(tenant))\r\n : applicationStorage.removeItem(tenantKey);\r\n hasEntries(implementation)\r\n ? applicationStorage.setItem(implementationKey, JSON.stringify(implementation))\r\n : applicationStorage.removeItem(implementationKey);\r\n hasEntries(widget)\r\n ? applicationStorage.setItem(widgetKey, JSON.stringify(widget))\r\n : applicationStorage.removeItem(widgetKey);\r\n};\r\n\r\nexport const createEmptyStore = (): Store => ({ tenant: {}, implementation: {}, widget: {} });\r\n\r\nexport const isExpired = (isoDateString?: string) => {\r\n if (!isoDateString) return false;\r\n return !!isoDateString && new Date() > new Date(isoDateString);\r\n};\r\n\r\nexport const getValue = <Type>(store: Store, key: string): Type | undefined => {\r\n const storedValue = store.widget[key] || store.implementation[key] || store.tenant[key];\r\n return storedValue?.value;\r\n};\r\n\r\nexport const createValue = (\r\n value: any,\r\n category: StorageCategory,\r\n duration?: Duration | string\r\n): StoredValue => {\r\n if (duration) {\r\n return {\r\n value,\r\n category,\r\n expiration: typeof duration === 'object' ? createExpirationDate(duration) : duration,\r\n };\r\n }\r\n return {\r\n value,\r\n category,\r\n };\r\n};\r\n\r\nexport const processStore = (store: Store, policy?: StorageCategory[]): Store => {\r\n const clone = deepClone(store);\r\n\r\n Object.entries(clone).forEach(([_, storageContainer]) => {\r\n Object.entries(storageContainer).forEach(([key, storedValue]) => {\r\n const { expiration, category } = storedValue;\r\n\r\n if (isExpired(expiration) || isNotAllowed(policy, category))\r\n storageContainer[key] = createValue(undefined, category, expiration);\r\n });\r\n });\r\n\r\n return clone;\r\n};\r\n\r\n/**\r\n * @param category Storage Category.\r\n * @param policy Current Storage Policy.\r\n * @returns true if not allowed, false if allowed.\r\n */\r\nexport const isNotAllowedAsync = (\r\n container: Container,\r\n category?: StorageCategory\r\n): Promise<boolean> => {\r\n return readStorage<StorageCategory[]>(container, 'storagePolicy', StorageMedium.Cookie).then(\r\n (policy = [StorageCategory.Necessary]) => !!category && policy.indexOf(category) === -1\r\n );\r\n};\r\n\r\n/**\r\n * @param category Storage Category.\r\n * @param policy Current Storage Policy.\r\n * @returns true if not allowed, false if allowed.\r\n */\r\nexport const isNotAllowed = (\r\n policy: StorageCategory[] = [StorageCategory.Necessary],\r\n category?: StorageCategory\r\n): boolean => {\r\n return !!category && policy.indexOf(category) === -1;\r\n};\r\n\r\n/**\r\n * Processes storage and removes items if they are expired or if\r\n * the storage policy is defined and the category of the stored\r\n * value is not allowed.\r\n * @param container Widget Container\r\n */\r\nexport const processStorage = (container: Container): void => {\r\n const cookieStore = getCookieStore(container);\r\n const localStore = getApplicationStore(container, window.localStorage);\r\n const sessionStore = getApplicationStore(container, sessionStorage);\r\n const policy = getValue<StorageCategory[]>(cookieStore, 'storagePolicy');\r\n\r\n const [processedCookieStore, processedLocalStore, processedSessionStore] = [\r\n cookieStore,\r\n localStore,\r\n sessionStore,\r\n ].map((store) => processStore(store, policy));\r\n\r\n setCookieStore(container, processedCookieStore);\r\n setApplicationStore(container, window.localStorage, processedLocalStore);\r\n setApplicationStore(container, window.sessionStorage, processedSessionStore);\r\n};\r\n\r\n/**\r\n * Creates an expiration date string with the passed options.\r\n * @param options Duration options.\r\n * @returns ISO formatted date string.\r\n */\r\nexport const createExpirationDate = (options: Duration = { days: 30 }): string => {\r\n const { days = 0, hours = 0, minutes = 0, seconds = 0 } = options;\r\n const date = new Date();\r\n date.setTime(date.getTime() + hours * 60 * 60 * 1000);\r\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\r\n date.setTime(date.getTime() + minutes * 60 * 1000);\r\n date.setTime(date.getTime() + seconds * 1000);\r\n return date.toISOString();\r\n};\r\n\r\nexport const getCookieStoreAsync = (container: Container): Promise<Store> => {\r\n return lock(document)(() => getCookieStore(container));\r\n};\r\n\r\nexport const setCookieStoreAsync = (container: Container, store: Store): Promise<any> => {\r\n return lock(document)(() => setCookieStore(container, store));\r\n};\r\n\r\nexport const getApplicationStoreAsync = (\r\n container: Container,\r\n type: StorageMedium.Local | StorageMedium.Session\r\n): Promise<Store> => {\r\n const storage = type === StorageMedium.Local ? window.localStorage : window.sessionStorage;\r\n return lock(storage)(() => getApplicationStore(container, storage));\r\n};\r\n\r\nexport const setApplicationStoreAsync = (\r\n container: Container,\r\n type: StorageMedium.Local | StorageMedium.Session,\r\n store: Store\r\n): Promise<void> => {\r\n const storage = type === StorageMedium.Local ? window.localStorage : window.sessionStorage;\r\n return lock(storage)(() => setApplicationStore(container, storage, store));\r\n};\r\n","import { lock, Logger } from '@telia-ace/widget-utilities';\r\nimport { StorageCategory } from '.';\r\nimport { StorageScope, Store } from './types';\r\nimport { createExpirationDate, createValue, getValue, processStore } from './utils';\r\n\r\ntype LegacyOptions = {\r\n scope?: StorageScope;\r\n expiration?: Date;\r\n};\r\n\r\ninterface LegacyMedium {\r\n setItem(key: string, value: any, options?: LegacyOptions): Promise<void>;\r\n getItem(key: string): Promise<any>;\r\n removeItem(key: string): Promise<void>;\r\n clear(): Promise<void>;\r\n}\r\n\r\nexport class LegacyStorage implements LegacyMedium {\r\n private memory: Store = {\r\n tenant: {},\r\n implementation: {},\r\n widget: {},\r\n };\r\n async setItem(key: string, value: any, options: LegacyOptions = {}): Promise<void> {\r\n return lock(this)(() => {\r\n const processedStore = processStore(this.memory, [StorageCategory.Necessary]);\r\n const { scope = StorageScope.Tenant, expiration } = options;\r\n\r\n processedStore[scope][key] = createValue(\r\n value,\r\n StorageCategory.Necessary,\r\n expiration?.toISOString() || createExpirationDate()\r\n );\r\n this.memory = processedStore;\r\n\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn(\r\n `StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value stored temporarily in memory.\r\n Key: ${key}\r\n Value: ${JSON.stringify(value)}\r\n Options: ${JSON.stringify(options)}\r\n Memory: ${JSON.stringify(processedStore)}`\r\n );\r\n }\r\n });\r\n }\r\n async getItem(key: string): Promise<any> {\r\n return lock(this)(() => {\r\n const processedStore = processStore(this.memory, [StorageCategory.Necessary]);\r\n\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn(\r\n `StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value fetched from legacy memory storage.\r\n Key: ${key}\r\n Memory: ${JSON.stringify(processedStore)}`\r\n );\r\n }\r\n\r\n const value = getValue(processedStore, key);\r\n this.memory = processedStore;\r\n\r\n return value;\r\n });\r\n }\r\n async removeItem(key: string): Promise<void> {\r\n return lock(this)(() => {\r\n const processedStore = processStore(this.memory, [StorageCategory.Necessary]);\r\n\r\n delete processedStore.tenant[key];\r\n delete processedStore.implementation[key];\r\n delete processedStore.widget[key];\r\n this.memory = processedStore;\r\n\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn(\r\n `StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value removed from memory.\r\n Key: ${key}\r\n Memory: ${JSON.stringify(processedStore)}`\r\n );\r\n }\r\n });\r\n }\r\n async clear(): Promise<void> {\r\n return Promise.resolve();\r\n }\r\n}\r\n\r\nexport default class LegacyStorageProvider {\r\n cookies: LegacyStorage;\r\n session: LegacyStorage;\r\n local: LegacyStorage;\r\n constructor() {\r\n this.cookies = new LegacyStorage();\r\n this.session = new LegacyStorage();\r\n this.local = new LegacyStorage();\r\n }\r\n}\r\n","var __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { selectWidgets } from '../selectors';\r\nimport ns from '../namespace';\r\nvar internal = ns();\r\nexport var matchInstructions = function (instructions, stage, widget) {\r\n return instructions.filter(function (instruction) {\r\n return instruction.stage === stage\r\n && selectWidgets(instruction.selector)(widget);\r\n });\r\n};\r\nexport function clearContextRoot(contextRoot) {\r\n var environment = contextRoot.container.get('$environment');\r\n var configurationCache = internal(environment).configurationCache;\r\n if (configurationCache) {\r\n configurationCache = configurationCache\r\n .filter(function (item) { return item[0] !== contextRoot; });\r\n internal(environment).configurationCache = configurationCache;\r\n }\r\n}\r\nexport var ConfigurationScope;\r\n(function (ConfigurationScope) {\r\n ConfigurationScope[\"Implementation\"] = \"implementation\";\r\n ConfigurationScope[\"Widget\"] = \"widget\";\r\n})(ConfigurationScope || (ConfigurationScope = {}));\r\nexport var ConfigurationStage;\r\n(function (ConfigurationStage) {\r\n /**\r\n * Configurations to be applied BEFORE a widget is configured.\r\n */\r\n ConfigurationStage[\"Pre\"] = \"pre\";\r\n /**\r\n * Configurations to be applied AFTER a widget is configured\r\n */\r\n ConfigurationStage[\"Post\"] = \"post\";\r\n})(ConfigurationStage || (ConfigurationStage = {}));\r\nvar constructApi = function (target, apiDefinition, applyCommand) {\r\n Object.keys(apiDefinition).forEach(function (key) {\r\n var commandDescriptorOrApiPart = apiDefinition[key];\r\n if (typeof commandDescriptorOrApiPart === 'function') {\r\n var commandDescriptor_1 = commandDescriptorOrApiPart();\r\n if (typeof commandDescriptor_1.defaultArgs !== 'undefined') {\r\n applyCommand.apply(void 0, __spreadArrays([commandDescriptor_1], commandDescriptor_1.defaultArgs));\r\n }\r\n target[key] = (function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var trackedCommandDescriptor = Object.assign({}, commandDescriptor_1, { handlerResolver: commandDescriptor_1.handlerResolver.bind({}) });\r\n applyCommand.apply(void 0, __spreadArrays([trackedCommandDescriptor], args));\r\n return target;\r\n });\r\n }\r\n else {\r\n target[key] = constructApi({}, commandDescriptorOrApiPart, applyCommand);\r\n }\r\n });\r\n return target;\r\n};\r\nvar resolveContextRoot = function (widget, scope) {\r\n switch (scope) {\r\n case ConfigurationScope.Implementation:\r\n return widget.implementation;\r\n case ConfigurationScope.Widget:\r\n return widget;\r\n }\r\n};\r\nvar createConfiguratorObject = function (target, selector, implementation, apiDefinitions) {\r\n apiDefinitions.forEach(function (definition) {\r\n constructApi(target, definition, function (commandDescriptor) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n var instruction = {\r\n selector: selector,\r\n stage: commandDescriptor.stage,\r\n handler: function (widget) {\r\n var contextRoot = resolveContextRoot(widget, commandDescriptor.scope);\r\n var context = { container: contextRoot.container, events: contextRoot.events };\r\n var resolveHandler = commandDescriptor.handlerResolver;\r\n var commandHandler = resolveHandler(context);\r\n // The configuration cache prevents the same combination of 'contextRoot' and\r\n // 'commandHandler' to be executed more than once. Let's say a commandHandler\r\n // is scoped to 'Implementation', then it will match all containing widgets, but\r\n // the unique commandHandler instance should be executed only once (else the\r\n // commandHandler will configure the implementation context once for every widget).\r\n var configurationCache = internal(implementation.environment).configurationCache;\r\n if (!configurationCache) {\r\n configurationCache = internal(implementation.environment).configurationCache = [];\r\n }\r\n if (!configurationCache.find(function (item) {\r\n return item.indexOf(contextRoot) > -1 && item.indexOf(resolveHandler) > -1;\r\n })) {\r\n configurationCache.push([contextRoot, resolveHandler]);\r\n return Promise.resolve(commandHandler.apply(void 0, args));\r\n }\r\n },\r\n };\r\n implementation.instructions.push(instruction);\r\n });\r\n });\r\n return target;\r\n};\r\nexport function createConfigurator(implementation, configurationAPIs) {\r\n function configurator(selector) {\r\n return createConfiguratorObject({}, selector, implementation, configurationAPIs);\r\n }\r\n return createConfiguratorObject(configurator, '*', implementation, configurationAPIs);\r\n}\r\n//# sourceMappingURL=configurator.js.map","import { ConfigurationScope, ConfigurationStage } from './configurator';\r\nfunction fallbackIfUndefined(value, fallback) {\r\n if (typeof value === 'undefined') {\r\n return fallback;\r\n }\r\n return value;\r\n}\r\nvar ConfigurationApiBuilder = /** @class */ (function () {\r\n function ConfigurationApiBuilder(part) {\r\n if (part === void 0) { part = {}; }\r\n this.part = part;\r\n }\r\n ConfigurationApiBuilder.prototype.createCommand = function (name, factoryOrOptions, factory) {\r\n var _this = this;\r\n var descriptor;\r\n if (typeof factoryOrOptions === 'function') {\r\n descriptor = {\r\n scope: ConfigurationScope.Widget,\r\n stage: ConfigurationStage.Post,\r\n defaultArgs: undefined,\r\n handlerResolver: factoryOrOptions,\r\n };\r\n }\r\n else {\r\n descriptor = {\r\n scope: fallbackIfUndefined(factoryOrOptions.scope, ConfigurationScope.Widget),\r\n stage: fallbackIfUndefined(factoryOrOptions.stage, ConfigurationStage.Post),\r\n defaultArgs: factoryOrOptions.defaultArgs,\r\n handlerResolver: factory,\r\n };\r\n }\r\n var part = this.part;\r\n var sections = name.split('.');\r\n sections.forEach(function (ns, i) {\r\n var last = i === sections.length - 1;\r\n if (last) {\r\n if (!part[ns]) {\r\n part[ns] = function () { return descriptor; };\r\n }\r\n }\r\n else {\r\n part = (_this.part[ns] = (_this.part[ns] || {}));\r\n }\r\n });\r\n return this;\r\n };\r\n ConfigurationApiBuilder.prototype.get = function () {\r\n return this.part;\r\n };\r\n return ConfigurationApiBuilder;\r\n}());\r\nexport { ConfigurationApiBuilder };\r\nexport var createConfigurationApi = function (factory) {\r\n var builder = new ConfigurationApiBuilder({});\r\n factory(builder);\r\n return builder.get();\r\n};\r\n//# sourceMappingURL=api-builder.js.map","import { Logger } from '@telia-ace/widget-utilities';\r\nimport { createConfigurationApi } from '@webprovisions/platform';\r\nimport { createStorageWriter } from './storage';\r\nimport { StorageCategory, StorageConfigurationOptions, StorageMedium, StorageScope } from './types';\r\nimport { processStorage } from './utils';\r\n\r\nexport default createConfigurationApi((builder) => {\r\n builder.createCommand('storage', (context) => (options: StorageConfigurationOptions = {}) => {\r\n const { consent } = options;\r\n if (typeof consent !== 'undefined') {\r\n if (\r\n typeof consent !== 'number' &&\r\n typeof consent !== 'string' &&\r\n !Array.isArray(consent)\r\n ) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn(\r\n `storagePolicyConfigurationApi: passed consent is not valid. Consent either has to be a number, a string, an array of strings or an array of numbers.\r\n Passed consent: ${JSON.stringify(consent)}`\r\n );\r\n }\r\n return;\r\n }\r\n\r\n if (\r\n Array.isArray(consent) &&\r\n !(consent as string[]).every(\r\n (c: any) => typeof c === 'number' || typeof c === 'string'\r\n )\r\n ) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn(\r\n `storagePolicyConfigurationApi: passed consent is not valid. Consent either has to be a number, a string, an array of strings or an array of numbers.\r\n Passed consent: ${JSON.stringify(consent)}`\r\n );\r\n }\r\n return;\r\n }\r\n\r\n const policy: StorageCategory[] = [\r\n StorageCategory.Necessary,\r\n StorageCategory.Functional,\r\n StorageCategory.Analytical,\r\n StorageCategory.Marketing,\r\n ].filter((category, index, array) => {\r\n if (typeof consent === 'number') {\r\n // Passed consent is a category level (number)\r\n // Include the passed category level and all categories below it\r\n return consent > index;\r\n } else if (typeof consent === 'string') {\r\n // Passed consent is a category (string)\r\n // Include the passed category and all categories below its level\r\n return array.indexOf(consent) + 1 > index;\r\n } else if (Array.isArray(consent)) {\r\n // Passed consent is an array with category levels (number), categories (string) or both\r\n // Include all categories in passed array\r\n return (\r\n consent.findIndex((c: number | StorageCategory) => {\r\n return c === index + 1 || c === category;\r\n }) > -1\r\n );\r\n } else {\r\n return true;\r\n }\r\n });\r\n\r\n if (policy.indexOf(StorageCategory.Necessary) === -1) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n Logger.warn(\r\n `storagePolicyConfigurationApi: passed consent does not include category: '${\r\n StorageCategory.Necessary\r\n }'. Consent has to atleast include the '${\r\n StorageCategory.Necessary\r\n }' category.\r\n Passed consent: ${JSON.stringify(consent)}`\r\n );\r\n }\r\n policy.unshift(StorageCategory.Necessary);\r\n }\r\n\r\n return createStorageWriter(\r\n context.container,\r\n 'storagePolicy',\r\n StorageCategory.Necessary,\r\n {\r\n medium: StorageMedium.Cookie,\r\n scope: StorageScope.Tenant,\r\n duration: { days: 365 },\r\n }\r\n )\r\n .then((write) => write(policy))\r\n .then(() => {\r\n processStorage(context.container);\r\n\r\n context.events.dispatch('storage:policy-changed', policy);\r\n });\r\n }\r\n });\r\n});\r\n"],"names":["this"],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,17 @@
1
1
  {
2
2
  "name": "@telia-ace/widget-services",
3
- "version": "1.0.8",
3
+ "version": "1.0.11",
4
4
  "description": "Services for ACE Widgets.",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "Telia Company AB",
7
7
  "keywords": [
8
8
  "telia"
9
9
  ],
10
- "module": "dist/index.js",
10
+ "exports": {
11
+ "development": "./src/index.ts",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "type": "module",
11
15
  "types": "dist/index.d.ts",
12
16
  "files": [
13
17
  "LICENSE.txt",
@@ -29,5 +33,5 @@
29
33
  "devDependencies": {
30
34
  "@webprovisions/platform": "^1.1.2"
31
35
  },
32
- "gitHead": "58ed2317a3d94d1eaae4747035949447e0a31d54"
36
+ "gitHead": "e69713b9f623ea5e83d8d9d4d8d9b315f2677721"
33
37
  }