@zerohash-sdk/travel-rule-js 0.7.3 → 0.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -202,8 +202,10 @@ declare abstract class BaseJsSdk<Config extends BaseConfig<never> = BaseConfig>
202
202
  private getEffectiveScriptUrls(): Record<string, string> {
203
203
  // Support local development with Vite: an internal build pins the script
204
204
  // URL for the configured env, bypassing the CDN maps entirely.
205
- if (typeof import.meta !== 'undefined' && import.meta.env?.['VITE_INTERNAL_BUILD'] === 'true') {
206
- const override = import.meta.env['VITE_SCRIPT_URL'];
205
+ // Dot access, not brackets: Vite 8 replaces `import.meta.env.KEY` with its
206
+ // value but inlines the whole env object for a bracket lookup.
207
+ if (typeof import.meta !== 'undefined' && import.meta.env?.VITE_INTERNAL_BUILD === 'true') {
208
+ const override = import.meta.env.VITE_SCRIPT_URL;
207
209
  if (override) return { [this.getEnvironment()]: override };
208
210
  }
209
211
 
@@ -256,15 +258,20 @@ declare abstract class BaseJsSdk<Config extends BaseConfig<never> = BaseConfig>
256
258
  return this.scriptLoadingPromise;
257
259
  }
258
260
 
259
- private async waitForWebComponent(timeout = 5000) {
261
+ private async waitForWebComponent() {
260
262
  if (this.getWebComponent()) {
261
263
  return;
262
264
  }
263
265
 
266
+ // The script has already loaded (loadScript awaited its onLoad); this only
267
+ // covers the window until the custom element registers. Under load (CI, slow
268
+ // devices) that can take longer than a few seconds, so the grace period is
269
+ // generous — a genuine load failure still fails fast via loadScript's
270
+ // onError, not this timer.
264
271
  return new Promise<void>((resolve, reject) => {
265
272
  const timeoutId = setTimeout(() => {
266
273
  reject(new Error(`Timeout waiting for ${this.webComponentTag} to be defined`));
267
- }, timeout);
274
+ }, DEFAULT_WEB_COMPONENT_TIMEOUT_MS);
268
275
 
269
276
  customElements
270
277
  .whenDefined(this.webComponentTag)
package/dist/index.js CHANGED
@@ -1,351 +1,311 @@
1
- const C = "production", M = "JWT token is required and must be a string.", W = {
2
- dev: "https://grafana-faro-collector.dev.0hash.com/collect",
3
- cert: "https://grafana-faro-collector.cert.zerohash.com/collect",
4
- prod: "https://grafana-faro-collector.zerohash.com/collect",
5
- "eu-cert": "https://grafana-faro-collector.cert.zerohash.eu/collect",
6
- "eu-prod": "https://grafana-faro-collector.zerohash.eu/collect",
7
- sandbox: "https://grafana-faro-collector.cert.zerohash.com/collect",
8
- production: "https://grafana-faro-collector.zerohash.com/collect"
9
- }, k = (e) => {
10
- if (!e || typeof e != "string")
11
- return null;
12
- const t = e.split(".");
13
- if (t.length < 2)
14
- return null;
15
- try {
16
- const r = t[1].replace(/-/g, "+").replace(/_/g, "/"), o = r + "===".slice(0, (4 - r.length % 4) % 4), n = typeof atob < "u" ? atob(o) : Buffer.from(o, "base64").toString("utf-8"), i = JSON.parse(n)?.payload?.region;
17
- if (typeof i != "string")
18
- return null;
19
- const s = i.toLowerCase();
20
- return s === "us" || s === "eu" ? s : null;
21
- } catch {
22
- return null;
23
- }
24
- }, v = (e, t) => k(t) !== "eu" ? e : e === "cert" ? "eu-cert" : e === "prod" ? "eu-prod" : e, P = (e) => {
25
- if (!e || typeof e != "string")
26
- return {};
27
- const t = e.split(".");
28
- if (t.length < 2)
29
- return {};
30
- try {
31
- const r = t[1].replace(/-/g, "+").replace(/_/g, "/"), o = r + "===".slice(0, (4 - r.length % 4) % 4), n = typeof atob < "u" ? atob(o) : Buffer.from(o, "base64").toString("utf-8"), a = JSON.parse(n), i = a?.payload ?? {}, s = (c) => typeof c == "string" && c.length > 0 ? c : void 0;
32
- return {
33
- participantCode: s(i.participant_code),
34
- platformName: s(i.platform_name),
35
- platformCode: s(a.platform_code),
36
- region: s(i.region)
37
- };
38
- } catch {
39
- return {};
40
- }
41
- }, N = (e, t, r) => {
42
- const o = v(t, r);
43
- return e[o] ?? e[t] ?? e.prod;
44
- }, U = (e, t, r) => {
45
- const o = v(t, r);
46
- return e[o] ?? e[t];
47
- }, w = () => {
48
- }, F = () => {
49
- const e = new Uint8Array(8);
50
- return globalThis.crypto.getRandomValues(e), Array.from(e, (t) => t.toString(16).padStart(2, "0")).join("");
51
- }, $ = (e, t) => {
52
- const r = F(), o = globalThis.__ZH_WEB_SDK_VERSION__, n = {};
53
- e.claims.participantCode && (n.participant_code = e.claims.participantCode), e.claims.platformName && (n.platform_name = e.claims.platformName), e.claims.platformCode && (n.platform_code = e.claims.platformCode), e.claims.region && (n.region = e.claims.region), o && (n.zh_web_sdk_version = o);
54
- const a = {
55
- meta: {
56
- app: { name: e.appName, version: t ?? "unknown", environment: e.env },
57
- session: { id: r, attributes: n },
58
- browser: typeof navigator < "u" ? { userAgent: navigator.userAgent } : void 0,
59
- page: typeof window < "u" ? { url: window.location.origin } : void 0
60
- },
61
- logs: [
62
- {
63
- message: `Failed to load the script for ${e.webComponentTag} from ${e.env} environment.`,
64
- level: "error",
65
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
66
- context: {
67
- web_component: e.webComponentTag,
68
- script_url: e.scriptUrl,
69
- reason: e.reason,
70
- tried_fallback: String(e.triedFallback),
71
- elapsed_ms: String(e.elapsedMs)
72
- }
73
- }
74
- ]
75
- };
76
- return { sessionId: r, payload: a };
77
- }, B = (e, t, r) => {
78
- if (!e || typeof fetch > "u")
79
- return;
80
- const { sessionId: o, payload: n } = $(t, r);
81
- try {
82
- fetch(e, {
83
- method: "POST",
84
- headers: { "Content-Type": "application/json", "x-faro-session-id": o },
85
- body: JSON.stringify(n),
86
- keepalive: !0
87
- }).catch(() => {
88
- });
89
- } catch {
90
- }
91
- }, V = (e) => {
92
- const { webComponentTag: t, appName: r, appVersion: o, scriptUrls: n, fallbackScriptUrls: a, collectorUrls: i, env: s, jwt: c, timeoutMs: O = 15e3, onLoad: L, onError: I } = e;
93
- if (typeof document > "u")
94
- return w;
95
- const h = `${t}-script-${s}`;
96
- if (customElements.get(t) || document.getElementById(h))
97
- return w;
98
- const A = P(c), D = e.report ?? ((l) => B(i && U(i, s, c), l, o));
99
- let m = !1, R = 0, g;
100
- const f = () => {
101
- g !== void 0 && clearTimeout(g);
102
- }, E = (l, u, d) => {
103
- if (m)
104
- return;
105
- const z = Math.round(performance.now() - R), y = {
106
- webComponentTag: t,
107
- appName: r,
108
- env: s,
109
- scriptUrl: u,
110
- reason: l,
111
- triedFallback: d,
112
- elapsedMs: z,
113
- claims: A
114
- };
115
- D(y);
116
- const _ = d ? void 0 : N(a ?? {}, s, c);
117
- if (_ && _ !== u) {
118
- T(_, !0);
119
- return;
120
- }
121
- m = !0, f(), document.getElementById(h)?.remove(), I?.(y);
122
- }, T = (l, u) => {
123
- f(), R = performance.now();
124
- const d = document.createElement("script");
125
- d.id = h, d.src = l, d.type = "module", d.async = !0, d.onload = () => {
126
- setTimeout(() => {
127
- m || (customElements.get(t) ? (m = !0, f(), L?.()) : E("not-defined", l, u));
128
- }, 0);
129
- }, d.onerror = () => E("network", l, u), g = setTimeout(() => E("timeout", l, u), O), document.getElementById(h)?.remove(), document.head.appendChild(d);
130
- }, b = N(n, s, c);
131
- return b ? (T(b, !1), () => {
132
- m = !0, f();
133
- }) : w;
1
+ var e = {
2
+ dev: "https://grafana-faro-collector.dev.0hash.com/collect",
3
+ cert: "https://grafana-faro-collector.cert.zerohash.com/collect",
4
+ prod: "https://grafana-faro-collector.zerohash.com/collect",
5
+ "eu-cert": "https://grafana-faro-collector.cert.zerohash.eu/collect",
6
+ "eu-prod": "https://grafana-faro-collector.zerohash.eu/collect",
7
+ sandbox: "https://grafana-faro-collector.cert.zerohash.com/collect",
8
+ production: "https://grafana-faro-collector.zerohash.com/collect"
9
+ }, t = (e) => {
10
+ if (!e || typeof e != "string") return null;
11
+ let t = e.split(".");
12
+ if (t.length < 2) return null;
13
+ try {
14
+ let e = t[1].replace(/-/g, "+").replace(/_/g, "/"), n = e + "===".slice(0, (4 - e.length % 4) % 4), r = typeof atob < "u" ? atob(n) : Buffer.from(n, "base64").toString("utf-8"), i = JSON.parse(r)?.payload?.region;
15
+ if (typeof i != "string") return null;
16
+ let a = i.toLowerCase();
17
+ return a === "us" || a === "eu" ? a : null;
18
+ } catch {
19
+ return null;
20
+ }
21
+ }, n = (e, n) => t(n) === "eu" ? e === "cert" ? "eu-cert" : e === "prod" ? "eu-prod" : e : e, r = (e) => {
22
+ if (!e || typeof e != "string") return {};
23
+ let t = e.split(".");
24
+ if (t.length < 2) return {};
25
+ try {
26
+ let e = t[1].replace(/-/g, "+").replace(/_/g, "/"), n = e + "===".slice(0, (4 - e.length % 4) % 4), r = typeof atob < "u" ? atob(n) : Buffer.from(n, "base64").toString("utf-8"), i = JSON.parse(r), a = i?.payload ?? {}, o = (e) => typeof e == "string" && e.length > 0 ? e : void 0;
27
+ return {
28
+ participantCode: o(a.participant_code),
29
+ platformName: o(a.platform_name),
30
+ platformCode: o(i.platform_code),
31
+ region: o(a.region)
32
+ };
33
+ } catch {
34
+ return {};
35
+ }
36
+ }, i = (e, t, r) => e[n(t, r)] ?? e[t] ?? e.prod, a = (e, t, r) => e[n(t, r)] ?? e[t], o = () => void 0, s = () => {
37
+ let e = /* @__PURE__ */ new Uint8Array(8);
38
+ return globalThis.crypto.getRandomValues(e), Array.from(e, (e) => e.toString(16).padStart(2, "0")).join("");
39
+ }, c = (e, t) => {
40
+ let n = s(), r = globalThis.__ZH_WEB_SDK_VERSION__, i = {};
41
+ return e.claims.participantCode && (i.participant_code = e.claims.participantCode), e.claims.platformName && (i.platform_name = e.claims.platformName), e.claims.platformCode && (i.platform_code = e.claims.platformCode), e.claims.region && (i.region = e.claims.region), r && (i.zh_web_sdk_version = r), {
42
+ sessionId: n,
43
+ payload: {
44
+ meta: {
45
+ app: {
46
+ name: e.appName,
47
+ version: t ?? "unknown",
48
+ environment: e.env
49
+ },
50
+ session: {
51
+ id: n,
52
+ attributes: i
53
+ },
54
+ browser: typeof navigator < "u" ? { userAgent: navigator.userAgent } : void 0,
55
+ page: typeof window < "u" ? { url: window.location.origin } : void 0
56
+ },
57
+ logs: [{
58
+ message: `Failed to load the script for ${e.webComponentTag} from ${e.env} environment.`,
59
+ level: "error",
60
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
61
+ context: {
62
+ web_component: e.webComponentTag,
63
+ script_url: e.scriptUrl,
64
+ reason: e.reason,
65
+ tried_fallback: String(e.triedFallback),
66
+ elapsed_ms: String(e.elapsedMs)
67
+ }
68
+ }]
69
+ }
70
+ };
71
+ }, l = (e, t, n) => {
72
+ if (!e || typeof fetch > "u") return;
73
+ let { sessionId: r, payload: i } = c(t, n);
74
+ try {
75
+ fetch(e, {
76
+ method: "POST",
77
+ headers: {
78
+ "Content-Type": "application/json",
79
+ "x-faro-session-id": r
80
+ },
81
+ body: JSON.stringify(i),
82
+ keepalive: !0
83
+ }).catch(() => void 0);
84
+ } catch {}
85
+ }, u = (e) => {
86
+ let { webComponentTag: t, appName: n, appVersion: s, scriptUrls: c, fallbackScriptUrls: u, collectorUrls: d, env: f, jwt: p, timeoutMs: m = 15e3, onLoad: h, onError: g } = e;
87
+ if (typeof document > "u") return o;
88
+ let _ = `${t}-script-${f}`;
89
+ if (customElements.get(t) || document.getElementById(_)) return o;
90
+ let v = r(p), y = e.report ?? ((e) => l(d && a(d, f, p), e, s)), b = !1, x = 0, S, C = () => {
91
+ S !== void 0 && clearTimeout(S);
92
+ }, w = (e, r, a) => {
93
+ if (b) return;
94
+ let o = Math.round(performance.now() - x), s = {
95
+ webComponentTag: t,
96
+ appName: n,
97
+ env: f,
98
+ scriptUrl: r,
99
+ reason: e,
100
+ triedFallback: a,
101
+ elapsedMs: o,
102
+ claims: v
103
+ };
104
+ y(s);
105
+ let c = a ? void 0 : i(u ?? {}, f, p);
106
+ if (c && c !== r) {
107
+ T(c, !0);
108
+ return;
109
+ }
110
+ b = !0, C(), document.getElementById(_)?.remove(), g?.(s);
111
+ }, T = (e, n) => {
112
+ C(), x = performance.now();
113
+ let r = document.createElement("script");
114
+ r.id = _, r.src = e, r.type = "module", r.async = !0, r.onload = () => {
115
+ setTimeout(() => {
116
+ b || (customElements.get(t) ? (b = !0, C(), h?.()) : w("not-defined", e, n));
117
+ }, 0);
118
+ }, r.onerror = () => w("network", e, n), S = setTimeout(() => w("timeout", e, n), m), document.getElementById(_)?.remove(), document.head.appendChild(r);
119
+ }, E = i(c, f, p);
120
+ return E ? (T(E, !1), () => {
121
+ b = !0, C();
122
+ }) : o;
123
+ }, d = 1e4, f = class {
124
+ config;
125
+ state;
126
+ scriptLoadingPromise;
127
+ constructor(e) {
128
+ if (!e.jwt || typeof e.jwt != "string") throw Error("JWT token is required and must be a string.");
129
+ this.config = {
130
+ ...e,
131
+ env: e.env || "production",
132
+ theme: e.theme
133
+ }, this.state = {
134
+ initialized: !1,
135
+ scriptLoaded: !1,
136
+ container: null,
137
+ element: null
138
+ };
139
+ }
140
+ async render(e) {
141
+ if (!e || !(e instanceof HTMLElement)) throw Error(this.errorMessages.INVALID_CONTAINER);
142
+ if (this.state.initialized) throw Error(this.errorMessages.ALREADY_RENDERED);
143
+ try {
144
+ await this.ensureScriptLoaded();
145
+ let t = this.createWebComponent();
146
+ e.innerHTML = "", e.appendChild(t), this.state.container = e, this.state.element = t, this.state.initialized = !0;
147
+ } catch (e) {
148
+ throw console.error("Failed to render widget:", e), e;
149
+ }
150
+ }
151
+ updateConfig(e) {
152
+ if (!this.state.initialized || !this.state.element) throw Error(this.errorMessages.NOT_RENDERED);
153
+ let t = this.state.element;
154
+ Object.entries(e).forEach(([e, n]) => {
155
+ n && (this.config[e] = n, t[e] = n);
156
+ });
157
+ }
158
+ destroy() {
159
+ this.state.initialized && (this.state.element && this.state.element.parentNode && this.state.element.parentNode.removeChild(this.state.element), this.state.container && (this.state.container.innerHTML = ""), this.state.container = null, this.state.element = null, this.state.initialized = !1);
160
+ }
161
+ isRendered() {
162
+ return this.state.initialized;
163
+ }
164
+ getConfig() {
165
+ return { ...this.config };
166
+ }
167
+ getEnvironment() {
168
+ return this.config.env || "production";
169
+ }
170
+ getScriptId() {
171
+ return `${this.webComponentTag}-script-${this.getEnvironment()}`;
172
+ }
173
+ isScriptLoaded() {
174
+ return !!document.getElementById(this.getScriptId());
175
+ }
176
+ getWebComponent() {
177
+ return customElements.get(this.webComponentTag);
178
+ }
179
+ getEffectiveScriptUrls() {
180
+ return this.scriptUrls;
181
+ }
182
+ async loadScript() {
183
+ if (!(this.getWebComponent() || this.isScriptLoaded())) {
184
+ if (this.scriptLoadingPromise) return this.scriptLoadingPromise;
185
+ this.scriptLoadingPromise = new Promise((t, n) => {
186
+ u({
187
+ webComponentTag: this.webComponentTag,
188
+ appName: this.webComponentTag,
189
+ scriptUrls: this.getEffectiveScriptUrls(),
190
+ collectorUrls: e,
191
+ env: this.getEnvironment(),
192
+ jwt: this.config.jwt,
193
+ onLoad: t,
194
+ onError: (e) => {
195
+ n(Error(e.reason === "not-defined" ? this.errorMessages.WEB_COMPONENT_NOT_DEFINED : `${this.errorMessages.SCRIPT_LOAD_FAILED} (${this.getEnvironment()})`));
196
+ }
197
+ });
198
+ });
199
+ try {
200
+ await this.scriptLoadingPromise;
201
+ } catch (e) {
202
+ throw this.scriptLoadingPromise = void 0, e;
203
+ }
204
+ return this.scriptLoadingPromise;
205
+ }
206
+ }
207
+ async waitForWebComponent() {
208
+ if (!this.getWebComponent()) return new Promise((e, t) => {
209
+ let n = setTimeout(() => {
210
+ t(/* @__PURE__ */ Error(`Timeout waiting for ${this.webComponentTag} to be defined`));
211
+ }, d);
212
+ customElements.whenDefined(this.webComponentTag).then(() => {
213
+ clearTimeout(n), e();
214
+ }).catch((e) => {
215
+ clearTimeout(n), t(e);
216
+ });
217
+ });
218
+ }
219
+ async ensureScriptLoaded() {
220
+ if (!this.state.scriptLoaded) try {
221
+ await this.loadScript(), await this.waitForWebComponent(), this.state.scriptLoaded = !0;
222
+ } catch (e) {
223
+ throw console.error("Failed to load Connect script:", e), e;
224
+ }
225
+ }
226
+ createWebComponent() {
227
+ let e = document.createElement(this.webComponentTag);
228
+ return Object.entries(this.config).forEach(([t, n]) => {
229
+ n && (e[t] = n);
230
+ }), e;
231
+ }
232
+ }, p = {
233
+ local: {
234
+ BASE_URL: "/",
235
+ DEV: !1,
236
+ MODE: "production",
237
+ PROD: !0,
238
+ SSR: !1,
239
+ VITE_ASSETS_SERVICE_URL: "http://localhost:5173/assets",
240
+ VITE_CONNECT_API_BASE_URL: "/api/v1",
241
+ VITE_CONNECT_ENV: "local",
242
+ VITE_CONNECT_SDK_API_BASE_URL: "/sdk/v1",
243
+ VITE_DYNAMIC_ENVIRONMENT_ID: "38ce0330-c85e-414a-80b4-6129c548018f",
244
+ VITE_FARO_COLLECTOR_URL: "https://grafana-faro-collector.dev.0hash.com/collect",
245
+ VITE_FEATURE_SERVER_PROXY_URL: "https://ff-edge.dev.0hash.com/api/frontend",
246
+ VITE_INTERNAL_BUILD: "false",
247
+ VITE_ONBOARDING_API_BASE_URL: "/onboarding",
248
+ VITE_POST_MESSAGE_COMMUNICATION_PLATFORMS: "UW6VWU",
249
+ VITE_REDIRECT_HANDLER_URL: "http://localhost:4202/redirect-handler/index.html",
250
+ VITE_SCRAPER_EXTENSION_ID_CHROMIUM: "kofibejdfkmnbobmbogndbiimkflcllf",
251
+ VITE_TRADE_API_BASE_URL: "/trade",
252
+ VITE_UNLEASH_APIKEY: "zerohash-sdk:dev.b0d8aa594e9b94564f885167881bcb9dc69332f935fcb253e656ff34"
253
+ }.VITE_LOCAL_CDN_HOST || "http://localhost:5173",
254
+ dev: "https://sdk-cdn.dev.0hash.com",
255
+ cert: "https://sdk-cdn.cert.zerohash.com",
256
+ prod: "https://sdk-cdn.zerohash.com",
257
+ "eu-cert": "https://sdk-cdn.cert.zerohash.eu",
258
+ "eu-prod": "https://sdk-cdn.zerohash.eu"
259
+ }, m = "https://sdk-cdn.gating.0hash.com", h = (e, t, n = {}) => {
260
+ let { eu: r = !1, legacyAliases: i = !1, local: a = p.local } = n, o = (n) => `${n}/${e}/${t}`, s = {
261
+ local: o(a),
262
+ dev: o(p.dev),
263
+ gating: o(m),
264
+ cert: o(p.cert),
265
+ prod: o(p.prod)
266
+ };
267
+ return i && (s.sandbox = o(p.cert), s.production = o(p.prod)), r && (s["eu-cert"] = o(p["eu-cert"]), s["eu-prod"] = o(p["eu-prod"])), s;
134
268
  };
135
- class j {
136
- config;
137
- state;
138
- scriptLoadingPromise;
139
- constructor(t) {
140
- if (!t.jwt || typeof t.jwt != "string")
141
- throw new Error(M);
142
- this.config = {
143
- ...t,
144
- env: t.env || C,
145
- theme: t.theme
146
- }, this.state = {
147
- initialized: !1,
148
- scriptLoaded: !1,
149
- container: null,
150
- element: null
151
- };
152
- }
153
- /**
154
- * Render the widget to a container element
155
- * @param container - The container element to render the widget into
156
- * @returns Promise that resolves when the widget is rendered
157
- */
158
- async render(t) {
159
- if (!t || !(t instanceof HTMLElement))
160
- throw new Error(this.errorMessages.INVALID_CONTAINER);
161
- if (this.state.initialized)
162
- throw new Error(this.errorMessages.ALREADY_RENDERED);
163
- try {
164
- await this.ensureScriptLoaded();
165
- const r = this.createWebComponent();
166
- t.innerHTML = "", t.appendChild(r), this.state.container = t, this.state.element = r, this.state.initialized = !0;
167
- } catch (r) {
168
- throw console.error("Failed to render widget:", r), r;
169
- }
170
- }
171
- /**
172
- * Update the configuration of the widget (e.g. `theme`, or the `jwt`).
173
- *
174
- * Passing a `jwt` is the JS-SDK equivalent of `setJWT` — it provides the JWT
175
- * used to authenticate.
176
- *
177
- * @param config - Partial configuration to update
178
- * @returns void
179
- */
180
- updateConfig(t) {
181
- if (!this.state.initialized || !this.state.element)
182
- throw new Error(this.errorMessages.NOT_RENDERED);
183
- const r = this.state.element;
184
- Object.entries(t).forEach(([o, n]) => {
185
- n && (this.config[o] = n, r[o] = n);
186
- });
187
- }
188
- /**
189
- * Destroy the widget and clean up resources
190
- */
191
- destroy() {
192
- this.state.initialized && (this.state.element && this.state.element.parentNode && this.state.element.parentNode.removeChild(this.state.element), this.state.container && (this.state.container.innerHTML = ""), this.state.container = null, this.state.element = null, this.state.initialized = !1);
193
- }
194
- /**
195
- * Check if the widget is currently rendered
196
- * @returns True if the widget is rendered, false otherwise
197
- */
198
- isRendered() {
199
- return this.state.initialized;
200
- }
201
- /**
202
- * Get the current configuration
203
- * @returns The current configuration object
204
- */
205
- getConfig() {
206
- return { ...this.config };
207
- }
208
- getEnvironment() {
209
- return this.config.env || C;
210
- }
211
- getScriptId() {
212
- return `${this.webComponentTag}-script-${this.getEnvironment()}`;
213
- }
214
- isScriptLoaded() {
215
- return !!document.getElementById(this.getScriptId());
216
- }
217
- getWebComponent() {
218
- return customElements.get(this.webComponentTag);
219
- }
220
- getEffectiveScriptUrls() {
221
- return this.scriptUrls;
222
- }
223
- async loadScript() {
224
- if (!(this.getWebComponent() || this.isScriptLoaded())) {
225
- if (this.scriptLoadingPromise)
226
- return this.scriptLoadingPromise;
227
- this.scriptLoadingPromise = new Promise((t, r) => {
228
- V({
229
- webComponentTag: this.webComponentTag,
230
- appName: this.webComponentTag,
231
- scriptUrls: this.getEffectiveScriptUrls(),
232
- collectorUrls: W,
233
- env: this.getEnvironment(),
234
- jwt: this.config.jwt,
235
- onLoad: t,
236
- onError: (o) => {
237
- r(new Error(o.reason === "not-defined" ? this.errorMessages.WEB_COMPONENT_NOT_DEFINED : `${this.errorMessages.SCRIPT_LOAD_FAILED} (${this.getEnvironment()})`));
238
- }
239
- });
240
- });
241
- try {
242
- await this.scriptLoadingPromise;
243
- } catch (t) {
244
- throw this.scriptLoadingPromise = void 0, t;
245
- }
246
- return this.scriptLoadingPromise;
247
- }
248
- }
249
- async waitForWebComponent(t = 5e3) {
250
- if (!this.getWebComponent())
251
- return new Promise((r, o) => {
252
- const n = setTimeout(() => {
253
- o(new Error(`Timeout waiting for ${this.webComponentTag} to be defined`));
254
- }, t);
255
- customElements.whenDefined(this.webComponentTag).then(() => {
256
- clearTimeout(n), r();
257
- }).catch((a) => {
258
- clearTimeout(n), o(a);
259
- });
260
- });
261
- }
262
- /**
263
- * Load the web component script if not already loaded
264
- */
265
- async ensureScriptLoaded() {
266
- if (!this.state.scriptLoaded)
267
- try {
268
- await this.loadScript(), await this.waitForWebComponent(), this.state.scriptLoaded = !0;
269
- } catch (t) {
270
- throw console.error("Failed to load Connect script:", t), t;
271
- }
272
- }
273
- createWebComponent() {
274
- const t = document.createElement(this.webComponentTag);
275
- return Object.entries(this.config).forEach(([r, o]) => {
276
- o && (t[r] = o);
277
- }), t;
278
- }
279
- }
280
- const p = {
281
- local: "http://localhost:5173",
282
- dev: "https://sdk-cdn.dev.0hash.com",
283
- cert: "https://sdk-cdn.cert.zerohash.com",
284
- prod: "https://sdk-cdn.zerohash.com",
285
- "eu-cert": "https://sdk-cdn.cert.zerohash.eu",
286
- "eu-prod": "https://sdk-cdn.zerohash.eu"
287
- }, J = "https://sdk-cdn.gating.0hash.com", x = (e, t, r = {}) => {
288
- const { eu: o = !1, legacyAliases: n = !1, local: a = p.local } = r, i = (c) => `${c}/${e}/${t}`, s = {
289
- local: i(a),
290
- dev: i(p.dev),
291
- gating: i(J),
292
- cert: i(p.cert),
293
- prod: i(p.prod)
294
- };
295
- return n && (s.sandbox = i(p.cert), s.production = i(p.prod)), o && (s["eu-cert"] = i(p["eu-cert"]), s["eu-prod"] = i(p["eu-prod"])), s;
296
- };
297
- var S;
269
+ ({
270
+ LOADED: "travel_rule_loaded",
271
+ COMPLETED: "travel_rule_completed"
272
+ }).LOADED;
273
+ //#endregion
274
+ //#region ../../../common/callbacks/dist/shared/models.js
275
+ var g;
298
276
  (function(e) {
299
- e.NETWORK_ERROR = "network_error", e.AUTH_ERROR = "auth_error", e.NOT_FOUND_ERROR = "not_found_error", e.VALIDATION_ERROR = "validation_error", e.SERVER_ERROR = "server_error", e.CLIENT_ERROR = "client_error", e.UNKNOWN_ERROR = "unknown_error";
300
- })(S || (S = {}));
301
- class H extends j {
302
- errorMessages = {
303
- ALREADY_RENDERED: "TravelRule widget is already rendered. Call destroy() before rendering again.",
304
- NOT_RENDERED: "TravelRule widget is not rendered. Call render() first.",
305
- INVALID_CONTAINER: "Invalid container element provided.",
306
- SCRIPT_LOAD_FAILED: "Failed to load the Zerohash TravelRule script.",
307
- WEB_COMPONENT_NOT_DEFINED: "Web component is not defined. Script may not be loaded."
308
- };
309
- scriptUrls = x("travel-rule-web", "index.js", { legacyAliases: !0, eu: !0 });
310
- webComponentTag = "zerohash-travel-rule";
311
- /**
312
- * Render the TravelRule widget to a container element
313
- * @param container - The container element to render the widget into
314
- * @returns Promise that resolves when the widget is rendered
315
- */
316
- render(t) {
317
- return super.render(t);
318
- }
319
- /**
320
- * Update the configuration of the TravelRule widget
321
- * @param config - Partial configuration to update
322
- */
323
- updateConfig(t) {
324
- return super.updateConfig(t);
325
- }
326
- /**
327
- * Get the current configuration
328
- * @returns The current configuration object
329
- */
330
- getConfig() {
331
- return super.getConfig();
332
- }
333
- /**
334
- * Check if the TravelRule widget is currently rendered
335
- * @returns True if the widget is rendered, false otherwise
336
- */
337
- isRendered() {
338
- return super.isRendered();
339
- }
340
- /**
341
- * Destroy the TravelRule widget and clean up resources
342
- */
343
- destroy() {
344
- return super.destroy();
345
- }
346
- }
347
- export {
348
- S as ErrorCode,
349
- H as TravelRule,
350
- H as default
277
+ e.NETWORK_ERROR = "network_error", e.AUTH_ERROR = "auth_error", e.NOT_FOUND_ERROR = "not_found_error", e.VALIDATION_ERROR = "validation_error", e.SERVER_ERROR = "server_error", e.CLIENT_ERROR = "client_error", e.UNKNOWN_ERROR = "unknown_error";
278
+ })(g ||= {});
279
+ //#endregion
280
+ //#region src/lib/travel-rule.ts
281
+ var _ = class extends f {
282
+ errorMessages = {
283
+ ALREADY_RENDERED: "TravelRule widget is already rendered. Call destroy() before rendering again.",
284
+ NOT_RENDERED: "TravelRule widget is not rendered. Call render() first.",
285
+ INVALID_CONTAINER: "Invalid container element provided.",
286
+ SCRIPT_LOAD_FAILED: "Failed to load the Zerohash TravelRule script.",
287
+ WEB_COMPONENT_NOT_DEFINED: "Web component is not defined. Script may not be loaded."
288
+ };
289
+ scriptUrls = h("travel-rule-web", "index.js", {
290
+ legacyAliases: !0,
291
+ eu: !0
292
+ });
293
+ webComponentTag = "zerohash-travel-rule";
294
+ render(e) {
295
+ return super.render(e);
296
+ }
297
+ updateConfig(e) {
298
+ return super.updateConfig(e);
299
+ }
300
+ getConfig() {
301
+ return super.getConfig();
302
+ }
303
+ isRendered() {
304
+ return super.isRendered();
305
+ }
306
+ destroy() {
307
+ return super.destroy();
308
+ }
351
309
  };
310
+ //#endregion
311
+ export { g as ErrorCode, _ as TravelRule, _ as default };
@@ -1 +1 @@
1
- (function(c,m){typeof exports=="object"&&typeof module<"u"?m(exports):typeof define=="function"&&define.amd?define(["exports"],m):(c=typeof globalThis<"u"?globalThis:c||self,m(c.TravelRule={}))})(this,(function(c){"use strict";const m="production",L="JWT token is required and must be a string.",I={dev:"https://grafana-faro-collector.dev.0hash.com/collect",cert:"https://grafana-faro-collector.cert.zerohash.com/collect",prod:"https://grafana-faro-collector.zerohash.com/collect","eu-cert":"https://grafana-faro-collector.cert.zerohash.eu/collect","eu-prod":"https://grafana-faro-collector.zerohash.eu/collect",sandbox:"https://grafana-faro-collector.cert.zerohash.com/collect",production:"https://grafana-faro-collector.zerohash.com/collect"},A=e=>{if(!e||typeof e!="string")return null;const t=e.split(".");if(t.length<2)return null;try{const r=t[1].replace(/-/g,"+").replace(/_/g,"/"),o=r+"===".slice(0,(4-r.length%4)%4),n=typeof atob<"u"?atob(o):Buffer.from(o,"base64").toString("utf-8"),i=JSON.parse(n)?.payload?.region;if(typeof i!="string")return null;const s=i.toLowerCase();return s==="us"||s==="eu"?s:null}catch{return null}},b=(e,t)=>A(t)!=="eu"?e:e==="cert"?"eu-cert":e==="prod"?"eu-prod":e,D=e=>{if(!e||typeof e!="string")return{};const t=e.split(".");if(t.length<2)return{};try{const r=t[1].replace(/-/g,"+").replace(/_/g,"/"),o=r+"===".slice(0,(4-r.length%4)%4),n=typeof atob<"u"?atob(o):Buffer.from(o,"base64").toString("utf-8"),a=JSON.parse(n),i=a?.payload??{},s=d=>typeof d=="string"&&d.length>0?d:void 0;return{participantCode:s(i.participant_code),platformName:s(i.platform_name),platformCode:s(a.platform_code),region:s(i.region)}}catch{return{}}},y=(e,t,r)=>{const o=b(t,r);return e[o]??e[t]??e.prod},z=(e,t,r)=>{const o=b(t,r);return e[o]??e[t]},_=()=>{},M=()=>{const e=new Uint8Array(8);return globalThis.crypto.getRandomValues(e),Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")},W=(e,t)=>{const r=M(),o=globalThis.__ZH_WEB_SDK_VERSION__,n={};e.claims.participantCode&&(n.participant_code=e.claims.participantCode),e.claims.platformName&&(n.platform_name=e.claims.platformName),e.claims.platformCode&&(n.platform_code=e.claims.platformCode),e.claims.region&&(n.region=e.claims.region),o&&(n.zh_web_sdk_version=o);const a={meta:{app:{name:e.appName,version:t??"unknown",environment:e.env},session:{id:r,attributes:n},browser:typeof navigator<"u"?{userAgent:navigator.userAgent}:void 0,page:typeof window<"u"?{url:window.location.origin}:void 0},logs:[{message:`Failed to load the script for ${e.webComponentTag} from ${e.env} environment.`,level:"error",timestamp:new Date().toISOString(),context:{web_component:e.webComponentTag,script_url:e.scriptUrl,reason:e.reason,tried_fallback:String(e.triedFallback),elapsed_ms:String(e.elapsedMs)}}]};return{sessionId:r,payload:a}},P=(e,t,r)=>{if(!e||typeof fetch>"u")return;const{sessionId:o,payload:n}=W(t,r);try{fetch(e,{method:"POST",headers:{"Content-Type":"application/json","x-faro-session-id":o},body:JSON.stringify(n),keepalive:!0}).catch(()=>{})}catch{}},k=e=>{const{webComponentTag:t,appName:r,appVersion:o,scriptUrls:n,fallbackScriptUrls:a,collectorUrls:i,env:s,jwt:d,timeoutMs:j=15e3,onLoad:B,onError:V}=e;if(typeof document>"u")return _;const g=`${t}-script-${s}`;if(customElements.get(t)||document.getElementById(g))return _;const J=D(d),H=e.report??(u=>P(i&&z(i,s,d),u,o));let f=!1,N=0,R;const E=()=>{R!==void 0&&clearTimeout(R)},w=(u,h,l)=>{if(f)return;const x=Math.round(performance.now()-N),O={webComponentTag:t,appName:r,env:s,scriptUrl:h,reason:u,triedFallback:l,elapsedMs:x,claims:J};H(O);const T=l?void 0:y(a??{},s,d);if(T&&T!==h){v(T,!0);return}f=!0,E(),document.getElementById(g)?.remove(),V?.(O)},v=(u,h)=>{E(),N=performance.now();const l=document.createElement("script");l.id=g,l.src=u,l.type="module",l.async=!0,l.onload=()=>{setTimeout(()=>{f||(customElements.get(t)?(f=!0,E(),B?.()):w("not-defined",u,h))},0)},l.onerror=()=>w("network",u,h),R=setTimeout(()=>w("timeout",u,h),j),document.getElementById(g)?.remove(),document.head.appendChild(l)},S=y(n,s,d);return S?(v(S,!1),()=>{f=!0,E()}):_};class U{config;state;scriptLoadingPromise;constructor(t){if(!t.jwt||typeof t.jwt!="string")throw new Error(L);this.config={...t,env:t.env||m,theme:t.theme},this.state={initialized:!1,scriptLoaded:!1,container:null,element:null}}async render(t){if(!t||!(t instanceof HTMLElement))throw new Error(this.errorMessages.INVALID_CONTAINER);if(this.state.initialized)throw new Error(this.errorMessages.ALREADY_RENDERED);try{await this.ensureScriptLoaded();const r=this.createWebComponent();t.innerHTML="",t.appendChild(r),this.state.container=t,this.state.element=r,this.state.initialized=!0}catch(r){throw console.error("Failed to render widget:",r),r}}updateConfig(t){if(!this.state.initialized||!this.state.element)throw new Error(this.errorMessages.NOT_RENDERED);const r=this.state.element;Object.entries(t).forEach(([o,n])=>{n&&(this.config[o]=n,r[o]=n)})}destroy(){this.state.initialized&&(this.state.element&&this.state.element.parentNode&&this.state.element.parentNode.removeChild(this.state.element),this.state.container&&(this.state.container.innerHTML=""),this.state.container=null,this.state.element=null,this.state.initialized=!1)}isRendered(){return this.state.initialized}getConfig(){return{...this.config}}getEnvironment(){return this.config.env||m}getScriptId(){return`${this.webComponentTag}-script-${this.getEnvironment()}`}isScriptLoaded(){return!!document.getElementById(this.getScriptId())}getWebComponent(){return customElements.get(this.webComponentTag)}getEffectiveScriptUrls(){return this.scriptUrls}async loadScript(){if(!(this.getWebComponent()||this.isScriptLoaded())){if(this.scriptLoadingPromise)return this.scriptLoadingPromise;this.scriptLoadingPromise=new Promise((t,r)=>{k({webComponentTag:this.webComponentTag,appName:this.webComponentTag,scriptUrls:this.getEffectiveScriptUrls(),collectorUrls:I,env:this.getEnvironment(),jwt:this.config.jwt,onLoad:t,onError:o=>{r(new Error(o.reason==="not-defined"?this.errorMessages.WEB_COMPONENT_NOT_DEFINED:`${this.errorMessages.SCRIPT_LOAD_FAILED} (${this.getEnvironment()})`))}})});try{await this.scriptLoadingPromise}catch(t){throw this.scriptLoadingPromise=void 0,t}return this.scriptLoadingPromise}}async waitForWebComponent(t=5e3){if(!this.getWebComponent())return new Promise((r,o)=>{const n=setTimeout(()=>{o(new Error(`Timeout waiting for ${this.webComponentTag} to be defined`))},t);customElements.whenDefined(this.webComponentTag).then(()=>{clearTimeout(n),r()}).catch(a=>{clearTimeout(n),o(a)})})}async ensureScriptLoaded(){if(!this.state.scriptLoaded)try{await this.loadScript(),await this.waitForWebComponent(),this.state.scriptLoaded=!0}catch(t){throw console.error("Failed to load Connect script:",t),t}}createWebComponent(){const t=document.createElement(this.webComponentTag);return Object.entries(this.config).forEach(([r,o])=>{o&&(t[r]=o)}),t}}const p={local:"http://localhost:5173",dev:"https://sdk-cdn.dev.0hash.com",cert:"https://sdk-cdn.cert.zerohash.com",prod:"https://sdk-cdn.zerohash.com","eu-cert":"https://sdk-cdn.cert.zerohash.eu","eu-prod":"https://sdk-cdn.zerohash.eu"},F="https://sdk-cdn.gating.0hash.com",$=(e,t,r={})=>{const{eu:o=!1,legacyAliases:n=!1,local:a=p.local}=r,i=d=>`${d}/${e}/${t}`,s={local:i(a),dev:i(p.dev),gating:i(F),cert:i(p.cert),prod:i(p.prod)};return n&&(s.sandbox=i(p.cert),s.production=i(p.prod)),o&&(s["eu-cert"]=i(p["eu-cert"]),s["eu-prod"]=i(p["eu-prod"])),s};c.ErrorCode=void 0,(function(e){e.NETWORK_ERROR="network_error",e.AUTH_ERROR="auth_error",e.NOT_FOUND_ERROR="not_found_error",e.VALIDATION_ERROR="validation_error",e.SERVER_ERROR="server_error",e.CLIENT_ERROR="client_error",e.UNKNOWN_ERROR="unknown_error"})(c.ErrorCode||(c.ErrorCode={}));class C extends U{errorMessages={ALREADY_RENDERED:"TravelRule widget is already rendered. Call destroy() before rendering again.",NOT_RENDERED:"TravelRule widget is not rendered. Call render() first.",INVALID_CONTAINER:"Invalid container element provided.",SCRIPT_LOAD_FAILED:"Failed to load the Zerohash TravelRule script.",WEB_COMPONENT_NOT_DEFINED:"Web component is not defined. Script may not be loaded."};scriptUrls=$("travel-rule-web","index.js",{legacyAliases:!0,eu:!0});webComponentTag="zerohash-travel-rule";render(t){return super.render(t)}updateConfig(t){return super.updateConfig(t)}getConfig(){return super.getConfig()}isRendered(){return super.isRendered()}destroy(){return super.destroy()}}c.TravelRule=C,c.default=C,Object.defineProperties(c,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.TravelRule={}))})(this,function(e){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var t=`JWT token is required and must be a string.`,n={dev:`https://grafana-faro-collector.dev.0hash.com/collect`,cert:`https://grafana-faro-collector.cert.zerohash.com/collect`,prod:`https://grafana-faro-collector.zerohash.com/collect`,"eu-cert":`https://grafana-faro-collector.cert.zerohash.eu/collect`,"eu-prod":`https://grafana-faro-collector.zerohash.eu/collect`,sandbox:`https://grafana-faro-collector.cert.zerohash.com/collect`,production:`https://grafana-faro-collector.zerohash.com/collect`},r=e=>{if(!e||typeof e!=`string`)return null;let t=e.split(`.`);if(t.length<2)return null;try{let e=t[1].replace(/-/g,`+`).replace(/_/g,`/`),n=e+`===`.slice(0,(4-e.length%4)%4),r=typeof atob<`u`?atob(n):Buffer.from(n,`base64`).toString(`utf-8`),i=JSON.parse(r)?.payload?.region;if(typeof i!=`string`)return null;let a=i.toLowerCase();return a===`us`||a===`eu`?a:null}catch{return null}},i=(e,t)=>r(t)===`eu`?e===`cert`?`eu-cert`:e===`prod`?`eu-prod`:e:e,a=e=>{if(!e||typeof e!=`string`)return{};let t=e.split(`.`);if(t.length<2)return{};try{let e=t[1].replace(/-/g,`+`).replace(/_/g,`/`),n=e+`===`.slice(0,(4-e.length%4)%4),r=typeof atob<`u`?atob(n):Buffer.from(n,`base64`).toString(`utf-8`),i=JSON.parse(r),a=i?.payload??{},o=e=>typeof e==`string`&&e.length>0?e:void 0;return{participantCode:o(a.participant_code),platformName:o(a.platform_name),platformCode:o(i.platform_code),region:o(a.region)}}catch{return{}}},o=(e,t,n)=>e[i(t,n)]??e[t]??e.prod,s=(e,t,n)=>e[i(t,n)]??e[t],c=()=>void 0,l=()=>{let e=new Uint8Array(8);return globalThis.crypto.getRandomValues(e),Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)},u=(e,t)=>{let n=l(),r=globalThis.__ZH_WEB_SDK_VERSION__,i={};return e.claims.participantCode&&(i.participant_code=e.claims.participantCode),e.claims.platformName&&(i.platform_name=e.claims.platformName),e.claims.platformCode&&(i.platform_code=e.claims.platformCode),e.claims.region&&(i.region=e.claims.region),r&&(i.zh_web_sdk_version=r),{sessionId:n,payload:{meta:{app:{name:e.appName,version:t??`unknown`,environment:e.env},session:{id:n,attributes:i},browser:typeof navigator<`u`?{userAgent:navigator.userAgent}:void 0,page:typeof window<`u`?{url:window.location.origin}:void 0},logs:[{message:`Failed to load the script for ${e.webComponentTag} from ${e.env} environment.`,level:`error`,timestamp:new Date().toISOString(),context:{web_component:e.webComponentTag,script_url:e.scriptUrl,reason:e.reason,tried_fallback:String(e.triedFallback),elapsed_ms:String(e.elapsedMs)}}]}}},d=(e,t,n)=>{if(!e||typeof fetch>`u`)return;let{sessionId:r,payload:i}=u(t,n);try{fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`,"x-faro-session-id":r},body:JSON.stringify(i),keepalive:!0}).catch(()=>void 0)}catch{}},f=e=>{let{webComponentTag:t,appName:n,appVersion:r,scriptUrls:i,fallbackScriptUrls:l,collectorUrls:u,env:f,jwt:p,timeoutMs:m=15e3,onLoad:h,onError:g}=e;if(typeof document>`u`)return c;let _=`${t}-script-${f}`;if(customElements.get(t)||document.getElementById(_))return c;let v=a(p),y=e.report??(e=>d(u&&s(u,f,p),e,r)),b=!1,x=0,S,C=()=>{S!==void 0&&clearTimeout(S)},w=(e,r,i)=>{if(b)return;let a=Math.round(performance.now()-x),s={webComponentTag:t,appName:n,env:f,scriptUrl:r,reason:e,triedFallback:i,elapsedMs:a,claims:v};y(s);let c=i?void 0:o(l??{},f,p);if(c&&c!==r){T(c,!0);return}b=!0,C(),document.getElementById(_)?.remove(),g?.(s)},T=(e,n)=>{C(),x=performance.now();let r=document.createElement(`script`);r.id=_,r.src=e,r.type=`module`,r.async=!0,r.onload=()=>{setTimeout(()=>{b||(customElements.get(t)?(b=!0,C(),h?.()):w(`not-defined`,e,n))},0)},r.onerror=()=>w(`network`,e,n),S=setTimeout(()=>w(`timeout`,e,n),m),document.getElementById(_)?.remove(),document.head.appendChild(r)},E=o(i,f,p);return E?(T(E,!1),()=>{b=!0,C()}):c},p=1e4,m=class{config;state;scriptLoadingPromise;constructor(e){if(!e.jwt||typeof e.jwt!=`string`)throw Error(t);this.config={...e,env:e.env||`production`,theme:e.theme},this.state={initialized:!1,scriptLoaded:!1,container:null,element:null}}async render(e){if(!e||!(e instanceof HTMLElement))throw Error(this.errorMessages.INVALID_CONTAINER);if(this.state.initialized)throw Error(this.errorMessages.ALREADY_RENDERED);try{await this.ensureScriptLoaded();let t=this.createWebComponent();e.innerHTML=``,e.appendChild(t),this.state.container=e,this.state.element=t,this.state.initialized=!0}catch(e){throw console.error(`Failed to render widget:`,e),e}}updateConfig(e){if(!this.state.initialized||!this.state.element)throw Error(this.errorMessages.NOT_RENDERED);let t=this.state.element;Object.entries(e).forEach(([e,n])=>{n&&(this.config[e]=n,t[e]=n)})}destroy(){this.state.initialized&&(this.state.element&&this.state.element.parentNode&&this.state.element.parentNode.removeChild(this.state.element),this.state.container&&(this.state.container.innerHTML=``),this.state.container=null,this.state.element=null,this.state.initialized=!1)}isRendered(){return this.state.initialized}getConfig(){return{...this.config}}getEnvironment(){return this.config.env||`production`}getScriptId(){return`${this.webComponentTag}-script-${this.getEnvironment()}`}isScriptLoaded(){return!!document.getElementById(this.getScriptId())}getWebComponent(){return customElements.get(this.webComponentTag)}getEffectiveScriptUrls(){return this.scriptUrls}async loadScript(){if(!(this.getWebComponent()||this.isScriptLoaded())){if(this.scriptLoadingPromise)return this.scriptLoadingPromise;this.scriptLoadingPromise=new Promise((e,t)=>{f({webComponentTag:this.webComponentTag,appName:this.webComponentTag,scriptUrls:this.getEffectiveScriptUrls(),collectorUrls:n,env:this.getEnvironment(),jwt:this.config.jwt,onLoad:e,onError:e=>{t(Error(e.reason===`not-defined`?this.errorMessages.WEB_COMPONENT_NOT_DEFINED:`${this.errorMessages.SCRIPT_LOAD_FAILED} (${this.getEnvironment()})`))}})});try{await this.scriptLoadingPromise}catch(e){throw this.scriptLoadingPromise=void 0,e}return this.scriptLoadingPromise}}async waitForWebComponent(){if(!this.getWebComponent())return new Promise((e,t)=>{let n=setTimeout(()=>{t(Error(`Timeout waiting for ${this.webComponentTag} to be defined`))},p);customElements.whenDefined(this.webComponentTag).then(()=>{clearTimeout(n),e()}).catch(e=>{clearTimeout(n),t(e)})})}async ensureScriptLoaded(){if(!this.state.scriptLoaded)try{await this.loadScript(),await this.waitForWebComponent(),this.state.scriptLoaded=!0}catch(e){throw console.error(`Failed to load Connect script:`,e),e}}createWebComponent(){let e=document.createElement(this.webComponentTag);return Object.entries(this.config).forEach(([t,n])=>{n&&(e[t]=n)}),e}},h={local:{BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_ASSETS_SERVICE_URL:`http://localhost:5173/assets`,VITE_CONNECT_API_BASE_URL:`/api/v1`,VITE_CONNECT_ENV:`local`,VITE_CONNECT_SDK_API_BASE_URL:`/sdk/v1`,VITE_DYNAMIC_ENVIRONMENT_ID:`38ce0330-c85e-414a-80b4-6129c548018f`,VITE_FARO_COLLECTOR_URL:`https://grafana-faro-collector.dev.0hash.com/collect`,VITE_FEATURE_SERVER_PROXY_URL:`https://ff-edge.dev.0hash.com/api/frontend`,VITE_INTERNAL_BUILD:`false`,VITE_ONBOARDING_API_BASE_URL:`/onboarding`,VITE_POST_MESSAGE_COMMUNICATION_PLATFORMS:`UW6VWU`,VITE_REDIRECT_HANDLER_URL:`http://localhost:4202/redirect-handler/index.html`,VITE_SCRAPER_EXTENSION_ID_CHROMIUM:`kofibejdfkmnbobmbogndbiimkflcllf`,VITE_TRADE_API_BASE_URL:`/trade`,VITE_UNLEASH_APIKEY:`zerohash-sdk:dev.b0d8aa594e9b94564f885167881bcb9dc69332f935fcb253e656ff34`}.VITE_LOCAL_CDN_HOST||`http://localhost:5173`,dev:`https://sdk-cdn.dev.0hash.com`,cert:`https://sdk-cdn.cert.zerohash.com`,prod:`https://sdk-cdn.zerohash.com`,"eu-cert":`https://sdk-cdn.cert.zerohash.eu`,"eu-prod":`https://sdk-cdn.zerohash.eu`},g=`https://sdk-cdn.gating.0hash.com`,_=(e,t,n={})=>{let{eu:r=!1,legacyAliases:i=!1,local:a=h.local}=n,o=n=>`${n}/${e}/${t}`,s={local:o(a),dev:o(h.dev),gating:o(g),cert:o(h.cert),prod:o(h.prod)};return i&&(s.sandbox=o(h.cert),s.production=o(h.prod)),r&&(s[`eu-cert`]=o(h[`eu-cert`]),s[`eu-prod`]=o(h[`eu-prod`])),s};({LOADED:`travel_rule_loaded`,COMPLETED:`travel_rule_completed`}).LOADED;var v;(function(e){e.NETWORK_ERROR=`network_error`,e.AUTH_ERROR=`auth_error`,e.NOT_FOUND_ERROR=`not_found_error`,e.VALIDATION_ERROR=`validation_error`,e.SERVER_ERROR=`server_error`,e.CLIENT_ERROR=`client_error`,e.UNKNOWN_ERROR=`unknown_error`})(v||={});var y=class extends m{errorMessages={ALREADY_RENDERED:`TravelRule widget is already rendered. Call destroy() before rendering again.`,NOT_RENDERED:`TravelRule widget is not rendered. Call render() first.`,INVALID_CONTAINER:`Invalid container element provided.`,SCRIPT_LOAD_FAILED:`Failed to load the Zerohash TravelRule script.`,WEB_COMPONENT_NOT_DEFINED:`Web component is not defined. Script may not be loaded.`};scriptUrls=_(`travel-rule-web`,`index.js`,{legacyAliases:!0,eu:!0});webComponentTag=`zerohash-travel-rule`;render(e){return super.render(e)}updateConfig(e){return super.updateConfig(e)}getConfig(){return super.getConfig()}isRendered(){return super.isRendered()}destroy(){return super.destroy()}};Object.defineProperty(e,"ErrorCode",{enumerable:!0,get:function(){return v}}),e.TravelRule=y,e.default=y});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerohash-sdk/travel-rule-js",
3
- "version": "0.7.3",
3
+ "version": "0.7.5",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",