ugly-app 0.1.44 → 0.1.46
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 +143 -111
- package/dist/cli/initDb.d.ts.map +1 -1
- package/dist/cli/initDb.js +33 -1
- package/dist/cli/initDb.js.map +1 -1
- package/dist/cli/scaffold.d.ts.map +1 -1
- package/dist/cli/scaffold.js +6 -2
- package/dist/cli/scaffold.js.map +1 -1
- package/dist/cli/uglyBotLogin.d.ts.map +1 -1
- package/dist/cli/uglyBotLogin.js.map +1 -1
- package/dist/cli/upgrade.d.ts.map +1 -1
- package/dist/cli/upgrade.js +5 -5
- package/dist/cli/upgrade.js.map +1 -1
- package/dist/client/Logger.d.ts +11 -0
- package/dist/client/Logger.d.ts.map +1 -1
- package/dist/client/Logger.js +82 -22
- package/dist/client/Logger.js.map +1 -1
- package/dist/client/Router.d.ts +5 -3
- package/dist/client/Router.d.ts.map +1 -1
- package/dist/client/Router.js +25 -10
- package/dist/client/Router.js.map +1 -1
- package/dist/client/animation/Animated.d.ts +11 -6
- package/dist/client/animation/Animated.d.ts.map +1 -1
- package/dist/client/animation/Animated.js +11 -27
- package/dist/client/animation/Animated.js.map +1 -1
- package/dist/client/callAI.d.ts.map +1 -1
- package/dist/client/callAI.js +2 -3
- package/dist/client/callAI.js.map +1 -1
- package/dist/client/createHttpClient.d.ts +13 -0
- package/dist/client/createHttpClient.d.ts.map +1 -0
- package/dist/client/createHttpClient.js +24 -0
- package/dist/client/createHttpClient.js.map +1 -0
- package/dist/client/createSocket.d.ts +1 -3
- package/dist/client/createSocket.d.ts.map +1 -1
- package/dist/client/createSocket.js +0 -11
- package/dist/client/createSocket.js.map +1 -1
- package/dist/client/index.d.ts +4 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -1
- package/dist/client/index.js.map +1 -1
- package/dist/server/App.d.ts +4 -4
- package/dist/server/App.d.ts.map +1 -1
- package/dist/server/App.js +54 -14
- package/dist/server/App.js.map +1 -1
- package/dist/server/Auth.d.ts.map +1 -1
- package/dist/server/Auth.js +14 -11
- package/dist/server/Auth.js.map +1 -1
- package/dist/server/ErrorLogAdmin.d.ts +50 -0
- package/dist/server/ErrorLogAdmin.d.ts.map +1 -0
- package/dist/server/ErrorLogAdmin.js +143 -0
- package/dist/server/ErrorLogAdmin.js.map +1 -0
- package/dist/server/FeedbackReport.d.ts +2 -3
- package/dist/server/FeedbackReport.d.ts.map +1 -1
- package/dist/server/FeedbackReport.js +4 -5
- package/dist/server/FeedbackReport.js.map +1 -1
- package/dist/server/Logging.d.ts +6 -0
- package/dist/server/Logging.d.ts.map +1 -1
- package/dist/server/Logging.js +97 -45
- package/dist/server/Logging.js.map +1 -1
- package/dist/server/Router.d.ts +12 -25
- package/dist/server/Router.d.ts.map +1 -1
- package/dist/server/Router.js +66 -48
- package/dist/server/Router.js.map +1 -1
- package/dist/server/Socket.d.ts.map +1 -1
- package/dist/server/Socket.js +3 -1
- package/dist/server/Socket.js.map +1 -1
- package/dist/server/index.d.ts +6 -4
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +3 -2
- package/dist/server/index.js.map +1 -1
- package/dist/shared/Api.d.ts +18 -20
- package/dist/shared/Api.d.ts.map +1 -1
- package/dist/shared/Api.js +9 -9
- package/dist/shared/Api.js.map +1 -1
- package/dist/shared/DB.d.ts +29 -8
- package/dist/shared/DB.d.ts.map +1 -1
- package/dist/shared/DB.js.map +1 -1
- package/dist/shared/Socket.d.ts +4 -6
- package/dist/shared/Socket.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/CLAUDE.md +26 -7
- package/templates/client/App.tsx +1 -1
- package/templates/client/allPages.ts +12 -1
- package/templates/client/main.tsx +3 -3
- package/templates/client/pages/AITestPage.tsx +27 -10
- package/templates/client/pages/AuthDemoPage.tsx +34 -9
- package/templates/client/pages/HomePage.tsx +51 -14
- package/templates/client/pages/UserPage.tsx +5 -1
- package/templates/package.json +1 -1
- package/templates/server/index.ts +16 -26
- package/templates/shared/api.ts +22 -16
- package/templates/shared/collections.ts +43 -2
- package/templates/shared/pages.ts +12 -0
- package/templates/vite.config.ts +1 -0
- package/templates/shared/dbIndexes.ts +0 -11
- package/templates/shared/types.ts +0 -6
- /package/templates/.claude/skills/{assets.md → assets/SKILL.md} +0 -0
- /package/templates/.claude/skills/{check-errors.md → check-errors/SKILL.md} +0 -0
- /package/templates/.claude/skills/{check-feedback.md → check-feedback/SKILL.md} +0 -0
- /package/templates/.claude/skills/{check-perf.md → check-perf/SKILL.md} +0 -0
- /package/templates/.claude/skills/{create-test-users.md → create-test-users/SKILL.md} +0 -0
- /package/templates/.claude/skills/{extend-api.md → extend-api/SKILL.md} +0 -0
- /package/templates/.claude/skills/{fix-code.md → fix-code/SKILL.md} +0 -0
- /package/templates/.claude/skills/{fix-errors.md → fix-errors/SKILL.md} +0 -0
- /package/templates/.claude/skills/{fix-feedback.md → fix-feedback/SKILL.md} +0 -0
- /package/templates/.claude/skills/{fix-perf.md → fix-perf/SKILL.md} +0 -0
- /package/templates/.claude/skills/{uploads.md → uploads/SKILL.md} +0 -0
- /package/templates/.claude/skills/{use-ai.md → use-ai/SKILL.md} +0 -0
package/README.md
CHANGED
|
@@ -33,41 +33,39 @@ import {
|
|
|
33
33
|
createApp,
|
|
34
34
|
createUserHelper,
|
|
35
35
|
getFeedbackHandlers,
|
|
36
|
-
type
|
|
36
|
+
type AppConfigurator,
|
|
37
37
|
type RequestHandlers,
|
|
38
|
-
type HandlerContext,
|
|
39
38
|
} from 'ugly-app';
|
|
40
39
|
import { dbDefaults } from 'ugly-app/shared';
|
|
41
|
-
import {
|
|
40
|
+
import { requests } from '../shared/api';
|
|
42
41
|
import { collections } from '../shared/collections';
|
|
43
42
|
import { pages } from '../shared/pages';
|
|
44
|
-
import type { User } from '../shared/
|
|
43
|
+
import type { User } from '../shared/collections';
|
|
45
44
|
|
|
46
45
|
const userHelper = createUserHelper<User>(collections.user);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
46
|
+
const maintainBotUserId = process.env.MAINTAIN_BOT_USER_ID ?? '';
|
|
47
|
+
|
|
48
|
+
const app = createApp(
|
|
49
|
+
{ requests },
|
|
50
|
+
{
|
|
51
|
+
...getFeedbackHandlers(maintainBotUserId),
|
|
52
|
+
getMe: async (userId: string) => {
|
|
53
|
+
const user = await userHelper.get(app.db, userId);
|
|
54
|
+
return { userId, email: user?.email, phone: user?.phone };
|
|
55
|
+
},
|
|
56
|
+
} satisfies RequestHandlers<typeof requests>,
|
|
57
|
+
collections,
|
|
58
|
+
(configurator: AppConfigurator) => {
|
|
59
|
+
configurator.setPages({ pages });
|
|
60
|
+
configurator.setUserHelper(userHelper);
|
|
61
|
+
configurator.setOnUserCreate(async (userId, info, db) => {
|
|
62
|
+
await userHelper.set(db, { id: userId, ...dbDefaults(), ...info });
|
|
63
|
+
});
|
|
59
64
|
},
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const app = createApp({ functions, requests }, calls, reqs, collections, (configurator) => {
|
|
63
|
-
configurator.setPages({ pages });
|
|
64
|
-
configurator.setUserHelper(userHelper);
|
|
65
|
-
configurator.setOnUserCreate(async (userId, info, db) => {
|
|
66
|
-
await userHelper.set(db, { id: userId, ...dbDefaults(), ...info });
|
|
67
|
-
});
|
|
68
|
-
});
|
|
65
|
+
);
|
|
69
66
|
|
|
70
|
-
|
|
67
|
+
const port = parseInt(process.env['PORT'] ?? '3000');
|
|
68
|
+
await app.start(port);
|
|
71
69
|
```
|
|
72
70
|
|
|
73
71
|
**Signature:**
|
|
@@ -75,7 +73,6 @@ await app.start(3000);
|
|
|
75
73
|
```typescript
|
|
76
74
|
function createApp<R extends AppRegistryBase, Defs extends CollectionDefRegistry>(
|
|
77
75
|
registry: R,
|
|
78
|
-
calls: Partial<CallHandlers<R['functions']>>,
|
|
79
76
|
requests: Partial<RequestHandlers<R['requests']>>,
|
|
80
77
|
appDefs: Defs,
|
|
81
78
|
configure?: (configurator: AppConfigurator) => void,
|
|
@@ -86,7 +83,8 @@ The returned `App` object has:
|
|
|
86
83
|
- `start(port?)` — starts the server (default port 3000)
|
|
87
84
|
- `registerRoutes(fn)` — mount additional Express routes after creation
|
|
88
85
|
- `httpServer` — the underlying Node.js HTTP server
|
|
89
|
-
- `
|
|
86
|
+
- `db` — the `TypedDB` instance for direct database access
|
|
87
|
+
- `dispatch(name, input, userId)` — invoke an RPC handler programmatically
|
|
90
88
|
|
|
91
89
|
### `AppConfigurator`
|
|
92
90
|
|
|
@@ -96,24 +94,23 @@ The returned `App` object has:
|
|
|
96
94
|
| `setUserHelper(helper)` | User lookup for WebSocket auth handshake |
|
|
97
95
|
| `setOnUserCreate(handler)` | Called on first login — must create the user record. `(userId, { email?, phone? }, db) => Promise<void>` |
|
|
98
96
|
| `setAuth(provider)` | Custom `AuthProvider` (default: ugly.bot OAuth). Provider must implement `verify(code)` and `authUrl(origin)` |
|
|
99
|
-
| `setContextExtensions(fn)` | Add fields to `HandlerContext` — `(base: HandlerContext) => Promise<E>` |
|
|
100
97
|
| `setOnSocketMessage(handler)` | Handle raw WebSocket messages. Return `true` to consume, `false` to let the framework handle it |
|
|
101
98
|
| `registerRoutes(fn)` | Mount custom Express routes — `(router: express.Router) => void` |
|
|
102
99
|
| `setWorkerQueue(queue)` | Register a background worker queue with `start()` and `stop()` |
|
|
103
100
|
|
|
104
|
-
### Handler
|
|
101
|
+
### Handler signatures
|
|
105
102
|
|
|
106
|
-
|
|
103
|
+
Handlers are plain async functions — no context object, just `userId` and `input`:
|
|
107
104
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
105
|
+
```typescript
|
|
106
|
+
// req() — public, userId may be null
|
|
107
|
+
getPublicData: async (userId: string | null, input) => { ... }
|
|
108
|
+
|
|
109
|
+
// authReq() — authenticated, 401 auto-enforced, userId always a string
|
|
110
|
+
getMe: async (userId: string, input) => { ... }
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Access `app.db`, storage, and AI clients directly via imports or the `app` object — they are not injected into handlers.
|
|
117
114
|
|
|
118
115
|
---
|
|
119
116
|
|
|
@@ -121,31 +118,40 @@ Every RPC handler receives a `HandlerContext`:
|
|
|
121
118
|
|
|
122
119
|
All type definitions live in `shared/` and are used by both server and client.
|
|
123
120
|
|
|
124
|
-
###
|
|
121
|
+
### Requests (`shared/api.ts`)
|
|
125
122
|
|
|
126
123
|
```typescript
|
|
127
|
-
import {
|
|
124
|
+
import { authReq, defineRequests, req, z } from 'ugly-app/shared';
|
|
128
125
|
|
|
129
|
-
export const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
126
|
+
export const requests = defineRequests({
|
|
127
|
+
// Public request — handler receives (userId: string | null, input)
|
|
128
|
+
getPublicData: req({
|
|
129
|
+
input: z.object({ id: z.string() }),
|
|
130
|
+
output: z.object({ data: z.string() }),
|
|
133
131
|
}),
|
|
134
|
-
});
|
|
135
132
|
|
|
136
|
-
|
|
137
|
-
|
|
133
|
+
// Authenticated request — handler receives (userId: string, input)
|
|
134
|
+
getMe: authReq({
|
|
138
135
|
input: z.object({}),
|
|
139
|
-
output: z.
|
|
136
|
+
output: z.object({ userId: z.string(), email: z.string().optional() }),
|
|
137
|
+
}),
|
|
138
|
+
|
|
139
|
+
// With rate limiting
|
|
140
|
+
submitFeedback: authReq({
|
|
141
|
+
input: z.object({ type: z.enum(['bug', 'design', 'feature']), message: z.string() }),
|
|
142
|
+
output: z.object({ id: z.string() }),
|
|
143
|
+
rateLimit: { max: 20, window: 60 },
|
|
140
144
|
}),
|
|
141
145
|
});
|
|
142
146
|
```
|
|
143
147
|
|
|
144
|
-
- `
|
|
145
|
-
- `
|
|
146
|
-
- `
|
|
148
|
+
- `req({ input, output })` — defines a public request. Handler signature: `(userId: string | null, input: I) => Promise<O>`.
|
|
149
|
+
- `authReq({ input, output })` — defines an authenticated request. Handler signature: `(userId: string, input: I) => Promise<O>`. Returns 401 automatically if no token.
|
|
150
|
+
- `defineRequests()` — identity wrapper that preserves types.
|
|
147
151
|
- `z` is re-exported from Zod for convenience.
|
|
148
152
|
|
|
153
|
+
Every endpoint is accessible via both WebSocket (`socket.request(name, input)`) and HTTP (`POST /api/:name { input }`).
|
|
154
|
+
|
|
149
155
|
### Collections (`shared/collections.ts`)
|
|
150
156
|
|
|
151
157
|
```typescript
|
|
@@ -203,11 +209,11 @@ export type AppPages = typeof pages;
|
|
|
203
209
|
```tsx
|
|
204
210
|
import { createRoot } from 'react-dom/client';
|
|
205
211
|
import { AppProvider, createSocket, LoginPopup } from 'ugly-app/client';
|
|
206
|
-
import {
|
|
212
|
+
import { requests } from '../shared/api';
|
|
207
213
|
import { RouterProvider } from './router';
|
|
208
214
|
import App from './App';
|
|
209
215
|
|
|
210
|
-
const token = (window as
|
|
216
|
+
const token = (window as unknown as { __AUTH_TOKEN__?: string }).__AUTH_TOKEN__;
|
|
211
217
|
const root = createRoot(document.getElementById('root')!);
|
|
212
218
|
const loginPopup = <LoginPopup onSuccess={() => window.location.reload()} />;
|
|
213
219
|
|
|
@@ -219,7 +225,7 @@ if (!token) {
|
|
|
219
225
|
);
|
|
220
226
|
} else {
|
|
221
227
|
const userId = JSON.parse(atob(token.split('.')[1]!)).sub as string;
|
|
222
|
-
const socket = createSocket({
|
|
228
|
+
const socket = createSocket({ requests, url: '/rpc' });
|
|
223
229
|
socket.connect(token).then((user) => {
|
|
224
230
|
root.render(
|
|
225
231
|
<RouterProvider fallback={<div>404</div>} loginFallback={loginPopup} isAuthenticated={() => true}>
|
|
@@ -237,7 +243,7 @@ if (!token) {
|
|
|
237
243
|
Creates a typed WebSocket client for RPC communication.
|
|
238
244
|
|
|
239
245
|
```typescript
|
|
240
|
-
const socket = createSocket({
|
|
246
|
+
const socket = createSocket({ requests, url: '/rpc' });
|
|
241
247
|
await socket.connect(token); // returns UserBase
|
|
242
248
|
```
|
|
243
249
|
|
|
@@ -246,14 +252,30 @@ await socket.connect(token); // returns UserBase
|
|
|
246
252
|
| Method | Description |
|
|
247
253
|
|--------|-------------|
|
|
248
254
|
| `connect(token)` | Authenticate and connect. Returns the user object |
|
|
249
|
-
| `
|
|
250
|
-
| `request(name, input)` | Invoke a request (query) |
|
|
255
|
+
| `request(name, input)` | Invoke a request (query or mutation) |
|
|
251
256
|
| `getDoc(collection, id)` | Fetch a single document |
|
|
252
257
|
| `trackDoc(collection, id, cb)` | Subscribe to real-time doc changes. Returns unsubscribe fn |
|
|
253
258
|
| `trackDocs(collection, filter, cb, opts?)` | Subscribe to query results. Returns unsubscribe fn |
|
|
254
259
|
| `uploadFile(file, key)` | Upload a file via presigned URL |
|
|
255
260
|
| `disconnect()` | Close the connection |
|
|
256
261
|
|
|
262
|
+
### `createHttpClient()`
|
|
263
|
+
|
|
264
|
+
Creates a typed HTTP client for RPC communication (no WebSocket needed).
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
import { createHttpClient } from 'ugly-app/client';
|
|
268
|
+
|
|
269
|
+
const client = createHttpClient({ requests, token: 'eyJ...', baseUrl: '' });
|
|
270
|
+
const result = await client.request('getMe', {});
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
| Option | Description |
|
|
274
|
+
|--------|-------------|
|
|
275
|
+
| `requests` | The requests registry from `shared/api.ts` |
|
|
276
|
+
| `token?` | Bearer token for authenticated requests |
|
|
277
|
+
| `baseUrl?` | URL prefix (default: `''` — relative paths: `POST /api/:name`) |
|
|
278
|
+
|
|
257
279
|
### `AppProvider`
|
|
258
280
|
|
|
259
281
|
Wraps your app with context for `useApp()`. Provides user info, socket access, popup management, async loading overlay, splash screen, and localization.
|
|
@@ -303,7 +325,7 @@ export const { RouterProvider, RouterView, useRouter } = createRouter({ pages, a
|
|
|
303
325
|
|
|
304
326
|
`createRouter()` returns three things:
|
|
305
327
|
- **`RouterProvider`** — wrap your app. Props: `children`, `fallback?` (shown before first route resolves), `loginFallback?` (shown for auth-guarded pages when unauthenticated), `isAuthenticated?` (function returning boolean)
|
|
306
|
-
- **`RouterView`** — renders the active page with animated transitions. Props: `durationMs?`, `easing?`, `transitionComponent?`
|
|
328
|
+
- **`RouterView`** — renders the active page with animated transitions. Props: `durationMs?`, `easing?`, `transitionComponent?`, `renderPage?`
|
|
307
329
|
- **`useRouter()`** — hook returning the router context
|
|
308
330
|
|
|
309
331
|
#### Page map (`client/allPages.ts`)
|
|
@@ -479,57 +501,61 @@ configurator.setAuth({
|
|
|
479
501
|
|
|
480
502
|
## Database (`TypedDB`)
|
|
481
503
|
|
|
504
|
+
Access via `app.db` or by importing `createTypedDB` / `getMongoClient` from `'ugly-app'`.
|
|
505
|
+
|
|
506
|
+
All methods accept either a `CollectionDef` object (from `defineCollections`) or a plain collection name string as the first argument.
|
|
507
|
+
|
|
482
508
|
### Writing
|
|
483
509
|
|
|
484
510
|
```typescript
|
|
485
511
|
// Insert or replace a document
|
|
486
|
-
await
|
|
487
|
-
await
|
|
512
|
+
await db.setDoc(collections.note, doc);
|
|
513
|
+
await db.setDoc(collections.note, doc, { skipIfExists: true });
|
|
488
514
|
|
|
489
515
|
// Partial update — only specified fields (supports dot-notation paths)
|
|
490
|
-
await
|
|
516
|
+
await db.setDocFields(collections.note, id, { title: 'New title' });
|
|
491
517
|
|
|
492
518
|
// Partial update — returns null if document doesn't exist (no error)
|
|
493
|
-
const doc = await
|
|
519
|
+
const doc = await db.setDocFieldsOrIgnore(collections.note, id, { title });
|
|
494
520
|
|
|
495
521
|
// Partial update — creates the document if it doesn't exist (obj = default doc for insert)
|
|
496
|
-
await
|
|
522
|
+
await db.setDocFieldsOrCreate(collections.note, id, { title }, defaultDoc);
|
|
497
523
|
|
|
498
524
|
// MongoDB update operators ($inc, $addToSet, $pull, $unset, $set)
|
|
499
|
-
await
|
|
500
|
-
await
|
|
525
|
+
await db.setDocOp(collections.note, id, { $inc: { views: 1 } });
|
|
526
|
+
await db.setDocOpOrIgnore(collections.note, id, { $inc: { views: 1 } }); // no error if missing
|
|
501
527
|
```
|
|
502
528
|
|
|
503
529
|
### Reading
|
|
504
530
|
|
|
505
531
|
```typescript
|
|
506
|
-
const note = await
|
|
507
|
-
const notes = await
|
|
532
|
+
const note = await db.getDoc(collections.note, id);
|
|
533
|
+
const notes = await db.getDocs(collections.note, { userId }, { sort: { created: -1 }, limit: 20 });
|
|
508
534
|
|
|
509
535
|
// Aggregation pipeline
|
|
510
|
-
const results = await
|
|
511
|
-
const count = await
|
|
512
|
-
const raw = await
|
|
536
|
+
const results = await db.getQuery<MyResult>('note', pipeline, { skip, limit });
|
|
537
|
+
const count = await db.getQueryCount('note', pipeline);
|
|
538
|
+
const raw = await db.getQueryRaw<T>('note', pipeline);
|
|
513
539
|
|
|
514
540
|
// Dynamic/untyped access (when collection name is a runtime string)
|
|
515
|
-
const doc = await
|
|
516
|
-
const docs = await
|
|
541
|
+
const doc = await db.rawGetDoc(collectionName, id);
|
|
542
|
+
const docs = await db.rawGetDocs(collectionName, filter);
|
|
517
543
|
```
|
|
518
544
|
|
|
519
545
|
### Deleting
|
|
520
546
|
|
|
521
547
|
```typescript
|
|
522
|
-
await
|
|
523
|
-
await
|
|
548
|
+
await db.deleteDoc(collections.note, id); // single doc (cascades via parent)
|
|
549
|
+
await db.deleteQuery(collections.note, { userId }); // bulk delete by filter
|
|
524
550
|
```
|
|
525
551
|
|
|
526
552
|
### Caching
|
|
527
553
|
|
|
528
554
|
```typescript
|
|
529
|
-
const cached =
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
const key =
|
|
555
|
+
const cached = db.cacheGet<MyType>(key);
|
|
556
|
+
db.cacheSet(key, value, ttlMs);
|
|
557
|
+
db.cacheDelete(key);
|
|
558
|
+
const key = db.cacheKey('prefix', id); // generate a cache key
|
|
533
559
|
```
|
|
534
560
|
|
|
535
561
|
### Helpers
|
|
@@ -554,15 +580,21 @@ await userHelper.set(db, { id: userId, ...dbDefaults(), email });
|
|
|
554
580
|
import { defineDbIndexes } from 'ugly-app/shared';
|
|
555
581
|
|
|
556
582
|
export const dbIndexes = defineDbIndexes({
|
|
557
|
-
note:
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
583
|
+
note: {
|
|
584
|
+
indexes: [
|
|
585
|
+
{ fields: { userId: 1, created: -1 } },
|
|
586
|
+
{ fields: { title: 1 }, unique: true },
|
|
587
|
+
],
|
|
588
|
+
searchIndexes: [
|
|
589
|
+
{ name: 'note_search', fields: { title: 'string', body: 'string' } },
|
|
590
|
+
],
|
|
591
|
+
vectorIndexes: [
|
|
592
|
+
{ name: 'note_embedding', field: 'embedding', dimensions: 1536, similarity: 'cosine' },
|
|
593
|
+
],
|
|
594
|
+
},
|
|
561
595
|
});
|
|
562
596
|
```
|
|
563
597
|
|
|
564
|
-
Index types supported: standard (`IndexDef`), text search (`SearchIndexDef`), and vector/embedding (`VectorIndexDef` with cosine, euclidean, or dotProduct similarity).
|
|
565
|
-
|
|
566
598
|
Run `npm run db:init` to create/update indexes.
|
|
567
599
|
|
|
568
600
|
---
|
|
@@ -572,10 +604,12 @@ Run `npm run db:init` to create/update indexes.
|
|
|
572
604
|
### Text generation
|
|
573
605
|
|
|
574
606
|
```typescript
|
|
575
|
-
|
|
576
|
-
const
|
|
577
|
-
|
|
578
|
-
const
|
|
607
|
+
import { createTextGen } from 'ugly-app';
|
|
608
|
+
const textGen = createTextGen();
|
|
609
|
+
|
|
610
|
+
const text = await textGen.generate(messages);
|
|
611
|
+
const json = await textGen.generateJson(schema, messages); // Zod schema, retries on parse failure
|
|
612
|
+
const result = await textGen.generateWithTools(messages, tools); // automatic tool-call loop
|
|
579
613
|
```
|
|
580
614
|
|
|
581
615
|
| Provider | `provider` value | JSON | Tools | Vision |
|
|
@@ -589,17 +623,13 @@ const result = await ctx.textGen.generateWithTools(messages, tools); // automati
|
|
|
589
623
|
|
|
590
624
|
Use `provider: 'auto'` (default) to let the system pick based on requirements.
|
|
591
625
|
|
|
592
|
-
**Standalone client (outside handlers):**
|
|
593
|
-
|
|
594
|
-
```typescript
|
|
595
|
-
import { createTextGenClient } from 'ugly-app';
|
|
596
|
-
const textGen = createTextGenClient();
|
|
597
|
-
```
|
|
598
|
-
|
|
599
626
|
### Image generation
|
|
600
627
|
|
|
601
628
|
```typescript
|
|
602
|
-
|
|
629
|
+
import { createImageGen } from 'ugly-app';
|
|
630
|
+
const imageGen = createImageGen();
|
|
631
|
+
|
|
632
|
+
const url = await imageGen.generate(prompt, { width: 1024, height: 1024 });
|
|
603
633
|
```
|
|
604
634
|
|
|
605
635
|
| Provider | `provider` value |
|
|
@@ -609,13 +639,6 @@ const url = await ctx.imageGen.generate(prompt, { width: 1024, height: 1024 });
|
|
|
609
639
|
| Google (Imagen 3) | `'google'` |
|
|
610
640
|
| Wavespeed | `'wavespeed'` |
|
|
611
641
|
|
|
612
|
-
**Standalone client:**
|
|
613
|
-
|
|
614
|
-
```typescript
|
|
615
|
-
import { createImageGenClient } from 'ugly-app';
|
|
616
|
-
const imageGen = createImageGenClient();
|
|
617
|
-
```
|
|
618
|
-
|
|
619
642
|
### Embeddings
|
|
620
643
|
|
|
621
644
|
```typescript
|
|
@@ -652,9 +675,9 @@ The client can call AI through the server proxy without managing tokens directly
|
|
|
652
675
|
```typescript
|
|
653
676
|
import { callTextGen, callJsonGen, callImageGen } from 'ugly-app/client';
|
|
654
677
|
|
|
655
|
-
const text = await callTextGen(
|
|
656
|
-
const json = await callJsonGen(
|
|
657
|
-
const image = await callImageGen(
|
|
678
|
+
const text = await callTextGen(input);
|
|
679
|
+
const json = await callJsonGen(input);
|
|
680
|
+
const image = await callImageGen(input);
|
|
658
681
|
```
|
|
659
682
|
|
|
660
683
|
These call `POST /ai/request` (same-origin, avoids CORS). The server verifies the user JWT and forwards to `https://ugly.bot` using the `UGLY_BOT_TOKEN` env var.
|
|
@@ -765,11 +788,18 @@ Server-side, `getFeedbackHandlers(maintainBotUserId)` provides the RPC handlers
|
|
|
765
788
|
|
|
766
789
|
### Rate limiting
|
|
767
790
|
|
|
791
|
+
Rate limiting is configured per-endpoint in the request definition:
|
|
792
|
+
|
|
768
793
|
```typescript
|
|
769
|
-
|
|
770
|
-
|
|
794
|
+
submitFeedback: authReq({
|
|
795
|
+
input: z.object({ ... }),
|
|
796
|
+
output: z.object({ ... }),
|
|
797
|
+
rateLimit: { max: 20, window: 60 }, // 20 requests per 60 seconds
|
|
798
|
+
})
|
|
771
799
|
```
|
|
772
800
|
|
|
801
|
+
The framework enforces rate limits automatically before calling the handler.
|
|
802
|
+
|
|
773
803
|
---
|
|
774
804
|
|
|
775
805
|
## Built-in endpoints
|
|
@@ -781,8 +811,10 @@ await ctx.rateLimit.check();
|
|
|
781
811
|
| `POST /auth/logout` | Clear the auth cookie |
|
|
782
812
|
| `GET /auth/token` | Refresh and return the current token |
|
|
783
813
|
| `GET /auth/url` | Get the OAuth popup URL |
|
|
814
|
+
| `POST /api/:name` | RPC endpoint — dispatches any registered request handler |
|
|
784
815
|
| `POST /ai/request` | AI proxy — forwards to ugly.bot (requires auth) |
|
|
785
816
|
| `POST /api/client-error` | Client-side error capture |
|
|
817
|
+
| `POST /logs/client` | Client-side log ingestion |
|
|
786
818
|
| `GET /my_feedback` | User feedback history (markdown, requires auth) |
|
|
787
819
|
|
|
788
820
|
---
|
|
@@ -831,7 +863,7 @@ Run with `npm run db:migrate`. Use `npm run db:migrate -- --status` to preview p
|
|
|
831
863
|
| Variable | Description |
|
|
832
864
|
|----------|-------------|
|
|
833
865
|
| `JWT_SECRET` | **Required** — signs auth tokens |
|
|
834
|
-
| `JWT_EXPIRY_SECONDS` | Token lifetime (optional) |
|
|
866
|
+
| `JWT_EXPIRY_SECONDS` | Token lifetime (optional, default: 2592000 = 30 days) |
|
|
835
867
|
| `MONGODB_URI` | MongoDB connection string |
|
|
836
868
|
| `PORT` | Server port (default: 3000) |
|
|
837
869
|
| `NODE_ENV` | `development` or `production` |
|
package/dist/cli/initDb.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initDb.d.ts","sourceRoot":"","sources":["../../src/cli/initDb.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"initDb.d.ts","sourceRoot":"","sources":["../../src/cli/initDb.ts"],"names":[],"mappings":"AAuCA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA6H/C"}
|
package/dist/cli/initDb.js
CHANGED
|
@@ -16,7 +16,14 @@ async function loadDbIndexes() {
|
|
|
16
16
|
// Built-in indexes always applied
|
|
17
17
|
const BUILTIN_INDEXES = {
|
|
18
18
|
user: { indexes: [{ fields: { email: 1 }, unique: true }] },
|
|
19
|
-
errorLog: {
|
|
19
|
+
errorLog: {
|
|
20
|
+
timeseries: {
|
|
21
|
+
timeField: 'created',
|
|
22
|
+
metaField: 'meta',
|
|
23
|
+
granularity: 'seconds',
|
|
24
|
+
expireAfterSeconds: 7 * 24 * 60 * 60, // 7 days
|
|
25
|
+
},
|
|
26
|
+
},
|
|
20
27
|
consoleLog: { indexes: [{ fields: { created: 1 }, ttl: 7 * 86400 }] },
|
|
21
28
|
perfLog: { indexes: [{ fields: { created: 1 }, ttl: 7 * 86400 }] },
|
|
22
29
|
feedbackLog: { indexes: [{ fields: { created: 1 }, ttl: 7 * 86400 }] },
|
|
@@ -38,6 +45,31 @@ export async function runInitDb() {
|
|
|
38
45
|
}
|
|
39
46
|
for (const [collection, config] of Object.entries(allIndexes)) {
|
|
40
47
|
const col = db.collection(collection);
|
|
48
|
+
if (config.timeseries) {
|
|
49
|
+
try {
|
|
50
|
+
await db.createCollection(collection, {
|
|
51
|
+
timeseries: {
|
|
52
|
+
timeField: config.timeseries.timeField,
|
|
53
|
+
...(config.timeseries.metaField
|
|
54
|
+
? { metaField: config.timeseries.metaField }
|
|
55
|
+
: {}),
|
|
56
|
+
...(config.timeseries.granularity
|
|
57
|
+
? { granularity: config.timeseries.granularity }
|
|
58
|
+
: {}),
|
|
59
|
+
},
|
|
60
|
+
...(config.timeseries.expireAfterSeconds !== undefined
|
|
61
|
+
? { expireAfterSeconds: config.timeseries.expireAfterSeconds }
|
|
62
|
+
: {}),
|
|
63
|
+
});
|
|
64
|
+
console.log(`[init-db] Time-series collection created: ${collection}`);
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
const err = e;
|
|
68
|
+
if (err.code !== 48)
|
|
69
|
+
throw e; // 48 = NamespaceExists (already exists)
|
|
70
|
+
console.log(`[init-db] Time-series collection already exists: ${collection}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
41
73
|
for (const idx of config.indexes ?? []) {
|
|
42
74
|
const opts = {};
|
|
43
75
|
if (idx.unique)
|
package/dist/cli/initDb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initDb.js","sourceRoot":"","sources":["../../src/cli/initDb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,KAAK,UAAU,aAAa;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;IACrE,sEAAsE;IACtE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAEvD,CAAC;QACF,OAAO,GAAG,CAAC,SAAS,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CACV,yEAAyE,CAC1E,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,MAAM,eAAe,GAAoB;IACvC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE;IAC3D,QAAQ,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"initDb.js","sourceRoot":"","sources":["../../src/cli/initDb.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"AA6GA,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DxE"}
|
package/dist/cli/scaffold.js
CHANGED
|
@@ -44,7 +44,9 @@ function findCodeCli() {
|
|
|
44
44
|
execSync('code --version', { stdio: 'ignore' });
|
|
45
45
|
return 'code';
|
|
46
46
|
}
|
|
47
|
-
catch {
|
|
47
|
+
catch {
|
|
48
|
+
/* not in PATH */
|
|
49
|
+
}
|
|
48
50
|
const candidates = process.platform === 'win32'
|
|
49
51
|
? [
|
|
50
52
|
path.join(process.env['LOCALAPPDATA'] ?? '', 'Programs\\Microsoft VS Code\\bin\\code.cmd'),
|
|
@@ -74,7 +76,9 @@ async function installVsixExtension() {
|
|
|
74
76
|
throw new Error(`HTTP ${res.status}`);
|
|
75
77
|
const buf = await res.arrayBuffer();
|
|
76
78
|
await fs.writeFile(vsixPath, Buffer.from(buf));
|
|
77
|
-
execSync(`${codeCli} --install-extension "${vsixPath}"`, {
|
|
79
|
+
execSync(`${codeCli} --install-extension "${vsixPath}"`, {
|
|
80
|
+
stdio: 'inherit',
|
|
81
|
+
});
|
|
78
82
|
console.log('[ugly-app] VSCode extension installed.');
|
|
79
83
|
}
|
|
80
84
|
catch (err) {
|
package/dist/cli/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAE9D,gFAAgF;AAChF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,MAAM;IACN,aAAa;IACb,kBAAkB;IAClB,uBAAuB;CACxB,CAAC,CAAC;AAEH,SAAS,WAAW,CAAC,WAAmB,EAAE,WAAmB;IAC3D,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,6BAA6B;QAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACnC,OAAO,cAAc,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QACpC,CAAC;QACD,yEAAyE;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACtD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACnD,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,oFAAoF;AACpF,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,QAAQ,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uglyBotLogin.d.ts","sourceRoot":"","sources":["../../src/cli/uglyBotLogin.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,SAAS,SAAqB,GAC7B,OAAO,CAAC,WAAW,CAAC,CA0EtB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,SAAqB,GAC7B,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"uglyBotLogin.d.ts","sourceRoot":"","sources":["../../src/cli/uglyBotLogin.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,SAAS,SAAqB,GAC7B,OAAO,CAAC,WAAW,CAAC,CA0EtB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,SAAqB,GAC7B,OAAO,CAAC,WAAW,CAAC,CAMtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uglyBotLogin.js","sourceRoot":"","sources":["../../src/cli/uglyBotLogin.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"uglyBotLogin.js","sourceRoot":"","sources":["../../src/cli/uglyBotLogin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/cli/upgrade.ts"],"names":[],"mappings":"AA4BA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/cli/upgrade.ts"],"names":[],"mappings":"AA4BA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAqIhD"}
|