@esri/solutions-components 0.7.52 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (191) hide show
  1. package/dist/assets/t9n/consent-manager/resources.json +12 -0
  2. package/dist/assets/t9n/consent-manager/resources_en.json +12 -0
  3. package/dist/cjs/{_commonjsHelpers-384729db.js → _commonjsHelpers-480c2e77.js} +16 -0
  4. package/dist/cjs/basemap-gallery_7.cjs.entry.js +3 -3
  5. package/dist/cjs/buffer-tools_3.cjs.entry.js +3 -3
  6. package/dist/cjs/calcite-action-pad_2.cjs.entry.js +3 -3
  7. package/dist/cjs/calcite-alert_4.cjs.entry.js +4 -4
  8. package/dist/cjs/calcite-color-picker-hex-input_2.cjs.entry.js +2 -2
  9. package/dist/cjs/calcite-color-picker.cjs.entry.js +2 -2
  10. package/dist/cjs/calcite-combobox_5.cjs.entry.js +3 -3
  11. package/dist/cjs/calcite-flow_5.cjs.entry.js +4 -4
  12. package/dist/cjs/calcite-input-date-picker_3.cjs.entry.js +5 -5
  13. package/dist/cjs/calcite-shell-panel_14.cjs.entry.js +6 -6
  14. package/dist/cjs/card-manager_3.cjs.entry.js +6 -6
  15. package/dist/cjs/{common-4cd3537b.js → common-e6e9f7d6.js} +1 -1
  16. package/dist/cjs/consent-manager.cjs.entry.js +1769 -0
  17. package/dist/cjs/crowdsource-manager.cjs.entry.js +3 -3
  18. package/dist/cjs/crowdsource-reporter.cjs.entry.js +3 -3
  19. package/dist/cjs/{downloadUtils-82bc9a04.js → downloadUtils-c2bd7c80.js} +6 -6
  20. package/dist/cjs/{esri-loader-a91c0ec1.js → esri-loader-ce6c3d3d.js} +1 -1
  21. package/dist/cjs/{helpers-e328869d.js → helpers-81779c18.js} +1 -1
  22. package/dist/cjs/{html2canvas-34208bbf.js → html2canvas-27a2547c.js} +1 -1
  23. package/dist/cjs/{index.es-79d8773c.js → index.es-22b3d1a2.js} +6 -6
  24. package/dist/cjs/instant-apps-ckeditor-wrapper_3.cjs.entry.js +6 -6
  25. package/dist/cjs/instant-apps-control-panel.cjs.entry.js +3 -3
  26. package/dist/cjs/instant-apps-export.cjs.entry.js +5 -5
  27. package/dist/cjs/instant-apps-header.cjs.entry.js +3 -3
  28. package/dist/cjs/instant-apps-interactive-legend-classic.cjs.entry.js +4 -4
  29. package/dist/cjs/instant-apps-interactive-legend-count_2.cjs.entry.js +4 -4
  30. package/dist/cjs/instant-apps-interactive-legend-group-legend-element-caption.cjs.entry.js +4 -4
  31. package/dist/cjs/instant-apps-interactive-legend-group-legend-element_5.cjs.entry.js +4 -4
  32. package/dist/cjs/instant-apps-interactive-legend.cjs.entry.js +6 -6
  33. package/dist/cjs/instant-apps-keyboard-shortcuts.cjs.entry.js +5 -5
  34. package/dist/cjs/instant-apps-language-switcher.cjs.entry.js +7 -7
  35. package/dist/cjs/instant-apps-language-translator.cjs.entry.js +7 -7
  36. package/dist/cjs/instant-apps-measurement.cjs.entry.js +5 -5
  37. package/dist/cjs/instant-apps-popover.cjs.entry.js +5 -5
  38. package/dist/cjs/instant-apps-scoreboard.cjs.entry.js +5 -5
  39. package/dist/cjs/instant-apps-splash.cjs.entry.js +5 -5
  40. package/dist/cjs/{languageSwitcher-7de41e17.js → languageSwitcher-4822684b.js} +1 -1
  41. package/dist/cjs/{languageUtil-a3b464f8.js → languageUtil-9bd00bad.js} +1 -1
  42. package/dist/cjs/layout-manager.cjs.entry.js +3 -3
  43. package/dist/cjs/{loadModules-51c30ab9.js → loadModules-69fc5b98.js} +1 -1
  44. package/dist/cjs/loader.cjs.js +1 -1
  45. package/dist/cjs/{locale-8c42ba7a.js → locale-3d0a4bc2.js} +1 -1
  46. package/dist/cjs/{locale-dab3f46a.js → locale-3e33f44c.js} +2 -2
  47. package/dist/cjs/map-select-tools_3.cjs.entry.js +6 -6
  48. package/dist/cjs/{popupUtils-824d2f7c.js → popupUtils-6be3588c.js} +1 -1
  49. package/dist/cjs/public-notification.cjs.entry.js +6 -6
  50. package/dist/cjs/{purify-f8c3e427.js → purify-4791ecca.js} +1 -1
  51. package/dist/cjs/{resources-adfcb1ec.js → resources-02142b99.js} +1 -1
  52. package/dist/cjs/{restHelpersGet-e0737480.js → restHelpersGet-2ed729ab.js} +1 -1
  53. package/dist/cjs/solution-configuration.cjs.entry.js +6 -6
  54. package/dist/cjs/solution-contents_3.cjs.entry.js +7 -7
  55. package/dist/cjs/{solution-resource-abec7452.js → solution-resource-97186521.js} +1 -1
  56. package/dist/cjs/{solution-store-2f7fbcc5.js → solution-store-67bcf552.js} +2 -2
  57. package/dist/cjs/solutions-components.cjs.js +1 -1
  58. package/dist/cjs/spatial-ref.cjs.entry.js +5 -5
  59. package/dist/cjs/{utils-a137dc1a.js → utils-ea7a5a63.js} +1 -1
  60. package/dist/collection/collection-manifest.json +1 -0
  61. package/dist/collection/components/consent-manager/consent-manager.css +67 -0
  62. package/dist/collection/components/consent-manager/consent-manager.js +278 -0
  63. package/dist/collection/components/consent-manager/test/consent-manager.e2e.js +29 -0
  64. package/dist/collection/components/consent-manager/test/consent-manager.spec.js +37 -0
  65. package/dist/collection/utils/interfaces.ts +4 -0
  66. package/dist/components/_commonjsHelpers.js +16 -1
  67. package/dist/components/consent-manager.d.ts +11 -0
  68. package/dist/components/consent-manager.js +1844 -0
  69. package/dist/components/downloadUtils.js +1 -1
  70. package/dist/components/index.es.js +1 -1
  71. package/dist/esm/{_commonjsHelpers-d5f9d613.js → _commonjsHelpers-0f74c230.js} +16 -1
  72. package/dist/esm/basemap-gallery_7.entry.js +3 -3
  73. package/dist/esm/buffer-tools_3.entry.js +3 -3
  74. package/dist/esm/calcite-action-pad_2.entry.js +3 -3
  75. package/dist/esm/calcite-alert_4.entry.js +4 -4
  76. package/dist/esm/calcite-color-picker-hex-input_2.entry.js +2 -2
  77. package/dist/esm/calcite-color-picker.entry.js +2 -2
  78. package/dist/esm/calcite-combobox_5.entry.js +3 -3
  79. package/dist/esm/calcite-flow_5.entry.js +4 -4
  80. package/dist/esm/calcite-input-date-picker_3.entry.js +5 -5
  81. package/dist/esm/calcite-shell-panel_14.entry.js +6 -6
  82. package/dist/esm/card-manager_3.entry.js +6 -6
  83. package/dist/esm/{common-d04ccc0d.js → common-06bcfe81.js} +1 -1
  84. package/dist/esm/consent-manager.entry.js +1765 -0
  85. package/dist/esm/crowdsource-manager.entry.js +3 -3
  86. package/dist/esm/crowdsource-reporter.entry.js +3 -3
  87. package/dist/esm/{downloadUtils-3bab4b5f.js → downloadUtils-a6c0e25f.js} +6 -6
  88. package/dist/esm/{esri-loader-eda07632.js → esri-loader-1b324844.js} +1 -1
  89. package/dist/esm/{helpers-633917fe.js → helpers-aeddac74.js} +1 -1
  90. package/dist/esm/{html2canvas-a0a4df55.js → html2canvas-7f5bb1cc.js} +1 -1
  91. package/dist/esm/{index.es-be703f2b.js → index.es-b0a676ae.js} +6 -6
  92. package/dist/esm/instant-apps-ckeditor-wrapper_3.entry.js +6 -6
  93. package/dist/esm/instant-apps-control-panel.entry.js +3 -3
  94. package/dist/esm/instant-apps-export.entry.js +5 -5
  95. package/dist/esm/instant-apps-header.entry.js +3 -3
  96. package/dist/esm/instant-apps-interactive-legend-classic.entry.js +4 -4
  97. package/dist/esm/instant-apps-interactive-legend-count_2.entry.js +4 -4
  98. package/dist/esm/instant-apps-interactive-legend-group-legend-element-caption.entry.js +4 -4
  99. package/dist/esm/instant-apps-interactive-legend-group-legend-element_5.entry.js +4 -4
  100. package/dist/esm/instant-apps-interactive-legend.entry.js +6 -6
  101. package/dist/esm/instant-apps-keyboard-shortcuts.entry.js +5 -5
  102. package/dist/esm/instant-apps-language-switcher.entry.js +7 -7
  103. package/dist/esm/instant-apps-language-translator.entry.js +7 -7
  104. package/dist/esm/instant-apps-measurement.entry.js +5 -5
  105. package/dist/esm/instant-apps-popover.entry.js +5 -5
  106. package/dist/esm/instant-apps-scoreboard.entry.js +5 -5
  107. package/dist/esm/instant-apps-splash.entry.js +5 -5
  108. package/dist/esm/{languageSwitcher-62232826.js → languageSwitcher-4faa659f.js} +1 -1
  109. package/dist/esm/{languageUtil-8b54477c.js → languageUtil-dc3111c1.js} +1 -1
  110. package/dist/esm/layout-manager.entry.js +3 -3
  111. package/dist/esm/{loadModules-b677d6d7.js → loadModules-877bbb89.js} +1 -1
  112. package/dist/esm/loader.js +1 -1
  113. package/dist/esm/{locale-25a5ae3e.js → locale-bcbea4ef.js} +1 -1
  114. package/dist/esm/{locale-c7d9e9aa.js → locale-bd9034e1.js} +2 -2
  115. package/dist/esm/map-select-tools_3.entry.js +6 -6
  116. package/dist/esm/{popupUtils-23fe3c9f.js → popupUtils-af124b47.js} +1 -1
  117. package/dist/esm/public-notification.entry.js +6 -6
  118. package/dist/esm/{purify-c99d2ace.js → purify-dce4d86b.js} +1 -1
  119. package/dist/esm/{resources-79914606.js → resources-61b0cdad.js} +1 -1
  120. package/dist/esm/{restHelpersGet-af032ab2.js → restHelpersGet-2a85d395.js} +1 -1
  121. package/dist/esm/solution-configuration.entry.js +6 -6
  122. package/dist/esm/solution-contents_3.entry.js +7 -7
  123. package/dist/esm/{solution-resource-7b8d302d.js → solution-resource-77aa99c8.js} +1 -1
  124. package/dist/esm/{solution-store-01769bbf.js → solution-store-13ddaf1c.js} +2 -2
  125. package/dist/esm/solutions-components.js +1 -1
  126. package/dist/esm/spatial-ref.entry.js +5 -5
  127. package/dist/esm/{utils-b46c535b.js → utils-28d0a086.js} +1 -1
  128. package/dist/solutions-components/{p-54b7b859.entry.js → p-015a45e2.entry.js} +1 -1
  129. package/dist/solutions-components/{p-b756d01f.js → p-03037cf9.js} +1 -1
  130. package/dist/solutions-components/{p-2917dae0.entry.js → p-03a65871.entry.js} +1 -1
  131. package/dist/solutions-components/{p-86b21da1.js → p-07626c45.js} +1 -1
  132. package/dist/solutions-components/{p-14a48b14.js → p-090e0241.js} +1 -1
  133. package/dist/solutions-components/{p-531ccf84.entry.js → p-09312a7a.entry.js} +1 -1
  134. package/dist/solutions-components/{p-8595b4aa.entry.js → p-09801ba6.entry.js} +1 -1
  135. package/dist/solutions-components/{p-2f017ad2.entry.js → p-0d72a9ca.entry.js} +1 -1
  136. package/dist/solutions-components/p-0e5274bd.entry.js +6 -0
  137. package/dist/solutions-components/{p-bb94c414.entry.js → p-104f07e3.entry.js} +1 -1
  138. package/dist/solutions-components/{p-2592e0dd.js → p-188ed8b6.js} +1 -1
  139. package/dist/solutions-components/{p-16a82c20.js → p-192b6455.js} +1 -1
  140. package/dist/solutions-components/{p-7cfc4ba5.entry.js → p-1a7cef7b.entry.js} +1 -1
  141. package/dist/solutions-components/{p-463712ef.entry.js → p-1ac2125a.entry.js} +2 -2
  142. package/dist/solutions-components/{p-23fed594.entry.js → p-1bca71bf.entry.js} +1 -1
  143. package/dist/solutions-components/{p-ce4eed51.entry.js → p-220c46c2.entry.js} +1 -1
  144. package/dist/solutions-components/{p-c8ca9b8c.entry.js → p-299d1eaf.entry.js} +3 -3
  145. package/dist/solutions-components/{p-7cfce9ee.entry.js → p-2e7a9b9b.entry.js} +2 -2
  146. package/dist/solutions-components/{p-df468e80.entry.js → p-35c9256b.entry.js} +2 -2
  147. package/dist/solutions-components/{p-d561c970.entry.js → p-41bc9e9d.entry.js} +1 -1
  148. package/dist/solutions-components/{p-4742efa8.entry.js → p-5a28d60c.entry.js} +1 -1
  149. package/dist/solutions-components/{p-e46617d1.entry.js → p-5c7e3941.entry.js} +1 -1
  150. package/dist/solutions-components/{p-8dbf3319.entry.js → p-63466518.entry.js} +1 -1
  151. package/dist/solutions-components/{p-c05467fd.entry.js → p-6512dc44.entry.js} +1 -1
  152. package/dist/solutions-components/{p-0f66fd89.js → p-66bca043.js} +3 -3
  153. package/dist/solutions-components/{p-a8a0187d.js → p-70359c2b.js} +1 -1
  154. package/dist/solutions-components/{p-91d3732f.js → p-734d1dc5.js} +1 -1
  155. package/dist/solutions-components/{p-de459c0a.entry.js → p-7d6ee026.entry.js} +1 -1
  156. package/dist/solutions-components/{p-91710f0e.entry.js → p-8ad937b4.entry.js} +1 -1
  157. package/dist/solutions-components/{p-d918ec36.js → p-8ddc7786.js} +1 -1
  158. package/dist/solutions-components/p-8e9f96db.js +6 -0
  159. package/dist/solutions-components/{p-220ec0d1.js → p-94c634ba.js} +1 -1
  160. package/dist/solutions-components/{p-e2b0b3fa.entry.js → p-a2544cba.entry.js} +1 -1
  161. package/dist/solutions-components/{p-3cf84035.entry.js → p-a455c3f0.entry.js} +1 -1
  162. package/dist/solutions-components/{p-044cd52c.entry.js → p-a59078ee.entry.js} +1 -1
  163. package/dist/solutions-components/{p-701ed205.js → p-a7b7f8d1.js} +1 -1
  164. package/dist/solutions-components/{p-96104375.entry.js → p-aec4441b.entry.js} +1 -1
  165. package/dist/solutions-components/{p-d9995b7e.js → p-b41e2c4c.js} +3 -3
  166. package/dist/solutions-components/{p-d89fff3a.js → p-b503d01d.js} +1 -1
  167. package/dist/solutions-components/{p-cacd0307.entry.js → p-b80bc5b9.entry.js} +1 -1
  168. package/dist/solutions-components/{p-b04c9dc3.js → p-be8ef276.js} +1 -1
  169. package/dist/solutions-components/{p-6ac459d9.entry.js → p-c10b44ee.entry.js} +1 -1
  170. package/dist/solutions-components/{p-88cd4a24.entry.js → p-c302bbea.entry.js} +1 -1
  171. package/dist/solutions-components/{p-547b4dba.entry.js → p-c375881a.entry.js} +1 -1
  172. package/dist/solutions-components/{p-e05b02c5.entry.js → p-cd1ca3a6.entry.js} +1 -1
  173. package/dist/solutions-components/{p-3cce003d.js → p-cde1d741.js} +1 -1
  174. package/dist/solutions-components/{p-ccfdd890.entry.js → p-cfe890f6.entry.js} +1 -1
  175. package/dist/solutions-components/{p-a4bb0787.entry.js → p-df29f4c2.entry.js} +1 -1
  176. package/dist/solutions-components/p-e2d0ad1b.js +6 -0
  177. package/dist/solutions-components/{p-bf9e18d4.js → p-eab00813.js} +1 -1
  178. package/dist/solutions-components/{p-e8cd89c2.entry.js → p-efe1694a.entry.js} +1 -1
  179. package/dist/solutions-components/{p-697e9e11.entry.js → p-f3467807.entry.js} +1 -1
  180. package/dist/solutions-components/{p-3cb1de38.entry.js → p-f6be44e6.entry.js} +1 -1
  181. package/dist/solutions-components/{p-f23e6499.js → p-fb7a5f6e.js} +2 -2
  182. package/dist/solutions-components/{p-dbb6f1e2.entry.js → p-ff302d95.entry.js} +1 -1
  183. package/dist/solutions-components/solutions-components.esm.js +1 -1
  184. package/dist/solutions-components/utils/interfaces.ts +4 -0
  185. package/dist/types/components/consent-manager/consent-manager.d.ts +109 -0
  186. package/dist/types/components.d.ts +62 -2
  187. package/dist/types/preact.d.ts +4 -0
  188. package/dist/types/utils/interfaces.d.ts +3 -0
  189. package/package.json +5 -2
  190. package/dist/solutions-components/p-00f9774c.js +0 -6
  191. package/dist/solutions-components/p-e1a4994d.js +0 -6
