@telia-ace/widget-services 1.0.14 → 1.0.16-next.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/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
- Copyright © 2021, Telia Company AB. All rights reserved.
2
-
3
- THIS PACKAGE AND CONTAINING SOFTWARE IS PART OF
4
- THE HUMANY SERVICE. BY USING THIS SOFTWARE YOU
5
- AGREE TO THE FOLLOWING TERMS AND CONDITIONS:
1
+ Copyright © 2021, Telia Company AB. All rights reserved.
2
+
3
+ THIS PACKAGE AND CONTAINING SOFTWARE IS PART OF
4
+ THE HUMANY SERVICE. BY USING THIS SOFTWARE YOU
5
+ AGREE TO THE FOLLOWING TERMS AND CONDITIONS:
6
6
  http://www.humany.com/legal
package/README.md CHANGED
@@ -1,3 +1,3 @@
1
- # `@telia-ace/widget-services`
2
-
3
- Services for ACE Widgets.
1
+ # `@telia-ace/widget-services`
2
+
3
+ Services for ACE Widgets.
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { createStorageWriter, LegacyStorage as StorageService, LegacyStorageProvider as StorageProvider, readStorage, StorageCategory, StorageMedium, storagePolicyConfigurationApi, StorageScope, } from './storage';
2
- export type { Duration, StorageWriter, StorageWriterOptions } from './storage';
1
+ export { createStorageWriter, LegacyStorage as StorageService, LegacyStorageProvider as StorageProvider, readStorage, StorageCategory, StorageMedium, storagePolicyConfigurationApi, StorageScope, } from './storage';
2
+ export type { Duration, StorageWriter, StorageWriterOptions } from './storage';
package/dist/index.js CHANGED
@@ -1,15 +1,16 @@
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) => {
1
+ var R = Object.defineProperty;
2
+ var V = Object.getOwnPropertySymbols;
3
+ var B = Object.prototype.hasOwnProperty, F = Object.prototype.propertyIsEnumerable;
4
+ var J = (e, t, n) => t in e ? R(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n, f = (e, t) => {
5
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]);
6
+ B.call(t, n) && J(e, n, t[n]);
7
+ if (V)
8
+ for (var n of V(t))
9
+ F.call(t, n) && J(e, n, t[n]);
10
10
  return e;
11
11
  };
