@machinemetrics/mm-react-embeddable 2.0.0-0 → 2.0.0-2

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.
@@ -1,7 +1,7 @@
1
- import m, { createContext as ie, useContext as H, useState as C, useRef as R, useCallback as h, useEffect as k, useMemo as le } from "react";
2
- import T from "prop-types";
3
- import D from "styled-components";
4
- const Y = ie(null), J = ie({
1
+ import E, { createContext as ce, useContext as Z, useState as M, useRef as R, useCallback as g, useEffect as w, useMemo as le } from "react";
2
+ import U from "prop-types";
3
+ import K from "styled-components";
4
+ const Y = ce(null), J = ce({
5
5
  pending: [],
6
6
  authorize: () => {
7
7
  },
@@ -14,131 +14,131 @@ const Y = ie(null), J = ie({
14
14
  originEpochs: {},
15
15
  credentials: {},
16
16
  unsupported: {}
17
- }), ae = "access_token", ne = (t) => t ? t.kind ? t : t.accessToken ? {
18
- kind: ae,
19
- accessToken: t.accessToken,
20
- expiresAt: t.expiresAt || null
21
- } : null : null, de = /* @__PURE__ */ new Set(["host_not_allowed", "invalid_token", "provider_unavailable"]), X = typeof window != "undefined" && window.location.protocol === "https:", fe = 8e3, Q = (t) => {
17
+ }), de = "access_token", re = (r) => r ? r.kind ? r : r.accessToken ? {
18
+ kind: de,
19
+ accessToken: r.accessToken,
20
+ expiresAt: r.expiresAt || null
21
+ } : null : null, fe = /* @__PURE__ */ new Set(["host_not_allowed", "invalid_token", "provider_unavailable"]), X = typeof window != "undefined" && window.location.protocol === "https:", pe = 8e3, Q = (r) => {
22
22
  try {
23
- return new URL(t).origin;
23
+ return new URL(r).origin;
24
24
  } catch {
25
25
  return null;
26
26
  }
27
- }, re = (t, s) => {
28
- const i = s == null ? void 0 : s.origin;
29
- return !i || Q(t == null ? void 0 : t.authUrl) !== i ? null : i;
30
- }, se = (t) => {
31
- if (!t || /^\d{1,3}(?:\.\d{1,3}){3}$/.test(t) || t.includes(":"))
32
- return t;
33
- const s = t.split(".");
34
- return s.length <= 2 ? t : s.slice(-2).join(".");
35
- }, pe = (t, s) => {
27
+ }, ne = (r, o) => {
28
+ const c = o == null ? void 0 : o.origin;
29
+ return !c || Q(r == null ? void 0 : r.authUrl) !== c ? null : c;
30
+ }, oe = (r) => {
31
+ if (!r || /^\d{1,3}(?:\.\d{1,3}){3}$/.test(r) || r.includes(":"))
32
+ return r;
33
+ const o = r.split(".");
34
+ return o.length <= 2 ? r : o.slice(-2).join(".");
35
+ }, me = (r, o) => {
36
36
  try {
37
- const i = new URL(t), d = new URL(s);
38
- return i.protocol !== d.protocol ? !0 : se(i.hostname) !== se(d.hostname);
37
+ const c = new URL(r), a = new URL(o);
38
+ return c.protocol !== a.protocol ? !0 : oe(c.hostname) !== oe(a.hostname);
39
39
  } catch {
40
40
  return !0;
41
41
  }
42
- }, ge = (t, { onBlocked: s, onClosed: i }) => {
43
- const d = window.open(
44
- t.authUrl,
42
+ }, he = (r, { onBlocked: o, onClosed: c }) => {
43
+ const a = window.open(
44
+ r.authUrl,
45
45
  "mm-embed-auth",
46
46
  "popup,width=600,height=700"
47
47
  );
48
- if (!d)
49
- return s(), () => {
48
+ if (!a)
49
+ return o(), () => {
50
50
  };
51
- const f = setInterval(() => {
52
- d.closed && (clearInterval(f), i());
51
+ const p = setInterval(() => {
52
+ a.closed && (clearInterval(p), c());
53
53
  }, 1e3);
54
- return () => clearInterval(f);
55
- }, ce = ({ children: t, launcher: s, broker: i }) => {
56
- const d = H(Y), [f, b] = C({}), [B, I] = C({}), [M, _] = C({}), [A, y] = C({}), W = R(M);
57
- W.current = M;
58
- const E = R(f);
59
- E.current = f;
60
- const L = R(null), K = R({}), O = R({}), q = R({}), j = R(i);
61
- j.current = i;
62
- const z = h((e) => {
63
- const n = O.current[e];
64
- if (!n)
54
+ return () => clearInterval(p);
55
+ }, ue = ({ children: r, launcher: o, broker: c }) => {
56
+ const a = Z(Y), [p, m] = M({}), [L, T] = M({}), [y, d] = M({}), [I, C] = M({}), v = R(y);
57
+ v.current = y;
58
+ const b = R(p);
59
+ b.current = p;
60
+ const $ = R(null), G = R({}), O = R({}), j = R({}), P = R(c);
61
+ P.current = c;
62
+ const A = g((e) => {
63
+ const t = O.current[e];
64
+ if (!t)
65
65
  return;
66
- const r = (l) => !l[e] || l[e].clientId ? l : { ...l, [e]: { ...l[e], clientId: n } };
67
- b(r), y(r);
68
- }, []), c = h(
69
- (e, n) => {
70
- e && (y((r) => r[e] ? r : {
71
- ...r,
72
- [e]: { origin: e, reason: n, clientId: O.current[e] || null }
73
- }), z(e));
66
+ const n = (i) => !i[e] || i[e].clientId ? i : { ...i, [e]: { ...i[e], clientId: t } };
67
+ m(n), C(n);
68
+ }, []), u = g(
69
+ (e, t) => {
70
+ e && (C((n) => n[e] ? n : {
71
+ ...n,
72
+ [e]: { origin: e, reason: t, clientId: O.current[e] || null }
73
+ }), A(e));
74
74
  },
75
- [z]
76
- ), u = h(
77
- (e, { v2: n = !1, origin: r = null } = {}) => {
78
- r && (n && W.current[r] || (b((l) => l[r] ? l : {
79
- ...l,
80
- [r]: {
81
- origin: r,
75
+ [A]
76
+ ), l = g(
77
+ (e, { v2: t = !1, origin: n = null } = {}) => {
78
+ n && (t && v.current[n] || (m((i) => i[n] ? i : {
79
+ ...i,
80
+ [n]: {
81
+ origin: n,
82
82
  authUrl: e.authUrl,
83
83
  silentUrl: e.silentUrl || null,
84
84
  // v2 entries try the invisible silent resolver first — but only on a host that can
85
85
  // frame login (https). Otherwise (and for legacy signals) go straight to interactive,
86
86
  // so an http host doesn't wait out a silent frame that can never load login.
87
- status: n && j.current ? "broker" : n && e.silentUrl && X ? "silent" : "interactive",
88
- v2: n,
87
+ status: t && P.current ? "broker" : t && e.silentUrl && X ? "silent" : "interactive",
88
+ v2: t,
89
89
  // v1.9: the scope the guest asked for; forwarded verbatim to the broker.
90
90
  scope: e.scope || null,
91
- acceptsCredentials: q.current[r] || null,
91
+ acceptsCredentials: j.current[n] || null,
92
92
  consent: null,
93
93
  error: null,
94
94
  // clientId from the request payload (v2) or the cached init (legacy);
95
95
  // the host resolves the display name from it.
96
- clientId: e.clientId || O.current[r] || null,
96
+ clientId: e.clientId || O.current[n] || null,
97
97
  popupBlocked: !1
98
98
  }
99
- }), z(r)));
99
+ }), A(n)));
100
100
  },
101
- [z]
102
- ), o = h((e) => {
103
- b((n) => {
104
- if (!n[e])
105
- return n;
106
- const r = { ...n };
107
- return delete r[e], r;
101
+ [A]
102
+ ), s = g((e) => {
103
+ m((t) => {
104
+ if (!t[e])
105
+ return t;
106
+ const n = { ...t };
107
+ return delete n[e], n;
108
108
  });
109
- }, []), a = h(
109
+ }, []), f = g(
110
110
  (e) => {
111
- e && (o(e), I((n) => ({
112
- ...n,
113
- [e]: (n[e] || 0) + 1
111
+ e && (s(e), T((t) => ({
112
+ ...t,
113
+ [e]: (t[e] || 0) + 1
114
114
  })));
115
115
  },
116
- [o]
117
- ), p = h((e) => {
118
- b((n) => !n[e] || n[e].status === "interactive" ? n : {
119
- ...n,
120
- [e]: { ...n[e], status: "interactive" }
116
+ [s]
117
+ ), x = g((e) => {
118
+ m((t) => !t[e] || t[e].status === "interactive" ? t : {
119
+ ...t,
120
+ [e]: { ...t[e], status: "interactive" }
121
121
  });
122
- }, []), w = h(
122
+ }, []), z = g(
123
123
  (e) => {
124
- o(e.origin);
124
+ s(e.origin);
125
125
  },
126
- [o]
127
- ), $ = h(
128
- (e, n) => {
129
- const r = re(e, n);
130
- if (r) {
131
- if (pe(r, window.location.origin)) {
132
- c(r, "cross-site-legacy");
126
+ [s]
127
+ ), S = g(
128
+ (e, t) => {
129
+ const n = ne(e, t);
130
+ if (n) {
131
+ if (me(n, window.location.origin)) {
132
+ u(n, "cross-site-legacy");
133
133
  return;
134
134
  }
135
- u(e, { origin: r });
135
+ l(e, { origin: n });
136
136
  }
137
137
  },
138
- [u, c]
138
+ [l, u]
139
139
  );
140
- k(() => {
141
- if (!d)
140
+ w(() => {
141
+ if (!a)
142
142
  return;
143
143
  const e = [
144
144
  // `init` carries the app's OAuth clientId. Cache it by the ATTESTED app
@@ -147,168 +147,168 @@ const Y = ie(null), J = ie({
147
147
  // signals, so it is usually cached by the time an entry is created. The
148
148
  // clientId is only a lookup key: the host resolves the display name from
149
149
  // it, and a broker binds it to the attested origin server-side.
150
- d.addListener("*", "init", (n, r) => {
151
- r != null && r.origin && (n != null && n.clientId) && (O.current[r.origin] = n.clientId, z(r.origin)), r != null && r.origin && Array.isArray(n == null ? void 0 : n.acceptsCredentials) && (q.current[r.origin] = n.acceptsCredentials);
150
+ a.addListener("*", "init", (t, n) => {
151
+ n != null && n.origin && (t != null && t.clientId) && (O.current[n.origin] = t.clientId, A(n.origin)), n != null && n.origin && Array.isArray(t == null ? void 0 : t.acceptsCredentials) && (j.current[n.origin] = t.acceptsCredentials);
152
152
  }),
153
- d.addListener("*", "authorize", $),
154
- d.addListener("*", "login", $),
155
- d.addListener(
153
+ a.addListener("*", "authorize", S),
154
+ a.addListener("*", "login", S),
155
+ a.addListener(
156
156
  "*",
157
157
  "credential-request",
158
- (n, r) => u(n, { v2: !0, origin: re(n, r) })
158
+ (t, n) => l(t, { v2: !0, origin: ne(t, n) })
159
159
  )
160
160
  ];
161
- return () => e.forEach((n) => n());
162
- }, [d, $, u, z]), k(() => {
163
- const e = (n) => {
164
- const r = n == null ? void 0 : n.data;
165
- if (!r || r.type !== "authorized" && r.type !== "authorize-failed")
161
+ return () => e.forEach((t) => t());
162
+ }, [a, S, l, A]), w(() => {
163
+ const e = (t) => {
164
+ const n = t == null ? void 0 : t.data;
165
+ if (!n || n.type !== "authorized" && n.type !== "authorize-failed")
166
166
  return;
167
- const l = Q(r.authUrl);
168
- if (!(!l || n.origin !== l)) {
169
- if (r.type === "authorized") {
170
- if (r.accessToken) {
171
- if (!E.current[l])
167
+ const i = Q(n.authUrl);
168
+ if (!(!i || t.origin !== i)) {
169
+ if (n.type === "authorized") {
170
+ if (n.accessToken) {
171
+ if (!b.current[i])
172
172
  return;
173
- _((g) => ({
174
- ...g,
175
- [l]: ne({ accessToken: r.accessToken })
176
- })), o(l);
173
+ d((h) => ({
174
+ ...h,
175
+ [i]: re({ accessToken: n.accessToken })
176
+ })), s(i);
177
177
  } else
178
- a(l);
178
+ f(i);
179
179
  return;
180
180
  }
181
- p(l);
181
+ x(i);
182
182
  }
183
183
  };
184
184
  return window.addEventListener("message", e), () => window.removeEventListener("message", e);
185
- }, [o, a, p]);
186
- const U = h(
187
- (e, n) => {
188
- const r = e == null ? void 0 : e.origin, l = ne(n);
189
- !r || !l || (_((g) => ({ ...g, [r]: l })), o(r));
185
+ }, [s, f, x]);
186
+ const _ = g(
187
+ (e, t) => {
188
+ const n = e == null ? void 0 : e.origin, i = re(t);
189
+ !n || !i || (d((h) => ({ ...h, [n]: i })), s(n));
190
190
  },
191
- [o]
192
- ), x = h((e, n) => {
193
- b((r) => r[e] ? { ...r, [e]: { ...r[e], ...n } } : r);
194
- }, []), S = h(
195
- async (e, { approve: n } = {}) => {
196
- const r = j.current, { origin: l } = e;
197
- let g;
191
+ [s]
192
+ ), k = g((e, t) => {
193
+ m((n) => n[e] ? { ...n, [e]: { ...n[e], ...t } } : n);
194
+ }, []), F = g(
195
+ async (e, { approve: t } = {}) => {
196
+ const n = P.current, { origin: i } = e;
197
+ let h;
198
198
  try {
199
- g = await r(
200
- { origin: l, clientId: e.clientId, scope: e.scope, authUrl: e.authUrl },
201
- { approve: n }
199
+ h = await n(
200
+ { origin: i, clientId: e.clientId, scope: e.scope, authUrl: e.authUrl },
201
+ { approve: t }
202
202
  );
203
203
  } catch {
204
- n ? x(l, { error: { reason: "broker_unavailable" } }) : x(l, {
204
+ t ? k(i, { error: { reason: "broker_unavailable" } }) : k(i, {
205
205
  status: e.silentUrl && X ? "silent" : "interactive"
206
206
  });
207
207
  return;
208
208
  }
209
- if ((g == null ? void 0 : g.status) === 200 && g.credential) {
210
- U(e, g.credential);
209
+ if ((h == null ? void 0 : h.status) === 200 && h.credential) {
210
+ _(e, h.credential);
211
211
  return;
212
212
  }
213
- if ((g == null ? void 0 : g.status) === 409 && g.consentRequired) {
214
- x(l, {
213
+ if ((h == null ? void 0 : h.status) === 409 && h.consentRequired) {
214
+ k(i, {
215
215
  status: "interactive",
216
216
  consent: {
217
- client: g.client || null,
218
- stepUp: !!g.stepUp,
219
- scope: g.scope || e.scope
217
+ client: h.client || null,
218
+ stepUp: !!h.stepUp,
219
+ scope: h.scope || e.scope
220
220
  },
221
221
  error: null
222
222
  });
223
223
  return;
224
224
  }
225
- const N = (g == null ? void 0 : g.error) || "broker_error";
226
- if (!n && de.has(N)) {
227
- x(l, {
225
+ const N = (h == null ? void 0 : h.error) || "broker_error";
226
+ if (!t && fe.has(N)) {
227
+ k(i, {
228
228
  status: e.silentUrl && X ? "silent" : "interactive"
229
229
  });
230
230
  return;
231
231
  }
232
- if (n && N === "consent_denied") {
233
- x(l, { error: null });
232
+ if (t && N === "consent_denied") {
233
+ k(i, { error: null });
234
234
  return;
235
235
  }
236
- o(l), y((te) => ({
236
+ s(i), C((te) => ({
237
237
  ...te,
238
- [l]: {
239
- origin: l,
238
+ [i]: {
239
+ origin: i,
240
240
  reason: `broker:${N}`,
241
- detail: g || null,
242
- clientId: e.clientId || O.current[l] || null
241
+ detail: h || null,
242
+ clientId: e.clientId || O.current[i] || null
243
243
  }
244
244
  }));
245
245
  },
246
- [U, x, o]
247
- ), v = R({});
248
- k(() => {
249
- Object.values(f).forEach((e) => {
250
- e.status !== "broker" || v.current[e.origin] || (v.current[e.origin] = !0, S(e).finally(() => {
251
- delete v.current[e.origin];
246
+ [_, k, s]
247
+ ), q = R({});
248
+ w(() => {
249
+ Object.values(p).forEach((e) => {
250
+ e.status !== "broker" || q.current[e.origin] || (q.current[e.origin] = !0, F(e).finally(() => {
251
+ delete q.current[e.origin];
252
252
  }));
253
253
  });
254
- }, [f, S]);
255
- const F = h(
256
- (e) => !j.current || !(e != null && e.consent) ? Promise.resolve() : S(e, { approve: !0 }),
257
- [S]
254
+ }, [p, F]);
255
+ const B = g(
256
+ (e) => !P.current || !(e != null && e.consent) ? Promise.resolve() : F(e, { approve: !0 }),
257
+ [F]
258
258
  );
259
- k(() => {
260
- const e = K.current;
261
- Object.values(f).forEach((n) => {
262
- n.status === "silent" && !e[n.origin] && (e[n.origin] = setTimeout(() => {
263
- delete e[n.origin], p(n.origin);
264
- }, fe));
265
- }), Object.keys(e).forEach((n) => {
266
- (!f[n] || f[n].status !== "silent") && (clearTimeout(e[n]), delete e[n]);
259
+ w(() => {
260
+ const e = G.current;
261
+ Object.values(p).forEach((t) => {
262
+ t.status === "silent" && !e[t.origin] && (e[t.origin] = setTimeout(() => {
263
+ delete e[t.origin], x(t.origin);
264
+ }, pe));
265
+ }), Object.keys(e).forEach((t) => {
266
+ (!p[t] || p[t].status !== "silent") && (clearTimeout(e[t]), delete e[t]);
267
267
  });
268
- }, [f, p]), k(() => () => {
269
- L.current && L.current(), Object.values(K.current).forEach(clearTimeout);
268
+ }, [p, x]), w(() => () => {
269
+ $.current && $.current(), Object.values(G.current).forEach(clearTimeout);
270
270
  }, []);
271
- const Z = h(
271
+ const D = g(
272
272
  (e) => {
273
- L.current && (L.current(), L.current = null);
274
- const n = s || ge;
275
- L.current = n(e, {
273
+ $.current && ($.current(), $.current = null);
274
+ const t = o || he;
275
+ $.current = t(e, {
276
276
  onBlocked: () => {
277
- b((r) => r[e.origin] ? {
278
- ...r,
279
- [e.origin]: { ...r[e.origin], popupBlocked: !0 }
280
- } : r);
277
+ m((n) => n[e.origin] ? {
278
+ ...n,
279
+ [e.origin]: { ...n[e.origin], popupBlocked: !0 }
280
+ } : n);
281
281
  },
282
282
  onClosed: () => {
283
283
  if (e.v2) {
284
- X && b((r) => !r[e.origin] || !r[e.origin].silentUrl ? r : {
285
- ...r,
286
- [e.origin]: { ...r[e.origin], status: "silent" }
284
+ X && m((n) => !n[e.origin] || !n[e.origin].silentUrl ? n : {
285
+ ...n,
286
+ [e.origin]: { ...n[e.origin], status: "silent" }
287
287
  });
288
288
  return;
289
289
  }
290
- a(e.origin);
290
+ f(e.origin);
291
291
  }
292
292
  });
293
293
  },
294
- [s, a]
295
- ), G = {
294
+ [o, f]
295
+ ), H = {
296
296
  // Hosts render UI for interactive entries only; silent resolution is
297
297
  // invisible by design.
298
- pending: Object.values(f).filter(
298
+ pending: Object.values(p).filter(
299
299
  (e) => e.status === "interactive"
300
300
  ),
301
- authorize: Z,
302
- approve: F,
303
- complete: U,
304
- dismiss: w,
305
- originEpochs: B,
306
- credentials: M,
307
- unsupported: A
308
- }, P = Object.values(f).filter(
301
+ authorize: D,
302
+ approve: B,
303
+ complete: _,
304
+ dismiss: z,
305
+ originEpochs: L,
306
+ credentials: y,
307
+ unsupported: I
308
+ }, W = Object.values(p).filter(
309
309
  (e) => e.status === "silent" && e.silentUrl
310
310
  );
311
- return /* @__PURE__ */ m.createElement(J.Provider, { value: G }, t, P.map((e) => /* @__PURE__ */ m.createElement(
311
+ return /* @__PURE__ */ E.createElement(J.Provider, { value: H }, r, W.map((e) => /* @__PURE__ */ E.createElement(
312
312
  "iframe",
313
313
  {
314
314
  key: `mm-silent-auth-${e.origin}`,
@@ -320,9 +320,9 @@ const Y = ie(null), J = ie({
320
320
  }
321
321
  )));
322
322
  };
323
- ce.propTypes = {
324
- children: T.node,
325
- launcher: T.func,
323
+ ue.propTypes = {
324
+ children: U.node,
325
+ launcher: U.func,
326
326
  /**
327
327
  * `async (request, { approve }) => result` where request =
328
328
  * `{ origin, clientId, scope, authUrl }` (origin is the zone-attested frame origin) and result
@@ -330,169 +330,169 @@ ce.propTypes = {
330
330
  * client }`, `{ status: 409, consentRequired: true, client: { name, hostname }, stepUp }`, or
331
331
  * `{ status, error }`. Provided only by hosts that are themselves first-party clients.
332
332
  */
333
- broker: T.func
333
+ broker: U.func
334
334
  };
335
- const he = () => H(J), me = (t) => {
336
- const { originEpochs: s } = H(J), i = Q(t);
337
- return i && s[i] || 0;
338
- }, be = (t) => {
339
- const { credentials: s } = H(J), i = Q(t);
340
- return i && s[i] || null;
341
- }, Ee = (t) => {
342
- const { unsupported: s } = H(J), i = Q(t);
343
- return i && s[i] || null;
344
- }, we = ({ children: t, authorizationLauncher: s, credentialBroker: i }) => {
345
- const [d, f] = C({}), [b, B] = C({}), I = R({}), M = R({}), _ = R({}), A = h((c, u) => {
346
- var o;
347
- return !!((o = _.current[c]) != null && o.has(u));
348
- }, []), y = h((c, u, o) => {
349
- f((a) => ({ ...a, [c]: { origin: u, frameRef: o } }));
350
- }, []), W = h((c) => {
351
- f((u) => {
352
- const o = { ...u };
353
- return delete o[c], o;
354
- }), B((u) => {
355
- const o = { ...u };
356
- return delete o[c], o;
357
- }), delete _.current[c];
335
+ const ge = () => Z(J), be = (r) => {
336
+ const { originEpochs: o } = Z(J), c = Q(r);
337
+ return c && o[c] || 0;
338
+ }, Ee = (r) => {
339
+ const { credentials: o } = Z(J), c = Q(r);
340
+ return c && o[c] || null;
341
+ }, ke = (r) => {
342
+ const { unsupported: o } = Z(J), c = Q(r);
343
+ return c && o[c] || null;
344
+ }, we = ({ children: r, authorizationLauncher: o, credentialBroker: c }) => {
345
+ const [a, p] = M({}), [m, L] = M({}), T = R({}), y = R({}), d = R({}), I = g((u, l) => {
346
+ var s;
347
+ return !!((s = d.current[u]) != null && s.has(l));
348
+ }, []), C = g((u, l, s) => {
349
+ p((f) => ({ ...f, [u]: { origin: l, frameRef: s } }));
350
+ }, []), v = g((u) => {
351
+ p((l) => {
352
+ const s = { ...l };
353
+ return delete s[u], s;
354
+ }), L((l) => {
355
+ const s = { ...l };
356
+ return delete s[u], s;
357
+ }), delete d.current[u];
358
358
  }, []);
359
- k(() => {
360
- const c = (o = [], a, p) => {
361
- o.forEach((w) => w(a, p));
362
- }, u = (o) => {
363
- var S, v, F, Z, G, P, e;
364
- if (!((S = o == null ? void 0 : o.data) != null && S.instanceId))
359
+ w(() => {
360
+ const u = (s = [], f, x) => {
361
+ s.forEach((z) => z(f, x));
362
+ }, l = (s) => {
363
+ var F, q, B, D, H, W, e;
364
+ if (!((F = s == null ? void 0 : s.data) != null && F.instanceId))
365
365
  return;
366
- const { instanceId: a, type: p } = o.data, w = d[a], $ = (F = (v = w == null ? void 0 : w.frameRef) == null ? void 0 : v.current) == null ? void 0 : F.contentWindow;
367
- if (!$ || o.source !== $ || o.origin !== w.origin)
366
+ const { instanceId: f, type: x } = s.data, z = a[f], S = (B = (q = z == null ? void 0 : z.frameRef) == null ? void 0 : q.current) == null ? void 0 : B.contentWindow;
367
+ if (!S || s.source !== S || s.origin !== z.origin)
368
368
  return;
369
- const U = { origin: o.origin }, x = I.current;
370
- if (p === "response") {
371
- const { callbackId: n, response: r, error: l } = o.data, g = M.current[n];
372
- g && (g(r, l), delete M.current[n]);
369
+ const _ = { origin: s.origin }, k = T.current;
370
+ if (x === "response") {
371
+ const { callbackId: t, response: n, error: i } = s.data, h = y.current[t];
372
+ h && (h(n, i), delete y.current[t]);
373
373
  return;
374
374
  }
375
- if (p === "mark-registered") {
376
- const { requestType: n } = o.data;
377
- _.current[a] || (_.current[a] = /* @__PURE__ */ new Set()), _.current[a].add(n);
375
+ if (x === "mark-registered") {
376
+ const { requestType: t } = s.data;
377
+ d.current[f] || (d.current[f] = /* @__PURE__ */ new Set()), d.current[f].add(t);
378
378
  return;
379
379
  }
380
- p === "ready" && B((n) => ({ ...n, [a]: !0 })), c((Z = x[a]) == null ? void 0 : Z[p], o.data, U), c((G = x["*"]) == null ? void 0 : G[p], o.data, U), c((P = x[a]) == null ? void 0 : P["*"], o.data, U), c((e = x["*"]) == null ? void 0 : e["*"], o.data, U);
380
+ x === "ready" && L((t) => ({ ...t, [f]: !0 })), u((D = k[f]) == null ? void 0 : D[x], s.data, _), u((H = k["*"]) == null ? void 0 : H[x], s.data, _), u((W = k[f]) == null ? void 0 : W["*"], s.data, _), u((e = k["*"]) == null ? void 0 : e["*"], s.data, _);
381
381
  };
382
- return window.addEventListener("message", u), () => {
383
- window.removeEventListener("message", u);
382
+ return window.addEventListener("message", l), () => {
383
+ window.removeEventListener("message", l);
384
384
  };
385
- }, [d]);
386
- const E = h(
387
- (c, u, o) => {
388
- var p, w;
389
- const a = d[c];
390
- if (!a) {
391
- console.warn(`Origin not set for id: ${c}. Unable to send message.`);
385
+ }, [a]);
386
+ const b = g(
387
+ (u, l, s) => {
388
+ var x, z;
389
+ const f = a[u];
390
+ if (!f) {
391
+ console.warn(`Origin not set for id: ${u}. Unable to send message.`);
392
392
  return;
393
393
  }
394
- (w = (p = a == null ? void 0 : a.frameRef) == null ? void 0 : p.current) != null && w.contentWindow && a.frameRef.current.contentWindow.postMessage(
395
- { type: u, ...o, instanceId: c },
396
- a.origin
394
+ (z = (x = f == null ? void 0 : f.frameRef) == null ? void 0 : x.current) != null && z.contentWindow && f.frameRef.current.contentWindow.postMessage(
395
+ { type: l, ...s, instanceId: u },
396
+ f.origin
397
397
  );
398
398
  },
399
- [d]
400
- ), L = R(0), K = h(() => `${Date.now()}-${++L.current}`, []), O = h(
401
- async (c, u, o = {}) => new Promise((a, p) => {
402
- const w = K(), $ = (U, x) => {
403
- delete M.current[w], x ? p(x) : a(U);
399
+ [a]
400
+ ), $ = R(0), G = g(() => `${Date.now()}-${++$.current}`, []), O = g(
401
+ async (u, l, s = {}) => new Promise((f, x) => {
402
+ const z = G(), S = (_, k) => {
403
+ delete y.current[z], k ? x(k) : f(_);
404
404
  };
405
- M.current[w] = $, E(c, "request", { callbackId: w, requestType: u, data: o });
405
+ y.current[z] = S, b(u, "request", { callbackId: z, requestType: l, data: s });
406
406
  }),
407
- [E]
408
- ), q = h(
409
- (c, u) => {
410
- E(c, "load-options", u);
407
+ [b]
408
+ ), j = g(
409
+ (u, l) => {
410
+ b(u, "load-options", l);
411
411
  },
412
- [E]
413
- ), j = h(
414
- (c, u) => {
415
- E(c, "validate", u);
412
+ [b]
413
+ ), P = g(
414
+ (u, l) => {
415
+ b(u, "validate", l);
416
416
  },
417
- [E]
418
- ), z = le(
417
+ [b]
418
+ ), A = le(
419
419
  () => ({
420
- registerFrame: y,
421
- unregisterFrame: W,
422
- sendMessage: E,
420
+ registerFrame: C,
421
+ unregisterFrame: v,
422
+ sendMessage: b,
423
423
  sendRequest: O,
424
- loadOptions: q,
425
- validate: j,
426
- hasHandler: A,
427
- readyFrames: b,
428
- addListener: (c, u, o) => (I.current[c] || (I.current[c] = {}), I.current[c][u] || (I.current[c][u] = []), I.current[c][u].push(o), () => {
429
- I.current[c][u] = I.current[c][u].filter((a) => a !== o);
424
+ loadOptions: j,
425
+ validate: P,
426
+ hasHandler: I,
427
+ readyFrames: m,
428
+ addListener: (u, l, s) => (T.current[u] || (T.current[u] = {}), T.current[u][l] || (T.current[u][l] = []), T.current[u][l].push(s), () => {
429
+ T.current[u][l] = T.current[u][l].filter((f) => f !== s);
430
430
  })
431
431
  }),
432
432
  [
433
- y,
434
- W,
435
- E,
433
+ C,
434
+ v,
435
+ b,
436
436
  O,
437
- q,
438
437
  j,
439
- A,
440
- b
438
+ P,
439
+ I,
440
+ m
441
441
  ]
442
442
  );
443
- return /* @__PURE__ */ m.createElement(Y.Provider, { value: z }, /* @__PURE__ */ m.createElement(ce, { launcher: s, broker: i }, t));
444
- }, V = (t, s, i) => {
445
- const d = H(Y);
446
- if (d === null)
443
+ return /* @__PURE__ */ E.createElement(Y.Provider, { value: A }, /* @__PURE__ */ E.createElement(ue, { launcher: o, broker: c }, r));
444
+ }, V = (r, o, c) => {
445
+ const a = Z(Y);
446
+ if (a === null)
447
447
  throw new Error(
448
448
  "useEmbeddedEffect must be used within a MMEmbeddableZoneProvider"
449
449
  );
450
- const f = R(i);
451
- k(() => {
452
- f.current = i;
453
- }, [i]), k(() => {
454
- if (!(!t || !s)) {
455
- if (s.startsWith("key:")) {
456
- const b = s.substring(4);
457
- return d.readyFrames[t] && d.sendMessage(t, "subscribe-key", { keyChord: b }), d.addListener(
458
- t,
459
- `key-pressed:${b}`,
460
- (...I) => f.current(...I)
450
+ const p = R(c);
451
+ w(() => {
452
+ p.current = c;
453
+ }, [c]), w(() => {
454
+ if (!(!r || !o)) {
455
+ if (o.startsWith("key:")) {
456
+ const m = o.substring(4);
457
+ return a.readyFrames[r] && a.sendMessage(r, "subscribe-key", { keyChord: m }), a.addListener(
458
+ r,
459
+ `key-pressed:${m}`,
460
+ (...T) => p.current(...T)
461
461
  );
462
462
  }
463
- return d.addListener(
464
- t,
465
- s,
466
- (...b) => f.current(...b)
463
+ return a.addListener(
464
+ r,
465
+ o,
466
+ (...m) => p.current(...m)
467
467
  );
468
468
  }
469
- }, [d, t, s]);
469
+ }, [a, r, o]);
470
470
  };
471
471
  we.propTypes = {
472
- children: T.node.isRequired,
472
+ children: U.node.isRequired,
473
473
  /**
474
474
  * Optional interactive-step launcher for embedded authorizations,
475
475
  * `(entry, { onBlocked, onClosed }) => cleanup`. Defaults to a top-level
476
476
  * popup. Hosts that cannot open windows (Android WebView shells) drive
477
477
  * their own UI from useEmbeddedAuthorizations() instead.
478
478
  */
479
- authorizationLauncher: T.func,
479
+ authorizationLauncher: U.func,
480
480
  /**
481
481
  * Optional credential broker for hosts that are first-party MachineMetrics clients
482
482
  * (`async (request, { approve }) => result`, see EmbeddedAuthorizationManager). When present,
483
483
  * v2 credential requests are brokered server-side (no popup, no hidden frame) and consent is
484
484
  * rendered natively by the host from the broker's `client` identity.
485
485
  */
486
- credentialBroker: T.func
486
+ credentialBroker: U.func
487
487
  };
488
- const ee = D.default || D, ke = 1e4, Re = "credentials", oe = (t, s) => `${t}/mm-embedded-interop?id=${encodeURIComponent(s)}&origin=${encodeURIComponent(
488
+ const ee = K.default || K, Re = 1e4, xe = "credentials", Te = (r, o) => `${r}/mm-embedded-interop?id=${encodeURIComponent(o)}&origin=${encodeURIComponent(
489
489
  window.location.origin
490
- )}&caps=${Re}`, xe = ee.iframe`
490
+ )}&caps=${xe}`, Ie = ee.iframe`
491
491
  width: 100%;
492
492
  height: 100%;
493
493
  border: none;
494
- visibility: ${(t) => t.$isReady ? "visible" : "hidden"};
495
- `, Te = ee.div`
494
+ visibility: ${(r) => r.$isReady ? "visible" : "hidden"};
495
+ `, ze = ee.div`
496
496
  width: 100%;
497
497
  height: 100%;
498
498
  display: flex;
@@ -505,172 +505,170 @@ const ee = D.default || D, ke = 1e4, Re = "credentials", oe = (t, s) => `${t}/mm
505
505
  text-align: center;
506
506
  color: #555;
507
507
  font-size: 14px;
508
- `, Ie = (t) => {
509
- const s = t && t.origin || "This app", i = t && t.reason || "";
510
- switch (i) {
508
+ `, Ue = (r) => {
509
+ const o = r && r.origin || "This app", c = r && r.reason || "";
510
+ switch (c) {
511
511
  case "broker:scope_above_ceiling":
512
512
  return {
513
- title: `${s} can’t be authorized here`,
513
+ title: `${o} can’t be authorized here`,
514
514
  detail: "It asks for permissions your role doesn’t have."
515
515
  };
516
516
  case "broker:origin_mismatch":
517
517
  case "broker:unknown_client":
518
518
  return {
519
- title: `${s} can’t be authorized here`,
519
+ title: `${o} can’t be authorized here`,
520
520
  detail: "It isn’t registered to run at this address."
521
521
  };
522
522
  case "broker:cross_company_principal":
523
523
  return {
524
- title: `${s} can’t be authorized here`,
524
+ title: `${o} can’t be authorized here`,
525
525
  detail: "It can’t be authorized for this account."
526
526
  };
527
527
  default:
528
- return i.startsWith("broker:") ? {
529
- title: `${s} can’t be authorized here`,
528
+ return c.startsWith("broker:") ? {
529
+ title: `${o} can’t be authorized here`,
530
530
  detail: "Authorization was refused."
531
531
  } : {
532
- title: `${s} can’t be embedded here`,
532
+ title: `${o} can’t be embedded here`,
533
533
  detail: "It needs an update to support embedding from a different domain."
534
534
  };
535
535
  }
536
- }, ue = ({ entry: t }) => {
537
- const s = Ie(t);
538
- return /* @__PURE__ */ m.createElement(Te, { "data-reason": t && t.reason || void 0 }, /* @__PURE__ */ m.createElement("div", { style: { fontWeight: 600 } }, s.title), /* @__PURE__ */ m.createElement("div", { style: { fontSize: 12, color: "#888" } }, s.detail));
536
+ }, ae = ({ entry: r }) => {
537
+ const o = Ue(r);
538
+ return /* @__PURE__ */ E.createElement(ze, { "data-reason": r && r.reason || void 0 }, /* @__PURE__ */ E.createElement("div", { style: { fontWeight: 600 } }, o.title), /* @__PURE__ */ E.createElement("div", { style: { fontSize: 12, color: "#888" } }, o.detail));
539
539
  };
540
- ue.propTypes = {
541
- entry: T.shape({
542
- origin: T.string,
543
- name: T.string,
544
- reason: T.string,
545
- detail: T.object
540
+ ae.propTypes = {
541
+ entry: U.shape({
542
+ origin: U.string,
543
+ name: U.string,
544
+ reason: U.string,
545
+ detail: U.object
546
546
  })
547
547
  };
548
- const Ue = ee.div`
548
+ const ye = ee.div`
549
549
  height: 100%;
550
550
  display: flex;
551
551
  flex: 1;
552
552
  align-items: center;
553
553
  justify-content: center;
554
- `, ze = () => /* @__PURE__ */ m.createElement(Ue, null, /* @__PURE__ */ m.createElement("div", { style: { textAlign: "center" } }, "This app couldn’t be loaded as an embeddable widget.")), Ce = ({
555
- id: t,
556
- src: s,
557
- path: i,
558
- onInit: d = () => {
554
+ `, Ce = () => /* @__PURE__ */ E.createElement(ye, null, /* @__PURE__ */ E.createElement("div", { style: { textAlign: "center" } }, "This app couldn’t be loaded as an embeddable widget.")), Ae = ({
555
+ id: r,
556
+ src: o,
557
+ path: c,
558
+ onInit: a = () => {
559
559
  },
560
- onTimeout: f,
561
- context: b = {},
562
- params: B = {},
563
- renderUnsupported: I,
564
- renderTimeout: M,
565
- ..._
560
+ onTimeout: p,
561
+ context: m = {},
562
+ params: L = {},
563
+ renderUnsupported: T,
564
+ renderTimeout: y,
565
+ ...d
566
566
  }) => {
567
- if ("isConfiguring" in _)
567
+ if ("isConfiguring" in d)
568
568
  return console.error(
569
569
  "isConfiguring must be passed via the params prop to MMEmbeddableZone"
570
570
  ), null;
571
- if ("colorMode" in b)
571
+ if ("colorMode" in m)
572
572
  return console.error(
573
573
  "colorMode must be passed via the params prop to MMEmbeddableZone"
574
574
  ), null;
575
- if ("isFullScreen" in b)
575
+ if ("isFullScreen" in m)
576
576
  return console.error(
577
577
  "isFullScreen must be passed via the params prop to MMEmbeddableZone"
578
578
  ), null;
579
- const A = R(), [y, W] = C(), [E, L] = C(0), [K, O] = C(!1), [q, j] = C(!1), z = me(s), c = be(s), u = Ee(s);
580
- k(() => {
581
- z > 0 && L(0);
582
- }, [z]);
583
- const { registerFrame: o, unregisterFrame: a, sendMessage: p } = H(
579
+ const I = R(), [C, v] = M(), [b, $] = M(0), [G, O] = M(!1), [j, P] = M(!1), A = be(o), u = Ee(o), l = ke(o), [s, f] = M(0), [x, z] = M(null), { registerFrame: S, unregisterFrame: _, sendMessage: k } = Z(
584
580
  Y
585
- ), [w, $] = C(), U = R(), x = R(f), S = R(d), v = R(!1);
586
- k(() => {
587
- x.current = f;
588
- }, [f]), k(() => {
589
- S.current = d;
590
- }, [d]), k(() => {
591
- E && p(t, "set-context", {
581
+ ), [F, q] = M(), B = R(), D = R(p), H = R(a), W = R(!1), e = g(() => {
582
+ W.current = !1, clearTimeout(B.current), $(0), O(!1), P(!1), z(null);
583
+ }, []);
584
+ w(() => {
585
+ (A > 0 || s > 0) && e();
586
+ }, [A, s, e]), w(() => {
587
+ D.current = p;
588
+ }, [p]), w(() => {
589
+ H.current = a;
590
+ }, [a]), w(() => {
591
+ b && k(r, "set-context", {
592
592
  context: {
593
- ...b
593
+ ...m
594
594
  }
595
595
  });
596
- }, [b, t, E]), k(() => {
597
- E && p(t, "set-params", { params: B });
598
- }, [B, t, E]), k(() => {
599
- i !== void 0 && $((i == null ? void 0 : i.indexOf("/")) === 0 ? i : `/${i}`);
600
- }, [i]), k(() => {
601
- w === void 0 || !E || p(t, "navigate", { path: w });
602
- }, [w, E, t, p]), k(() => {
603
- if (!s || !t || !A)
596
+ }, [m, r, b]), w(() => {
597
+ b && k(r, "set-params", { params: L });
598
+ }, [L, r, b]), w(() => {
599
+ c !== void 0 && q((c == null ? void 0 : c.indexOf("/")) === 0 ? c : `/${c}`);
600
+ }, [c]), w(() => {
601
+ F === void 0 || !b || k(r, "navigate", { path: F });
602
+ }, [F, b, r, k]), w(() => {
603
+ if (!o || !r || !I)
604
604
  return;
605
- const e = new URL(s);
606
- return o(t, e.origin, A), S.current(), W(oe(e.origin, t)), () => {
607
- a(t);
605
+ e();
606
+ const i = new URL(o);
607
+ return S(r, i.origin, I), H.current(), v(Te(i.origin, r)), () => {
608
+ _(r);
608
609
  };
609
- }, [s, t, o, A]), k(() => {
610
- if (!(!y || v.current))
611
- return U.current = setTimeout(() => {
612
- O(!0), x.current && x.current();
613
- }, ke), () => clearTimeout(U.current);
614
- }, [y]);
615
- const F = h(() => {
616
- v.current = !0, clearTimeout(U.current), O(!1);
617
- }, []), [Z, G] = C(null);
618
- V(t, "init", (e) => {
619
- F(), Array.isArray(e == null ? void 0 : e.acceptsCredentials) && G(e.acceptsCredentials);
620
- }), V(t, "authorize", F), V(t, "login", F), V(t, "credential-request", () => {
621
- F(), j(!0);
622
- }), k(() => {
623
- if (!q || !c)
610
+ }, [o, r, S, I, e]), w(() => {
611
+ if (!(!C || W.current))
612
+ return B.current = setTimeout(() => {
613
+ O(!0), D.current && D.current();
614
+ }, Re), () => clearTimeout(B.current);
615
+ }, [C, o, A, s]);
616
+ const t = g(() => {
617
+ W.current = !0, clearTimeout(B.current), O(!1);
618
+ }, []);
619
+ V(r, "init", (i) => {
620
+ t(), Array.isArray(i == null ? void 0 : i.acceptsCredentials) && z(i.acceptsCredentials);
621
+ }), V(r, "authorize", t), V(r, "login", t), V(r, "credential-request", () => {
622
+ t(), P(!0);
623
+ }), w(() => {
624
+ if (!j || !u)
624
625
  return;
625
- const e = Z;
626
- if (Array.isArray(e) && !e.includes(c.kind))
626
+ const i = x;
627
+ if (Array.isArray(i) && !i.includes(u.kind))
627
628
  return;
628
- const n = c.kind === "access_token" ? { accessToken: c.accessToken } : {};
629
- p(t, "credential", { ...n, credential: c });
630
- }, [q, c, Z, t, p]), V(t, "ready", () => {
631
- F(), L((e) => e + 1);
629
+ const h = u.kind === "access_token" ? { accessToken: u.accessToken } : {};
630
+ k(r, "credential", { ...h, credential: u });
631
+ }, [j, u, x, r, k]), V(r, "ready", () => {
632
+ t(), $((i) => i + 1);
632
633
  });
633
- const P = R();
634
- return V(t, "heartbeat", () => {
635
- P.current && clearTimeout(P.current), P.current = setTimeout(() => {
636
- if (A.current) {
637
- const e = new URL(s);
638
- A.current.src = oe(e.origin, t);
639
- }
634
+ const n = R();
635
+ return V(r, "heartbeat", () => {
636
+ n.current && clearTimeout(n.current), n.current = setTimeout(() => {
637
+ f((i) => i + 1);
640
638
  }, 6e3);
641
- }), k(() => () => {
642
- P.current && clearTimeout(P.current);
643
- }, []), u ? I ? I(u) : /* @__PURE__ */ m.createElement(ue, { entry: u }) : K && !E ? M ? M() : /* @__PURE__ */ m.createElement(ze, null) : /* @__PURE__ */ m.createElement(
644
- xe,
639
+ }), w(() => () => {
640
+ n.current && clearTimeout(n.current);
641
+ }, []), l ? T ? T(l) : /* @__PURE__ */ E.createElement(ae, { entry: l }) : G && !b ? y ? y() : /* @__PURE__ */ E.createElement(Ce, null) : /* @__PURE__ */ E.createElement(
642
+ Ie,
645
643
  {
646
- key: `auth-epoch-${z}`,
647
- $isReady: E,
648
- ref: A,
649
- src: y,
650
- ..._
644
+ key: `auth-epoch-${A}-frame-${s}`,
645
+ $isReady: b,
646
+ ref: I,
647
+ src: C,
648
+ ...d
651
649
  }
652
650
  );
653
651
  };
654
- Ce.propTypes = {
655
- id: T.string,
656
- src: T.string.isRequired,
657
- path: T.string,
658
- onInit: T.func,
659
- onTimeout: T.func,
652
+ Ae.propTypes = {
653
+ id: U.string,
654
+ src: U.string.isRequired,
655
+ path: U.string,
656
+ onInit: U.func,
657
+ onTimeout: U.func,
660
658
  /**
661
659
  * Optional host-styled renderer for the structurally-unsupported embed
662
660
  * state (legacy app on a cross-site origin), `(entry) => ReactNode`. Falls
663
661
  * back to a minimal built-in placeholder.
664
662
  */
665
- renderUnsupported: T.func,
663
+ renderUnsupported: U.func,
666
664
  /**
667
665
  * Optional host-styled renderer for the handshake-timeout failure state
668
666
  * (the app is not embeddable / could not load), `() => ReactNode`. Falls
669
667
  * back to a minimal centered message.
670
668
  */
671
- renderTimeout: T.func
669
+ renderTimeout: U.func
672
670
  };
673
- const Me = D.div`
671
+ const Me = K.div`
674
672
  position: fixed;
675
673
  inset: 0;
676
674
  background: rgba(0, 0, 0, 0.45);
@@ -678,7 +676,7 @@ const Me = D.div`
678
676
  align-items: center;
679
677
  justify-content: center;
680
678
  z-index: 10000;
681
- `, _e = D.div`
679
+ `, Oe = K.div`
682
680
  background: #fff;
683
681
  border-radius: 8px;
684
682
  box-shadow: 0 4px 24px rgba(0, 0, 0, 0.2);
@@ -687,13 +685,13 @@ const Me = D.div`
687
685
  max-width: calc(100vw - 32px);
688
686
  font-family: sans-serif;
689
687
  color: #222;
690
- `, Ae = D.div`
688
+ `, _e = K.div`
691
689
  display: flex;
692
690
  align-items: center;
693
691
  justify-content: space-between;
694
692
  padding: 10px 0;
695
693
  gap: 16px;
696
- `, Le = D.button`
694
+ `, Le = K.button`
697
695
  background: #16a500;
698
696
  color: #fff;
699
697
  border: none;
@@ -702,28 +700,70 @@ const Me = D.div`
702
700
  font-size: 14px;
703
701
  cursor: pointer;
704
702
  white-space: nowrap;
705
- `, Oe = D.p`
703
+ `, $e = K.p`
706
704
  color: #b3261e;
707
705
  font-size: 13px;
708
706
  margin: 4px 0 0;
709
- `, Fe = () => {
710
- const { pending: t, authorize: s } = he();
711
- return t.length === 0 ? null : /* @__PURE__ */ m.createElement(Me, null, /* @__PURE__ */ m.createElement(_e, null, /* @__PURE__ */ m.createElement("h3", { style: { margin: "0 0 8px" } }, "Authorization Required"), /* @__PURE__ */ m.createElement("p", { style: { margin: "0 0 12px", fontSize: 14, color: "#555" } }, "The following apps need you to sign in and authorize them before they can load."), t.map((i) => /* @__PURE__ */ m.createElement("div", { key: i.origin }, /* @__PURE__ */ m.createElement(Ae, null, /* @__PURE__ */ m.createElement("div", null, /* @__PURE__ */ m.createElement("div", { style: { fontWeight: 600 } }, i.origin)), /* @__PURE__ */ m.createElement(Le, { onClick: () => s(i) }, "Authorize")), i.popupBlocked && /* @__PURE__ */ m.createElement(Oe, null, "The sign-in window was blocked. Allow popups for this site, then try again.")))));
707
+ `, se = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
708
+ let ie = !1;
709
+ const Pe = () => {
710
+ const { pending: r, authorize: o, dismiss: c } = ge(), a = r.filter((d) => !d.consent), p = r.length - a.length, m = R(null), L = R(null), T = a.length > 0;
711
+ if (w(() => {
712
+ p > 0 && !ie && (ie = !0, console.error(
713
+ "[mm-react-embeddable] EmbeddedAuthorizationPrompt received a brokered consent entry. A host with a credentialBroker must render its own consent UI (useEmbeddedAuthorizations: approve/dismiss); this default prompt only handles the popup path."
714
+ ));
715
+ }, [p]), w(() => {
716
+ if (!T || !m.current)
717
+ return;
718
+ L.current = document.activeElement;
719
+ const d = m.current.querySelector(se);
720
+ return d && d.focus(), () => {
721
+ const I = L.current;
722
+ I && typeof I.focus == "function" && I.focus();
723
+ };
724
+ }, [T]), !T)
725
+ return null;
726
+ const y = (d) => {
727
+ if (d.key === "Escape") {
728
+ d.preventDefault(), a.forEach((b) => c(b));
729
+ return;
730
+ }
731
+ if (d.key !== "Tab" || !m.current)
732
+ return;
733
+ const I = Array.from(m.current.querySelectorAll(se));
734
+ if (I.length === 0)
735
+ return;
736
+ const C = I[0], v = I[I.length - 1];
737
+ d.shiftKey && document.activeElement === C ? (d.preventDefault(), v.focus()) : !d.shiftKey && document.activeElement === v && (d.preventDefault(), C.focus());
738
+ };
739
+ return /* @__PURE__ */ E.createElement(Me, null, /* @__PURE__ */ E.createElement(
740
+ Oe,
741
+ {
742
+ ref: m,
743
+ role: "dialog",
744
+ "aria-modal": "true",
745
+ "aria-labelledby": "mm-embedded-authorization-title",
746
+ onKeyDown: y
747
+ },
748
+ /* @__PURE__ */ E.createElement("h3", { id: "mm-embedded-authorization-title", style: { margin: "0 0 8px" } }, "Authorization Required"),
749
+ /* @__PURE__ */ E.createElement("p", { style: { margin: "0 0 12px", fontSize: 14, color: "#555" } }, "The following apps need you to sign in and authorize them before they can load."),
750
+ a.map((d) => /* @__PURE__ */ E.createElement("div", { key: d.origin }, /* @__PURE__ */ E.createElement(_e, null, /* @__PURE__ */ E.createElement("div", null, /* @__PURE__ */ E.createElement("div", { style: { fontWeight: 600 } }, d.origin)), /* @__PURE__ */ E.createElement(Le, { onClick: () => o(d) }, "Authorize")), d.popupBlocked && /* @__PURE__ */ E.createElement($e, null, "The sign-in window was blocked. Allow popups for this site, then try again.")))
751
+ ));
712
752
  };
713
753
  export {
714
- ae as CREDENTIAL_KIND_ACCESS_TOKEN,
754
+ de as CREDENTIAL_KIND_ACCESS_TOKEN,
715
755
  J as EmbeddedAuthorizationContext,
716
- Fe as EmbeddedAuthorizationPrompt,
717
- Ce as MMEmbeddableZone,
756
+ Pe as EmbeddedAuthorizationPrompt,
757
+ Ae as MMEmbeddableZone,
718
758
  Y as MMEmbeddableZoneContext,
719
759
  we as MMEmbeddableZoneProvider,
720
- pe as isCrossSite,
721
- ne as normalizeCredential,
722
- ge as popupAuthorizationLauncher,
723
- Ie as unsupportedCopy,
724
- he as useEmbeddedAuthorizations,
725
- be as useEmbeddedCredential,
760
+ me as isCrossSite,
761
+ re as normalizeCredential,
762
+ he as popupAuthorizationLauncher,
763
+ Ue as unsupportedCopy,
764
+ ge as useEmbeddedAuthorizations,
765
+ Ee as useEmbeddedCredential,
726
766
  V as useEmbeddedEffect,
727
- me as useEmbeddedOriginEpoch,
728
- Ee as useEmbeddedUnsupported
767
+ be as useEmbeddedOriginEpoch,
768
+ ke as useEmbeddedUnsupported
729
769
  };