ugly-app 0.1.587 → 0.1.589
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/.pgdata/base/5/pg_internal.init +0 -0
- package/.pgdata/global/1262 +0 -0
- package/.pgdata/global/2671 +0 -0
- package/.pgdata/global/2672 +0 -0
- package/.pgdata/global/pg_control +0 -0
- package/.pgdata/global/pg_internal.init +0 -0
- package/.pgdata/pg_wal/000000010000000000000009 +0 -0
- package/.pgdata/pg_xact/0000 +0 -0
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/client/Screenshot.js +1 -1
- package/dist/client/Screenshot.js.map +1 -1
- package/dist/client/auth/startLogin.d.ts +7 -1
- package/dist/client/auth/startLogin.d.ts.map +1 -1
- package/dist/client/auth/startLogin.js +11 -1
- package/dist/client/auth/startLogin.js.map +1 -1
- package/dist/client/bootstrapApp.d.ts.map +1 -1
- package/dist/client/bootstrapApp.js +3 -7
- package/dist/client/bootstrapApp.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/version.ts +1 -1
- package/src/client/Screenshot.ts +1 -1
- package/src/client/auth/startLogin.ts +11 -1
- package/src/client/bootstrapApp.tsx +3 -7
- package/test-results/.last-run.json +24 -2
- package/test-results/test-pages--auth-demo-loads-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-ai-runs-textGen-and-returns-a-response-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-audio-TTS-68f5e--audio-when-Play-is-clicked-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-chat-load-b9223-t-on-Workers-/342/200/224-page-mounts--chromium/error-context.md +226 -0
- package/test-results/test-pages--test-collab-lo-ae96d-t-on-Workers-/342/200/224-page-mounts--chromium/error-context.md +226 -0
- package/test-results/test-pages--test-email-loads-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-errors-ha-fe332-rror-click-without-crashing-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-index-page-lists-the-test-suite-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-inspect-fixture-loads-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-inspect-fixture-other-loads-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-push-loads-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-safe-area-loads-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-scroll-loads-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-search-ru-19f57-red-search-proxy-infra-TBD--chromium/error-context.md +226 -0
- package/test-results/test-pages--test-strings-loads-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-three-loads-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-todo-load-dbf6f-creates-a-todo-list-updates-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-ui-loads-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-upload-loads-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-video-room-loads-chromium/error-context.md +226 -0
- package/test-results/test-pages--test-worker-runs-a-DB-mutation-worker-round-trip-chromium/error-context.md +226 -0
|
Binary file
|
package/.pgdata/global/1262
CHANGED
|
Binary file
|
package/.pgdata/global/2671
CHANGED
|
Binary file
|
package/.pgdata/global/2672
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/.pgdata/pg_xact/0000
CHANGED
|
Binary file
|
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.589";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Screenshot.js","sourceRoot":"","sources":["../../src/client/Screenshot.ts"],"names":[],"mappings":"AAmBA;;;;GAIG;AACH,KAAK,UAAU,qBAAqB;IAClC,IACE,OAAO,SAAS,KAAK,WAAW;QAChC,CAAC,SAAS,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"Screenshot.js","sourceRoot":"","sources":["../../src/client/Screenshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,12 @@ export interface StartLoginOptions {
|
|
|
11
11
|
* `redirectTo` (or `/`), where the framework's LoginPopup handles sign-in.
|
|
12
12
|
*/
|
|
13
13
|
export declare function startUglyBotLogin(opts?: StartLoginOptions): void;
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Best-effort check for an existing session (not a validity guarantee). The
|
|
16
|
+
* `auth_token` cookie is HttpOnly — invisible to `document.cookie` — so the
|
|
17
|
+
* reliable signal is the server-injected `window.__AUTH_TOKEN__` (set by the
|
|
18
|
+
* Workers/Node HTML wrapper when the cookie verifies). Fall back to a
|
|
19
|
+
* non-HttpOnly cookie for older/self-host setups.
|
|
20
|
+
*/
|
|
15
21
|
export declare function hasSessionCookie(): boolean;
|
|
16
22
|
//# sourceMappingURL=startLogin.d.ts.map
|
|
@@ -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
|
|
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;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAO1C"}
|
|
@@ -53,8 +53,18 @@ export function startUglyBotLogin(opts = {}) {
|
|
|
53
53
|
};
|
|
54
54
|
window.addEventListener('message', handler);
|
|
55
55
|
}
|
|
56
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* Best-effort check for an existing session (not a validity guarantee). The
|
|
58
|
+
* `auth_token` cookie is HttpOnly — invisible to `document.cookie` — so the
|
|
59
|
+
* reliable signal is the server-injected `window.__AUTH_TOKEN__` (set by the
|
|
60
|
+
* Workers/Node HTML wrapper when the cookie verifies). Fall back to a
|
|
61
|
+
* non-HttpOnly cookie for older/self-host setups.
|
|
62
|
+
*/
|
|
57
63
|
export function hasSessionCookie() {
|
|
64
|
+
if (typeof window !== 'undefined' &&
|
|
65
|
+
window.__AUTH_TOKEN__) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
58
68
|
if (typeof document === 'undefined')
|
|
59
69
|
return false;
|
|
60
70
|
return /(?:^|;\s*)auth_token=[^;]+/.test(document.cookie);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startLogin.js","sourceRoot":"","sources":["../../../src/client/auth/startLogin.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,EAAE;AACF,0EAA0E;AAC1E,+DAA+D;AAE/D,MAAM,YAAY,GAChB,OAAO,MAAM,KAAK,WAAW;IAC3B,CAAC,CAAC,CAAE,MAA4C,CAAC,gBAAgB;QAC7D,kBAAkB,CAAC;IACvB,CAAC,CAAC,kBAAkB,CAAC;AASzB;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA0B,EAAE;IAC5D,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAC1C,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,GAAG,YAAY,iBAAiB,MAAM,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,GAAG,EACH,gBAAgB,EAChB,uCAAuC,CACxC,CAAC;IAEF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,mEAAmE;QACnE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,EAAE,KAAmB,EAAiB,EAAE;QAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY;YAAE,OAAO;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAA+C,CAAC;QACnE,IAAI,IAAI,EAAE,IAAI,KAAK,gBAAgB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QAC1D,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,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,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1C,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,UAAU;gBAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;;gBACvD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IACF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"startLogin.js","sourceRoot":"","sources":["../../../src/client/auth/startLogin.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,EAAE;AACF,0EAA0E;AAC1E,+DAA+D;AAE/D,MAAM,YAAY,GAChB,OAAO,MAAM,KAAK,WAAW;IAC3B,CAAC,CAAC,CAAE,MAA4C,CAAC,gBAAgB;QAC7D,kBAAkB,CAAC;IACvB,CAAC,CAAC,kBAAkB,CAAC;AASzB;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA0B,EAAE;IAC5D,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAC1C,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,GAAG,YAAY,iBAAiB,MAAM,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,GAAG,EACH,gBAAgB,EAChB,uCAAuC,CACxC,CAAC;IAEF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,mEAAmE;QACnE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,EAAE,KAAmB,EAAiB,EAAE;QAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY;YAAE,OAAO;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAA+C,CAAC;QACnE,IAAI,IAAI,EAAE,IAAI,KAAK,gBAAgB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QAC1D,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,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,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1C,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,UAAU;gBAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;;gBACvD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IACF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,OAAO,MAAM,KAAK,WAAW;QAC5B,MAA6C,CAAC,cAAc,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAClD,OAAO,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -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;AASzE,OAAO,EAAmB,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAInF,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;KACjC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,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;CAClB;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,
|
|
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;AASzE,OAAO,EAAmB,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAInF,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;KACjC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,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;CAClB;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CA2I/D"}
|
|
@@ -39,18 +39,14 @@ export function bootstrapApp(options) {
|
|
|
39
39
|
if (oauthCode) {
|
|
40
40
|
void (async () => {
|
|
41
41
|
try {
|
|
42
|
-
|
|
42
|
+
await fetch('/auth/verify', {
|
|
43
43
|
method: 'POST',
|
|
44
44
|
headers: { 'Content-Type': 'application/json' },
|
|
45
45
|
body: JSON.stringify({ code: oauthCode }),
|
|
46
46
|
});
|
|
47
|
-
const body = await res.text().catch(() => '');
|
|
48
|
-
// eslint-disable-next-line no-console
|
|
49
|
-
console.log('[LoginBoot] verify', res.status, body.slice(0, 200));
|
|
50
47
|
}
|
|
51
|
-
catch
|
|
52
|
-
//
|
|
53
|
-
console.log('[LoginBoot] verify threw', String(e));
|
|
48
|
+
catch {
|
|
49
|
+
// Fall through — the reload renders logged-out and the user can retry.
|
|
54
50
|
}
|
|
55
51
|
// Strip the single-use code, then full-reload so the server picks up the
|
|
56
52
|
// (now set) auth cookie. `replace` keeps the code-bearing URL out of
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrapApp.js","sourceRoot":"","sources":["../../src/client/bootstrapApp.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAA8B,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAmCzD,MAAM,CAAC,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAuD,CAAC,CAAC,CAAC,EAAwC,CAAC;AAE7I,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,MAAM,MAAM,GACV,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAC3E,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEhC,uEAAuE;IACvE,sEAAsE;IACtE,iEAAiE;IACjE,uEAAuE;IACvE,iEAAiE;IACjE,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,yBAAyB,EAAE,CAAC;QAC5F,IAAI,CAAC,MAAM,CAAC,KAAC,iBAAiB,KAAG,CAAC,CAAC;QACnC,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,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,IAAI,CAAC;oBACH,MAAM,
|
|
1
|
+
{"version":3,"file":"bootstrapApp.js","sourceRoot":"","sources":["../../src/client/bootstrapApp.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/cli/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Auto-generated by prebuild — do not edit manually
|
|
2
|
-
export const CLI_VERSION = "0.1.
|
|
2
|
+
export const CLI_VERSION = "0.1.589";
|
package/src/client/Screenshot.ts
CHANGED
|
@@ -25,7 +25,7 @@ interface UglyBridgeWindow {
|
|
|
25
25
|
async function captureViaUglyBrowser(): Promise<string | null> {
|
|
26
26
|
if (
|
|
27
27
|
typeof navigator === 'undefined' ||
|
|
28
|
-
!navigator.userAgent
|
|
28
|
+
!navigator.userAgent?.includes('UglyBrowser') ||
|
|
29
29
|
typeof window === 'undefined'
|
|
30
30
|
) {
|
|
31
31
|
return null;
|
|
@@ -63,8 +63,18 @@ export function startUglyBotLogin(opts: StartLoginOptions = {}): void {
|
|
|
63
63
|
window.addEventListener('message', handler);
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
/**
|
|
66
|
+
/**
|
|
67
|
+
* Best-effort check for an existing session (not a validity guarantee). The
|
|
68
|
+
* `auth_token` cookie is HttpOnly — invisible to `document.cookie` — so the
|
|
69
|
+
* reliable signal is the server-injected `window.__AUTH_TOKEN__` (set by the
|
|
70
|
+
* Workers/Node HTML wrapper when the cookie verifies). Fall back to a
|
|
71
|
+
* non-HttpOnly cookie for older/self-host setups.
|
|
72
|
+
*/
|
|
67
73
|
export function hasSessionCookie(): boolean {
|
|
74
|
+
if (typeof window !== 'undefined' &&
|
|
75
|
+
(window as unknown as Record<string, unknown>).__AUTH_TOKEN__) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
68
78
|
if (typeof document === 'undefined') return false;
|
|
69
79
|
return /(?:^|;\s*)auth_token=[^;]+/.test(document.cookie);
|
|
70
80
|
}
|
|
@@ -89,17 +89,13 @@ export function bootstrapApp(options: BootstrapAppOptions): void {
|
|
|
89
89
|
if (oauthCode) {
|
|
90
90
|
void (async () => {
|
|
91
91
|
try {
|
|
92
|
-
|
|
92
|
+
await fetch('/auth/verify', {
|
|
93
93
|
method: 'POST',
|
|
94
94
|
headers: { 'Content-Type': 'application/json' },
|
|
95
95
|
body: JSON.stringify({ code: oauthCode }),
|
|
96
96
|
});
|
|
97
|
-
|
|
98
|
-
//
|
|
99
|
-
console.log('[LoginBoot] verify', res.status, body.slice(0, 200));
|
|
100
|
-
} catch (e) {
|
|
101
|
-
// eslint-disable-next-line no-console
|
|
102
|
-
console.log('[LoginBoot] verify threw', String(e));
|
|
97
|
+
} catch {
|
|
98
|
+
// Fall through — the reload renders logged-out and the user can retry.
|
|
103
99
|
}
|
|
104
100
|
// Strip the single-use code, then full-reload so the server picks up the
|
|
105
101
|
// (now set) auth cookie. `replace` keeps the code-bearing URL out of
|
|
@@ -1,4 +1,26 @@
|
|
|
1
1
|
{
|
|
2
|
-
"status": "
|
|
3
|
-
"failedTests": [
|
|
2
|
+
"status": "failed",
|
|
3
|
+
"failedTests": [
|
|
4
|
+
"ecb270801e64470c7eb3-7bd7723f288943e8aabb",
|
|
5
|
+
"ecb270801e64470c7eb3-49f7f877f37e128d25bb",
|
|
6
|
+
"ecb270801e64470c7eb3-2f6a83dae9cb58ba3509",
|
|
7
|
+
"ecb270801e64470c7eb3-7315e9784748367c9789",
|
|
8
|
+
"ecb270801e64470c7eb3-1ae48316684d1a048871",
|
|
9
|
+
"ecb270801e64470c7eb3-f4ec10d203302497169d",
|
|
10
|
+
"ecb270801e64470c7eb3-dd7cdcd247d4756c74f0",
|
|
11
|
+
"ecb270801e64470c7eb3-d3a925b0be598e672110",
|
|
12
|
+
"ecb270801e64470c7eb3-44f9c598fd2f3c906315",
|
|
13
|
+
"ecb270801e64470c7eb3-fda4b364ebd825845b53",
|
|
14
|
+
"ecb270801e64470c7eb3-a1b79047fb2f5b90d955",
|
|
15
|
+
"ecb270801e64470c7eb3-136b79c4ef6b52d44656",
|
|
16
|
+
"ecb270801e64470c7eb3-ea688b2565bd508fd353",
|
|
17
|
+
"ecb270801e64470c7eb3-14831c0cfa8577e72c30",
|
|
18
|
+
"ecb270801e64470c7eb3-ce560dfbd14288e4991e",
|
|
19
|
+
"ecb270801e64470c7eb3-0f0a058a88f13930c372",
|
|
20
|
+
"ecb270801e64470c7eb3-558d66a362c59848c23c",
|
|
21
|
+
"ecb270801e64470c7eb3-61568ce087b558deabe2",
|
|
22
|
+
"ecb270801e64470c7eb3-80f57badf67aab48c95e",
|
|
23
|
+
"ecb270801e64470c7eb3-cdf14476971b5b9b5ed0",
|
|
24
|
+
"ecb270801e64470c7eb3-cd26a959ff20bdbfd404"
|
|
25
|
+
]
|
|
4
26
|
}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# Instructions
|
|
2
|
+
|
|
3
|
+
- Following Playwright test failed.
|
|
4
|
+
- Explain why, be concise, respect Playwright best practices.
|
|
5
|
+
- Provide a snippet of code with the fix, if possible.
|
|
6
|
+
|
|
7
|
+
# Test info
|
|
8
|
+
|
|
9
|
+
- Name: test-pages.spec.ts >> /auth-demo loads
|
|
10
|
+
- Location: tests/e2e-pages/test-pages.spec.ts:151:1
|
|
11
|
+
|
|
12
|
+
# Error details
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
Error: page.goto: net::ERR_CONNECTION_REFUSED at http://localhost:8787/auth-demo
|
|
16
|
+
Call log:
|
|
17
|
+
- navigating to "http://localhost:8787/auth-demo", waiting until "domcontentloaded"
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
# Test source
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
3 | *
|
|
25
|
+
4 | * Drives a real browser against a deployed ugly-app and asserts every
|
|
26
|
+
5 | * built-in test page from the deploy template loads and serves the
|
|
27
|
+
6 | * expected framework features without errors.
|
|
28
|
+
7 | *
|
|
29
|
+
8 | * Target URL:
|
|
30
|
+
9 | * - `TARGET_URL` env var (e.g. https://deploy.justin-mann.workers.dev)
|
|
31
|
+
10 | * points at any live Worker deploy.
|
|
32
|
+
11 | * - Defaults to `http://localhost:8787` (wrangler dev) when unset.
|
|
33
|
+
12 | *
|
|
34
|
+
13 | * Auth:
|
|
35
|
+
14 | * - `AUTH_TOKEN` env var carries the ugly.bot JWT to plant as the
|
|
36
|
+
15 | * `auth_token` cookie. The framework's `wrapWithAssets` HTML
|
|
37
|
+
16 | * handler reads the cookie, verifies via ugly.bot, and injects
|
|
38
|
+
17 | * `window.__AUTH_TOKEN__` so bootstrapApp comes up authenticated.
|
|
39
|
+
18 | * - Defaults to reading `~/.ugly-bot/auth.json` if the env var is
|
|
40
|
+
19 | * unset — convenient for local runs against the dev's own auth.
|
|
41
|
+
20 | *
|
|
42
|
+
21 | * What each page assertion checks:
|
|
43
|
+
22 | * - Page mounts and reaches a stable DOM (no infinite reload loop).
|
|
44
|
+
23 | * - No uncaught browser-side errors during initial render.
|
|
45
|
+
24 | * - Page does not display a known broken-state string (e.g.
|
|
46
|
+
25 | * "UglyBot socket not available", "is not registered").
|
|
47
|
+
26 | * - For pages with specific interaction surfaces (todo, search),
|
|
48
|
+
27 | * drive the key action and confirm the response shape.
|
|
49
|
+
28 | *
|
|
50
|
+
29 | * Pages are taken from the deploy project's `shared/pages.ts`. New
|
|
51
|
+
30 | * pages must be added here too — `npm run test:e2e-pages` is the
|
|
52
|
+
31 | * acceptance gate for the deploy template's surface area.
|
|
53
|
+
32 | */
|
|
54
|
+
33 |
|
|
55
|
+
34 | import { expect, test, type Page } from '@playwright/test';
|
|
56
|
+
35 | import { readFileSync } from 'node:fs';
|
|
57
|
+
36 | import { homedir } from 'node:os';
|
|
58
|
+
37 | import { join } from 'node:path';
|
|
59
|
+
38 |
|
|
60
|
+
39 | const TARGET_URL =
|
|
61
|
+
40 | process.env['TARGET_URL'] ?? 'http://localhost:8787';
|
|
62
|
+
41 |
|
|
63
|
+
42 | function resolveAuthToken(): string {
|
|
64
|
+
43 | if (process.env['AUTH_TOKEN']) return process.env['AUTH_TOKEN'];
|
|
65
|
+
44 | try {
|
|
66
|
+
45 | const blob = JSON.parse(
|
|
67
|
+
46 | readFileSync(join(homedir(), '.ugly-bot', 'auth.json'), 'utf-8'),
|
|
68
|
+
47 | ) as { token?: string };
|
|
69
|
+
48 | if (blob.token) return blob.token;
|
|
70
|
+
49 | } catch {
|
|
71
|
+
50 | /* fall through */
|
|
72
|
+
51 | }
|
|
73
|
+
52 | throw new Error(
|
|
74
|
+
53 | 'No auth token available. Set AUTH_TOKEN env var or write ~/.ugly-bot/auth.json.',
|
|
75
|
+
54 | );
|
|
76
|
+
55 | }
|
|
77
|
+
56 |
|
|
78
|
+
57 | const AUTH_TOKEN = resolveAuthToken();
|
|
79
|
+
58 | const ORIGIN = new URL(TARGET_URL).origin;
|
|
80
|
+
59 | const HOSTNAME = new URL(TARGET_URL).hostname;
|
|
81
|
+
60 |
|
|
82
|
+
61 | // Console-error sink so each test asserts a clean boot.
|
|
83
|
+
62 | function attachConsoleSink(page: Page): string[] {
|
|
84
|
+
63 | const errors: string[] = [];
|
|
85
|
+
64 | page.on('pageerror', (err) => {
|
|
86
|
+
65 | errors.push(`pageerror: ${err.message}`);
|
|
87
|
+
66 | });
|
|
88
|
+
67 | page.on('console', (msg) => {
|
|
89
|
+
68 | if (msg.type() === 'error') {
|
|
90
|
+
69 | // Filter out third-party noise we can't control (e.g. CSP from
|
|
91
|
+
70 | // the ugly.bot iframe, R2-cdn DNS prefetch warnings).
|
|
92
|
+
71 | const text = msg.text();
|
|
93
|
+
72 | if (
|
|
94
|
+
73 | text.includes('Failed to load resource') ||
|
|
95
|
+
74 | text.includes('chunk-') ||
|
|
96
|
+
75 | text.startsWith('[Auth]') // server log echoed to client during dev
|
|
97
|
+
76 | ) {
|
|
98
|
+
77 | return;
|
|
99
|
+
78 | }
|
|
100
|
+
79 | errors.push(`console.error: ${text}`);
|
|
101
|
+
80 | }
|
|
102
|
+
81 | });
|
|
103
|
+
82 | return errors;
|
|
104
|
+
83 | }
|
|
105
|
+
84 |
|
|
106
|
+
85 | test.beforeEach(async ({ context }) => {
|
|
107
|
+
86 | await context.addCookies([
|
|
108
|
+
87 | {
|
|
109
|
+
88 | name: 'auth_token',
|
|
110
|
+
89 | value: AUTH_TOKEN,
|
|
111
|
+
90 | domain: HOSTNAME,
|
|
112
|
+
91 | path: '/',
|
|
113
|
+
92 | httpOnly: false, // Playwright can't set HttpOnly + read it; tests don't need to read
|
|
114
|
+
93 | secure: TARGET_URL.startsWith('https'),
|
|
115
|
+
94 | sameSite: 'Lax',
|
|
116
|
+
95 | },
|
|
117
|
+
96 | ]);
|
|
118
|
+
97 | });
|
|
119
|
+
98 |
|
|
120
|
+
99 | // ── Helpers ──────────────────────────────────────────────────────────────
|
|
121
|
+
100 |
|
|
122
|
+
101 | async function goto(page: Page, path: string): Promise<void> {
|
|
123
|
+
102 | const url = `${ORIGIN}${path}`;
|
|
124
|
+
> 103 | await page.goto(url, { waitUntil: 'domcontentloaded' });
|
|
125
|
+
| ^ Error: page.goto: net::ERR_CONNECTION_REFUSED at http://localhost:8787/auth-demo
|
|
126
|
+
104 | // Give the SPA a moment to mount + auth-handshake before any
|
|
127
|
+
105 | // assertions touch the DOM.
|
|
128
|
+
106 | await page.waitForLoadState('networkidle', { timeout: 10_000 }).catch(() => {
|
|
129
|
+
107 | /* networkidle can stall on long-poll sockets; absorb */
|
|
130
|
+
108 | });
|
|
131
|
+
109 | }
|
|
132
|
+
110 |
|
|
133
|
+
111 | async function expectMounted(page: Page): Promise<void> {
|
|
134
|
+
112 | // The framework mounts into #root; anything richer than an empty
|
|
135
|
+
113 | // div means React got past hydration.
|
|
136
|
+
114 | const root = page.locator('#root');
|
|
137
|
+
115 | await expect(root).not.toBeEmpty({ timeout: 10_000 });
|
|
138
|
+
116 | }
|
|
139
|
+
117 |
|
|
140
|
+
118 | async function expectNoBrokenText(page: Page): Promise<void> {
|
|
141
|
+
119 | const html = await page.content();
|
|
142
|
+
120 | const brokenSnippets = [
|
|
143
|
+
121 | 'UglyBot socket not available',
|
|
144
|
+
122 | "is not registered",
|
|
145
|
+
123 | 'not yet ported',
|
|
146
|
+
124 | "TypeError: Cannot read",
|
|
147
|
+
125 | ];
|
|
148
|
+
126 | for (const snippet of brokenSnippets) {
|
|
149
|
+
127 | expect(
|
|
150
|
+
128 | html.includes(snippet),
|
|
151
|
+
129 | `page contains broken-state snippet: "${snippet}"`,
|
|
152
|
+
130 | ).toBe(false);
|
|
153
|
+
131 | }
|
|
154
|
+
132 | }
|
|
155
|
+
133 |
|
|
156
|
+
134 | // ── /test (index) ────────────────────────────────────────────────────────
|
|
157
|
+
135 |
|
|
158
|
+
136 | test('/test index page lists the test suite', async ({ page }) => {
|
|
159
|
+
137 | const errors = attachConsoleSink(page);
|
|
160
|
+
138 | await goto(page, '/test');
|
|
161
|
+
139 | await expectMounted(page);
|
|
162
|
+
140 | await expectNoBrokenText(page);
|
|
163
|
+
141 | // The index lists the Todo entry twice (link title + description);
|
|
164
|
+
142 | // use first() to avoid strict-mode multi-match.
|
|
165
|
+
143 | await expect(
|
|
166
|
+
144 | page.getByText('Todo', { exact: false }).first(),
|
|
167
|
+
145 | ).toBeVisible();
|
|
168
|
+
146 | expect(errors).toEqual([]);
|
|
169
|
+
147 | });
|
|
170
|
+
148 |
|
|
171
|
+
149 | // ── Public (auth-optional) pages ─────────────────────────────────────────
|
|
172
|
+
150 |
|
|
173
|
+
151 | test('/auth-demo loads', async ({ page }) => {
|
|
174
|
+
152 | const errors = attachConsoleSink(page);
|
|
175
|
+
153 | await goto(page, '/auth-demo');
|
|
176
|
+
154 | await expectMounted(page);
|
|
177
|
+
155 | await expectNoBrokenText(page);
|
|
178
|
+
156 | expect(errors).toEqual([]);
|
|
179
|
+
157 | });
|
|
180
|
+
158 |
|
|
181
|
+
159 | test('/test/ui loads', async ({ page }) => {
|
|
182
|
+
160 | const errors = attachConsoleSink(page);
|
|
183
|
+
161 | await goto(page, '/test/ui');
|
|
184
|
+
162 | await expectMounted(page);
|
|
185
|
+
163 | await expectNoBrokenText(page);
|
|
186
|
+
164 | expect(errors).toEqual([]);
|
|
187
|
+
165 | });
|
|
188
|
+
166 |
|
|
189
|
+
167 | test('/test/scroll loads', async ({ page }) => {
|
|
190
|
+
168 | const errors = attachConsoleSink(page);
|
|
191
|
+
169 | await goto(page, '/test/scroll');
|
|
192
|
+
170 | await expectMounted(page);
|
|
193
|
+
171 | await expectNoBrokenText(page);
|
|
194
|
+
172 | expect(errors).toEqual([]);
|
|
195
|
+
173 | });
|
|
196
|
+
174 |
|
|
197
|
+
175 | test('/test/strings loads', async ({ page }) => {
|
|
198
|
+
176 | const errors = attachConsoleSink(page);
|
|
199
|
+
177 | await goto(page, '/test/strings');
|
|
200
|
+
178 | await expectMounted(page);
|
|
201
|
+
179 | await expectNoBrokenText(page);
|
|
202
|
+
180 | expect(errors).toEqual([]);
|
|
203
|
+
181 | });
|
|
204
|
+
182 |
|
|
205
|
+
183 | test('/test/safe-area loads', async ({ page }) => {
|
|
206
|
+
184 | const errors = attachConsoleSink(page);
|
|
207
|
+
185 | await goto(page, '/test/safe-area');
|
|
208
|
+
186 | await expectMounted(page);
|
|
209
|
+
187 | await expectNoBrokenText(page);
|
|
210
|
+
188 | expect(errors).toEqual([]);
|
|
211
|
+
189 | });
|
|
212
|
+
190 |
|
|
213
|
+
191 | test('/test/three loads', async ({ page }) => {
|
|
214
|
+
192 | const errors = attachConsoleSink(page);
|
|
215
|
+
193 | await goto(page, '/test/three');
|
|
216
|
+
194 | // three.js is a heavy lazy chunk and renders to a WebGL canvas.
|
|
217
|
+
195 | // Headless chromium often can't initialise WebGL without a GPU,
|
|
218
|
+
196 | // so we accept either: the SPA mounted SOMETHING under #root, or
|
|
219
|
+
197 | // a WebGL-context console.error appeared (legitimate environment
|
|
220
|
+
198 | // limitation, not a regression). The point of this test is to
|
|
221
|
+
199 | // catch chunk-loading regressions, not to validate GLSL output.
|
|
222
|
+
200 | await page.waitForTimeout(3000);
|
|
223
|
+
201 | await expectNoBrokenText(page);
|
|
224
|
+
202 | const filtered = errors.filter(
|
|
225
|
+
203 | (e) => !/webgl|context|gl_|canvas/i.test(e),
|
|
226
|
+
```
|