12
- var S = (e, t, n) => new Promise((r, a) => {
12
+ var S = (e, t, n) => (J(e, typeof t != "symbol" ? t + "" : t, n), n);
13
+ var h = (e, t, n) => new Promise((r, a) => {
13
14
  var o = (i) => {
14
15
  try {
15
16
  c(n.next(i));
@@ -25,191 +26,214 @@ var S = (e, t, n) => new Promise((r, a) => {
25
26
  }, c = (i) => i.done ? r(i.value) : Promise.resolve(i.value).then(o, s);
26
27
  c((n = n.apply(e, t)).next());
27
28
  });
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.
29
+ import { Logger as g, lock as p, deepClone as q, hash as W } from "@telia-ace/widget-utilities";
30
+ var l = /* @__PURE__ */ ((e) => (e.Cookie = "cookie", e.Local = "local", e.Session = "session", e))(l || {}), $ = /* @__PURE__ */ ((e) => (e.Tenant = "tenant", e.Implementation = "implementation", e.Widget = "widget", e))($ || {}), d = /* @__PURE__ */ ((e) => (e.Necessary = "necessary", e.Functional = "functional", e.Analytical = "analytical", e.Marketing = "marketing", e))(d || {});
31
+ const z = (e, t, n, r = {}) => L(e, n).then((a) => (process.env.NODE_ENV !== "production" && a && g.warn(
32
+ `createStorageWriter: Attempted to create storage writer using unallowed category.
31
33
  Key: ${t}
32
34
  Category: ${JSON.stringify(n)}
33
- Options: ${JSON.stringify(r)}`), (o) => (x(e), W(e, n).then((s) => {
35
+ Options: ${JSON.stringify(r)}`
36
+ ), (o) => (k(e), L(e, n).then((s) => {
34
37
  if (s) {
35
- process.env.NODE_ENV !== "production" && g.warn(`storageWriter: Attempted to write to storage using unallowed category.
38
+ process.env.NODE_ENV !== "production" && g.warn(
39
+ `storageWriter: Attempted to write to storage using unallowed category.
36
40
  Key: ${t}
37
41
  Category: ${JSON.stringify(n)}
38
42
  Value: ${JSON.stringify(o)}
39
- Options: ${JSON.stringify(r)}`);
43
+ Options: ${JSON.stringify(r)}`
44
+ );
40
45
  return;
41
46
  }
42
47
  const {
43
- scope: c = A.Widget,
48
+ scope: c = $.Widget,
44
49
  medium: i = l.Session,
45
50
  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 }]) => {
51
+ } = r, u = Q();
52
+ return u[c][t] = T(o, n, m), i === l.Cookie ? ee(e, u) : ne(e, i, u);
53
+ })))), G = (e, t, n = l.Session) => (k(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 ? Z(e).then((r) => v(r, t)) : te(e, n).then((r) => v(r, t))), y = (e) => !!Object.entries(e).filter(([t, n]) => typeof n != "undefined").length, _ = (e) => Object.entries(e).filter(([t, n]) => typeof n != "undefined").forEach(([t, { value: n }]) => {
49
54
  typeof n == "undefined" && delete e[t];
50
- }), j = (e, t) => {
55
+ }), U = (e, t) => {
51
56
  const n = {
52
57
  tenant: f(f({}, e.tenant), t.tenant),
53
58
  implementation: f(f({}, e.implementation), t.implementation),
54
59
  widget: f(f({}, e.widget), t.widget)
55
60
  };
56
- return P(n.tenant), P(n.implementation), P(n.widget), n;
57
- }, G = (e) => Object.entries(e).reduce((n, r) => {
61
+ return _(n.tenant), _(n.implementation), _(n.widget), n;
62
+ }, H = (e) => Object.entries(e).reduce((n, r) => {
58
63
  const [a, o] = r;
59
64
  return Object.entries(o).forEach((s) => {
60
65
  const [c, { expiration: i }] = s;
61
66
  i && n.push(i);
62
67
  }), n;
63
- }, []).slice().sort((n, r) => new Date(r).valueOf() - new Date(n).valueOf()).shift() || E(), $ = (e) => {
68
+ }, []).slice().sort((n, r) => new Date(r).valueOf() - new Date(n).valueOf()).shift() || C(), E = (e) => {
64
69
  const {
65
70
  name: t,
66
71
  implementation: { name: n, tenant: r }
67
72
  } = e.get("$widget");
68
73
  return [
69
74
  `humany_${r}`,
70
- `humany_${V(r + n)}`,
71
- `humany_${V(r + n + t)}`
75
+ `humany_${W(r + n)}`,
76
+ `humany_${W(r + n + t)}`
72
77
  ];
73
- }, J = (e) => {
78
+ }, b = (e) => {
74
79
  const t = new RegExp(`(?:^|;)\\s?${e}=(.*?)(?:;|$)`, "i"), n = document.cookie.match(t);
75
80
  return n && n[1] && JSON.parse(n[1]) || void 0;
76
- }, _ = (e, t, n) => {
81
+ }, D = (e, t, n) => {
77
82
  const r = `${e}=${JSON.stringify(t).trim()}`, a = `expires=${new Date(n).toUTCString()}`, o = "path=/", s = "SameSite=None;Secure";
78
83
  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) || {};
84
+ }, x = (e) => {
85
+ const [t, n, r] = E(e), a = b(t) || {}, o = b(n) || {}, s = b(r) || {};
81
86
  return {
82
87
  tenant: a,
83
88
  implementation: o,
84
89
  widget: s
85
90
  };
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) || "{}";
91
+ }, M = (e, t) => {
92
+ const n = x(e), r = U(n, t), [a, o, s] = E(e), { tenant: c, implementation: i, widget: m } = r, u = H(t), P = C({ days: -1 });
93
+ D(a, c, y(c) ? u : P), D(
94
+ o,
95
+ i,
96
+ y(i) ? u : P
97
+ ), D(s, m, y(m) ? u : P);
98
+ }, N = (e, t) => {
99
+ const [n, r, a] = E(e), o = t.getItem(n) || "{}", s = t.getItem(r) || "{}", c = t.getItem(a) || "{}";
91
100
  return {
92
101
  tenant: JSON.parse(o),
93
102
  implementation: JSON.parse(s),
94
103
  widget: JSON.parse(c)
95
104
  };
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;
105
+ }, K = (e, t, n) => {
106
+ const r = N(e, t), a = U(r, n), [o, s, c] = E(e), { tenant: i, implementation: m, widget: u } = a;
98
107
  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) => {
108
+ }, Q = () => ({ tenant: {}, implementation: {}, widget: {} }), X = (e) => e ? !!e && new Date() > new Date(e) : !1, v = (e, t) => {
100
109
  const n = e.widget[t] || e.implementation[t] || e.tenant[t];
101
110
  return n == null ? void 0 : n.value;
102
- }, K = (e, t, n) => n ? {
111
+ }, T = (e, t, n) => n ? {
103
112
  value: e,
104
113
  category: t,
105
- expiration: typeof n == "object" ? E(n) : n
114
+ expiration: typeof n == "object" ? C(n) : n
106
115
  } : {
107
116
  value: e,
108
117
  category: t
109
- }, h = (e, t) => {
110
- const n = F(e);
118
+ }, w = (e, t) => {
119
+ const n = q(e);
111
120
  return Object.entries(n).forEach(([r, a]) => {
112
121
  Object.entries(a).forEach(([o, s]) => {
113
122
  const { expiration: c, category: i } = s;
114
- (Q(c) || X(t, i)) && (a[o] = K(void 0, i, c));
123
+ (X(c) || Y(t, i)) && (a[o] = T(void 0, i, c));
115
124
  });
116
125
  }), 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] = [
126
+ }, L = (e, t) => G(e, "storagePolicy", l.Cookie).then(
127
+ (n = [d.Necessary]) => !!t && n.indexOf(t) === -1
128
+ ), Y = (e = [d.Necessary], t) => !!t && e.indexOf(t) === -1, k = (e) => {
129
+ const t = x(e), n = N(e, window.localStorage), r = N(e, sessionStorage), a = v(t, "storagePolicy"), [o, s, c] = [
119
130
  t,
120
131
  n,
121
132
  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 }) => {
133
+ ].map((i) => w(i, a));
134
+ M(e, o), K(e, window.localStorage, s), K(e, window.sessionStorage, c);
135
+ }, C = (e = { days: 30 }) => {
125
136
  const { days: t = 0, hours: n = 0, minutes: r = 0, seconds: a = 0 } = e, o = new Date();
126
137
  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) => {
138
+ }, Z = (e) => p(document)(() => x(e)), ee = (e, t) => p(document)(() => M(e, t)), te = (e, t) => {
128
139
  const n = t === l.Local ? window.localStorage : window.sessionStorage;
129
- return p(n)(() => w(e, n));
130
- }, te = (e, t, n) => {
140
+ return p(n)(() => N(e, n));
141
+ }, ne = (e, t, n) => {
131
142
  const r = t === l.Local ? window.localStorage : window.sessionStorage;
132
- return p(r)(() => D(e, r, n));
143
+ return p(r)(() => K(e, r, n));
133
144
  };
134
- class b {
145
+ class I {
135
146
  constructor() {
136
- this.memory = {
147
+ S(this, "memory", {
137
148
  tenant: {},
138
149
  implementation: {},
139
150
  widget: {}
140
- };
151
+ });
141
152
  }
142
153
  setItem(a, o) {
143
- return S(this, arguments, function* (t, n, r = {}) {
154
+ return h(this, arguments, function* (t, n, r = {}) {
144
155
  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.
156
+ const s = w(this.memory, [d.Necessary]), { scope: c = $.Tenant, expiration: i } = r;
157
+ s[c][t] = T(
158
+ n,
159
+ d.Necessary,
160
+ (i == null ? void 0 : i.toISOString()) || C()
161
+ ), this.memory = s, process.env.NODE_ENV !== "production" && g.warn(
162
+ `StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value stored temporarily in memory.
147
163
  Key: ${t}
148
164
  Value: ${JSON.stringify(n)}
149
165
  Options: ${JSON.stringify(r)}
150
- Memory: ${JSON.stringify(s)}`);
166
+ Memory: ${JSON.stringify(s)}`
167
+ );
151
168
  });
152
169
  });
153
170
  }
154
171
  getItem(t) {
155
- return S(this, null, function* () {
172
+ return h(this, null, function* () {
156
173
  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.
174
+ const n = w(this.memory, [d.Necessary]);
175
+ process.env.NODE_ENV !== "production" && g.warn(
176
+ `StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value fetched from legacy memory storage.
159
177
  Key: ${t}
160
- Memory: ${JSON.stringify(n)}`);
161
- const r = N(n, t);
178
+ Memory: ${JSON.stringify(n)}`
179
+ );
180
+ const r = v(n, t);
162
181
  return this.memory = n, r;
163
182
  });
164
183
  });
165
184
  }
166
185
  removeItem(t) {
167
- return S(this, null, function* () {
186
+ return h(this, null, function* () {
168
187
  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.
188
+ const n = w(this.memory, [d.Necessary]);
189
+ delete n.tenant[t], delete n.implementation[t], delete n.widget[t], this.memory = n, process.env.NODE_ENV !== "production" && g.warn(
190
+ `StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value removed from memory.
171
191
  Key: ${t}
172
- Memory: ${JSON.stringify(n)}`);
192
+ Memory: ${JSON.stringify(n)}`
193
+ );
173
194
  });
174
195
  });
175
196
  }
176
197
  clear() {
177
- return S(this, null, function* () {
198
+ return h(this, null, function* () {
178
199
  return Promise.resolve();
179
200
  });
180
201
  }
181
202
  }
182
- class ie {
203
+ class ae {
183
204
  constructor() {
184
- this.cookies = new b(), this.session = new b(), this.local = new b();
205
+ S(this, "cookies");
206
+ S(this, "session");
207
+ S(this, "local");
208
+ this.cookies = new I(), this.session = new I(), this.local = new I();
185
209
  }
186
210
  }
187
211
  globalThis && globalThis.__spreadArrays;
188
- var v;
212
+ var O;
189
213
  (function(e) {
190
214
  e.Implementation = "implementation", e.Widget = "widget";
191
- })(v || (v = {}));
192
- var O;
215
+ })(O || (O = {}));
216
+ var A;
193
217
  (function(e) {
194
218
  e.Pre = "pre", e.Post = "post";
195
- })(O || (O = {}));
196
- function L(e, t) {
219
+ })(A || (A = {}));
220
+ function j(e, t) {
197
221
  return typeof e == "undefined" ? t : e;
198
222
  }
199
- var ne = function() {
223
+ var re = function() {
200
224
  function e(t) {
201
225
  t === void 0 && (t = {}), this.part = t;
202
226
  }
203
227
  return e.prototype.createCommand = function(t, n, r) {
204
228
  var a = this, o;
205
229
  typeof n == "function" ? o = {
206
- scope: v.Widget,
207
- stage: O.Post,
230
+ scope: O.Widget,
231
+ stage: A.Post,
208
232
  defaultArgs: void 0,
209
233
  handlerResolver: n
210
234
  } : o = {
211
- scope: L(n.scope, v.Widget),
212
- stage: L(n.stage, O.Post),
235
+ scope: j(n.scope, O.Widget),
236
+ stage: j(n.stage, A.Post),
213
237
  defaultArgs: n.defaultArgs,
214
238
  handlerResolver: r
215
239
  };
@@ -223,22 +247,28 @@ var ne = function() {
223
247
  }, e.prototype.get = function() {
224
248
  return this.part;
225
249
  }, e;
226
- }(), re = function(e) {
227
- var t = new ne({});
250
+ }(), oe = function(e) {
251
+ var t = new re({});
228
252
  return e(t), t.get();
229
253
  };
230
- const ae = re((e) => {
254
+ const ce = oe((e) => {
231
255
  e.createCommand("storage", (t) => (n = {}) => {
232
256
  const { consent: r } = n;
233
257
  if (typeof r != "undefined") {
234
258
  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)}`);
259
+ process.env.NODE_ENV !== "production" && g.warn(
260
+ `storagePolicyConfigurationApi: passed consent is not valid. Consent either has to be a number, a string, an array of strings or an array of numbers.
261
+ Passed consent: ${JSON.stringify(r)}`
262
+ );
237
263
  return;
238
264
  }
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)}`);
265
+ if (Array.isArray(r) && !r.every(
266
+ (o) => typeof o == "number" || typeof o == "string"
267
+ )) {
268
+ process.env.NODE_ENV !== "production" && g.warn(
269
+ `storagePolicyConfigurationApi: passed consent is not valid. Consent either has to be a number, a string, an array of strings or an array of numbers.
270
+ Passed consent: ${JSON.stringify(r)}`
271
+ );
242
272
  return;
243
273
  }
244
274
  const a = [
@@ -247,13 +277,20 @@ const ae = re((e) => {
247
277
  d.Analytical,
248
278
  d.Marketing
249
279
  ].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,
254
- duration: { days: 365 }
255
- }).then((o) => o(a)).then(() => {
256
- x(t.container), t.events.dispatch("storage:policy-changed", a);
280
+ return a.indexOf(d.Necessary) === -1 && (process.env.NODE_ENV !== "production" && g.warn(
281
+ `storagePolicyConfigurationApi: passed consent does not include category: '${d.Necessary}'. Consent has to atleast include the '${d.Necessary}' category.
282
+ Passed consent: ${JSON.stringify(r)}`
283
+ ), a.unshift(d.Necessary)), z(
284
+ t.container,
285
+ "storagePolicy",
286
+ d.Necessary,
287
+ {
288
+ medium: l.Cookie,
289
+ scope: $.Tenant,
290
+ duration: { days: 365 }
291
+ }
292
+ ).then((o) => o(a)).then(() => {
293
+ k(t.container), t.events.dispatch("storage:policy-changed", a);
257
294
  });
258
295
  }
259
296
  });
@@ -261,11 +298,11 @@ const ae = re((e) => {
261
298
  export {
262
299
  d as StorageCategory,
263
300
  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
301
+ ae as StorageProvider,
302
+ $ as StorageScope,
303
+ I as StorageService,
304
+ z as createStorageWriter,
305
+ G as readStorage,
306
+ ce as storagePolicyConfigurationApi
270
307
  };
271
308
  //# 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 } 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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"}
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 {\n Cookie = 'cookie',\n Local = 'local',\n Session = 'session',\n}\n\nexport enum StorageScope {\n Tenant = 'tenant',\n Implementation = 'implementation',\n Widget = 'widget',\n}\n\nexport type Store = {\n tenant: StorageContainer;\n implementation: StorageContainer;\n widget: StorageContainer;\n};\n\nexport type StorageContainer = { [key: string]: StoredValue };\n\nexport type StoredValue = {\n value: any;\n expiration?: string;\n category: StorageCategory;\n};\n\nexport enum StorageCategory {\n Necessary = 'necessary',\n Functional = 'functional',\n Analytical = 'analytical',\n Marketing = 'marketing',\n}\n\nexport type StorageWriter = (value?: any) => Promise<void>;\n\nexport type StorageConfigurationOptions = {\n consent?: StorageConsent;\n};\n\nexport type StorageConsent = number | number[] | StorageCategory | StorageCategory[];\n\nexport type Duration = {\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n};\n\nexport type StorageWriterOptions = {\n scope?: StorageScope;\n duration?: Duration;\n medium?: StorageMedium;\n};\n","import { Logger } from '@telia-ace/widget-utilities';\nimport { Container } from '@webprovisions/platform';\nimport {\n StorageCategory,\n StorageMedium,\n StorageScope,\n StorageWriter,\n StorageWriterOptions,\n} from './types';\nimport {\n createEmptyStore,\n createValue,\n getApplicationStoreAsync,\n getCookieStoreAsync,\n getValue,\n isNotAllowedAsync,\n processStorage,\n setApplicationStoreAsync,\n setCookieStoreAsync,\n} from './utils';\n\n/**\n * Creates a writer to be used to write to cookie, local or session storage.\n * @param container Widget Container.\n * @param key Key to use when writing.\n * @param category StorageCategory to use when writing.\n * @param options StorageWriterOptions to use when writing default {scope: StorageScope.Widget, medium = StorageMedium.Session, duration = infinite }.\n * @returns a function to be used to write a value to the storage using given settings.\n */\nexport const createStorageWriter = (\n container: Container,\n key: string,\n category: StorageCategory,\n options: StorageWriterOptions = {}\n): Promise<StorageWriter> => {\n return isNotAllowedAsync(container, category).then((notAllowed) => {\n if (process.env.NODE_ENV !== 'production') {\n if (notAllowed) {\n Logger.warn(\n `createStorageWriter: Attempted to create storage writer using unallowed category.\n Key: ${key}\n Category: ${JSON.stringify(category)}\n Options: ${JSON.stringify(options)}`\n );\n }\n }\n\n return (value: any) => {\n processStorage(container);\n\n return isNotAllowedAsync(container, category).then((notAllowed) => {\n if (notAllowed) {\n if (process.env.NODE_ENV !== 'production') {\n Logger.warn(\n `storageWriter: Attempted to write to storage using unallowed category.\n Key: ${key}\n Category: ${JSON.stringify(category)}\n Value: ${JSON.stringify(value)}\n Options: ${JSON.stringify(options)}`\n );\n }\n return;\n }\n\n const {\n scope = StorageScope.Widget,\n medium = StorageMedium.Session,\n duration,\n } = options;\n\n const store = createEmptyStore();\n store[scope][key] = createValue(value, category, duration);\n\n if (medium === StorageMedium.Cookie) return setCookieStoreAsync(container, store);\n else return setApplicationStoreAsync(container, medium, store);\n });\n };\n });\n};\n\n/**\n * Read the widget cookie, local or session storage.\n * @param container Widget Container.\n * @param key Key to read.\n * @param medium Storage medium to read from (default: session).\n * @returns the value stored with passed key.\n */\nexport const readStorage = <Type>(\n container: Container,\n key: string,\n medium: StorageMedium = StorageMedium.Session\n): Promise<Type | undefined> => {\n processStorage(container);\n\n if (typeof key === 'undefined') {\n if (process.env.NODE_ENV !== 'production') {\n Logger.warn('readStorage: Undefined key passed when reading storage. ', key, medium);\n }\n return Promise.resolve(undefined);\n }\n\n if (medium === StorageMedium.Cookie)\n return getCookieStoreAsync(container).then((store) => getValue(store, key));\n else return getApplicationStoreAsync(container, medium).then((store) => getValue(store, key));\n};\n","import { deepClone, hash, lock } from '@telia-ace/widget-utilities';\nimport { Container, Widget } from '@webprovisions/platform';\nimport { readStorage } from './storage';\nimport {\n Duration,\n StorageCategory,\n StorageContainer,\n StorageMedium,\n Store,\n StoredValue\n} from './types';\n\nconst hasEntries = (object: object) =>\n !!Object.entries(object).filter(([_, value]) => typeof value !== 'undefined').length;\n\nconst cleanUndefined = (object: StorageContainer) =>\n Object.entries(object)\n .filter(([_, value]) => typeof value !== 'undefined')\n .forEach(([key, { value }]) => {\n if (typeof value === 'undefined') {\n delete object[key];\n }\n });\n\nconst mergeAndClean = (target: Store, source: Store): Store => {\n const merged: Store = {\n tenant: { ...target.tenant, ...source.tenant },\n implementation: { ...target.implementation, ...source.implementation },\n widget: { ...target.widget, ...source.widget }\n };\n\n cleanUndefined(merged.tenant);\n cleanUndefined(merged.implementation);\n cleanUndefined(merged.widget);\n\n return merged;\n};\n\nconst getLongestExpirationDate = (store: Store): string => {\n const expirationDates = Object.entries(store).reduce<string[]>((acc, storeEntry) => {\n const [_, container] = storeEntry;\n Object.entries(container).forEach((containerEntry) => {\n const [_, { expiration }] = containerEntry;\n if (expiration) acc.push(expiration);\n });\n return acc;\n }, []);\n\n return (\n expirationDates\n .slice()\n .sort((a, b) => new Date(b).valueOf() - new Date(a).valueOf())\n .shift() || createExpirationDate()\n );\n};\n\nconst createStorageKeys = (\n container: Container\n): [tenant: string, implementation: string, widget: string] => {\n const {\n name: widgetName,\n implementation: { name: implementationName, tenant: tenantName },\n } = <Widget>container.get('$widget');\n\n return [\n `humany_${tenantName}`,\n `humany_${hash(tenantName + implementationName)}`,\n `humany_${hash(tenantName + implementationName + widgetName)}`,\n ];\n};\n\nconst getCookie = <Type>(cookieName: string): Type | undefined => {\n const regExp = new RegExp(`(?:^|;)\\\\s?${cookieName}=(.*?)(?:;|$)`, 'i');\n const cookie = document.cookie.match(regExp);\n const value = cookie && cookie[1] && JSON.parse(cookie[1]);\n\n return value || undefined;\n};\n\nconst setCookie = (cookieName: string, value: any, expires: string) => {\n const cookie = `${cookieName}=${JSON.stringify(value).trim()}`;\n const expiration = `expires=${new Date(expires).toUTCString()}`;\n const path = 'path=/';\n const options = 'SameSite=None;Secure'\n return (document.cookie = `${cookie}; ${expiration}; ${path}; ${options}`);\n};\n\nconst getCookieStore = (container: Container): Store => {\n const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);\n const tenant = getCookie<StorageContainer>(tenantKey) || {};\n const implementation = getCookie<StorageContainer>(implementationKey) || {};\n const widget = getCookie<StorageContainer>(widgetKey) || {};\n\n return {\n tenant,\n implementation,\n widget,\n };\n};\n\nconst setCookieStore = (container: Container, store: Store): void => {\n const current = getCookieStore(container);\n const merged = mergeAndClean(current, store);\n\n const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);\n const { tenant, implementation, widget } = merged;\n const expirationDate = getLongestExpirationDate(store);\n const deleteDate = createExpirationDate({ days: -1 });\n\n setCookie(tenantKey, tenant, hasEntries(tenant) ? expirationDate : deleteDate);\n setCookie(\n implementationKey,\n implementation,\n hasEntries(implementation) ? expirationDate : deleteDate\n );\n setCookie(widgetKey, widget, hasEntries(widget) ? expirationDate : deleteDate);\n};\n\nconst getApplicationStore = (container: Container, storage: Storage): Store => {\n const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);\n const tenant = storage.getItem(tenantKey) || '{}';\n const implementation = storage.getItem(implementationKey) || '{}';\n const widget = storage.getItem(widgetKey) || '{}';\n\n return {\n tenant: JSON.parse(tenant),\n implementation: JSON.parse(implementation),\n widget: JSON.parse(widget),\n };\n};\n\nconst setApplicationStore = (\n container: Container,\n applicationStorage: Storage,\n store: Store\n): void => {\n const current = getApplicationStore(container, applicationStorage);\n const merged = mergeAndClean(current, store);\n\n const [tenantKey, implementationKey, widgetKey] = createStorageKeys(container);\n const { tenant, implementation, widget } = merged;\n\n hasEntries(tenant)\n ? applicationStorage.setItem(tenantKey, JSON.stringify(tenant))\n : applicationStorage.removeItem(tenantKey);\n hasEntries(implementation)\n ? applicationStorage.setItem(implementationKey, JSON.stringify(implementation))\n : applicationStorage.removeItem(implementationKey);\n hasEntries(widget)\n ? applicationStorage.setItem(widgetKey, JSON.stringify(widget))\n : applicationStorage.removeItem(widgetKey);\n};\n\nexport const createEmptyStore = (): Store => ({ tenant: {}, implementation: {}, widget: {} });\n\nexport const isExpired = (isoDateString?: string) => {\n if (!isoDateString) return false;\n return !!isoDateString && new Date() > new Date(isoDateString);\n};\n\nexport const getValue = <Type>(store: Store, key: string): Type | undefined => {\n const storedValue = store.widget[key] || store.implementation[key] || store.tenant[key];\n return storedValue?.value;\n};\n\nexport const createValue = (\n value: any,\n category: StorageCategory,\n duration?: Duration | string\n): StoredValue => {\n if (duration) {\n return {\n value,\n category,\n expiration: typeof duration === 'object' ? createExpirationDate(duration) : duration,\n };\n }\n return {\n value,\n category,\n };\n};\n\nexport const processStore = (store: Store, policy?: StorageCategory[]): Store => {\n const clone = deepClone(store);\n\n Object.entries(clone).forEach(([_, storageContainer]) => {\n Object.entries(storageContainer).forEach(([key, storedValue]) => {\n const { expiration, category } = storedValue;\n\n if (isExpired(expiration) || isNotAllowed(policy, category))\n storageContainer[key] = createValue(undefined, category, expiration);\n });\n });\n\n return clone;\n};\n\n/**\n * @param category Storage Category.\n * @param policy Current Storage Policy.\n * @returns true if not allowed, false if allowed.\n */\nexport const isNotAllowedAsync = (\n container: Container,\n category?: StorageCategory\n): Promise<boolean> => {\n return readStorage<StorageCategory[]>(container, 'storagePolicy', StorageMedium.Cookie).then(\n (policy = [StorageCategory.Necessary]) => !!category && policy.indexOf(category) === -1\n );\n};\n\n/**\n * @param category Storage Category.\n * @param policy Current Storage Policy.\n * @returns true if not allowed, false if allowed.\n */\nexport const isNotAllowed = (\n policy: StorageCategory[] = [StorageCategory.Necessary],\n category?: StorageCategory\n): boolean => {\n return !!category && policy.indexOf(category) === -1;\n};\n\n/**\n * Processes storage and removes items if they are expired or if\n * the storage policy is defined and the category of the stored\n * value is not allowed.\n * @param container Widget Container\n */\nexport const processStorage = (container: Container): void => {\n const cookieStore = getCookieStore(container);\n const localStore = getApplicationStore(container, window.localStorage);\n const sessionStore = getApplicationStore(container, sessionStorage);\n const policy = getValue<StorageCategory[]>(cookieStore, 'storagePolicy');\n\n const [processedCookieStore, processedLocalStore, processedSessionStore] = [\n cookieStore,\n localStore,\n sessionStore,\n ].map((store) => processStore(store, policy));\n\n setCookieStore(container, processedCookieStore);\n setApplicationStore(container, window.localStorage, processedLocalStore);\n setApplicationStore(container, window.sessionStorage, processedSessionStore);\n};\n\n/**\n * Creates an expiration date string with the passed options.\n * @param options Duration options.\n * @returns ISO formatted date string.\n */\nexport const createExpirationDate = (options: Duration = { days: 30 }): string => {\n const { days = 0, hours = 0, minutes = 0, seconds = 0 } = options;\n const date = new Date();\n date.setTime(date.getTime() + hours * 60 * 60 * 1000);\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n date.setTime(date.getTime() + minutes * 60 * 1000);\n date.setTime(date.getTime() + seconds * 1000);\n return date.toISOString();\n};\n\nexport const getCookieStoreAsync = (container: Container): Promise<Store> => {\n return lock(document)(() => getCookieStore(container));\n};\n\nexport const setCookieStoreAsync = (container: Container, store: Store): Promise<any> => {\n return lock(document)(() => setCookieStore(container, store));\n};\n\nexport const getApplicationStoreAsync = (\n container: Container,\n type: StorageMedium.Local | StorageMedium.Session\n): Promise<Store> => {\n const storage = type === StorageMedium.Local ? window.localStorage : window.sessionStorage;\n return lock(storage)(() => getApplicationStore(container, storage));\n};\n\nexport const setApplicationStoreAsync = (\n container: Container,\n type: StorageMedium.Local | StorageMedium.Session,\n store: Store\n): Promise<void> => {\n const storage = type === StorageMedium.Local ? window.localStorage : window.sessionStorage;\n return lock(storage)(() => setApplicationStore(container, storage, store));\n};\n","import { lock, Logger } from '@telia-ace/widget-utilities';\nimport { StorageCategory } from '.';\nimport { StorageScope, Store } from './types';\nimport { createExpirationDate, createValue, getValue, processStore } from './utils';\n\ntype LegacyOptions = {\n scope?: StorageScope;\n expiration?: Date;\n};\n\ninterface LegacyMedium {\n setItem(key: string, value: any, options?: LegacyOptions): Promise<void>;\n getItem(key: string): Promise<any>;\n removeItem(key: string): Promise<void>;\n clear(): Promise<void>;\n}\n\nexport class LegacyStorage implements LegacyMedium {\n private memory: Store = {\n tenant: {},\n implementation: {},\n widget: {},\n };\n async setItem(key: string, value: any, options: LegacyOptions = {}): Promise<void> {\n return lock(this)(() => {\n const processedStore = processStore(this.memory, [StorageCategory.Necessary]);\n const { scope = StorageScope.Tenant, expiration } = options;\n\n processedStore[scope][key] = createValue(\n value,\n StorageCategory.Necessary,\n expiration?.toISOString() || createExpirationDate()\n );\n this.memory = processedStore;\n\n if (process.env.NODE_ENV !== 'production') {\n Logger.warn(\n `StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value stored temporarily in memory.\n Key: ${key}\n Value: ${JSON.stringify(value)}\n Options: ${JSON.stringify(options)}\n Memory: ${JSON.stringify(processedStore)}`\n );\n }\n });\n }\n async getItem(key: string): Promise<any> {\n return lock(this)(() => {\n const processedStore = processStore(this.memory, [StorageCategory.Necessary]);\n\n if (process.env.NODE_ENV !== 'production') {\n Logger.warn(\n `StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value fetched from legacy memory storage.\n Key: ${key}\n Memory: ${JSON.stringify(processedStore)}`\n );\n }\n\n const value = getValue(processedStore, key);\n this.memory = processedStore;\n\n return value;\n });\n }\n async removeItem(key: string): Promise<void> {\n return lock(this)(() => {\n const processedStore = processStore(this.memory, [StorageCategory.Necessary]);\n\n delete processedStore.tenant[key];\n delete processedStore.implementation[key];\n delete processedStore.widget[key];\n this.memory = processedStore;\n\n if (process.env.NODE_ENV !== 'production') {\n Logger.warn(\n `StorageProvider: StorageProvider is deprecated, use createStorageWriter and readStorage instead, value removed from memory.\n Key: ${key}\n Memory: ${JSON.stringify(processedStore)}`\n );\n }\n });\n }\n async clear(): Promise<void> {\n return Promise.resolve();\n }\n}\n\nexport default class LegacyStorageProvider {\n cookies: LegacyStorage;\n session: LegacyStorage;\n local: LegacyStorage;\n constructor() {\n this.cookies = new LegacyStorage();\n this.session = new LegacyStorage();\n this.local = new LegacyStorage();\n }\n}\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';\nimport { createConfigurationApi } from '@webprovisions/platform';\nimport { createStorageWriter } from './storage';\nimport { StorageCategory, StorageConfigurationOptions, StorageMedium, StorageScope } from './types';\nimport { processStorage } from './utils';\n\nexport default createConfigurationApi((builder) => {\n builder.createCommand('storage', (context) => (options: StorageConfigurationOptions = {}) => {\n const { consent } = options;\n if (typeof consent !== 'undefined') {\n if (\n typeof consent !== 'number' &&\n typeof consent !== 'string' &&\n !Array.isArray(consent)\n ) {\n if (process.env.NODE_ENV !== 'production') {\n Logger.warn(\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.\n Passed consent: ${JSON.stringify(consent)}`\n );\n }\n return;\n }\n\n if (\n Array.isArray(consent) &&\n !(consent as string[]).every(\n (c: any) => typeof c === 'number' || typeof c === 'string'\n )\n ) {\n if (process.env.NODE_ENV !== 'production') {\n Logger.warn(\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.\n Passed consent: ${JSON.stringify(consent)}`\n );\n }\n return;\n }\n\n const policy: StorageCategory[] = [\n StorageCategory.Necessary,\n StorageCategory.Functional,\n StorageCategory.Analytical,\n StorageCategory.Marketing,\n ].filter((category, index, array) => {\n if (typeof consent === 'number') {\n // Passed consent is a category level (number)\n // Include the passed category level and all categories below it\n return consent > index;\n } else if (typeof consent === 'string') {\n // Passed consent is a category (string)\n // Include the passed category and all categories below its level\n return array.indexOf(consent) + 1 > index;\n } else if (Array.isArray(consent)) {\n // Passed consent is an array with category levels (number), categories (string) or both\n // Include all categories in passed array\n return (\n consent.findIndex((c: number | StorageCategory) => {\n return c === index + 1 || c === category;\n }) > -1\n );\n } else {\n return true;\n }\n });\n\n if (policy.indexOf(StorageCategory.Necessary) === -1) {\n if (process.env.NODE_ENV !== 'production') {\n Logger.warn(\n `storagePolicyConfigurationApi: passed consent does not include category: '${\n StorageCategory.Necessary\n }'. Consent has to atleast include the '${\n StorageCategory.Necessary\n }' category.\n Passed consent: ${JSON.stringify(consent)}`\n );\n }\n policy.unshift(StorageCategory.Necessary);\n }\n\n return createStorageWriter(\n context.container,\n 'storagePolicy',\n StorageCategory.Necessary,\n {\n medium: StorageMedium.Cookie,\n scope: StorageScope.Tenant,\n duration: { days: 365 },\n }\n )\n .then((write) => write(policy))\n .then(() => {\n processStorage(context.container);\n\n context.events.dispatch('storage:policy-changed', policy);\n });\n }\n });\n});\n"],"names":["StorageMedium","StorageScope","StorageCategory","createStorageWriter","container","key","category","options","isNotAllowedAsync","notAllowed","Logger","value","processStorage","scope","medium","duration","store","createEmptyStore","createValue","setCookieStoreAsync","setApplicationStoreAsync","readStorage","getCookieStoreAsync","getValue","getApplicationStoreAsync","hasEntries","object","_","cleanUndefined","mergeAndClean","target","source","merged","__spreadValues","getLongestExpirationDate","acc","storeEntry","containerEntry","expiration","a","b","createExpirationDate","createStorageKeys","widgetName","implementationName","tenantName","hash","getCookie","cookieName","regExp","cookie","setCookie","expires","path","getCookieStore","tenantKey","implementationKey","widgetKey","tenant","implementation","widget","setCookieStore","current","expirationDate","deleteDate","getApplicationStore","storage","setApplicationStore","applicationStorage","isExpired","isoDateString","storedValue","processStore","policy","clone","deepClone","storageContainer","isNotAllowed","cookieStore","localStore","sessionStore","processedCookieStore","processedLocalStore","processedSessionStore","days","hours","minutes","seconds","date","lock","type","LegacyStorage","__publicField","_0","_1","__async","processedStore","LegacyStorageProvider","this","ConfigurationScope","ConfigurationStage","fallbackIfUndefined","fallback","ConfigurationApiBuilder","part","name","factoryOrOptions","factory","_this","descriptor","sections","ns","i","last","createConfigurationApi","builder","storagePolicyConfigurationApi","context","consent","c","index","array","write"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- export { default as LegacyStorageProvider, LegacyStorage } from './legacy-storage-provider';
2
- export { createStorageWriter, readStorage } from './storage';
3
- export { default as storagePolicyConfigurationApi } from './storage-policy-configuration-api';
4
- export { StorageCategory, StorageMedium, StorageScope } from './types';
5
- export type { Duration, StorageWriter, StorageWriterOptions } from './types';
1
+ export { default as LegacyStorageProvider, LegacyStorage } from './legacy-storage-provider';
2
+ export { createStorageWriter, readStorage } from './storage';
3
+ export { default as storagePolicyConfigurationApi } from './storage-policy-configuration-api';
4
+ export { StorageCategory, StorageMedium, StorageScope } from './types';
5
+ export type { Duration, StorageWriter, StorageWriterOptions } from './types';
@@ -1,25 +1,25 @@
1
- import { StorageScope } from './types';
2
- declare type LegacyOptions = {
3
- scope?: StorageScope;
4
- expiration?: Date;
5
- };
6
- interface LegacyMedium {
7
- setItem(key: string, value: any, options?: LegacyOptions): Promise<void>;
8
- getItem(key: string): Promise<any>;
9
- removeItem(key: string): Promise<void>;
10
- clear(): Promise<void>;
11
- }
12
- export declare class LegacyStorage implements LegacyMedium {
13
- private memory;
14
- setItem(key: string, value: any, options?: LegacyOptions): Promise<void>;
15
- getItem(key: string): Promise<any>;
16
- removeItem(key: string): Promise<void>;
17
- clear(): Promise<void>;
18
- }
19
- export default class LegacyStorageProvider {
20
- cookies: LegacyStorage;
21
- session: LegacyStorage;
22
- local: LegacyStorage;
23
- constructor();
24
- }
25
- export {};
1
+ import { StorageScope } from './types';
2
+ declare type LegacyOptions = {
3
+ scope?: StorageScope;
4
+ expiration?: Date;
5
+ };
6
+ interface LegacyMedium {
7
+ setItem(key: string, value: any, options?: LegacyOptions): Promise<void>;
8
+ getItem(key: string): Promise<any>;
9
+ removeItem(key: string): Promise<void>;
10
+ clear(): Promise<void>;
11
+ }
12
+ export declare class LegacyStorage implements LegacyMedium {
13
+ private memory;
14
+ setItem(key: string, value: any, options?: LegacyOptions): Promise<void>;
15
+ getItem(key: string): Promise<any>;
16
+ removeItem(key: string): Promise<void>;
17
+ clear(): Promise<void>;
18
+ }
19
+ export default class LegacyStorageProvider {
20
+ cookies: LegacyStorage;
21
+ session: LegacyStorage;
22
+ local: LegacyStorage;
23
+ constructor();
24
+ }
25
+ export {};
@@ -1,2 +1,2 @@
1
- declare const _default: import("@webprovisions/platform").ConfigurationApiDefinition;
2
- export default _default;
1
+ declare const _default: import("@webprovisions/platform").ConfigurationApiDefinition;
2
+ export default _default;
@@ -1,19 +1,19 @@
1
- import { Container } from '@webprovisions/platform';
2
- import { StorageCategory, StorageMedium, StorageWriter, StorageWriterOptions } from './types';
3
- /**
4
- * Creates a writer to be used to write to cookie, local or session storage.
5
- * @param container Widget Container.
6
- * @param key Key to use when writing.
7
- * @param category StorageCategory to use when writing.
8
- * @param options StorageWriterOptions to use when writing default {scope: StorageScope.Widget, medium = StorageMedium.Session, duration = infinite }.
9
- * @returns a function to be used to write a value to the storage using given settings.
10
- */
11
- export declare const createStorageWriter: (container: Container, key: string, category: StorageCategory, options?: StorageWriterOptions) => Promise<StorageWriter>;
12
- /**
13
- * Read the widget cookie, local or session storage.
14
- * @param container Widget Container.
15
- * @param key Key to read.
16
- * @param medium Storage medium to read from (default: session).
17
- * @returns the value stored with passed key.
18
- */
19
- export declare const readStorage: <Type>(container: Container, key: string, medium?: StorageMedium) => Promise<Type | undefined>;
1
+ import { Container } from '@webprovisions/platform';
2
+ import { StorageCategory, StorageMedium, StorageWriter, StorageWriterOptions } from './types';
3
+ /**
4
+ * Creates a writer to be used to write to cookie, local or session storage.
5
+ * @param container Widget Container.
6
+ * @param key Key to use when writing.
7
+ * @param category StorageCategory to use when writing.
8
+ * @param options StorageWriterOptions to use when writing default {scope: StorageScope.Widget, medium = StorageMedium.Session, duration = infinite }.
9
+ * @returns a function to be used to write a value to the storage using given settings.
10
+ */
11
+ export declare const createStorageWriter: (container: Container, key: string, category: StorageCategory, options?: StorageWriterOptions) => Promise<StorageWriter>;
12
+ /**
13
+ * Read the widget cookie, local or session storage.
14
+ * @param container Widget Container.
15
+ * @param key Key to read.
16
+ * @param medium Storage medium to read from (default: session).
17
+ * @returns the value stored with passed key.
18
+ */
19
+ export declare const readStorage: <Type>(container: Container, key: string, medium?: StorageMedium) => Promise<Type | undefined>;
@@ -1,45 +1,45 @@
1
- export declare enum StorageMedium {
2
- Cookie = "cookie",
3
- Local = "local",
4
- Session = "session"
5
- }
6
- export declare enum StorageScope {
7
- Tenant = "tenant",
8
- Implementation = "implementation",
9
- Widget = "widget"
10
- }
11
- export declare type Store = {
12
- tenant: StorageContainer;
13
- implementation: StorageContainer;
14
- widget: StorageContainer;
15
- };
16
- export declare type StorageContainer = {
17
- [key: string]: StoredValue;
18
- };
19
- export declare type StoredValue = {
20
- value: any;
21
- expiration?: string;
22
- category: StorageCategory;
23
- };
24
- export declare enum StorageCategory {
25
- Necessary = "necessary",
26
- Functional = "functional",
27
- Analytical = "analytical",
28
- Marketing = "marketing"
29
- }
30
- export declare type StorageWriter = (value?: any) => Promise<void>;
31
- export declare type StorageConfigurationOptions = {
32
- consent?: StorageConsent;
33
- };
34
- export declare type StorageConsent = number | number[] | StorageCategory | StorageCategory[];
35
- export declare type Duration = {
36
- days?: number;
37
- hours?: number;
38
- minutes?: number;
39
- seconds?: number;
40
- };
41
- export declare type StorageWriterOptions = {
42
- scope?: StorageScope;
43
- duration?: Duration;
44
- medium?: StorageMedium;
45
- };
1
+ export declare enum StorageMedium {
2
+ Cookie = "cookie",
3
+ Local = "local",
4
+ Session = "session"
5
+ }
6
+ export declare enum StorageScope {
7
+ Tenant = "tenant",
8
+ Implementation = "implementation",
9
+ Widget = "widget"
10
+ }
11
+ export declare type Store = {
12
+ tenant: StorageContainer;
13
+ implementation: StorageContainer;
14
+ widget: StorageContainer;
15
+ };
16
+ export declare type StorageContainer = {
17
+ [key: string]: StoredValue;
18
+ };
19
+ export declare type StoredValue = {
20
+ value: any;
21
+ expiration?: string;
22
+ category: StorageCategory;
23
+ };
24
+ export declare enum StorageCategory {
25
+ Necessary = "necessary",
26
+ Functional = "functional",
27
+ Analytical = "analytical",
28
+ Marketing = "marketing"
29
+ }
30
+ export declare type StorageWriter = (value?: any) => Promise<void>;
31
+ export declare type StorageConfigurationOptions = {
32
+ consent?: StorageConsent;
33
+ };
34
+ export declare type StorageConsent = number | number[] | StorageCategory | StorageCategory[];
35
+ export declare type Duration = {
36
+ days?: number;
37
+ hours?: number;
38
+ minutes?: number;
39
+ seconds?: number;
40
+ };
41
+ export declare type StorageWriterOptions = {
42
+ scope?: StorageScope;
43
+ duration?: Duration;
44
+ medium?: StorageMedium;
45
+ };
@@ -1,36 +1,36 @@
1
- import { Container } from '@webprovisions/platform';
2
- import { Duration, StorageCategory, StorageMedium, Store, StoredValue } from './types';
3
- export declare const createEmptyStore: () => Store;
4
- export declare const isExpired: (isoDateString?: string | undefined) => boolean;
5
- export declare const getValue: <Type>(store: Store, key: string) => Type | undefined;
6
- export declare const createValue: (value: any, category: StorageCategory, duration?: string | Duration | undefined) => StoredValue;
7
- export declare const processStore: (store: Store, policy?: StorageCategory[] | undefined) => Store;
8
- /**
9
- * @param category Storage Category.
10
- * @param policy Current Storage Policy.
11
- * @returns true if not allowed, false if allowed.
12
- */
13
- export declare const isNotAllowedAsync: (container: Container, category?: StorageCategory | undefined) => Promise<boolean>;
14
- /**
15
- * @param category Storage Category.
16
- * @param policy Current Storage Policy.
17
- * @returns true if not allowed, false if allowed.
18
- */
19
- export declare const isNotAllowed: (policy?: StorageCategory[], category?: StorageCategory | undefined) => boolean;
20
- /**
21
- * Processes storage and removes items if they are expired or if
22
- * the storage policy is defined and the category of the stored
23
- * value is not allowed.
24
- * @param container Widget Container
25
- */
26
- export declare const processStorage: (container: Container) => void;
27
- /**
28
- * Creates an expiration date string with the passed options.
29
- * @param options Duration options.
30
- * @returns ISO formatted date string.
31
- */
32
- export declare const createExpirationDate: (options?: Duration) => string;
33
- export declare const getCookieStoreAsync: (container: Container) => Promise<Store>;
34
- export declare const setCookieStoreAsync: (container: Container, store: Store) => Promise<any>;
35
- export declare const getApplicationStoreAsync: (container: Container, type: StorageMedium.Local | StorageMedium.Session) => Promise<Store>;
36
- export declare const setApplicationStoreAsync: (container: Container, type: StorageMedium.Local | StorageMedium.Session, store: Store) => Promise<void>;
1
+ import { Container } from '@webprovisions/platform';
2
+ import { Duration, StorageCategory, StorageMedium, Store, StoredValue } from './types';
3
+ export declare const createEmptyStore: () => Store;
4
+ export declare const isExpired: (isoDateString?: string) => boolean;
5
+ export declare const getValue: <Type>(store: Store, key: string) => Type | undefined;
6
+ export declare const createValue: (value: any, category: StorageCategory, duration?: Duration | string) => StoredValue;
7
+ export declare const processStore: (store: Store, policy?: StorageCategory[]) => Store;
8
+ /**
9
+ * @param category Storage Category.
10
+ * @param policy Current Storage Policy.
11
+ * @returns true if not allowed, false if allowed.
12
+ */
13
+ export declare const isNotAllowedAsync: (container: Container, category?: StorageCategory) => Promise<boolean>;
14
+ /**
15
+ * @param category Storage Category.
16
+ * @param policy Current Storage Policy.
17
+ * @returns true if not allowed, false if allowed.
18
+ */
19
+ export declare const isNotAllowed: (policy?: StorageCategory[], category?: StorageCategory) => boolean;
20
+ /**
21
+ * Processes storage and removes items if they are expired or if
22
+ * the storage policy is defined and the category of the stored
23
+ * value is not allowed.
24
+ * @param container Widget Container
25
+ */
26
+ export declare const processStorage: (container: Container) => void;
27
+ /**
28
+ * Creates an expiration date string with the passed options.
29
+ * @param options Duration options.
30
+ * @returns ISO formatted date string.
31
+ */
32
+ export declare const createExpirationDate: (options?: Duration) => string;
33
+ export declare const getCookieStoreAsync: (container: Container) => Promise<Store>;
34
+ export declare const setCookieStoreAsync: (container: Container, store: Store) => Promise<any>;
35
+ export declare const getApplicationStoreAsync: (container: Container, type: StorageMedium.Local | StorageMedium.Session) => Promise<Store>;
36
+ export declare const setApplicationStoreAsync: (container: Container, type: StorageMedium.Local | StorageMedium.Session, store: Store) => Promise<void>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telia-ace/widget-services",
3
- "version": "1.0.14",
3
+ "version": "1.0.16-next.0",
4
4
  "description": "Services for ACE Widgets.",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "Telia Company AB",
@@ -8,6 +8,7 @@
8
8
  "telia"
9
9
  ],
10
10
  "main": "dist/index.js",
11
+ "sourceMain": "src/index.ts",
11
12
  "type": "module",
12
13
  "types": "dist/index.d.ts",
13
14
  "files": [
@@ -25,10 +26,10 @@
25
26
  },
26
27
  "sideEffects": false,
27
28
  "dependencies": {
28
- "@telia-ace/widget-utilities": "^1.0.3"
29
+ "@telia-ace/widget-utilities": "^1.0.4"
29
30
  },
30
31
  "devDependencies": {
31
32
  "@webprovisions/platform": "^1.1.2"
32
33
  },
33
- "gitHead": "e9e22ff408d32106cc60212d14fb1ff63dd5c1e1"
34
+ "gitHead": "e783dc2d2efafddafb638fb68d0b6842a204ca59"
34
35
  }