ugly-app 0.1.887 → 0.1.888

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/README.md CHANGED
@@ -397,7 +397,7 @@ handle.hide(); // dismiss programmatically
397
397
  - **`transient`** — 20% opacity backdrop, **dismisses** on backdrop click.
398
398
  - **`contextMenu`** — same as transient, intended for menus and pickers.
399
399
 
400
- `renderLayer` receives `{ content, spring, hide }`: `spring` is a `createAnimatedValue()` result driving 0 → 1; `hide` closes the popup. The default layer animates open with `easeOut` (250ms) and closed with `easeIn` (200ms).
400
+ `renderLayer` receives `{ content, spring, hide }`: `spring` is a `createAnimatedValue()` result driving 0 → 1; `hide` closes the popup. The default layer animates open with `easeOut` (250ms) and closed with `easeIn` (200ms). Popups render as siblings of the router's children (managed inside `RouterProvider`), so they stack above every page but sit under the `AppProvider` legacy popup layer.
401
401
 
402
402
  ### `AppProvider` & `useApp()`
403
403
 
@@ -418,7 +418,7 @@ const {
418
418
  } = useApp();
419
419
  ```
420
420
 
421
- `useApp<TAsyncOptions>()` is generic in the async-options type so apps can pass a custom option through to a custom `loadingOverlay` element (accepted as an `AppProvider` prop). `useAppOptional()` returns `null` outside the provider; `useLocalizer()` returns a localizer that prefers `<StringsProvider>` data, falls back to the `AppProvider` `localizer` prop, and finally to identity.
421
+ `useApp<TAsyncOptions>()` is generic in the async-options type so apps can pass a custom option through to a custom `loadingOverlay` element (accepted as an `AppProvider` prop — the framework `cloneElement`s the overlay with `{ label, asyncOptions }` while `runAsync` is pending). `useAppOptional()` returns `null` outside the provider; `useLocalizer()` returns a localizer that prefers `<StringsProvider>` data, falls back to the `AppProvider` `localizer` prop, and finally to identity.
422
422
 
423
423
  ### Direct socket access
424
424
 
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.887";
1
+ export declare const CLI_VERSION = "0.1.888";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.887";
2
+ export const CLI_VERSION = "0.1.888";
3
3
  //# sourceMappingURL=version.js.map
@@ -4,11 +4,27 @@ export interface StartLoginOptions {
4
4
  /** Called if verification fails (the popup path). */
5
5
  onError?: () => void;
6
6
  }
7
+ /**
8
+ * If a recent sign-in popup is in flight, clear the flag and return true. Called by
9
+ * bootstrap in the window that just redeemed the oauth code: true ⇒ this window IS
10
+ * the login popup (broadcast success + close); false ⇒ a normal tab (render here).
11
+ */
12
+ export declare function consumeLoginPopupPending(): boolean;
13
+ /** Signal a completed sign-in to the opener that launched the popup (same-origin). */
14
+ export declare function broadcastLoginSuccess(): void;
7
15
  /**
8
16
  * Open the ugly.bot OAuth popup and complete login. On success, the session
9
17
  * cookie is set via `/auth/verify` and the browser navigates to `redirectTo`
10
18
  * (or reloads). If the popup is blocked, falls back to navigating to
11
19
  * `redirectTo` (or `/`), where the framework's LoginPopup handles sign-in.
20
+ *
21
+ * Two completion paths:
22
+ * • Non-COI apps: `window.opener` survives → the popup postMessages the code here.
23
+ * • COI apps: COOP: same-origin severs `window.opener`, so ugly.bot can't reach us
24
+ * and instead redirects the popup back to this origin with `?ugly_oauth_code=`.
25
+ * The popup's bootstrap redeems it and broadcasts success over BroadcastChannel;
26
+ * we reload (the session cookie is shared same-origin). `markLoginPopupPending`
27
+ * tags the popup so bootstrap closes it instead of rendering the app inside it.
12
28
  */
13
29
  export declare function startUglyBotLogin(opts?: StartLoginOptions): void;
14
30
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"startLogin.d.ts","sourceRoot":"","sources":["../../../src/client/auth/startLogin.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,iBAAsB,GAAG,IAAI,CAmCpE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpD,IAAI,CAWN;AAID;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAUV;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAyB1C;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAS1C"}
1
+ {"version":3,"file":"startLogin.d.ts","sourceRoot":"","sources":["../../../src/client/auth/startLogin.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAoBD;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CASlD;AAED,sFAAsF;AACtF,wBAAgB,qBAAqB,IAAI,IAAI,CAQ5C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,iBAAsB,GAAG,IAAI,CAkFpE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpD,IAAI,CAWN;AAID;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAUV;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAyB1C;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAS1C"}
@@ -10,30 +10,102 @@ const UGLY_BOT_URL = typeof window !== 'undefined'
10
10
  ? (window.__UGLY_BOT_URL__ ??
11
11
  'https://ugly.bot')
12
12
  : 'https://ugly.bot';
13
+ // Coordinates the cross-origin-isolated popup-login handoff. On a COI app, COOP:
14
+ // same-origin severs the popup's `window.opener`, so it can't postMessage the code
15
+ // back. Instead the popup redeems the code itself and signals the opener over this
16
+ // same-origin BroadcastChannel; the localStorage key (shared opener↔popup, both on
17
+ // this origin) tells bootstrap that the window holding the code IS the login popup.
18
+ const LOGIN_CHANNEL = 'ugly-bot-login';
19
+ const LOGIN_POPUP_KEY = 'uglyBotLoginPopup';
20
+ const LOGIN_POPUP_TTL_MS = 5 * 60_000;
21
+ /** Mark that a sign-in popup is in flight (COI path). */
22
+ function markLoginPopupPending() {
23
+ try {
24
+ localStorage.setItem(LOGIN_POPUP_KEY, String(Date.now()));
25
+ }
26
+ catch {
27
+ /* private mode — degrades to rendering in the popup, no worse than before */
28
+ }
29
+ }
30
+ /**
31
+ * If a recent sign-in popup is in flight, clear the flag and return true. Called by
32
+ * bootstrap in the window that just redeemed the oauth code: true ⇒ this window IS
33
+ * the login popup (broadcast success + close); false ⇒ a normal tab (render here).
34
+ */
35
+ export function consumeLoginPopupPending() {
36
+ try {
37
+ const raw = localStorage.getItem(LOGIN_POPUP_KEY);
38
+ if (!raw)
39
+ return false;
40
+ localStorage.removeItem(LOGIN_POPUP_KEY);
41
+ return Date.now() - Number(raw) < LOGIN_POPUP_TTL_MS;
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ }
47
+ /** Signal a completed sign-in to the opener that launched the popup (same-origin). */
48
+ export function broadcastLoginSuccess() {
49
+ try {
50
+ new BroadcastChannel(LOGIN_CHANNEL).postMessage({
51
+ type: 'ugly-bot-login-success',
52
+ });
53
+ }
54
+ catch {
55
+ /* no BroadcastChannel (old engine) */
56
+ }
57
+ }
13
58
  /**
14
59
  * Open the ugly.bot OAuth popup and complete login. On success, the session
15
60
  * cookie is set via `/auth/verify` and the browser navigates to `redirectTo`
16
61
  * (or reloads). If the popup is blocked, falls back to navigating to
17
62
  * `redirectTo` (or `/`), where the framework's LoginPopup handles sign-in.
63
+ *
64
+ * Two completion paths:
65
+ * • Non-COI apps: `window.opener` survives → the popup postMessages the code here.
66
+ * • COI apps: COOP: same-origin severs `window.opener`, so ugly.bot can't reach us
67
+ * and instead redirects the popup back to this origin with `?ugly_oauth_code=`.
68
+ * The popup's bootstrap redeems it and broadcasts success over BroadcastChannel;
69
+ * we reload (the session cookie is shared same-origin). `markLoginPopupPending`
70
+ * tags the popup so bootstrap closes it instead of rendering the app inside it.
18
71
  */
19
72
  export function startUglyBotLogin(opts = {}) {
20
73
  if (typeof window === 'undefined')
21
74
  return;
22
75
  const origin = encodeURIComponent(window.location.origin);
23
76
  const url = `${UGLY_BOT_URL}/oauth?origin=${origin}`;
24
- const popup = window.open(url, 'ugly-bot-login', 'width=480,height=640,left=200,top=100');
25
- if (!popup) {
26
- // Popup blocked — degrade to the login screen on the target route.
27
- window.location.href = opts.redirectTo ?? '/';
28
- return;
77
+ // Only COI apps hit the severed-opener path; tagging non-COI would leave a stale
78
+ // flag that a later magic-link tab could wrongly self-close on.
79
+ if (window.crossOriginIsolated) {
80
+ markLoginPopupPending();
29
81
  }
30
- const handler = async (event) => {
82
+ const finish = () => {
83
+ if (opts.redirectTo)
84
+ window.location.href = opts.redirectTo;
85
+ else
86
+ window.location.reload();
87
+ };
88
+ let chan = null;
89
+ const cleanup = () => {
90
+ window.removeEventListener('message', handler);
91
+ if (chan) {
92
+ try {
93
+ chan.close();
94
+ }
95
+ catch {
96
+ /* ignore */
97
+ }
98
+ chan = null;
99
+ }
100
+ };
101
+ // COI path: the popup redeems the code (bootstrap) and broadcasts success here.
102
+ async function handler(event) {
31
103
  if (event.origin !== UGLY_BOT_URL)
32
104
  return;
33
105
  const data = event.data;
34
106
  if (data?.type !== 'ugly-bot-oauth' || !data.code)
35
107
  return;
36
- window.removeEventListener('message', handler);
108
+ cleanup();
37
109
  try {
38
110
  const res = await fetch('/auth/verify', {
39
111
  method: 'POST',
@@ -42,15 +114,38 @@ export function startUglyBotLogin(opts = {}) {
42
114
  });
43
115
  if (!res.ok)
44
116
  throw new Error('Auth failed');
45
- if (opts.redirectTo)
46
- window.location.href = opts.redirectTo;
47
- else
48
- window.location.reload();
117
+ finish();
49
118
  }
50
119
  catch {
51
120
  opts.onError?.();
52
121
  }
53
- };
122
+ }
123
+ try {
124
+ chan = new BroadcastChannel(LOGIN_CHANNEL);
125
+ chan.onmessage = (e) => {
126
+ if (e.data?.type === 'ugly-bot-login-success') {
127
+ cleanup();
128
+ finish();
129
+ }
130
+ };
131
+ }
132
+ catch {
133
+ /* no BroadcastChannel — the opener.postMessage path still covers non-COI */
134
+ }
135
+ const popup = window.open(url, 'ugly-bot-login', 'width=480,height=640,left=200,top=100');
136
+ if (!popup) {
137
+ // Popup blocked — degrade to the login screen on the target route.
138
+ cleanup();
139
+ try {
140
+ localStorage.removeItem(LOGIN_POPUP_KEY);
141
+ }
142
+ catch {
143
+ /* ignore */
144
+ }
145
+ window.location.href = opts.redirectTo ?? '/';
146
+ return;
147
+ }
148
+ // Non-COI path: opener intact → the popup postMessages the code to us.
54
149
  window.addEventListener('message', handler);
55
150
  }
56
151
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"startLogin.js","sourceRoot":"","sources":["../../../src/client/auth/startLogin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"startLogin.js","sourceRoot":"","sources":["../../../src/client/auth/startLogin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrapApp.d.ts","sourceRoot":"","sources":["../../src/client/bootstrapApp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAgBzE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAmFlE,UAAU,mBAAmB;IAC3B,mFAAmF;IACnF,QAAQ,EAAE,eAAe,CAAC;IAE1B,mFAAmF;IACnF,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B,uDAAuD;IACvD,cAAc,EAAE,aAAa,CAAC;QAC5B,QAAQ,EAAE,SAAS,CAAC;QACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC;QAChC,6DAA6D;QAC7D,UAAU,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KACnD,CAAC,CAAC;IAEH,0EAA0E;IAC1E,MAAM,EAAE,MAAM,YAAY,CAAC;IAE3B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAE5B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,qFAAqF;IACrF,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAEhC,iFAAiF;IACjF,QAAQ,CAAC,EAAE,KAAK,CAAC;IAEjB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;qFACiF;IACjF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA+MD,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAoX/D"}
1
+ {"version":3,"file":"bootstrapApp.d.ts","sourceRoot":"","sources":["../../src/client/bootstrapApp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAkBzE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAmFlE,UAAU,mBAAmB;IAC3B,mFAAmF;IACnF,QAAQ,EAAE,eAAe,CAAC;IAE1B,mFAAmF;IACnF,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B,uDAAuD;IACvD,cAAc,EAAE,aAAa,CAAC;QAC5B,QAAQ,EAAE,SAAS,CAAC;QACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC;QAChC,6DAA6D;QAC7D,UAAU,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KACnD,CAAC,CAAC;IAEH,0EAA0E;IAC1E,MAAM,EAAE,MAAM,YAAY,CAAC;IAE3B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAE5B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,qFAAqF;IACrF,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAEhC,iFAAiF;IACjF,QAAQ,CAAC,EAAE,KAAK,CAAC;IAEjB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;qFACiF;IACjF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA+MD,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAuY/D"}
@@ -7,7 +7,7 @@ import { AppProvider } from './AppProvider.js';
7
7
  import { buildAppTree } from './appTree.js';
8
8
  import { installSsrPageData, isSsrDocument } from './ssr.js';
9
9
  import { MagicLinkCallback } from './auth/MagicLinkCallback.js';
10
- import { attemptSilentSso, clearSilentSsoTried, markSilentSsoTried, } from './auth/startLogin.js';
10
+ import { attemptSilentSso, broadcastLoginSuccess, clearSilentSsoTried, consumeLoginPopupPending, markSilentSsoTried, } from './auth/startLogin.js';
11
11
  import { createSocket } from './createSocket.js';
12
12
  import { installInspect } from './inspect/index.js';
13
13
  import { installMobileUxAudit } from './mobileUxAudit.js';
@@ -410,20 +410,39 @@ export function bootstrapApp(options) {
410
410
  // Fall through to the normal bootstrap below (renders logged-in in place).
411
411
  }
412
412
  else {
413
- // Logged-out → adopting a session. Must reload so the server re-renders the
414
- // HTML with `__AUTH_TOKEN__` injected from the (now set) cookie. `replace`
415
- // keeps the single-use code out of history so it can't be replayed.
413
+ // Logged-out → adopting a session. Redeem the code (sets the session cookie
414
+ // for this origin), then either:
415
+ // • we're the sign-in popup opened by startUglyBotLogin — a COI app's COOP:
416
+ // same-origin severed our `window.opener`, so we can't postMessage it.
417
+ // Signal it over a same-origin BroadcastChannel and close; the cookie is
418
+ // shared, so the opener reloads logged-in. (Without this, the app would
419
+ // just render INSIDE the popup and the opener would never know.)
420
+ // • a normal tab (magic-link / blocked popup): reload so the server
421
+ // re-renders the HTML with `__AUTH_TOKEN__` injected from the cookie.
422
+ // `replace` keeps the single-use code out of history so it can't be replayed.
423
+ const isLoginPopup = consumeLoginPopupPending();
416
424
  void (async () => {
425
+ let ok = false;
417
426
  try {
418
- await fetch('/auth/verify', {
427
+ const res = await fetch('/auth/verify', {
419
428
  method: 'POST',
420
429
  headers: { 'Content-Type': 'application/json' },
421
430
  body: JSON.stringify({ code: oauthCode }),
422
431
  });
432
+ ok = res.ok;
423
433
  }
424
434
  catch {
425
435
  // Fall through — the reload renders logged-out and the user can retry.
426
436
  }
437
+ if (isLoginPopup && ok) {
438
+ // Only claim success once the cookie is actually set; then close.
439
+ broadcastLoginSuccess();
440
+ // No-op if this window isn't script-closable; the replace below is the
441
+ // fallback so the user still ends up logged in, not on a stuck popup.
442
+ window.close();
443
+ }
444
+ // Popup with a failed redeem, or a normal tab: reload in place (logged-in on
445
+ // success, logged-out on failure so the user can retry).
427
446
  window.location.replace(cleanUrl);
428
447
  })();
429
448
  mount(_jsx(_Fragment, {}));
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrapApp.js","sourceRoot":"","sources":["../../src/client/bootstrapApp.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrapApp.js","sourceRoot":"","sources":["../../src/client/bootstrapApp.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAa,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,GAEf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,oFAAoF;AACpF,SAAS,aAAa;IACpB,MAAM,GAAG,GAAG,qBAAqB,CAAC;IAClC,MAAM,GAAG,GAAG,GAAW,EAAE,CACvB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;QACjC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IACnF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;QACjB,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED,iGAAiG;AACjG,SAAS,mBAAmB;IAC1B,MAAM,CAAC,GAAG,cAAc,EAAE,CAAC;IAC3B,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC;AAED;;oEAEoE;AACpE,KAAK,UAAU,iBAAiB,CAC9B,MAAe,EACf,YAA2B,EAC3B,KAAa;IAEb,IAAI,CAAC,YAAY;QAAE,OAAO;IAC1B,MAAM,UAAU,GAIV,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,uBAAuB,EAAE;YAC/C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,KAAK,EAAE;gBAClC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,iFAAiF;YACjF,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAE7B,CAAC;YACF,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;YAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,UAAU,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;iBAC9C,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IACD,IAAI,CAAC;QACF,UAAuC,CAAC,UAAU,GAAG,kBAAkB,CAAC;YACvE,MAAM,EAAE,iBAAiB,EAAE;YAC3B,MAAM,EAAE,MAAqB;YAC7B,YAAY;YACZ,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,kFAAkF;IACpF,CAAC;AACH,CAAC;AAkDD,MAAM,CAAC,GACL,OAAO,MAAM,KAAK,WAAW;IAC3B,CAAC,CAAE,MAAwD;IAC3D,CAAC,CAAE,EAAyC,CAAC;AAEjD,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AACtD,gFAAgF;AAChF,+EAA+E;AAC/E,8EAA8E;AAC9E,6EAA6E;AAC7E,kFAAkF;AAClF,8CAA8C;AAC9C,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;AAEvD,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,CAAC;QACH,OAAO,CACJ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAsB,CAAC,GAAG;YACrE,IAAI,CACL,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AACD,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,iBAAiB,IAAI,MAAM,EAAE,CAAC,KAAK,GAAG,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AACD,SAAS,cAAc,CAAC,MAAc;IACpC,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,GAAG,iBAAiB,IAAI,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,gFAAgF;IAClF,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,UAAkB;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACtC,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,SAAS,wBAAwB,kBAAkB,CAAC,MAAM,CAAC,cAAc,CAAC;QACzF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAC9B,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACtC,6EAA6E;QAC7E,gFAAgF;QAChF,kFAAkF;QAClF,kFAAkF;QAClF,oFAAoF;QACpF,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAChE,IAAI,CAAC;gBACF,MAAiD,CAAC,cAAc;oBAC/D,IAAI,CAAC;YACT,CAAC;YAAC,MAAM,CAAC;gBACP,mBAAmB;YACrB,CAAC;YACD,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,IAAmB,EAAQ,EAAE;YAC3C,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACjD,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,CAAC,CAAe,EAAQ,EAAE;YAC1C,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO;YACnC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAsD,CAAC;YACtE,IAAI,IAAI,EAAE,IAAI,KAAK,sBAAsB,EAAE,CAAC;gBAC1C,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,cAAc,CACrB,UAAkB,EAClB,aAA4B,EAC5B,oBAAoB,GAAG,KAAK;IAE5B,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAC1C,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,0EAA0E;YAC1E,yEAAyE;YACzE,yEAAyE;YACzE,sEAAsE;YACtE,0EAA0E;YAC1E,0EAA0E;YAC1E,wEAAwE;YACxE,qDAAqD;YACrD,yEAAyE;YACzE,sEAAsE;YACtE,wEAAwE;YACxE,mCAAmC;YACnC,IACE,oBAAoB;gBACpB,aAAa,KAAK,IAAI;gBACtB,CAAC,YAAY,CAAC,aAAa,CAAC,EAC5B,CAAC;gBACD,gBAAgB,EAAE,CAAC;YACrB,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE;gBACtC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;aAC/B,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO;YACpB,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuB,CAAC;YAC3D,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACtC,wEAAwE;YACxE,mEAAmE;YACnE,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;gBAChD,IAAI,UAAU;oBAAE,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;YAED,0EAA0E;YAC1E,uEAAuE;YACvE,MAAM,QAAQ,GAAG,GAAG,mBAAmB,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,EAAE,CAAC;YAClF,IAAI,CAAC;gBACH,IAAI,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;oBAAE,OAAO;gBAC7C,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;YACT,CAAC;YACD,2EAA2E;YAC3E,2DAA2D;YAC3D,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;gBAC3B,MAAM,KAAK,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAClE,CAAC;YACD,mBAAmB,EAAE,CAAC;YACtB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,MAAM,EACJ,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,WAAW,GAAG,EAAE,EAC1B,cAAc,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,OAAO,GAAG,OAAO,EACvB,QAAQ,GAAG,sDAA+B,EAC1C,SAAS,GAAG,MAAM,EAClB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,WAAW,GACtB,GAAG,OAAO,CAAC;IACZ,MAAM,cAAc,GAAG,WAAW,KAAK,KAAK,CAAC;IAE7C,8EAA8E;IAC9E,+EAA+E;IAC/E,6EAA6E;IAC7E,0EAA0E;IAC1E,oDAAoD;IACpD,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC;IACnE,IAAI,MAAM,EAAE,CAAC;QACX,4DAA4D;QAC5D,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/D,IAAI,CAAC;gBACF,MAAiD,CAAC,cAAc;oBAC/D,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GACV,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAE3E,0EAA0E;IAC1E,4EAA4E;IAC5E,4EAA4E;IAC5E,6BAA6B;IAC7B,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,4EAA4E;IAC5E,+EAA+E;IAC/E,IAAI,WAAW;QAAE,kBAAkB,EAAE,CAAC;IAEtC,8EAA8E;IAC9E,2EAA2E;IAC3E,mDAAmD;IACnD,IAAI,SAAS,GAAgB,IAAI,CAAC;IAElC,4EAA4E;IAC5E,SAAS,KAAK,CAAC,IAAkB,EAAE,OAAO,GAAG,KAAK;QAChD,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,0EAA0E;YAC1E,2EAA2E;YAC3E,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE;gBACpC,kBAAkB,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC1B,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;gBAC3D,CAAC;aACF,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/B,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,uEAAuE;IACvE,sEAAsE;IACtE,iEAAiE;IACjE,uEAAuE;IACvE,iEAAiE;IACjE,IACE,OAAO,MAAM,KAAK,WAAW;QAC7B,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,yBAAyB,EACtD,CAAC;QACD,KAAK,CAAC,KAAC,iBAAiB,KAAG,CAAC,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,8EAA8E;IAC9E,8EAA8E;IAC9E,+EAA+E;IAC/E,sEAAsE;IACtE,8EAA8E;IAC9E,2EAA2E;IAC3E,qEAAqE;IACrE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAChD,IAAI,SAAS,EAAE,CAAC;YACd,kBAAkB,EAAE,CAAC,CAAC,2CAA2C;YACjE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACjC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,QAAQ,GACZ,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACzE,8EAA8E;YAC9E,+EAA+E;YAC/E,6EAA6E;YAC7E,+EAA+E;YAC/E,0EAA0E;YAC1E,qEAAqE;YACrE,MAAM,UAAU,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC;YACvC,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAChE,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAChD,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE;4BACtC,MAAM,EAAE,MAAM;4BACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;4BAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;yBAC1C,CAAC,CAAC;wBACH,IAAI,CAAC,GAAG,CAAC,EAAE;4BAAE,OAAO;wBACpB,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuB,CAAC;wBAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBACrD,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;4BAC9C,wEAAwE;4BACxE,cAAc,CAAC,WAAW,CAAC,CAAC;4BAC5B,OAAO;wBACT,CAAC;wBACD,yEAAyE;wBACzE,gDAAgD;wBAChD,MAAM,QAAQ,GAAG,GAAG,mBAAmB,IAAI,WAAW,IAAI,UAAU,EAAE,CAAC;wBACvE,IAAI,CAAC;4BACH,IAAI,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;gCAAE,OAAO;4BAC7C,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;wBACxC,CAAC;wBAAC,MAAM,CAAC;4BACP,OAAO;wBACT,CAAC;wBACD,MAAM,KAAK,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;wBAChE,mBAAmB,EAAE,CAAC;wBACtB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAC3B,CAAC;oBAAC,MAAM,CAAC;wBACP,8CAA8C;oBAChD,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC;gBACL,2EAA2E;YAC7E,CAAC;iBAAM,CAAC;gBACN,4EAA4E;gBAC5E,iCAAiC;gBACjC,6EAA6E;gBAC7E,0EAA0E;gBAC1E,4EAA4E;gBAC5E,2EAA2E;gBAC3E,oEAAoE;gBACpE,qEAAqE;gBACrE,yEAAyE;gBACzE,8EAA8E;gBAC9E,MAAM,YAAY,GAAG,wBAAwB,EAAE,CAAC;gBAChD,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,IAAI,EAAE,GAAG,KAAK,CAAC;oBACf,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE;4BACtC,MAAM,EAAE,MAAM;4BACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;4BAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;yBAC1C,CAAC,CAAC;wBACH,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;oBACd,CAAC;oBAAC,MAAM,CAAC;wBACP,uEAAuE;oBACzE,CAAC;oBACD,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;wBACvB,kEAAkE;wBAClE,qBAAqB,EAAE,CAAC;wBACxB,uEAAuE;wBACvE,sEAAsE;wBACtE,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,CAAC;oBACD,6EAA6E;oBAC7E,yDAAyD;oBACzD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpC,CAAC,CAAC,EAAE,CAAC;gBACL,KAAK,CAAC,mBAAK,CAAC,CAAC;gBACb,OAAO;YACT,CAAC;QACH,CAAC;QACD,4EAA4E;QAC5E,0EAA0E;QAC1E,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM,EAAE,CAAC;YACtC,kBAAkB,EAAE,CAAC;YACrB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,OAAO,CAAC,YAAY,CACzB,IAAI,EACJ,EAAE,EACF,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CACvE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,8BAA8B,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC;IACtC,gFAAgF;IAChF,oFAAoF;IACpF,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACnC,kFAAkF;IAClF,qFAAqF;IACrF,qBAAqB,EAAE,CAAC;IAExB,sCAAsC;IACtC,MAAM,UAAU,GAAG,CAAC,CAAC,kBAAkB,CAAC,IAAI,kBAAkB,CAAC;IAC/D,MAAM,gBAAgB,GAAG,CAAC,CAAC,yBAAyB,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAI,gBAAgB,EAAE,CAAC;QACrB,UAAU,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,6EAA6E;IAC7E,2EAA2E;IAC3E,iDAAiD;IACjD,MAAM,KAAK,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAElC,+EAA+E;IAC/E,mEAAmE;IACnE,MAAM,UAAU,GAAG;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;QAClC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;KAC/B,CAAC;IAEF,SAAS,gBAAgB,CACvB,eAAwB,EACxB,QAAsB,EACtB,OAAO,GAAG,KAAK;QAEf,KAAK,CACH,YAAY,CAAC;YACX,cAAc;YACd,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ;YACtB,eAAe,EAAE,GAAG,EAAE,CAAC,eAAe;YACtC,QAAQ,EAAE,cAAc;YACxB,QAAQ;YACR,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvC,CAAC,EACF,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,SAAS,qBAAqB,CAAC,SAAiB;QAC9C,MAAM,MAAM,GACV,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAC1C,CAAC,GAAG,CAAC;QACN,mFAAmF;QACnF,gFAAgF;QAChF,qFAAqF;QACrF,iFAAiF;QACjF,mFAAmF;QACnF,qFAAqF;QACrF,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,QAAQ,EAAE,EAAE,GAAG,iBAAiB,EAAE,GAAG,WAAW,EAAE;YAClD,QAAQ,EAAE,EAAE,GAAG,iBAAiB,EAAE,GAAG,WAAW,EAAE;YAClD,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;gBACnB,KAAK,EAAE,SAAS;gBAChB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5C,CAAC;SACH,CAAC,CAAC;QAEH,8EAA8E;QAC9E,0EAA0E;QAC1E,6EAA6E;QAC7E,6EAA6E;QAC7E,6EAA6E;QAC7E,yEAAyE;QACzE,6EAA6E;QAC7E,qDAAqD;QACrD,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE;YAC1C,IAAI,eAAe;gBAAE,OAAO;YAC5B,eAAe,GAAG,IAAI,CAAC;YACvB,mBAAmB,EAAE,CAAC;YACtB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,MAAM;aACH,OAAO,CAAC,SAAS,CAAC;aAClB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC3B,uEAAuE;YACvE,sEAAsE;YACtE,sEAAsE;YACtE,8DAA8D;YAC9D,YAAY,CAAC,MAAM,CAAC,CAAC;YACrB,4EAA4E;YAC5E,qEAAqE;YACrE,iBAAiB,CACf,MAAuE,EACvE,MAAM,CACP,CAAC;YACF,6EAA6E;YAC7E,KAAK,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YACpD,yDAAyD;YACzD,0DAA0D;YAC1D,uDAAuD;YACvD,0DAA0D;YAC1D,2DAA2D;YAC3D,2DAA2D;YAC3D,6DAA6D;YAC7D,MAAM,iBAAiB,GAAG,QAAQ,IAAI,SAAS,CAAC;YAChD,MAAM,aAAa,GAAG,iBAAiB;gBACrC,CAAC,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,UAAU,CAAC;gBACpD,CAAC,CAAC,IAAI,CAAC;YACT,gBAAgB,CACd,IAAI,EACJ,KAAC,WAAW,IACV,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,YAET,SAAS,EAAE,GACA,CACf,CAAC;YACF,2EAA2E;YAC3E,wEAAwE;YACxE,0EAA0E;YAC1E,6EAA6E;YAC7E,0EAA0E;YAC1E,IAAI,CAAC,MAAM;gBACT,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;QACnE,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,OAAO,CAAC,KAAK,CACX,6DAA6D,EAC7D,GAAG,CACJ,CAAC;YACF,QAAQ,CAAC,MAAM;gBACb,4DAA4D,CAAC;YAC/D,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,+EAA+E;IAC/E,8EAA8E;IAC9E,4EAA4E;IAC5E,kFAAkF;IAClF,gFAAgF;IAChF,8EAA8E;IAC9E,6EAA6E;IAC7E,sEAAsE;IACtE,IAAI,WAAW,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QACzD,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,YAAY,GAAkB,IAAI,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;gBACnE,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;oBACX,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuB,CAAC;oBACtD,YAAY,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;gBACpC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,oEAAoE;YACtE,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;YACD,0EAA0E;YAC1E,0EAA0E;YAC1E,IAAI,CAAC,MAAM;gBAAE,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC,EAAE,CAAC;QACL,OAAO;IACT,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,sEAAsE;QACtE,6EAA6E;QAC7E,6EAA6E;QAC7E,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,IAAI,gBAAgB,EAAE,EAAE,CAAC;YACvD,KAAK,CAAC,mBAAK,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QACD,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACrC,2EAA2E;QAC3E,8EAA8E;QAC9E,4EAA4E;QAC5E,4EAA4E;QAC5E,6EAA6E;QAC7E,0EAA0E;QAC1E,IAAI,CAAC,MAAM;YAAE,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ugly-app",
3
- "version": "0.1.887",
3
+ "version": "0.1.888",
4
4
  "type": "module",
5
5
  "comment:files": "Allowlist what ships to npm. dist = runtime; src = sourcemap targets (dist/*.js.map reference ../../src/); templates = CLI scaffold. Everything else at repo root (.pgdata local Postgres, coverage, assets/icons sources, test/, test-results/) is excluded by omission. The !negations strip the scaffold's installed deps + cruft (templates/node_modules is 200MB+ and must never ship). package.json/README/LICENSE ship automatically.",
6
6
  "files": [
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.887";
2
+ export const CLI_VERSION = "0.1.888";
@@ -20,33 +20,100 @@ export interface StartLoginOptions {
20
20
  onError?: () => void;
21
21
  }
22
22
 
23
+ // Coordinates the cross-origin-isolated popup-login handoff. On a COI app, COOP:
24
+ // same-origin severs the popup's `window.opener`, so it can't postMessage the code
25
+ // back. Instead the popup redeems the code itself and signals the opener over this
26
+ // same-origin BroadcastChannel; the localStorage key (shared opener↔popup, both on
27
+ // this origin) tells bootstrap that the window holding the code IS the login popup.
28
+ const LOGIN_CHANNEL = 'ugly-bot-login';
29
+ const LOGIN_POPUP_KEY = 'uglyBotLoginPopup';
30
+ const LOGIN_POPUP_TTL_MS = 5 * 60_000;
31
+
32
+ /** Mark that a sign-in popup is in flight (COI path). */
33
+ function markLoginPopupPending(): void {
34
+ try {
35
+ localStorage.setItem(LOGIN_POPUP_KEY, String(Date.now()));
36
+ } catch {
37
+ /* private mode — degrades to rendering in the popup, no worse than before */
38
+ }
39
+ }
40
+
41
+ /**
42
+ * If a recent sign-in popup is in flight, clear the flag and return true. Called by
43
+ * bootstrap in the window that just redeemed the oauth code: true ⇒ this window IS
44
+ * the login popup (broadcast success + close); false ⇒ a normal tab (render here).
45
+ */
46
+ export function consumeLoginPopupPending(): boolean {
47
+ try {
48
+ const raw = localStorage.getItem(LOGIN_POPUP_KEY);
49
+ if (!raw) return false;
50
+ localStorage.removeItem(LOGIN_POPUP_KEY);
51
+ return Date.now() - Number(raw) < LOGIN_POPUP_TTL_MS;
52
+ } catch {
53
+ return false;
54
+ }
55
+ }
56
+
57
+ /** Signal a completed sign-in to the opener that launched the popup (same-origin). */
58
+ export function broadcastLoginSuccess(): void {
59
+ try {
60
+ new BroadcastChannel(LOGIN_CHANNEL).postMessage({
61
+ type: 'ugly-bot-login-success',
62
+ });
63
+ } catch {
64
+ /* no BroadcastChannel (old engine) */
65
+ }
66
+ }
67
+
23
68
  /**
24
69
  * Open the ugly.bot OAuth popup and complete login. On success, the session
25
70
  * cookie is set via `/auth/verify` and the browser navigates to `redirectTo`
26
71
  * (or reloads). If the popup is blocked, falls back to navigating to
27
72
  * `redirectTo` (or `/`), where the framework's LoginPopup handles sign-in.
73
+ *
74
+ * Two completion paths:
75
+ * • Non-COI apps: `window.opener` survives → the popup postMessages the code here.
76
+ * • COI apps: COOP: same-origin severs `window.opener`, so ugly.bot can't reach us
77
+ * and instead redirects the popup back to this origin with `?ugly_oauth_code=`.
78
+ * The popup's bootstrap redeems it and broadcasts success over BroadcastChannel;
79
+ * we reload (the session cookie is shared same-origin). `markLoginPopupPending`
80
+ * tags the popup so bootstrap closes it instead of rendering the app inside it.
28
81
  */
29
82
  export function startUglyBotLogin(opts: StartLoginOptions = {}): void {
30
83
  if (typeof window === 'undefined') return;
31
84
  const origin = encodeURIComponent(window.location.origin);
32
85
  const url = `${UGLY_BOT_URL}/oauth?origin=${origin}`;
33
- const popup = window.open(
34
- url,
35
- 'ugly-bot-login',
36
- 'width=480,height=640,left=200,top=100',
37
- );
38
86
 
39
- if (!popup) {
40
- // Popup blocked — degrade to the login screen on the target route.
41
- window.location.href = opts.redirectTo ?? '/';
42
- return;
87
+ // Only COI apps hit the severed-opener path; tagging non-COI would leave a stale
88
+ // flag that a later magic-link tab could wrongly self-close on.
89
+ if ((window as { crossOriginIsolated?: boolean }).crossOriginIsolated) {
90
+ markLoginPopupPending();
43
91
  }
44
92
 
45
- const handler = async (event: MessageEvent): Promise<void> => {
93
+ const finish = (): void => {
94
+ if (opts.redirectTo) window.location.href = opts.redirectTo;
95
+ else window.location.reload();
96
+ };
97
+
98
+ let chan: BroadcastChannel | null = null;
99
+ const cleanup = (): void => {
100
+ window.removeEventListener('message', handler);
101
+ if (chan) {
102
+ try {
103
+ chan.close();
104
+ } catch {
105
+ /* ignore */
106
+ }
107
+ chan = null;
108
+ }
109
+ };
110
+
111
+ // COI path: the popup redeems the code (bootstrap) and broadcasts success here.
112
+ async function handler(event: MessageEvent): Promise<void> {
46
113
  if (event.origin !== UGLY_BOT_URL) return;
47
114
  const data = event.data as { type?: string; code?: string } | null;
48
115
  if (data?.type !== 'ugly-bot-oauth' || !data.code) return;
49
- window.removeEventListener('message', handler);
116
+ cleanup();
50
117
  try {
51
118
  const res = await fetch('/auth/verify', {
52
119
  method: 'POST',
@@ -54,12 +121,45 @@ export function startUglyBotLogin(opts: StartLoginOptions = {}): void {
54
121
  body: JSON.stringify({ code: data.code }),
55
122
  });
56
123
  if (!res.ok) throw new Error('Auth failed');
57
- if (opts.redirectTo) window.location.href = opts.redirectTo;
58
- else window.location.reload();
124
+ finish();
59
125
  } catch {
60
126
  opts.onError?.();
61
127
  }
62
- };
128
+ }
129
+
130
+ try {
131
+ chan = new BroadcastChannel(LOGIN_CHANNEL);
132
+ chan.onmessage = (e: MessageEvent): void => {
133
+ if (
134
+ (e.data as { type?: string } | null)?.type === 'ugly-bot-login-success'
135
+ ) {
136
+ cleanup();
137
+ finish();
138
+ }
139
+ };
140
+ } catch {
141
+ /* no BroadcastChannel — the opener.postMessage path still covers non-COI */
142
+ }
143
+
144
+ const popup = window.open(
145
+ url,
146
+ 'ugly-bot-login',
147
+ 'width=480,height=640,left=200,top=100',
148
+ );
149
+
150
+ if (!popup) {
151
+ // Popup blocked — degrade to the login screen on the target route.
152
+ cleanup();
153
+ try {
154
+ localStorage.removeItem(LOGIN_POPUP_KEY);
155
+ } catch {
156
+ /* ignore */
157
+ }
158
+ window.location.href = opts.redirectTo ?? '/';
159
+ return;
160
+ }
161
+
162
+ // Non-COI path: opener intact → the popup postMessages the code to us.
63
163
  window.addEventListener('message', handler);
64
164
  }
65
165
 
@@ -10,7 +10,9 @@ import { installSsrPageData, isSsrDocument } from './ssr.js';
10
10
  import { MagicLinkCallback } from './auth/MagicLinkCallback.js';
11
11
  import {
12
12
  attemptSilentSso,
13
+ broadcastLoginSuccess,
13
14
  clearSilentSsoTried,
15
+ consumeLoginPopupPending,
14
16
  markSilentSsoTried,
15
17
  } from './auth/startLogin.js';
16
18
  import { createSocket } from './createSocket.js';
@@ -493,19 +495,38 @@ export function bootstrapApp(options: BootstrapAppOptions): void {
493
495
  })();
494
496
  // Fall through to the normal bootstrap below (renders logged-in in place).
495
497
  } else {
496
- // Logged-out → adopting a session. Must reload so the server re-renders the
497
- // HTML with `__AUTH_TOKEN__` injected from the (now set) cookie. `replace`
498
- // keeps the single-use code out of history so it can't be replayed.
498
+ // Logged-out → adopting a session. Redeem the code (sets the session cookie
499
+ // for this origin), then either:
500
+ // • we're the sign-in popup opened by startUglyBotLogin — a COI app's COOP:
501
+ // same-origin severed our `window.opener`, so we can't postMessage it.
502
+ // Signal it over a same-origin BroadcastChannel and close; the cookie is
503
+ // shared, so the opener reloads logged-in. (Without this, the app would
504
+ // just render INSIDE the popup and the opener would never know.)
505
+ // • a normal tab (magic-link / blocked popup): reload so the server
506
+ // re-renders the HTML with `__AUTH_TOKEN__` injected from the cookie.
507
+ // `replace` keeps the single-use code out of history so it can't be replayed.
508
+ const isLoginPopup = consumeLoginPopupPending();
499
509
  void (async () => {
510
+ let ok = false;
500
511
  try {
501
- await fetch('/auth/verify', {
512
+ const res = await fetch('/auth/verify', {
502
513
  method: 'POST',
503
514
  headers: { 'Content-Type': 'application/json' },
504
515
  body: JSON.stringify({ code: oauthCode }),
505
516
  });
517
+ ok = res.ok;
506
518
  } catch {
507
519
  // Fall through — the reload renders logged-out and the user can retry.
508
520
  }
521
+ if (isLoginPopup && ok) {
522
+ // Only claim success once the cookie is actually set; then close.
523
+ broadcastLoginSuccess();
524
+ // No-op if this window isn't script-closable; the replace below is the
525
+ // fallback so the user still ends up logged in, not on a stuck popup.
526
+ window.close();
527
+ }
528
+ // Popup with a failed redeem, or a normal tab: reload in place (logged-in on
529
+ // success, logged-out on failure so the user can retry).
509
530
  window.location.replace(cleanUrl);
510
531
  })();
511
532
  mount(<></>);