@@ -0,0 +1,1765 @@
1
+ /*!
2
+ * Copyright 2022 Esri
3
+ * Licensed under the Apache License, Version 2.0
4
+ * http://www.apache.org/licenses/LICENSE-2.0
5
+ */
6
+ import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-164d485a.js';
7
+ import { g as getLocaleComponentStrings } from './locale-bcbea4ef.js';
8
+ import { g as getAugmentedNamespace, c as createCommonjsModule, a as commonjsGlobal, b as commonjsRequire } from './_commonjsHelpers-0f74c230.js';
9
+ import './esri-loader-1b324844.js';
10
+
11
+ const _nodeResolve_empty = {};
12
+
13
+ const _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({
14
+ __proto__: null,
15
+ 'default': _nodeResolve_empty
16
+ });
17
+
18
+ const require$$0 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1);
19
+
20
+ var core = createCommonjsModule(function (module, exports) {
21
+ (function (root, factory) {
22
+ {
23
+ // CommonJS
24
+ module.exports = factory();
25
+ }
26
+ }(commonjsGlobal, function () {
27
+
28
+ /*globals window, global, require*/
29
+
30
+ /**
31
+ * CryptoJS core components.
32
+ */
33
+ var CryptoJS = CryptoJS || (function (Math, undefined$1) {
34
+
35
+ var crypto;
36
+
37
+ // Native crypto from window (Browser)
38
+ if (typeof window !== 'undefined' && window.crypto) {
39
+ crypto = window.crypto;
40
+ }
41
+
42
+ // Native crypto in web worker (Browser)
43
+ if (typeof self !== 'undefined' && self.crypto) {
44
+ crypto = self.crypto;
45
+ }
46
+
47
+ // Native crypto from worker
48
+ if (typeof globalThis !== 'undefined' && globalThis.crypto) {
49
+ crypto = globalThis.crypto;
50
+ }
51
+
52
+ // Native (experimental IE 11) crypto from window (Browser)
53
+ if (!crypto && typeof window !== 'undefined' && window.msCrypto) {
54
+ crypto = window.msCrypto;
55
+ }
56
+
57
+ // Native crypto from global (NodeJS)
58
+ if (!crypto && typeof commonjsGlobal !== 'undefined' && commonjsGlobal.crypto) {
59
+ crypto = commonjsGlobal.crypto;
60
+ }
61
+
62
+ // Native crypto import via require (NodeJS)
63
+ if (!crypto && typeof commonjsRequire === 'function') {
64
+ try {
65
+ crypto = require$$0;
66
+ } catch (err) {}
67
+ }
68
+
69
+ /*
70
+ * Cryptographically secure pseudorandom number generator
71
+ *
72
+ * As Math.random() is cryptographically not safe to use
73
+ */
74
+ var cryptoSecureRandomInt = function () {
75
+ if (crypto) {
76
+ // Use getRandomValues method (Browser)
77
+ if (typeof crypto.getRandomValues === 'function') {
78
+ try {
79
+ return crypto.getRandomValues(new Uint32Array(1))[0];
80
+ } catch (err) {}
81
+ }
82
+
83
+ // Use randomBytes method (NodeJS)
84
+ if (typeof crypto.randomBytes === 'function') {
85
+ try {
86
+ return crypto.randomBytes(4).readInt32LE();
87
+ } catch (err) {}
88
+ }
89
+ }
90
+
91
+ throw new Error('Native crypto module could not be used to get secure random number.');
92
+ };
93
+
94
+ /*
95
+ * Local polyfill of Object.create
96
+
97
+ */
98
+ var create = Object.create || (function () {
99
+ function F() {}
100
+
101
+ return function (obj) {
102
+ var subtype;
103
+
104
+ F.prototype = obj;
105
+
106
+ subtype = new F();
107
+
108
+ F.prototype = null;
109
+
110
+ return subtype;
111
+ };
112
+ }());
113
+
114
+ /**
115
+ * CryptoJS namespace.
116
+ */
117
+ var C = {};
118
+
119
+ /**
120
+ * Library namespace.
121
+ */
122
+ var C_lib = C.lib = {};
123
+
124
+ /**
125
+ * Base object for prototypal inheritance.
126
+ */
127
+ var Base = C_lib.Base = (function () {
128
+
129
+
130
+ return {
131
+ /**
132
+ * Creates a new object that inherits from this object.
133
+ *
134
+ * @param {Object} overrides Properties to copy into the new object.
135
+ *
136
+ * @return {Object} The new object.
137
+ *
138
+ * @static
139
+ *
140
+ * @example
141
+ *
142
+ * var MyType = CryptoJS.lib.Base.extend({
143
+ * field: 'value',
144
+ *
145
+ * method: function () {
146
+ * }
147
+ * });
148
+ */
149
+ extend: function (overrides) {
150
+ // Spawn
151
+ var subtype = create(this);
152
+
153
+ // Augment
154
+ if (overrides) {
155
+ subtype.mixIn(overrides);
156
+ }
157
+
158
+ // Create default initializer
159
+ if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {
160
+ subtype.init = function () {
161
+ subtype.$super.init.apply(this, arguments);
162
+ };
163
+ }
164
+
165
+ // Initializer's prototype is the subtype object
166
+ subtype.init.prototype = subtype;
167
+
168
+ // Reference supertype
169
+ subtype.$super = this;
170
+
171
+ return subtype;
172
+ },
173
+
174
+ /**
175
+ * Extends this object and runs the init method.
176
+ * Arguments to create() will be passed to init().
177
+ *
178
+ * @return {Object} The new object.
179
+ *
180
+ * @static
181
+ *
182
+ * @example
183
+ *
184
+ * var instance = MyType.create();
185
+ */
186
+ create: function () {
187
+ var instance = this.extend();
188
+ instance.init.apply(instance, arguments);
189
+
190
+ return instance;
191
+ },
192
+
193
+ /**
194
+ * Initializes a newly created object.
195
+ * Override this method to add some logic when your objects are created.
196
+ *
197
+ * @example
198
+ *
199
+ * var MyType = CryptoJS.lib.Base.extend({
200
+ * init: function () {
201
+ * // ...
202
+ * }
203
+ * });
204
+ */
205
+ init: function () {
206
+ },
207
+
208
+ /**
209
+ * Copies properties into this object.
210
+ *
211
+ * @param {Object} properties The properties to mix in.
212
+ *
213
+ * @example
214
+ *
215
+ * MyType.mixIn({
216
+ * field: 'value'
217
+ * });
218
+ */
219
+ mixIn: function (properties) {
220
+ for (var propertyName in properties) {
221
+ if (properties.hasOwnProperty(propertyName)) {
222
+ this[propertyName] = properties[propertyName];
223
+ }
224
+ }
225
+
226
+ // IE won't copy toString using the loop above
227
+ if (properties.hasOwnProperty('toString')) {
228
+ this.toString = properties.toString;
229
+ }
230
+ },
231
+
232
+ /**
233
+ * Creates a copy of this object.
234
+ *
235
+ * @return {Object} The clone.
236
+ *
237
+ * @example
238
+ *
239
+ * var clone = instance.clone();
240
+ */
241
+ clone: function () {
242
+ return this.init.prototype.extend(this);
243
+ }
244
+ };
245
+ }());
246
+
247
+ /**
248
+ * An array of 32-bit words.
249
+ *
250
+ * @property {Array} words The array of 32-bit words.
251
+ * @property {number} sigBytes The number of significant bytes in this word array.
252
+ */
253
+ var WordArray = C_lib.WordArray = Base.extend({
254
+ /**
255
+ * Initializes a newly created word array.
256
+ *
257
+ * @param {Array} words (Optional) An array of 32-bit words.
258
+ * @param {number} sigBytes (Optional) The number of significant bytes in the words.
259
+ *
260
+ * @example
261
+ *
262
+ * var wordArray = CryptoJS.lib.WordArray.create();
263
+ * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);
264
+ * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);
265
+ */
266
+ init: function (words, sigBytes) {
267
+ words = this.words = words || [];
268
+
269
+ if (sigBytes != undefined$1) {
270
+ this.sigBytes = sigBytes;
271
+ } else {
272
+ this.sigBytes = words.length * 4;
273
+ }
274
+ },
275
+
276
+ /**
277
+ * Converts this word array to a string.
278
+ *
279
+ * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
280
+ *
281
+ * @return {string} The stringified word array.
282
+ *
283
+ * @example
284
+ *
285
+ * var string = wordArray + '';
286
+ * var string = wordArray.toString();
287
+ * var string = wordArray.toString(CryptoJS.enc.Utf8);
288
+ */
289
+ toString: function (encoder) {
290
+ return (encoder || Hex).stringify(this);
291
+ },
292
+
293
+ /**
294
+ * Concatenates a word array to this word array.
295
+ *
296
+ * @param {WordArray} wordArray The word array to append.
297
+ *
298
+ * @return {WordArray} This word array.
299
+ *
300
+ * @example
301
+ *
302
+ * wordArray1.concat(wordArray2);
303
+ */
304
+ concat: function (wordArray) {
305
+ // Shortcuts
306
+ var thisWords = this.words;
307
+ var thatWords = wordArray.words;
308
+ var thisSigBytes = this.sigBytes;
309
+ var thatSigBytes = wordArray.sigBytes;
310
+
311
+ // Clamp excess bits
312
+ this.clamp();
313
+
314
+ // Concat
315
+ if (thisSigBytes % 4) {
316
+ // Copy one byte at a time
317
+ for (var i = 0; i < thatSigBytes; i++) {
318
+ var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
319
+ thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);
320
+ }
321
+ } else {
322
+ // Copy one word at a time
323
+ for (var j = 0; j < thatSigBytes; j += 4) {
324
+ thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];
325
+ }
326
+ }
327
+ this.sigBytes += thatSigBytes;
328
+
329
+ // Chainable
330
+ return this;
331
+ },
332
+
333
+ /**
334
+ * Removes insignificant bits.
335
+ *
336
+ * @example
337
+ *
338
+ * wordArray.clamp();
339
+ */
340
+ clamp: function () {
341
+ // Shortcuts
342
+ var words = this.words;
343
+ var sigBytes = this.sigBytes;
344
+
345
+ // Clamp
346
+ words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);
347
+ words.length = Math.ceil(sigBytes / 4);
348
+ },
349
+
350
+ /**
351
+ * Creates a copy of this word array.
352
+ *
353
+ * @return {WordArray} The clone.
354
+ *
355
+ * @example
356
+ *
357
+ * var clone = wordArray.clone();
358
+ */
359
+ clone: function () {
360
+ var clone = Base.clone.call(this);
361
+ clone.words = this.words.slice(0);
362
+
363
+ return clone;
364
+ },
365
+
366
+ /**
367
+ * Creates a word array filled with random bytes.
368
+ *
369
+ * @param {number} nBytes The number of random bytes to generate.
370
+ *
371
+ * @return {WordArray} The random word array.
372
+ *
373
+ * @static
374
+ *
375
+ * @example
376
+ *
377
+ * var wordArray = CryptoJS.lib.WordArray.random(16);
378
+ */
379
+ random: function (nBytes) {
380
+ var words = [];
381
+
382
+ for (var i = 0; i < nBytes; i += 4) {
383
+ words.push(cryptoSecureRandomInt());
384
+ }
385
+
386
+ return new WordArray.init(words, nBytes);
387
+ }
388
+ });
389
+
390
+ /**
391
+ * Encoder namespace.
392
+ */
393
+ var C_enc = C.enc = {};
394
+
395
+ /**
396
+ * Hex encoding strategy.
397
+ */
398
+ var Hex = C_enc.Hex = {
399
+ /**
400
+ * Converts a word array to a hex string.
401
+ *
402
+ * @param {WordArray} wordArray The word array.
403
+ *
404
+ * @return {string} The hex string.
405
+ *
406
+ * @static
407
+ *
408
+ * @example
409
+ *
410
+ * var hexString = CryptoJS.enc.Hex.stringify(wordArray);
411
+ */
412
+ stringify: function (wordArray) {
413
+ // Shortcuts
414
+ var words = wordArray.words;
415
+ var sigBytes = wordArray.sigBytes;
416
+
417
+ // Convert
418
+ var hexChars = [];
419
+ for (var i = 0; i < sigBytes; i++) {
420
+ var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
421
+ hexChars.push((bite >>> 4).toString(16));
422
+ hexChars.push((bite & 0x0f).toString(16));
423
+ }
424
+
425
+ return hexChars.join('');
426
+ },
427
+
428
+ /**
429
+ * Converts a hex string to a word array.
430
+ *
431
+ * @param {string} hexStr The hex string.
432
+ *
433
+ * @return {WordArray} The word array.
434
+ *
435
+ * @static
436
+ *
437
+ * @example
438
+ *
439
+ * var wordArray = CryptoJS.enc.Hex.parse(hexString);
440
+ */
441
+ parse: function (hexStr) {
442
+ // Shortcut
443
+ var hexStrLength = hexStr.length;
444
+
445
+ // Convert
446
+ var words = [];
447
+ for (var i = 0; i < hexStrLength; i += 2) {
448
+ words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);
449
+ }
450
+
451
+ return new WordArray.init(words, hexStrLength / 2);
452
+ }
453
+ };
454
+
455
+ /**
456
+ * Latin1 encoding strategy.
457
+ */
458
+ var Latin1 = C_enc.Latin1 = {
459
+ /**
460
+ * Converts a word array to a Latin1 string.
461
+ *
462
+ * @param {WordArray} wordArray The word array.
463
+ *
464
+ * @return {string} The Latin1 string.
465
+ *
466
+ * @static
467
+ *
468
+ * @example
469
+ *
470
+ * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
471
+ */
472
+ stringify: function (wordArray) {
473
+ // Shortcuts
474
+ var words = wordArray.words;
475
+ var sigBytes = wordArray.sigBytes;
476
+
477
+ // Convert
478
+ var latin1Chars = [];
479
+ for (var i = 0; i < sigBytes; i++) {
480
+ var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
481
+ latin1Chars.push(String.fromCharCode(bite));
482
+ }
483
+
484
+ return latin1Chars.join('');
485
+ },
486
+
487
+ /**
488
+ * Converts a Latin1 string to a word array.
489
+ *
490
+ * @param {string} latin1Str The Latin1 string.
491
+ *
492
+ * @return {WordArray} The word array.
493
+ *
494
+ * @static
495
+ *
496
+ * @example
497
+ *
498
+ * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
499
+ */
500
+ parse: function (latin1Str) {
501
+ // Shortcut
502
+ var latin1StrLength = latin1Str.length;
503
+
504
+ // Convert
505
+ var words = [];
506
+ for (var i = 0; i < latin1StrLength; i++) {
507
+ words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);
508
+ }
509
+
510
+ return new WordArray.init(words, latin1StrLength);
511
+ }
512
+ };
513
+
514
+ /**
515
+ * UTF-8 encoding strategy.
516
+ */
517
+ var Utf8 = C_enc.Utf8 = {
518
+ /**
519
+ * Converts a word array to a UTF-8 string.
520
+ *
521
+ * @param {WordArray} wordArray The word array.
522
+ *
523
+ * @return {string} The UTF-8 string.
524
+ *
525
+ * @static
526
+ *
527
+ * @example
528
+ *
529
+ * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
530
+ */
531
+ stringify: function (wordArray) {
532
+ try {
533
+ return decodeURIComponent(escape(Latin1.stringify(wordArray)));
534
+ } catch (e) {
535
+ throw new Error('Malformed UTF-8 data');
536
+ }
537
+ },
538
+
539
+ /**
540
+ * Converts a UTF-8 string to a word array.
541
+ *
542
+ * @param {string} utf8Str The UTF-8 string.
543
+ *
544
+ * @return {WordArray} The word array.
545
+ *
546
+ * @static
547
+ *
548
+ * @example
549
+ *
550
+ * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
551
+ */
552
+ parse: function (utf8Str) {
553
+ return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
554
+ }
555
+ };
556
+
557
+ /**
558
+ * Abstract buffered block algorithm template.
559
+ *
560
+ * The property blockSize must be implemented in a concrete subtype.
561
+ *
562
+ * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0
563
+ */
564
+ var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
565
+ /**
566
+ * Resets this block algorithm's data buffer to its initial state.
567
+ *
568
+ * @example
569
+ *
570
+ * bufferedBlockAlgorithm.reset();
571
+ */
572
+ reset: function () {
573
+ // Initial values
574
+ this._data = new WordArray.init();
575
+ this._nDataBytes = 0;
576
+ },
577
+
578
+ /**
579
+ * Adds new data to this block algorithm's buffer.
580
+ *
581
+ * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.
582
+ *
583
+ * @example
584
+ *
585
+ * bufferedBlockAlgorithm._append('data');
586
+ * bufferedBlockAlgorithm._append(wordArray);
587
+ */
588
+ _append: function (data) {
589
+ // Convert string to WordArray, else assume WordArray already
590
+ if (typeof data == 'string') {
591
+ data = Utf8.parse(data);
592
+ }
593
+
594
+ // Append
595
+ this._data.concat(data);
596
+ this._nDataBytes += data.sigBytes;
597
+ },
598
+
599
+ /**
600
+ * Processes available data blocks.
601
+ *
602
+ * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
603
+ *
604
+ * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
605
+ *
606
+ * @return {WordArray} The processed data.
607
+ *
608
+ * @example
609
+ *
610
+ * var processedData = bufferedBlockAlgorithm._process();
611
+ * var processedData = bufferedBlockAlgorithm._process(!!'flush');
612
+ */
613
+ _process: function (doFlush) {
614
+ var processedWords;
615
+
616
+ // Shortcuts
617
+ var data = this._data;
618
+ var dataWords = data.words;
619
+ var dataSigBytes = data.sigBytes;
620
+ var blockSize = this.blockSize;
621
+ var blockSizeBytes = blockSize * 4;
622
+
623
+ // Count blocks ready
624
+ var nBlocksReady = dataSigBytes / blockSizeBytes;
625
+ if (doFlush) {
626
+ // Round up to include partial blocks
627
+ nBlocksReady = Math.ceil(nBlocksReady);
628
+ } else {
629
+ // Round down to include only full blocks,
630
+ // less the number of blocks that must remain in the buffer
631
+ nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);
632
+ }
633
+
634
+ // Count words ready
635
+ var nWordsReady = nBlocksReady * blockSize;
636
+
637
+ // Count bytes ready
638
+ var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);
639
+
640
+ // Process blocks
641
+ if (nWordsReady) {
642
+ for (var offset = 0; offset < nWordsReady; offset += blockSize) {
643
+ // Perform concrete-algorithm logic
644
+ this._doProcessBlock(dataWords, offset);
645
+ }
646
+
647
+ // Remove processed words
648
+ processedWords = dataWords.splice(0, nWordsReady);
649
+ data.sigBytes -= nBytesReady;
650
+ }
651
+
652
+ // Return processed words
653
+ return new WordArray.init(processedWords, nBytesReady);
654
+ },
655
+
656
+ /**
657
+ * Creates a copy of this object.
658
+ *
659
+ * @return {Object} The clone.
660
+ *
661
+ * @example
662
+ *
663
+ * var clone = bufferedBlockAlgorithm.clone();
664
+ */
665
+ clone: function () {
666
+ var clone = Base.clone.call(this);
667
+ clone._data = this._data.clone();
668
+
669
+ return clone;
670
+ },
671
+
672
+ _minBufferSize: 0
673
+ });
674
+
675
+ /**
676
+ * Abstract hasher template.
677
+ *
678
+ * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)
679
+ */
680
+ C_lib.Hasher = BufferedBlockAlgorithm.extend({
681
+ /**
682
+ * Configuration options.
683
+ */
684
+ cfg: Base.extend(),
685
+
686
+ /**
687
+ * Initializes a newly created hasher.
688
+ *
689
+ * @param {Object} cfg (Optional) The configuration options to use for this hash computation.
690
+ *
691
+ * @example
692
+ *
693
+ * var hasher = CryptoJS.algo.SHA256.create();
694
+ */
695
+ init: function (cfg) {
696
+ // Apply config defaults
697
+ this.cfg = this.cfg.extend(cfg);
698
+
699
+ // Set initial values
700
+ this.reset();
701
+ },
702
+
703
+ /**
704
+ * Resets this hasher to its initial state.
705
+ *
706
+ * @example
707
+ *
708
+ * hasher.reset();
709
+ */
710
+ reset: function () {
711
+ // Reset data buffer
712
+ BufferedBlockAlgorithm.reset.call(this);
713
+
714
+ // Perform concrete-hasher logic
715
+ this._doReset();
716
+ },
717
+
718
+ /**
719
+ * Updates this hasher with a message.
720
+ *
721
+ * @param {WordArray|string} messageUpdate The message to append.
722
+ *
723
+ * @return {Hasher} This hasher.
724
+ *
725
+ * @example
726
+ *
727
+ * hasher.update('message');
728
+ * hasher.update(wordArray);
729
+ */
730
+ update: function (messageUpdate) {
731
+ // Append
732
+ this._append(messageUpdate);
733
+
734
+ // Update the hash
735
+ this._process();
736
+
737
+ // Chainable
738
+ return this;
739
+ },
740
+
741
+ /**
742
+ * Finalizes the hash computation.
743
+ * Note that the finalize operation is effectively a destructive, read-once operation.
744
+ *
745
+ * @param {WordArray|string} messageUpdate (Optional) A final message update.
746
+ *
747
+ * @return {WordArray} The hash.
748
+ *
749
+ * @example
750
+ *
751
+ * var hash = hasher.finalize();
752
+ * var hash = hasher.finalize('message');
753
+ * var hash = hasher.finalize(wordArray);
754
+ */
755
+ finalize: function (messageUpdate) {
756
+ // Final message update
757
+ if (messageUpdate) {
758
+ this._append(messageUpdate);
759
+ }
760
+
761
+ // Perform concrete-hasher logic
762
+ var hash = this._doFinalize();
763
+
764
+ return hash;
765
+ },
766
+
767
+ blockSize: 512/32,
768
+
769
+ /**
770
+ * Creates a shortcut function to a hasher's object interface.
771
+ *
772
+ * @param {Hasher} hasher The hasher to create a helper for.
773
+ *
774
+ * @return {Function} The shortcut function.
775
+ *
776
+ * @static
777
+ *
778
+ * @example
779
+ *
780
+ * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
781
+ */
782
+ _createHelper: function (hasher) {
783
+ return function (message, cfg) {
784
+ return new hasher.init(cfg).finalize(message);
785
+ };
786
+ },
787
+
788
+ /**
789
+ * Creates a shortcut function to the HMAC's object interface.
790
+ *
791
+ * @param {Hasher} hasher The hasher to use in this HMAC helper.
792
+ *
793
+ * @return {Function} The shortcut function.
794
+ *
795
+ * @static
796
+ *
797
+ * @example
798
+ *
799
+ * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
800
+ */
801
+ _createHmacHelper: function (hasher) {
802
+ return function (message, key) {
803
+ return new C_algo.HMAC.init(hasher, key).finalize(message);
804
+ };
805
+ }
806
+ });
807
+
808
+ /**
809
+ * Algorithm namespace.
810
+ */
811
+ var C_algo = C.algo = {};
812
+
813
+ return C;
814
+ }(Math));
815
+
816
+
817
+ return CryptoJS;
818
+
819
+ }));
820
+ });
821
+
822
+ var sha256 = createCommonjsModule(function (module, exports) {
823
+ (function (root, factory) {
824
+ {
825
+ // CommonJS
826
+ module.exports = factory(core);
827
+ }
828
+ }(commonjsGlobal, function (CryptoJS) {
829
+
830
+ (function (Math) {
831
+ // Shortcuts
832
+ var C = CryptoJS;
833
+ var C_lib = C.lib;
834
+ var WordArray = C_lib.WordArray;
835
+ var Hasher = C_lib.Hasher;
836
+ var C_algo = C.algo;
837
+
838
+ // Initialization and round constants tables
839
+ var H = [];
840
+ var K = [];
841
+
842
+ // Compute constants
843
+ (function () {
844
+ function isPrime(n) {
845
+ var sqrtN = Math.sqrt(n);
846
+ for (var factor = 2; factor <= sqrtN; factor++) {
847
+ if (!(n % factor)) {
848
+ return false;
849
+ }
850
+ }
851
+
852
+ return true;
853
+ }
854
+
855
+ function getFractionalBits(n) {
856
+ return ((n - (n | 0)) * 0x100000000) | 0;
857
+ }
858
+
859
+ var n = 2;
860
+ var nPrime = 0;
861
+ while (nPrime < 64) {
862
+ if (isPrime(n)) {
863
+ if (nPrime < 8) {
864
+ H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));
865
+ }
866
+ K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));
867
+
868
+ nPrime++;
869
+ }
870
+
871
+ n++;
872
+ }
873
+ }());
874
+
875
+ // Reusable object
876
+ var W = [];
877
+
878
+ /**
879
+ * SHA-256 hash algorithm.
880
+ */
881
+ var SHA256 = C_algo.SHA256 = Hasher.extend({
882
+ _doReset: function () {
883
+ this._hash = new WordArray.init(H.slice(0));
884
+ },
885
+
886
+ _doProcessBlock: function (M, offset) {
887
+ // Shortcut
888
+ var H = this._hash.words;
889
+
890
+ // Working variables
891
+ var a = H[0];
892
+ var b = H[1];
893
+ var c = H[2];
894
+ var d = H[3];
895
+ var e = H[4];
896
+ var f = H[5];
897
+ var g = H[6];
898
+ var h = H[7];
899
+
900
+ // Computation
901
+ for (var i = 0; i < 64; i++) {
902
+ if (i < 16) {
903
+ W[i] = M[offset + i] | 0;
904
+ } else {
905
+ var gamma0x = W[i - 15];
906
+ var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^
907
+ ((gamma0x << 14) | (gamma0x >>> 18)) ^
908
+ (gamma0x >>> 3);
909
+
910
+ var gamma1x = W[i - 2];
911
+ var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^
912
+ ((gamma1x << 13) | (gamma1x >>> 19)) ^
913
+ (gamma1x >>> 10);
914
+
915
+ W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];
916
+ }
917
+
918
+ var ch = (e & f) ^ (~e & g);
919
+ var maj = (a & b) ^ (a & c) ^ (b & c);
920
+
921
+ var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));
922
+ var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));
923
+
924
+ var t1 = h + sigma1 + ch + K[i] + W[i];
925
+ var t2 = sigma0 + maj;
926
+
927
+ h = g;
928
+ g = f;
929
+ f = e;
930
+ e = (d + t1) | 0;
931
+ d = c;
932
+ c = b;
933
+ b = a;
934
+ a = (t1 + t2) | 0;
935
+ }
936
+
937
+ // Intermediate hash value
938
+ H[0] = (H[0] + a) | 0;
939
+ H[1] = (H[1] + b) | 0;
940
+ H[2] = (H[2] + c) | 0;
941
+ H[3] = (H[3] + d) | 0;
942
+ H[4] = (H[4] + e) | 0;
943
+ H[5] = (H[5] + f) | 0;
944
+ H[6] = (H[6] + g) | 0;
945
+ H[7] = (H[7] + h) | 0;
946
+ },
947
+
948
+ _doFinalize: function () {
949
+ // Shortcuts
950
+ var data = this._data;
951
+ var dataWords = data.words;
952
+
953
+ var nBitsTotal = this._nDataBytes * 8;
954
+ var nBitsLeft = data.sigBytes * 8;
955
+
956
+ // Add padding
957
+ dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
958
+ dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
959
+ dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
960
+ data.sigBytes = dataWords.length * 4;
961
+
962
+ // Hash final blocks
963
+ this._process();
964
+
965
+ // Return final computed hash
966
+ return this._hash;
967
+ },
968
+
969
+ clone: function () {
970
+ var clone = Hasher.clone.call(this);
971
+ clone._hash = this._hash.clone();
972
+
973
+ return clone;
974
+ }
975
+ });
976
+
977
+ /**
978
+ * Shortcut function to the hasher's object interface.
979
+ *
980
+ * @param {WordArray|string} message The message to hash.
981
+ *
982
+ * @return {WordArray} The hash.
983
+ *
984
+ * @static
985
+ *
986
+ * @example
987
+ *
988
+ * var hash = CryptoJS.SHA256('message');
989
+ * var hash = CryptoJS.SHA256(wordArray);
990
+ */
991
+ C.SHA256 = Hasher._createHelper(SHA256);
992
+
993
+ /**
994
+ * Shortcut function to the HMAC's object interface.
995
+ *
996
+ * @param {WordArray|string} message The message to hash.
997
+ * @param {WordArray|string} key The secret key.
998
+ *
999
+ * @return {WordArray} The HMAC.
1000
+ *
1001
+ * @static
1002
+ *
1003
+ * @example
1004
+ *
1005
+ * var hmac = CryptoJS.HmacSHA256(message, key);
1006
+ */
1007
+ C.HmacSHA256 = Hasher._createHmacHelper(SHA256);
1008
+ }(Math));
1009
+
1010
+
1011
+ return CryptoJS.SHA256;
1012
+
1013
+ }));
1014
+ });
1015
+
1016
+ var encHex = createCommonjsModule(function (module, exports) {
1017
+ (function (root, factory) {
1018
+ {
1019
+ // CommonJS
1020
+ module.exports = factory(core);
1021
+ }
1022
+ }(commonjsGlobal, function (CryptoJS) {
1023
+
1024
+ return CryptoJS.enc.Hex;
1025
+
1026
+ }));
1027
+ });
1028
+
1029
+ function shouldDisableTracking(options = {}) {
1030
+ const { disabled, portal } = options;
1031
+ if (disabled || (portal === null || portal === void 0 ? void 0 : portal.eueiEnabled) === false) {
1032
+ return true;
1033
+ }
1034
+ if (!portal || hasEueiEnabledAndIsMemberOfOrg(portal) || isRegisteredUserWithoutOrgInUSA(portal) || isAnonymousUserInUSA(portal)) {
1035
+ return false;
1036
+ }
1037
+ return true;
1038
+ }
1039
+ function hasEueiEnabledAndIsMemberOfOrg(portal) {
1040
+ return portal.eueiEnabled && portal.user && portal.user.orgId === portal.id;
1041
+ }
1042
+ function isRegisteredUserWithoutOrgInUSA(portal) {
1043
+ return portal.user && !portal.user.orgId && portal.ipCntryCode === 'US';
1044
+ }
1045
+ function isAnonymousUserInUSA(portal) {
1046
+ return !portal.user && portal.ipCntryCode === 'US';
1047
+ }
1048
+
1049
+ const storage = {
1050
+ storage: {},
1051
+ memory: true,
1052
+ get(key) {
1053
+ let stored;
1054
+ try {
1055
+ stored =
1056
+ (window.localStorage && window.localStorage.getItem(key)) ||
1057
+ this.storage[key];
1058
+ }
1059
+ catch (e) {
1060
+ stored = this.storage[key];
1061
+ }
1062
+ if (stored) {
1063
+ try {
1064
+ return JSON.parse(stored);
1065
+ }
1066
+ catch (e) {
1067
+ return undefined;
1068
+ }
1069
+ }
1070
+ else {
1071
+ return undefined;
1072
+ }
1073
+ },
1074
+ set(key, value) {
1075
+ // handle Safari private mode (setItem is not allowed)
1076
+ const valueToString = JSON.stringify(value);
1077
+ try {
1078
+ window.localStorage.setItem(key, valueToString);
1079
+ }
1080
+ catch (e) {
1081
+ if (!this.memory) {
1082
+ console.error('setting local storage failed, falling back to in-memory storage');
1083
+ this.memory = true;
1084
+ }
1085
+ this.storage[key] = value;
1086
+ }
1087
+ },
1088
+ delete(key) {
1089
+ try {
1090
+ window.localStorage.removeItem(key);
1091
+ }
1092
+ catch (e) {
1093
+ if (!this.memory) {
1094
+ console.error('setting local storage failed, falling back to in-memory storage');
1095
+ this.memory = true;
1096
+ }
1097
+ delete this.storage[key];
1098
+ }
1099
+ },
1100
+ };
1101
+
1102
+ const ESRI_TELEMETRY_DATA_ATTRIBUTE = 'esri-telemetry';
1103
+ function injectScriptElementAsync(attributes) {
1104
+ const onloadPromise = new Promise((resolve, reject) => {
1105
+ attributes.onload = resolve;
1106
+ attributes.onerror = reject;
1107
+ const script = injectScriptElement(attributes);
1108
+ if (!script || attributes.body) {
1109
+ // this is for the case where the script is already loaded or it has a body instead of a src
1110
+ resolve();
1111
+ }
1112
+ });
1113
+ return onloadPromise;
1114
+ }
1115
+ function scriptExists(attributes) {
1116
+ const { id, dataAttribute } = attributes;
1117
+ return !!document.getElementById(id) || !!document.querySelector(`[data-${ESRI_TELEMETRY_DATA_ATTRIBUTE}="${dataAttribute}"]`);
1118
+ }
1119
+ function injectScriptElement(attributes) {
1120
+ const { body, src, id, dataAttribute, section = 'body', type = 'text/javascript', async = false, defer = false, onload, onerror } = attributes;
1121
+ if (typeof window === 'undefined') {
1122
+ throw new WindowUndefinedError('Window is undefined: Cannot add script element.');
1123
+ }
1124
+ if (scriptExists(attributes)) {
1125
+ console.log(`script (${id || dataAttribute}) is already present, skipping`);
1126
+ return;
1127
+ }
1128
+ const scriptElement = createScriptElementWithAttributes({
1129
+ id,
1130
+ dataAttribute,
1131
+ type,
1132
+ async,
1133
+ defer,
1134
+ body,
1135
+ src,
1136
+ onload,
1137
+ onerror
1138
+ });
1139
+ return section === 'body'
1140
+ ? document.body.appendChild(scriptElement)
1141
+ : document.head.appendChild(scriptElement);
1142
+ }
1143
+ class WindowUndefinedError extends Error {
1144
+ }
1145
+ function createScriptElementWithAttributes({ id, dataAttribute, type, async, defer, body, src, onload, onerror }) {
1146
+ const scriptElement = document.createElement('script');
1147
+ if (id) {
1148
+ scriptElement.id = id;
1149
+ }
1150
+ if (dataAttribute) {
1151
+ scriptElement.setAttribute(`data-${ESRI_TELEMETRY_DATA_ATTRIBUTE}`, dataAttribute);
1152
+ }
1153
+ src && (scriptElement.src = src);
1154
+ body && (scriptElement.innerText = body);
1155
+ scriptElement.type = type;
1156
+ scriptElement.async = async;
1157
+ scriptElement.defer = defer;
1158
+ onload && (scriptElement.onload = onload);
1159
+ onerror && (scriptElement.onerror = onerror);
1160
+ return scriptElement;
1161
+ }
1162
+
1163
+ function createScriptTags(scripts) {
1164
+ return scripts.map(scriptObj => {
1165
+ const attrs = [];
1166
+ ['src', 'id', 'dataAttribute', 'type'].forEach(attr => {
1167
+ let attrName = attr;
1168
+ if (attr === 'dataAttribute') {
1169
+ attrName = 'data-esri-telemetry';
1170
+ }
1171
+ if (scriptObj[attr]) {
1172
+ attrs.push(`${attrName}="${scriptObj[attr]}"`);
1173
+ }
1174
+ });
1175
+ ['async', 'defer'].forEach(attr => {
1176
+ if (scriptObj[attr]) {
1177
+ attrs.push(`${attr}`);
1178
+ }
1179
+ });
1180
+ return `<script ${attrs.join(' ')}>${scriptObj.body ? scriptObj.body : ''}</script>`;
1181
+ }).join('');
1182
+ }
1183
+
1184
+ const INTERNAL_ORGS = [
1185
+ 'esri.com',
1186
+ 'esriuk.com',
1187
+ 'esri.de',
1188
+ 'esri.ca',
1189
+ 'esrifrance.fr',
1190
+ 'esri.nl',
1191
+ 'esri-portugal.pt',
1192
+ 'esribulgaria.com',
1193
+ 'esri.fi',
1194
+ 'esri.kr',
1195
+ 'esrimalaysia.com.my',
1196
+ 'esri.es',
1197
+ 'esriaustralia.com.au',
1198
+ 'esri-southafrica.com',
1199
+ 'esri.cl',
1200
+ 'esrichina.com.cn',
1201
+ 'esri.co',
1202
+ 'esriturkey.com.tr',
1203
+ 'geodata.no',
1204
+ 'esriitalia.it',
1205
+ 'esri.pl',
1206
+ ];
1207
+ /**
1208
+ * Telemetry class
1209
+ */
1210
+ class Telemetry {
1211
+ constructor(options) {
1212
+ var _a, _b, _c;
1213
+ this.trackers = [];
1214
+ this.options = options;
1215
+ this.debug = options.debug;
1216
+ this.suppressDisabledWarnings = options.suppressDisabledWarnings;
1217
+ this.disabled = shouldDisableTracking(options);
1218
+ this.logger = options.logger || console;
1219
+ if (this.disabled && !this.suppressDisabledWarnings) {
1220
+ this.logger.info('Telemetry Disabled');
1221
+ }
1222
+ const user = ((_a = options.portal) === null || _a === void 0 ? void 0 : _a.user) || options.user;
1223
+ if (user) {
1224
+ this.setUser(user, (_c = (_b = options.portal) === null || _b === void 0 ? void 0 : _b.subscriptionInfo) === null || _c === void 0 ? void 0 : _c.type);
1225
+ }
1226
+ if (!this.disabled) {
1227
+ this.initializeTrackers();
1228
+ }
1229
+ }
1230
+ initializeTrackers() {
1231
+ if (this.options.plugins) {
1232
+ this.trackers.push(...this.options.plugins);
1233
+ }
1234
+ if (!this.trackers.length) {
1235
+ this.logger.error(new Error('No trackers configured'));
1236
+ }
1237
+ }
1238
+ getScriptTags() {
1239
+ return this.trackers.map((tracker) => {
1240
+ return tracker.getScriptTags && tracker.getScriptTags();
1241
+ }).join('');
1242
+ }
1243
+ async init() {
1244
+ const promises = this.trackers.map((tracker) => {
1245
+ return tracker.init();
1246
+ });
1247
+ await Promise.all(promises);
1248
+ }
1249
+ setUser(user = {}, orgType = 'Public') {
1250
+ user = typeof user === 'string' ? { username: user } : user;
1251
+ this.user = user;
1252
+ this.user.accountType = orgType;
1253
+ let internalDomain;
1254
+ if (user.email && user.email.split) {
1255
+ const domain = user.email.split('@')[1];
1256
+ internalDomain =
1257
+ INTERNAL_ORGS.filter((org) => {
1258
+ return domain === org;
1259
+ }).length > 0;
1260
+ }
1261
+ if (internalDomain ||
1262
+ ['In House', 'Demo and Marketing'].indexOf(orgType) > -1) {
1263
+ this.user.internalUser = true;
1264
+ }
1265
+ }
1266
+ logPageView(page, event = {}, options = {}) {
1267
+ if (this.disabled && !this.suppressDisabledWarnings) {
1268
+ this.logger.info('Page view was not logged because telemetry is disabled.');
1269
+ return false;
1270
+ }
1271
+ const enabledTrackers = this.trackers.filter(({ disabled, hasError }) => !disabled && !hasError);
1272
+ if (!enabledTrackers.length) {
1273
+ this.logger.warn('Page view was not logged because no enabled telemetry-plugins are registered.');
1274
+ return false;
1275
+ }
1276
+ const attributes = this.preProcess(event, options);
1277
+ if (this.debug) {
1278
+ this.logger.info('Tracking page view', JSON.stringify(attributes));
1279
+ }
1280
+ const promises = enabledTrackers.map((tracker) => {
1281
+ return tracker.logPageView(page, attributes);
1282
+ });
1283
+ Promise.all(promises).then();
1284
+ return true;
1285
+ }
1286
+ logEvent(event, options = {}) {
1287
+ if (this.disabled && !this.suppressDisabledWarnings) {
1288
+ this.logger.info('Event was not logged because telemetry is disabled.');
1289
+ return false;
1290
+ }
1291
+ const enabledTrackers = this.trackers.filter(({ disabled, hasError }) => !disabled && !hasError);
1292
+ if (!enabledTrackers.length) {
1293
+ this.logger.warn('Event was not logged because no enabled telemetry-plugins are registered.');
1294
+ return false;
1295
+ }
1296
+ const eventAttributes = this.preProcess(event, options);
1297
+ if (this.debug) {
1298
+ this.logger.info('Tracking event', JSON.stringify(eventAttributes));
1299
+ }
1300
+ const promises = enabledTrackers.map((tracker) => {
1301
+ return tracker.logEvent(eventAttributes);
1302
+ });
1303
+ Promise.all(promises).then();
1304
+ return true;
1305
+ }
1306
+ logError(event = {}) {
1307
+ event = Object.assign({ eventType: 'error' }, event);
1308
+ this.logEvent(event);
1309
+ }
1310
+ startWorkflow(name, attributes = {}) {
1311
+ const workflow = {
1312
+ name,
1313
+ start: Date.now(),
1314
+ steps: [],
1315
+ workflowId: Math.floor((1 + Math.random()) * 0x100000000000).toString(16),
1316
+ };
1317
+ this.saveWorkflow(workflow);
1318
+ const workflowObj = Object.assign({ name, step: 'start' }, attributes);
1319
+ this.logWorkflow(workflowObj);
1320
+ return workflow;
1321
+ }
1322
+ stepWorkflow(name, step, attributes = {}) {
1323
+ //TODO: check if the check for attributes being a string is useful or can be removed
1324
+ const details = typeof attributes === 'string' ? attributes : attributes.details;
1325
+ const workflowObj = Object.assign({ name, step, details }, attributes);
1326
+ this.logWorkflow(workflowObj);
1327
+ }
1328
+ endWorkflow(name, attributes = {}) {
1329
+ const workflowObj = Object.assign({ name, step: 'finish' }, attributes);
1330
+ this.logWorkflow(workflowObj);
1331
+ }
1332
+ cancelWorkflow(name, attributes = {}) {
1333
+ const workflowObj = Object.assign({ name, step: 'cancel' }, attributes);
1334
+ this.logWorkflow(workflowObj);
1335
+ }
1336
+ getWorkflow(name) {
1337
+ const workflow = storage.get(`TELEMETRY-WORKFLOW:${name}`);
1338
+ // do not let old workflows be returned
1339
+ if (workflow) {
1340
+ const workflowAge = Date.now() - workflow.start;
1341
+ const timeout = 30 * 60 * 1000;
1342
+ if (workflowAge < timeout) {
1343
+ return workflow;
1344
+ }
1345
+ else {
1346
+ this.deleteWorkflow(workflow);
1347
+ }
1348
+ }
1349
+ }
1350
+ saveWorkflow(workflow) {
1351
+ storage.set(`TELEMETRY-WORKFLOW:${workflow.name}`, workflow);
1352
+ }
1353
+ deleteWorkflow(workflow) {
1354
+ storage.delete(`TELEMETRY-WORKFLOW:${workflow.name}`);
1355
+ }
1356
+ logWorkflow(options = {}) {
1357
+ /*
1358
+ const workflow = {
1359
+ name: 'add layer to map',
1360
+ step: 'start',
1361
+ details: 'some details about the step'
1362
+ }
1363
+ */
1364
+ options = this.preProcess(options);
1365
+ let workflow = this.getWorkflow(options.name);
1366
+ if (!workflow) {
1367
+ this.startWorkflow(options.name);
1368
+ workflow = this.getWorkflow(options.name);
1369
+ }
1370
+ workflow.steps.push(options.step);
1371
+ workflow.duration = (Date.now() - workflow.start) / 1000;
1372
+ if (['cancel', 'finish'].indexOf(options.step) > -1) {
1373
+ this.deleteWorkflow(workflow);
1374
+ }
1375
+ else {
1376
+ this.saveWorkflow(workflow);
1377
+ }
1378
+ const track = Object.assign(options, {
1379
+ eventType: 'workflow',
1380
+ category: options.name,
1381
+ action: options.step,
1382
+ label: options.details,
1383
+ duration: workflow.duration,
1384
+ workflowId: workflow.workflowId,
1385
+ });
1386
+ this.logEvent(track);
1387
+ }
1388
+ preProcess(event = {}, options = {}) {
1389
+ let userMetadata = {};
1390
+ if (this.user) {
1391
+ userMetadata = {
1392
+ user: anonymize(this.user.username),
1393
+ org: anonymize(this.user.orgId),
1394
+ lastLogin: this.user.lastLogin,
1395
+ userSince: this.user.created,
1396
+ internalUser: this.user.internalUser || false,
1397
+ accountType: this.user.accountType,
1398
+ };
1399
+ }
1400
+ return Object.entries(Object.assign(Object.assign({}, event), userMetadata)).reduce(makeEventPayload(options.omitComplexData, this.logger), {});
1401
+ }
1402
+ disableTracker(trackerName) {
1403
+ var _a;
1404
+ const tracker = this.trackers.find(({ name }) => name === trackerName);
1405
+ if (tracker && !tracker.hasError) {
1406
+ tracker.disabled = true;
1407
+ (_a = tracker.disable) === null || _a === void 0 ? void 0 : _a.call(tracker);
1408
+ }
1409
+ }
1410
+ enableTracker(trackerName) {
1411
+ var _a;
1412
+ const tracker = this.trackers.find(({ name }) => name === trackerName);
1413
+ if (tracker && !tracker.hasError) {
1414
+ tracker.disabled = false;
1415
+ (_a = tracker.enable) === null || _a === void 0 ? void 0 : _a.call(tracker);
1416
+ }
1417
+ }
1418
+ }
1419
+ function anonymize(user) {
1420
+ if (!user)
1421
+ return;
1422
+ return sha256(user).toString(encHex);
1423
+ }
1424
+ function makeEventPayload(omitComplexData, logger) {
1425
+ return function (acc, [key, val]) {
1426
+ if (isPrimitive(val)) {
1427
+ acc[key] = val;
1428
+ }
1429
+ else if (!omitComplexData) {
1430
+ logger.warn(`You are trying to log a non-primitive value, ${key}:${JSON.stringify(val)}. This will get logged as [object Object]`);
1431
+ acc[key] = val;
1432
+ }
1433
+ return acc;
1434
+ };
1435
+ }
1436
+ function isPrimitive(val) {
1437
+ const primitives = ['string', 'number', 'boolean', 'undefined'];
1438
+ return (primitives.includes(typeof val) ||
1439
+ (val && typeof val.valueOf() === 'string'));
1440
+ }
1441
+
1442
+ /******************************************************************************
1443
+ Copyright (c) Microsoft Corporation.
1444
+
1445
+ Permission to use, copy, modify, and/or distribute this software for any
1446
+ purpose with or without fee is hereby granted.
1447
+
1448
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
1449
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
1450
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
1451
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
1452
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
1453
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1454
+ PERFORMANCE OF THIS SOFTWARE.
1455
+ ***************************************************************************** */
1456
+
1457
+ function __rest(s, e) {
1458
+ var t = {};
1459
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
1460
+ t[p] = s[p];
1461
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
1462
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
1463
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
1464
+ t[p[i]] = s[p[i]];
1465
+ }
1466
+ return t;
1467
+ }
1468
+
1469
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
1470
+ var e = new Error(message);
1471
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
1472
+ };
1473
+
1474
+ /**
1475
+ * Class supporting Google Analytics 4
1476
+ */
1477
+ class GoogleAnalytics {
1478
+ constructor(options) {
1479
+ var _a;
1480
+ this.name = 'googleAnalytics';
1481
+ this.dimensions = {};
1482
+ this.metrics = {};
1483
+ if (typeof window !== 'undefined' && !((_a = options === null || options === void 0 ? void 0 : options.measurementIds) === null || _a === void 0 ? void 0 : _a.length)) {
1484
+ // browser environment
1485
+ throw new Error('at least one measurementId needs to be provided in your configuration');
1486
+ }
1487
+ Object.assign(this, options);
1488
+ }
1489
+ _getScripts() {
1490
+ const measurementId = this.measurementIds ? this.measurementIds[0] : '';
1491
+ return [
1492
+ {
1493
+ dataAttribute: 'google-analytics',
1494
+ async: true,
1495
+ src: `https://www.googletagmanager.com/gtag/js?id=${measurementId}`
1496
+ },
1497
+ ];
1498
+ }
1499
+ getScriptTags() {
1500
+ return createScriptTags(this._getScripts());
1501
+ }
1502
+ async init() {
1503
+ // for use in a broswer environment
1504
+ if (typeof window === 'undefined') {
1505
+ throw new WindowUndefinedError('Window is undefined: Cannot add script element.');
1506
+ }
1507
+ // calls _getScripts() and then iterates over the array and adds dom nodes for each and resolves once all have loaded.
1508
+ // injectScriptElementAsync will check if a script with the specified id already exists and, if so, do nothing
1509
+ await Promise.all(this._getScripts().map(scriptObj => {
1510
+ return injectScriptElementAsync(scriptObj);
1511
+ }));
1512
+ // runs second script
1513
+ this.injectConfig();
1514
+ }
1515
+ // we log page views manually, even though ga4 can do so automatically for pages now
1516
+ logPageView(page, options = {}) {
1517
+ const cleanedOptions = this.buildCustomParams(options);
1518
+ const pageViewOptionsObject = Object.assign({ page_title: page || window.location.pathname }, cleanedOptions);
1519
+ window.gtag('event', 'page_view', pageViewOptionsObject);
1520
+ return true;
1521
+ }
1522
+ logEvent(event) {
1523
+ // eventType is name of our event
1524
+ let { action } = event, customParams = __rest(event, ["action"]);
1525
+ const eventType = action || 'other';
1526
+ // if using telemetry wrapper, custom metrics/dimensions in customParams; if not, in options
1527
+ const eventParams = this.buildCustomParams(customParams);
1528
+ // should have custom metric & dimension data that looks like
1529
+ // metric_name: metric_value
1530
+ // dimension_name: dimension_value
1531
+ window.gtag('event', eventType, eventParams);
1532
+ return true;
1533
+ }
1534
+ disable() {
1535
+ if (this.measurementIds) {
1536
+ this.measurementIds.forEach(id => {
1537
+ window[`ga-disable-${id}`] = true;
1538
+ });
1539
+ }
1540
+ }
1541
+ enable() {
1542
+ if (this.measurementIds) {
1543
+ this.measurementIds.forEach(id => {
1544
+ window[`ga-disable-${id}`] = undefined;
1545
+ });
1546
+ }
1547
+ }
1548
+ // injects configs for each measurement id
1549
+ injectConfig() {
1550
+ window.dataLayer = window.dataLayer || [];
1551
+ window.gtag = function () { window.dataLayer.push(arguments); };
1552
+ window.gtag('js', new Date());
1553
+ const configOptions = {
1554
+ 'custom_map': this.createDimensionsAndMetricsCustomMap(this.dimensions, this.metrics),
1555
+ 'send_page_view': false,
1556
+ 'anonymize_ip': true // anonymize ip for each event/page view tracked
1557
+ };
1558
+ this.measurementIds.forEach(measurementId => {
1559
+ window.gtag('config', measurementId, configOptions);
1560
+ });
1561
+ }
1562
+ buildCustomParams(eventParams) {
1563
+ let cleanedEventParams;
1564
+ let { category, label } = eventParams;
1565
+ // verify that all are valid custom metrics/dimensions
1566
+ cleanedEventParams = this.verifyCustomDimensionAndMetrics(eventParams);
1567
+ // ga3 syntax uses category/action/label, which have been changed
1568
+ // to event_category, event_action, and event_label in ga4
1569
+ if (category) {
1570
+ cleanedEventParams = Object.assign(Object.assign({}, cleanedEventParams), { event_category: category });
1571
+ }
1572
+ if (label) {
1573
+ cleanedEventParams = Object.assign(Object.assign({}, cleanedEventParams), { event_label: label });
1574
+ }
1575
+ return cleanedEventParams;
1576
+ }
1577
+ verifyCustomDimensionAndMetrics(eventParams) {
1578
+ // all valid metric names and dimension names
1579
+ // since we store metrics/dimensions as dimension<index>: dimension_name, we want values
1580
+ const metricAndDimensionsMap = this.createDimensionsAndMetricsCustomMap(this.dimensions, this.metrics);
1581
+ const metricAndDimensionNames = Object.values(metricAndDimensionsMap);
1582
+ // get all keys (name of metric/dimension),
1583
+ // filter out any keys not in valid names,
1584
+ // and then recreate new object with filtered keys and values only
1585
+ const cleanedEventParams = Object.keys(eventParams)
1586
+ .filter(key => metricAndDimensionNames.includes(key))
1587
+ .reduce((cur, key) => { return Object.assign(cur, { [key]: eventParams[key] }); }, {});
1588
+ return cleanedEventParams;
1589
+ }
1590
+ createDimensionsAndMetricsCustomMap(dimensions = {}, metrics = {}) {
1591
+ const metricsMap = this.createMetricCustomMap(metrics);
1592
+ const dimensionsMap = this.createDimensionCustomMap(dimensions);
1593
+ return Object.assign(Object.assign({}, metricsMap), dimensionsMap);
1594
+ }
1595
+ // under the assumption that our metrics come like { timeMetric: 1, otherMetric: 3} where metric_name: index
1596
+ createMetricCustomMap(metrics = {}) {
1597
+ return Object.keys(metrics)
1598
+ .map(function (key) {
1599
+ return {
1600
+ // format of metric<Index>: metric_name
1601
+ key: `metric${metrics[key]}`,
1602
+ value: key
1603
+ };
1604
+ })
1605
+ .filter((val) => val)
1606
+ .reduce((acc, { key, value }) => {
1607
+ acc[key] = value;
1608
+ return acc;
1609
+ }, {});
1610
+ }
1611
+ // under the assumption that our dimensions come like { someAttribute: 7, datasetId: 6} where dimension_name: index
1612
+ createDimensionCustomMap(dimensions = {}) {
1613
+ return Object.keys(dimensions)
1614
+ .map(function (key) {
1615
+ return {
1616
+ // format of dimension<Index>: dimension_name
1617
+ key: `dimension${dimensions[key]}`,
1618
+ value: key
1619
+ };
1620
+ })
1621
+ .filter((val) => val)
1622
+ .reduce((acc, { key, value }) => {
1623
+ acc[key] = value;
1624
+ return acc;
1625
+ }, {});
1626
+ }
1627
+ }
1628
+
1629
+ const consentManagerCss = ":host{display:block}.consent-panel{position:fixed;display:block;z-index:5000;bottom:0;left:0;width:100%;height:auto;text-align:center}.cookie-consent-popup-container{position:relative;display:block;bottom:0;left:0;width:100%;margin:0;padding-top:1rem;padding-bottom:1rem;transition:transform 0.5s ease-out 0s;background-color:rgba(51, 51, 51, 0.95);color:#fff}.button-container{position:static;margin-bottom:1rem;display:flex;justify-content:center;flex-wrap:wrap}.padding-end-1{padding-inline-end:1rem}.link-text{--calcite-ui-text-link:var(--calcite-color-text-inverse);--calcite-ui-brand:var(--calcite-color-text-inverse);--calcite-color-text-link:var(--calcite-color-text-inverse);--calcite-color-brand-underline:var(--calcite-color-text-inverse);--calcite-color-brand:var(--calcite-color-text-inverse)}";
1630
+
1631
+ const ConsentManager = class {
1632
+ constructor(hostRef) {
1633
+ registerInstance(this, hostRef);
1634
+ this.consentGranted = createEvent(this, "consentGranted", 7);
1635
+ //--------------------------------------------------------------------------
1636
+ //
1637
+ // Properties (protected)
1638
+ //
1639
+ //--------------------------------------------------------------------------
1640
+ /**
1641
+ * boolean: When true the user has granted consent and the telemetry instance will be avaliable
1642
+ */
1643
+ this._consentGranted = false;
1644
+ /**
1645
+ * boolean: When true the telemetry instance has been loaded
1646
+ */
1647
+ this._loaded = false;
1648
+ this.firstUseVar = "solutions-first-use";
1649
+ this.measurementIds = undefined;
1650
+ this.portal = undefined;
1651
+ this._shouldRender = undefined;
1652
+ this._translations = undefined;
1653
+ }
1654
+ //--------------------------------------------------------------------------
1655
+ //
1656
+ // Watch handlers
1657
+ //
1658
+ //--------------------------------------------------------------------------
1659
+ //--------------------------------------------------------------------------
1660
+ //
1661
+ // Methods (public)
1662
+ //
1663
+ //--------------------------------------------------------------------------
1664
+ /**
1665
+ * Initialize and return the telemetry instance if consent has been granted
1666
+ */
1667
+ async getInstance() {
1668
+ if (localStorage.getItem(this.firstUseVar) === "true") {
1669
+ await this._init();
1670
+ return this._telemetryInstance;
1671
+ }
1672
+ else {
1673
+ return undefined;
1674
+ }
1675
+ }
1676
+ //--------------------------------------------------------------------------
1677
+ //
1678
+ // Functions (lifecycle)
1679
+ //
1680
+ //--------------------------------------------------------------------------
1681
+ /**
1682
+ * StencilJS: Called once just after the component is first connected to the DOM.
1683
+ *
1684
+ * @returns Promise when complete
1685
+ */
1686
+ async componentWillLoad() {
1687
+ await this._getTranslations();
1688
+ this._shouldRender = localStorage.getItem(this.firstUseVar) === null;
1689
+ }
1690
+ /**
1691
+ * Renders the component.
1692
+ */
1693
+ render() {
1694
+ return this._shouldRender ? (h(Host, null, h("calcite-panel", { class: "consent-panel calcite-mode-dark", id: "cookie-policy" }, h("div", { class: "cookie-consent-popup-container" }, h("div", { id: "cookie-policy-description-top", tabindex: "-1" }, h("p", null, this._translations.dearVisitor), h("p", null, this._translations.useAnalytics)), h("div", { class: "button-container" }, h("calcite-button", { appearance: "solid", class: "padding-end-1", kind: "brand", onClick: () => this._refuse() }, this._translations.refuseAnalytics), h("calcite-button", { appearance: "solid", kind: "brand", onClick: () => this._accept() }, this._translations.acceptAnalytics)), h("div", null, h("p", null, this._translations.moreInfo, "\u00A0", h("calcite-link", { class: "link-text", href: "https://www.arcgis.com/", rel: "noopener noreferrer", target: "_blank" }, this._translations.protectionPolicy), this._translations.our, "\u00A0", h("calcite-link", { class: "link-text", href: "https://www.arcgis.com/", rel: "noopener noreferrer", target: "_blank" }, this._translations.cookiePolicy, "\u00A0"), this._translations.andOur, "\u00A0", h("calcite-link", { class: "link-text", href: "https://www.arcgis.com/", rel: "noopener noreferrer", target: "_blank" }, this._translations.cookiesInventory))))))) : undefined;
1695
+ }
1696
+ //--------------------------------------------------------------------------
1697
+ //
1698
+ // Functions (protected)
1699
+ //
1700
+ //--------------------------------------------------------------------------
1701
+ /**
1702
+ * Fetches the component's translations
1703
+ *
1704
+ * @returns Promise when complete
1705
+ * @protected
1706
+ */
1707
+ async _init() {
1708
+ var _a;
1709
+ if (!this._loaded && ((_a = this.measurementIds) === null || _a === void 0 ? void 0 : _a.length) > 0 && this.portal) {
1710
+ const googleAnalyticsTracker = new GoogleAnalytics({
1711
+ measurementIds: this.measurementIds
1712
+ });
1713
+ this._telemetryInstance = new Telemetry({
1714
+ plugins: [googleAnalyticsTracker],
1715
+ portal: this.portal
1716
+ });
1717
+ await this._telemetryInstance.init();
1718
+ this._loaded = true;
1719
+ }
1720
+ }
1721
+ /**
1722
+ * Store the users granting of consent
1723
+ *
1724
+ * @protected
1725
+ */
1726
+ _accept() {
1727
+ this._consentGranted = true;
1728
+ this._handleConsent();
1729
+ }
1730
+ /**
1731
+ * Store the users refusal of consent
1732
+ *
1733
+ * @protected
1734
+ */
1735
+ _refuse() {
1736
+ this._consentGranted = false;
1737
+ this._handleConsent();
1738
+ }
1739
+ /**
1740
+ * Store and emit the users choice for consent
1741
+ *
1742
+ * @protected
1743
+ */
1744
+ _handleConsent() {
1745
+ this._shouldRender = false;
1746
+ localStorage.setItem(this.firstUseVar, this._consentGranted.toString());
1747
+ this.consentGranted.emit({
1748
+ granted: this._consentGranted
1749
+ });
1750
+ }
1751
+ /**
1752
+ * Fetches the component's translations
1753
+ *
1754
+ * @returns Promise when complete
1755
+ * @protected
1756
+ */
1757
+ async _getTranslations() {
1758
+ const messages = await getLocaleComponentStrings(this.el);
1759
+ this._translations = messages[0];
1760
+ }
1761
+ get el() { return getElement(this); }
1762
+ };
1763
+ ConsentManager.style = consentManagerCss;
1764
+
1765
+ export { ConsentManager as consent_manager };