ugly-app 0.1.277 → 0.1.279

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,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.277";
1
+ export declare const CLI_VERSION = "0.1.279";
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.277";
2
+ export const CLI_VERSION = "0.1.279";
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../src/client/Router.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,aAAa,EAEb,YAAY,EACZ,SAAS,EAOV,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,UAAU,EACV,YAAY,EACZ,SAAS,EACT,cAAc,EACd,WAAW,EACX,cAAc,EACd,cAAc,EACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,mBAAmB,EACnB,cAAc,EAEf,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,qBAAqB,EAAe,MAAM,kBAAkB,CAAC;AAItE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IAC/C,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,2FAA2F;IAC3F,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,YAAY,CAAC;CACxD;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAkBD,MAAM,WAAW,kBAAkB,CAAC,KAAK,SAAS,YAAY;IAC5D,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,cAAc,EAAE,cAAc,CAAC;IAC/B,IAAI,CAAC,CAAC,SAAS,MAAM,KAAK,GAAG,MAAM,EACjC,SAAS,EAAE,CAAC,EACZ,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAC3B,IAAI,CAAC;IACR,OAAO,CAAC,CAAC,SAAS,MAAM,KAAK,GAAG,MAAM,EACpC,SAAS,EAAE,CAAC,EACZ,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAC3B,IAAI,CAAC;IACR,IAAI,IAAI,IAAI,CAAC;IACb,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;IACnE,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,IAAI,IAAI,CAAC;CACxB;AA4LD,wBAAgB,YAAY,CAAC,KAAK,SAAS,YAAY,EAAE,MAAM,EAAE;IAC/D,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;CAC3B,GAAG;IACF,cAAc,EAAE,CAAC,KAAK,EAAE;QACtB,QAAQ,EAAE,SAAS,CAAC;QACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;QACrB,aAAa,CAAC,EAAE,SAAS,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC;QAChC,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,KAAK,YAAY,CAAC;IACnB,UAAU,EAAE,CAAC,KAAK,EAAE;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,cAAc,CAAC;QACxB,mFAAmF;QACnF,mBAAmB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;QACjE,gGAAgG;QAChG,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,YAAY,CAAC;KACtD,KAAK,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;CAC5C,CAqUA;AAID;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,OAAO,EAAE,MAAM,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,GAC/D,SAAS,CAAC,MAAM,CAAC,CAKnB;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,OAAO,EAAE,MAAM,OAAO,CAAC;IAAE,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,GACrD,SAAS,CAAC,MAAM,CAAC,CAKnB;AAID,wBAAgB,IAAI,CAClB,KAAK,SAAS,YAAY,EAC1B,CAAC,SAAS,MAAM,KAAK,GAAG,MAAM,EAC9B,KAAK,EAAE;IACP,MAAM,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC;IACN,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,GAAG,YAAY,CAuBf"}
1
+ {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../src/client/Router.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { createContext, createElement, Fragment, useCallback, useContext, useEffect, useMemo, useRef, useState, } from 'react';
3
+ import { LoginPopup } from './LoginPopup.js';
3
4
  import { buildUrl, parseUrl } from '../shared/Router.js';
4
5
  import { Animated } from './animation/Animated.js';
5
6
  import { createAnimatedValue, easingFunctions, } from './animation/animatedValue.js';
@@ -122,12 +123,17 @@ function AutoLoginGate(props) {
122
123
  if (state === 'checking') {
123
124
  return (_jsx(_Fragment, { children: _jsx("iframe", { src: `${UGLY_BOT_URL}/iframe-auth?origin=${encodeURIComponent(window.location.origin)}`, style: { display: 'none', width: 0, height: 0, border: 'none' }, title: "auth-check" }) }));
124
125
  }
125
- // show-login: render the loginFallback as a full-screen gate
126
- return _jsx(_Fragment, { children: props.loginFallback ?? props.children });
126
+ // Silent auto-login failed — render the app normally and let per-route
127
+ // auth checks handle loginFallback for pages that require authentication.
128
+ return _jsx(_Fragment, { children: props.children });
127
129
  }
128
130
  export function createRouter(config) {
129
131
  // ── RouterProvider ──────────────────────────────────────────────────────────
132
+ const defaultLoginFallback = createElement(LoginPopup, {
133
+ onSuccess: () => { window.location.reload(); },
134
+ });
130
135
  function RouterProvider(props) {
136
+ const loginFallback = props.loginFallback ?? defaultLoginFallback;
131
137
  const appCtx = useAppOptional();
132
138
  const runAsync = appCtx?.runAsync ??
133
139
  (async (_label, fn) => {
@@ -152,7 +158,7 @@ export function createRouter(config) {
152
158
  const pageMeta = config.pages[route.routeName];
153
159
  if (pageMeta?.auth && props.isAuthenticated && !props.isAuthenticated()) {
154
160
  setActive({
155
- element: createElement(Fragment, null, props.loginFallback ?? null),
161
+ element: createElement(Fragment, null, loginFallback),
156
162
  routeState: route,
157
163
  transitionType,
158
164
  contentId: route.routeName + '|__auth__',
@@ -304,7 +310,7 @@ export function createRouter(config) {
304
310
  if (props.autoLogin &&
305
311
  props.isAuthenticated &&
306
312
  !props.isAuthenticated()) {
307
- return (_jsx(AutoLoginGate, { loginFallback: props.loginFallback, children: props.children }));
313
+ return (_jsx(AutoLoginGate, { loginFallback: loginFallback, children: props.children }));
308
314
  }
309
315
  if (!ctx) {
310
316
  return _jsx(_Fragment, { children: props.fallback ?? null });
@@ -1 +1 @@
1
- {"version":3,"file":"Router.js","sourceRoot":"","sources":["../../src/client/Router.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Router.js","sourceRoot":"","sources":["../../src/client/Router.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ComponentType, ReactElement, ReactNode } from 'react';
2
+ import type { RequestRegistry } from '../shared/Api.js';
3
+ interface BootstrapAppOptions {
4
+ /** App-specific request definitions (merged with framework requests internally) */
5
+ requests: RequestRegistry;
6
+ /** The RouterProvider component from createRouter() */
7
+ RouterProvider: ComponentType<{
8
+ children: ReactNode;
9
+ fallback?: ReactNode;
10
+ isAuthenticated?: () => boolean;
11
+ autoLogin?: boolean;
12
+ }>;
13
+ /** Render callback — return the app's UI (RouterView, FeedbackButton, etc.) */
14
+ render: () => ReactElement;
15
+ /** Root DOM element or CSS selector. Defaults to '#root' */
16
+ root?: string | HTMLElement;
17
+ /** Content shown for unmatched routes. Defaults to a simple 404 message */
18
+ fallback?: ReactNode;
19
+ /** WebSocket endpoint. Defaults to '/rpc' */
20
+ socketUrl?: string;
21
+ }
22
+ export declare function bootstrapApp(options: BootstrapAppOptions): void;
23
+ export {};
24
+ //# sourceMappingURL=bootstrapApp.d.ts.map
@@ -0,0 +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,MAAM,kBAAkB,CAAC;AAMxD,UAAU,mBAAmB;IAC3B,mFAAmF;IACnF,QAAQ,EAAE,eAAe,CAAC;IAE1B,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,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,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;CACpB;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAmE/D"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createRoot } from 'react-dom/client';
3
+ import { frameworkRequests } from '../shared/FrameworkRequests.js';
4
+ import { initAppApi } from './AppApi.js';
5
+ import { AppProvider } from './AppProvider.js';
6
+ import { createSocket } from './createSocket.js';
7
+ const w = window;
8
+ export function bootstrapApp(options) {
9
+ const { requests: appRequests, RouterProvider, render: renderApp, root: rootOpt = '#root', fallback = _jsx("div", { children: "404 \u2014 Page not found" }), socketUrl = '/rpc', } = options;
10
+ const rootEl = typeof rootOpt === 'string' ? document.querySelector(rootOpt) : rootOpt;
11
+ const root = createRoot(rootEl);
12
+ // Initialize error/feedback reporting
13
+ const uglyBotUrl = w['__UGLY_BOT_URL__'] ?? 'https://ugly.bot';
14
+ const uglyBotProjectId = w['__UGLY_BOT_PROJECT_ID__'] ?? '';
15
+ if (uglyBotProjectId) {
16
+ initAppApi({ appApiUrl: uglyBotUrl, projectId: uglyBotProjectId });
17
+ }
18
+ const token = w['__AUTH_TOKEN__'];
19
+ function renderWithRouter(isAuthenticated, autoLogin, children) {
20
+ root.render(_jsx(RouterProvider, { fallback: fallback, isAuthenticated: () => isAuthenticated, autoLogin: autoLogin, children: children }));
21
+ }
22
+ if (!token) {
23
+ renderWithRouter(false, true, renderApp());
24
+ return;
25
+ }
26
+ const userId = JSON.parse(atob(token.split('.')[1])).sub;
27
+ const socket = createSocket({
28
+ requests: { ...frameworkRequests, ...appRequests },
29
+ url: socketUrl,
30
+ });
31
+ socket
32
+ .connect(token)
33
+ .then((user) => {
34
+ renderWithRouter(true, false, _jsx(AppProvider, { socket: socket, userId: userId, user: user, children: renderApp() }));
35
+ })
36
+ .catch((err) => {
37
+ console.error('[bootstrapApp] socket.connect failed:', err);
38
+ renderWithRouter(false, false, renderApp());
39
+ });
40
+ }
41
+ //# sourceMappingURL=bootstrapApp.js.map
@@ -0,0 +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,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA2BjD,MAAM,CAAC,GAAG,MAAuD,CAAC;AAElE,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,MAAM,EACJ,QAAQ,EAAE,WAAW,EACrB,cAAc,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,OAAO,GAAG,OAAO,EACvB,QAAQ,GAAG,sDAA+B,EAC1C,SAAS,GAAG,MAAM,GACnB,GAAG,OAAO,CAAC;IAEZ,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,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,MAAM,KAAK,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAElC,SAAS,gBAAgB,CACvB,eAAwB,EACxB,SAAkB,EAClB,QAAsB;QAEtB,IAAI,CAAC,MAAM,CACT,KAAC,cAAc,IACb,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,GAAG,EAAE,CAAC,eAAe,EACtC,SAAS,EAAE,SAAS,YAEnB,QAAQ,GACM,CAClB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GACV,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CACtC,CAAC,GAAG,CAAC;IACN,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,QAAQ,EAAE,EAAE,GAAG,iBAAiB,EAAE,GAAG,WAAW,EAAE;QAClD,GAAG,EAAE,SAAS;KACf,CAAC,CAAC;IAEH,MAAM;SACH,OAAO,CAAC,KAAK,CAAC;SACd,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACb,gBAAgB,CACd,IAAI,EACJ,KAAK,EACL,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,YACpD,SAAS,EAAE,GACA,CACf,CAAC;IACJ,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACtB,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;QAC5D,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -36,6 +36,7 @@ export type { AppHttpClient, CreateHttpClientOptions, } from './createHttpClient
36
36
  export { createSocket } from './createSocket.js';
37
37
  export type { AppSocket, ConnectionState, CreateSocketOptions } from './createSocket.js';
38
38
  export { initAppApi } from './AppApi.js';
39
+ export { bootstrapApp } from './bootstrapApp.js';
39
40
  export { captureClientError } from './ErrorLog.js';
40
41
  export { clearFeedbackContext, getFeedbackContext, setFeedbackContext, } from './FeedbackContext.js';
41
42
  export { getConsoleBuffer, initClientLogger } from './Logger.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ export * from './components/index.js';
24
24
  export { createHttpClient } from './createHttpClient.js';
25
25
  export { createSocket } from './createSocket.js';
26
26
  export { initAppApi } from './AppApi.js';
27
+ export { bootstrapApp } from './bootstrapApp.js';
27
28
  export { captureClientError } from './ErrorLog.js';
28
29
  export { clearFeedbackContext, getFeedbackContext, setFeedbackContext, } from './FeedbackContext.js';
29
30
  export { getConsoleBuffer, initClientLogger } from './Logger.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AAMtC,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAEzH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAE5F,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,WAAW,EACX,QAAQ,GACT,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAK3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAKzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAO3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AAMtC,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAEzH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAE5F,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,WAAW,EACX,QAAQ,GACT,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAK3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAKzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAO3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ugly-app",
3
- "version": "0.1.277",
3
+ "version": "0.1.279",
4
4
  "type": "module",
5
5
  "main": "./dist/server/index.js",
6
6
  "exports": {
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.277";
2
+ export const CLI_VERSION = "0.1.279";
@@ -12,6 +12,7 @@ import {
12
12
  useRef,
13
13
  useState,
14
14
  } from 'react';
15
+ import { LoginPopup } from './LoginPopup.js';
15
16
  import type {
16
17
  AnimConfig,
17
18
  PageEntry,
@@ -274,8 +275,9 @@ function AutoLoginGate(props: {
274
275
  );
275
276
  }
276
277
 
277
- // show-login: render the loginFallback as a full-screen gate
278
- return <>{props.loginFallback ?? props.children}</>;
278
+ // Silent auto-login failed — render the app normally and let per-route
279
+ // auth checks handle loginFallback for pages that require authentication.
280
+ return <>{props.children}</>;
279
281
  }
280
282
 
281
283
  export function createRouter<Pages extends PageRegistry>(config: {
@@ -301,6 +303,10 @@ export function createRouter<Pages extends PageRegistry>(config: {
301
303
  } {
302
304
  // ── RouterProvider ──────────────────────────────────────────────────────────
303
305
 
306
+ const defaultLoginFallback = createElement(LoginPopup, {
307
+ onSuccess: () => { window.location.reload(); },
308
+ });
309
+
304
310
  function RouterProvider(props: {
305
311
  children: ReactNode;
306
312
  fallback?: ReactNode;
@@ -308,6 +314,7 @@ export function createRouter<Pages extends PageRegistry>(config: {
308
314
  isAuthenticated?: () => boolean;
309
315
  autoLogin?: boolean;
310
316
  }): ReactElement {
317
+ const loginFallback = props.loginFallback ?? defaultLoginFallback;
311
318
  const appCtx = useAppOptional();
312
319
  const runAsync =
313
320
  appCtx?.runAsync ??
@@ -344,7 +351,7 @@ export function createRouter<Pages extends PageRegistry>(config: {
344
351
  const pageMeta = config.pages[route.routeName];
345
352
  if (pageMeta?.auth && props.isAuthenticated && !props.isAuthenticated()) {
346
353
  setActive({
347
- element: createElement(Fragment, null, props.loginFallback ?? null),
354
+ element: createElement(Fragment, null, loginFallback),
348
355
  routeState: route,
349
356
  transitionType,
350
357
  contentId: route.routeName + '|__auth__',
@@ -555,7 +562,7 @@ export function createRouter<Pages extends PageRegistry>(config: {
555
562
  !props.isAuthenticated()
556
563
  ) {
557
564
  return (
558
- <AutoLoginGate loginFallback={props.loginFallback}>
565
+ <AutoLoginGate loginFallback={loginFallback}>
559
566
  {props.children}
560
567
  </AutoLoginGate>
561
568
  );
@@ -0,0 +1,103 @@
1
+ import type { ComponentType, ReactElement, ReactNode } from 'react';
2
+ import { createRoot } from 'react-dom/client';
3
+ import type { RequestRegistry } from '../shared/Api.js';
4
+ import { frameworkRequests } from '../shared/FrameworkRequests.js';
5
+ import { initAppApi } from './AppApi.js';
6
+ import { AppProvider } from './AppProvider.js';
7
+ import { createSocket } from './createSocket.js';
8
+
9
+ interface BootstrapAppOptions {
10
+ /** App-specific request definitions (merged with framework requests internally) */
11
+ requests: RequestRegistry;
12
+
13
+ /** The RouterProvider component from createRouter() */
14
+ RouterProvider: ComponentType<{
15
+ children: ReactNode;
16
+ fallback?: ReactNode;
17
+ isAuthenticated?: () => boolean;
18
+ autoLogin?: boolean;
19
+ }>;
20
+
21
+ /** Render callback — return the app's UI (RouterView, FeedbackButton, etc.) */
22
+ render: () => ReactElement;
23
+
24
+ /** Root DOM element or CSS selector. Defaults to '#root' */
25
+ root?: string | HTMLElement;
26
+
27
+ /** Content shown for unmatched routes. Defaults to a simple 404 message */
28
+ fallback?: ReactNode;
29
+
30
+ /** WebSocket endpoint. Defaults to '/rpc' */
31
+ socketUrl?: string;
32
+ }
33
+
34
+ const w = window as unknown as Record<string, string | undefined>;
35
+
36
+ export function bootstrapApp(options: BootstrapAppOptions): void {
37
+ const {
38
+ requests: appRequests,
39
+ RouterProvider,
40
+ render: renderApp,
41
+ root: rootOpt = '#root',
42
+ fallback = <div>404 — Page not found</div>,
43
+ socketUrl = '/rpc',
44
+ } = options;
45
+
46
+ const rootEl =
47
+ typeof rootOpt === 'string' ? document.querySelector(rootOpt)! : rootOpt;
48
+ const root = createRoot(rootEl);
49
+
50
+ // Initialize error/feedback reporting
51
+ const uglyBotUrl = w['__UGLY_BOT_URL__'] ?? 'https://ugly.bot';
52
+ const uglyBotProjectId = w['__UGLY_BOT_PROJECT_ID__'] ?? '';
53
+ if (uglyBotProjectId) {
54
+ initAppApi({ appApiUrl: uglyBotUrl, projectId: uglyBotProjectId });
55
+ }
56
+
57
+ const token = w['__AUTH_TOKEN__'];
58
+
59
+ function renderWithRouter(
60
+ isAuthenticated: boolean,
61
+ autoLogin: boolean,
62
+ children: ReactElement,
63
+ ): void {
64
+ root.render(
65
+ <RouterProvider
66
+ fallback={fallback}
67
+ isAuthenticated={() => isAuthenticated}
68
+ autoLogin={autoLogin}
69
+ >
70
+ {children}
71
+ </RouterProvider>,
72
+ );
73
+ }
74
+
75
+ if (!token) {
76
+ renderWithRouter(false, true, renderApp());
77
+ return;
78
+ }
79
+
80
+ const userId = (
81
+ JSON.parse(atob(token.split('.')[1]!)) as { sub: string }
82
+ ).sub;
83
+ const socket = createSocket({
84
+ requests: { ...frameworkRequests, ...appRequests },
85
+ url: socketUrl,
86
+ });
87
+
88
+ socket
89
+ .connect(token)
90
+ .then((user) => {
91
+ renderWithRouter(
92
+ true,
93
+ false,
94
+ <AppProvider socket={socket} userId={userId} user={user}>
95
+ {renderApp()}
96
+ </AppProvider>,
97
+ );
98
+ })
99
+ .catch((err: unknown) => {
100
+ console.error('[bootstrapApp] socket.connect failed:', err);
101
+ renderWithRouter(false, false, renderApp());
102
+ });
103
+ }
@@ -84,6 +84,7 @@ export type {
84
84
  export { createSocket } from './createSocket.js';
85
85
  export type { AppSocket, ConnectionState, CreateSocketOptions } from './createSocket.js';
86
86
  export { initAppApi } from './AppApi.js';
87
+ export { bootstrapApp } from './bootstrapApp.js';
87
88
  export { captureClientError } from './ErrorLog.js';
88
89
  export {
89
90
  clearFeedbackContext,
@@ -33,4 +33,5 @@ export const allPages = {
33
33
  ['test/video-room']: lazyPage(() => import('./pages/VideoRoomTestPage')),
34
34
  ['test/collab']: lazyPage(() => import('./pages/CollabTestPage')),
35
35
  ['test/errors']: lazyPage(() => import('./pages/ErrorTestPage')),
36
+ ['test/worker']: lazyPage(() => import('./pages/WorkerTestPage')),
36
37
  } satisfies PageMap<AppPages>;
@@ -1,70 +1,15 @@
1
- import { createRoot } from 'react-dom/client';
2
- import { AppProvider, createSocket, initAppApi, LoginPopup } from 'ugly-app/client';
3
- import { frameworkRequests } from 'ugly-app/shared';
1
+ import { bootstrapApp, FeedbackButton } from 'ugly-app/client';
4
2
  import { requests } from '../shared/api';
5
- import App from './App';
6
- import { RouterProvider } from './router';
3
+ import { RouterProvider, RouterView } from './router';
7
4
  import './styles.css';
8
5
 
9
- const root = createRoot(document.getElementById('root')!);
10
-
11
- // Initialize the app API for error logging and feedback
12
- const uglyBotUrl = (window as unknown as Record<string, string>).__UGLY_BOT_URL__ ?? 'https://ugly.bot';
13
- const uglyBotProjectId = (window as unknown as Record<string, string>).__UGLY_BOT_PROJECT_ID__ ?? '';
14
- if (uglyBotProjectId) {
15
- initAppApi({ appApiUrl: uglyBotUrl, projectId: uglyBotProjectId });
16
- }
17
-
18
- const loginPopup = (
19
- <LoginPopup
20
- onSuccess={() => {
21
- window.location.reload();
22
- }}
23
- />
24
- );
25
-
26
- // Token is injected server-side from the auth_token cookie — no localStorage needed
27
- const token = (window as unknown as { __AUTH_TOKEN__?: string }).__AUTH_TOKEN__;
28
-
29
- if (!token) {
30
- root.render(
31
- <RouterProvider
32
- fallback={<div>404 — Page not found</div>}
33
- loginFallback={loginPopup}
34
- isAuthenticated={() => false}
35
- autoLogin
36
- >
37
- <App />
38
- </RouterProvider>,
39
- );
40
- } else {
41
- const userId = (JSON.parse(atob(token.split('.')[1]!)) as { sub: string }).sub;
42
- const socket = createSocket({ requests: { ...frameworkRequests, ...requests }, url: '/rpc' });
43
- socket
44
- .connect(token)
45
- .then((user) => {
46
- root.render(
47
- <RouterProvider
48
- fallback={<div>404 — Page not found</div>}
49
- loginFallback={loginPopup}
50
- isAuthenticated={() => true}
51
- >
52
- <AppProvider socket={socket} userId={userId} user={user}>
53
- <App />
54
- </AppProvider>
55
- </RouterProvider>,
56
- );
57
- })
58
- .catch((err) => {
59
- console.error('[main.tsx] socket.connect FAILED:', err);
60
- root.render(
61
- <RouterProvider
62
- fallback={<div>404 — Page not found</div>}
63
- loginFallback={loginPopup}
64
- isAuthenticated={() => false}
65
- >
66
- <App />
67
- </RouterProvider>,
68
- );
69
- });
70
- }
6
+ bootstrapApp({
7
+ requests,
8
+ RouterProvider,
9
+ render: () => (
10
+ <>
11
+ <RouterView />
12
+ <FeedbackButton />
13
+ </>
14
+ ),
15
+ });
@@ -16,6 +16,7 @@ const testPages = [
16
16
  { path: '/test/video-room', label: 'Video Room', description: 'WebRTC video conferencing via mediasoup', auth: true },
17
17
  { path: '/test/collab', label: 'Real-time Collab', description: 'Collaborative editing with Yjs CRDTs', auth: true },
18
18
  { path: '/test/errors', label: 'Error Testing', description: 'Trigger client and server errors for testing', auth: true },
19
+ { path: '/test/worker', label: 'Worker Tasks', description: 'Test throw exception, DB mutation, and console.error', auth: true },
19
20
  ];
20
21
 
21
22
  export default function TestIndexPage(): React.ReactElement {
@@ -0,0 +1,135 @@
1
+ import React, { useState } from 'react';
2
+ import { Button, Card, PageLayout } from 'ugly-app/client';
3
+
4
+ interface LogEntry {
5
+ ts: number;
6
+ msg: string;
7
+ kind: 'info' | 'ok' | 'err';
8
+ }
9
+
10
+ export default function WorkerTestPage(): React.ReactElement {
11
+ const [logs, setLogs] = useState<LogEntry[]>([]);
12
+
13
+ function addLog(msg: string, kind: LogEntry['kind'] = 'info'): void {
14
+ setLogs((prev) => [...prev, { ts: Date.now(), msg, kind }]);
15
+ }
16
+
17
+ async function handleThrowException(): Promise<void> {
18
+ const msg = `[WorkerTest] throw exception test ${Date.now()}`;
19
+ addLog(`Triggering worker throw via /api/testWorkerThrow...`);
20
+ try {
21
+ const res = await fetch('/api/testWorkerThrow', {
22
+ method: 'POST',
23
+ headers: { 'Content-Type': 'application/json' },
24
+ body: JSON.stringify({ input: { message: msg } }),
25
+ });
26
+ const json = (await res.json()) as { error?: string; result?: unknown };
27
+ if (json.error) {
28
+ addLog(`Server returned error (expected): ${json.error}`, 'ok');
29
+ } else {
30
+ addLog(`Server returned unexpected success`, 'err');
31
+ }
32
+ } catch (err) {
33
+ const errMsg = err instanceof Error ? err.message : String(err);
34
+ addLog(`Fetch failed: ${errMsg}`, 'err');
35
+ }
36
+ }
37
+
38
+ async function handleDbMutation(): Promise<void> {
39
+ const text = `worker-test-${Date.now()}`;
40
+ addLog(`Triggering DB mutation via /api/testWorkerDbMutation...`);
41
+ try {
42
+ const res = await fetch('/api/testWorkerDbMutation', {
43
+ method: 'POST',
44
+ headers: { 'Content-Type': 'application/json' },
45
+ body: JSON.stringify({ input: { text } }),
46
+ });
47
+ const json = (await res.json()) as { error?: string; result?: { id: string; verified: boolean } };
48
+ if (json.error) {
49
+ addLog(`Server error: ${json.error}`, 'err');
50
+ } else if (json.result?.verified) {
51
+ addLog(`DB write/read/delete verified (id: ${json.result.id})`, 'ok');
52
+ } else {
53
+ addLog(`DB mutation returned but verification failed`, 'err');
54
+ }
55
+ } catch (err) {
56
+ const errMsg = err instanceof Error ? err.message : String(err);
57
+ addLog(`Fetch failed: ${errMsg}`, 'err');
58
+ }
59
+ }
60
+
61
+ async function handleConsoleError(): Promise<void> {
62
+ const msg = `[WorkerTest] console.error test ${Date.now()}`;
63
+ addLog(`Triggering server console.error via /api/testWorkerConsoleError...`);
64
+ try {
65
+ const res = await fetch('/api/testWorkerConsoleError', {
66
+ method: 'POST',
67
+ headers: { 'Content-Type': 'application/json' },
68
+ body: JSON.stringify({ input: { message: msg } }),
69
+ });
70
+ const json = (await res.json()) as { error?: string; result?: { logged: boolean } };
71
+ if (json.error) {
72
+ addLog(`Server error: ${json.error}`, 'err');
73
+ } else if (json.result?.logged) {
74
+ addLog(`Server console.error logged: ${msg}`, 'ok');
75
+ } else {
76
+ addLog(`Unexpected response`, 'err');
77
+ }
78
+ } catch (err) {
79
+ const errMsg = err instanceof Error ? err.message : String(err);
80
+ addLog(`Fetch failed: ${errMsg}`, 'err');
81
+ }
82
+ }
83
+
84
+ return (
85
+ <PageLayout
86
+ header={
87
+ <div>
88
+ <a href="/test">← Tests</a>
89
+ </div>
90
+ }
91
+ >
92
+ <div>
93
+ <h1>Worker Task Test</h1>
94
+
95
+ <Card>
96
+ <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
97
+ <h3>Throw Exception</h3>
98
+ <Button data-id="btn-worker-throw" onClick={() => { void handleThrowException(); }}>
99
+ Trigger Worker Throw
100
+ </Button>
101
+ </div>
102
+ </Card>
103
+
104
+ <Card>
105
+ <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
106
+ <h3>DB Mutation</h3>
107
+ <Button data-id="btn-worker-db" onClick={() => { void handleDbMutation(); }}>
108
+ Trigger DB Write / Read / Delete
109
+ </Button>
110
+ </div>
111
+ </Card>
112
+
113
+ <Card>
114
+ <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
115
+ <h3>Console Error</h3>
116
+ <Button data-id="btn-worker-console-error" onClick={() => { void handleConsoleError(); }}>
117
+ Trigger Server console.error
118
+ </Button>
119
+ </div>
120
+ </Card>
121
+
122
+ {logs.length > 0 && (
123
+ <div data-id="worker-test-logs">
124
+ {logs.map((entry, i) => (
125
+ <div key={i}>
126
+ {entry.kind === 'err' ? '\u2717' : entry.kind === 'ok' ? '\u2713' : '\u00b7'}{' '}
127
+ {entry.msg}
128
+ </div>
129
+ ))}
130
+ </div>
131
+ )}
132
+ </div>
133
+ </PageLayout>
134
+ );
135
+ }
@@ -24,10 +24,8 @@
24
24
  "test:e2e": "playwright test",
25
25
  "textGen": "ugly-app textGen",
26
26
  "imageGen": "ugly-app imageGen",
27
-
28
27
  "upgrade": "node -e \"const e=require('child_process').execSync,x=require('fs').existsSync,g=require('fs').readdirSync;g('node_modules').filter(f=>f.startsWith('.ugly-app-')).forEach(f=>require('fs').rmSync('node_modules/'+f,{recursive:true,force:true}));e(x('yarn.lock')?'yarn add ugly-app@latest':x('pnpm-lock.yaml')?'pnpm add ugly-app@latest':'npm install ugly-app@latest',{stdio:'inherit'});e('node node_modules/ugly-app/dist/cli/index.js upgrade',{stdio:'inherit'})\""
29
28
  },
30
-
31
29
  "dependencies": {
32
30
  "nanoid": "^5.1.5",
33
31
  "react": "^18.3.1",
@@ -37,30 +35,29 @@
37
35
  "zod": "^4.3.6"
38
36
  },
39
37
  "devDependencies": {
38
+ "@eslint/js": "^9.0.0",
39
+ "@playwright/test": "^1.40.0",
40
40
  "@types/express": "^5.0.0",
41
41
  "@types/html2canvas": "^1.0.0",
42
- "@types/three": "^0.183.1",
43
42
  "@types/node": "^22.0.0",
44
43
  "@types/react": "^19.0.0",
45
44
  "@types/react-dom": "^19.0.0",
46
- "@eslint/js": "^9.0.0",
45
+ "@types/three": "^0.183.1",
47
46
  "@typescript-eslint/eslint-plugin": "^8.0.0",
48
47
  "@typescript-eslint/parser": "^8.0.0",
49
- "eslint-plugin-react": "^7.37.0",
50
- "eslint-plugin-react-hooks": "^5.0.0",
51
- "typescript-eslint": "^8.0.0",
52
48
  "@vitejs/plugin-react": "^4.3.0",
49
+ "@vitest/coverage-v8": "^3.0.0",
50
+ "autoprefixer": "^10.4.0",
51
+ "concurrently": "^9.0.0",
53
52
  "eslint": "^9.0.0",
53
+ "eslint-plugin-react": "^7.37.0",
54
+ "eslint-plugin-react-hooks": "^5.0.0",
54
55
  "html2canvas": "^1.4.1",
55
- "autoprefixer": "^10.4.0",
56
56
  "tsx": "^4.19.0",
57
57
  "typescript": "^5.9.3",
58
+ "typescript-eslint": "^8.0.0",
58
59
  "vite": "^6.0.0",
59
- "concurrently": "^9.0.0",
60
-
61
60
  "vite-plugin-checker": "^0.8.0",
62
- "@playwright/test": "^1.40.0",
63
- "@vitest/coverage-v8": "^3.0.0",
64
61
  "vitest": "^3.0.0"
65
62
  }
66
63
  }
@@ -61,6 +61,27 @@ const app = createApp(
61
61
  throw new Error(msg);
62
62
  },
63
63
 
64
+ testWorkerThrow: async (_userId, { message }) => {
65
+ const msg = message ?? 'Worker task exception test';
66
+ throw new Error(msg);
67
+ },
68
+
69
+ testWorkerDbMutation: async (userId, { text }): Promise<{ id: string; verified: boolean }> => {
70
+ const _id = `worker-test-${crypto.randomUUID()}`;
71
+ const todo: Todo = { _id, userId, text, done: false, ...dbDefaults() };
72
+ await app.db.setDoc(collections.todo, todo);
73
+ const readBack = await app.db.getDoc(collections.todo, _id);
74
+ const verified = readBack?._id === _id && readBack?.text === text;
75
+ await app.db.deleteDoc(collections.todo, _id);
76
+ return { id: _id, verified };
77
+ },
78
+
79
+ testWorkerConsoleError: async (_userId, { message }) => {
80
+ const msg = message ?? `[WorkerTest] console.error test ${Date.now()}`;
81
+ console.error(msg);
82
+ return { logged: true };
83
+ },
84
+
64
85
  sendTestEmail: async (_userId, { to, subject, html, id }) => {
65
86
  const projectId = process.env['NATS_PREFIX'] ?? 'myapp';
66
87
  const from = id ? `${projectId}+${id}@ugly.bot` : `${projectId}@ugly.bot`;
@@ -47,6 +47,22 @@ export const requests = defineRequests({
47
47
  output: z.object({ ok: z.boolean() }),
48
48
  }),
49
49
 
50
+ // Worker task tests — verify exception, DB mutation, and console.error
51
+ testWorkerThrow: authReq({
52
+ input: z.object({ message: z.string().optional() }),
53
+ output: z.object({ ok: z.boolean() }),
54
+ }),
55
+
56
+ testWorkerDbMutation: authReq({
57
+ input: z.object({ text: z.string().min(1).max(500) }),
58
+ output: z.object({ id: z.string(), verified: z.boolean() }),
59
+ }),
60
+
61
+ testWorkerConsoleError: authReq({
62
+ input: z.object({ message: z.string().optional() }),
63
+ output: z.object({ logged: z.boolean() }),
64
+ }),
65
+
50
66
  // Example: public request — userId is string | null
51
67
  // getPublicData: req({
52
68
  // input: z.object({ id: z.string() }),
@@ -32,6 +32,7 @@ export const pages = definePages({
32
32
  'test/video-room': definePage<{}>({ auth: true }),
33
33
  'test/collab': definePage<{}>({ auth: true }),
34
34
  'test/errors': definePage<{}>({ auth: true }),
35
+ 'test/worker': definePage<{}>({ auth: true }),
35
36
  });
36
37
 
37
38
  export type AppPages = typeof pages;
@@ -1,12 +0,0 @@
1
- import React from 'react';
2
- import { FeedbackButton } from 'ugly-app/client';
3
- import { RouterView } from './router';
4
-
5
- export default function App(): React.ReactElement {
6
- return (
7
- <>
8
- <RouterView />
9
- <FeedbackButton />
10
- </>
11
- );
12
- }