ugly-app 0.1.44 → 0.1.45
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 +141 -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/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
|
-
|
|
65
|
+
);
|
|
61
66
|
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
configurator.setUserHelper(userHelper);
|
|
65
|
-
configurator.setOnUserCreate(async (userId, info, db) => {
|
|
66
|
-
await userHelper.set(db, { id: userId, ...dbDefaults(), ...info });
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
await app.start(3000);
|
|
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,59 @@ configurator.setAuth({
|
|
|
479
501
|
|
|
480
502
|
## Database (`TypedDB`)
|
|
481
503
|
|
|
504
|
+
Access via `app.db` or by importing `createTypedDB` / `getMongoClient` from `'ugly-app'`.
|
|
505
|
+
|
|
482
506
|
### Writing
|
|
483
507
|
|
|
484
508
|
```typescript
|
|
485
509
|
// Insert or replace a document
|
|
486
|
-
await
|
|
487
|
-
await
|
|
510
|
+
await db.setDoc(collections.note, doc);
|
|
511
|
+
await db.setDoc(collections.note, doc, { skipIfExists: true });
|
|
488
512
|
|
|
489
513
|
// Partial update — only specified fields (supports dot-notation paths)
|
|
490
|
-
await
|
|
514
|
+
await db.setDocFields(collections.note, id, { title: 'New title' });
|
|
491
515
|
|
|
492
516
|
// Partial update — returns null if document doesn't exist (no error)
|
|
493
|
-
const doc = await
|
|
517
|
+
const doc = await db.setDocFieldsOrIgnore(collections.note, id, { title });
|
|
494
518
|
|
|
495
519
|
// Partial update — creates the document if it doesn't exist (obj = default doc for insert)
|
|
496
|
-
await
|
|
520
|
+
await db.setDocFieldsOrCreate(collections.note, id, { title }, defaultDoc);
|
|
497
521
|
|
|
498
522
|
// MongoDB update operators ($inc, $addToSet, $pull, $unset, $set)
|
|
499
|
-
await
|
|
500
|
-
await
|
|
523
|
+
await db.setDocOp(collections.note, id, { $inc: { views: 1 } });
|
|
524
|
+
await db.setDocOpOrIgnore(collections.note, id, { $inc: { views: 1 } }); // no error if missing
|
|
501
525
|
```
|
|
502
526
|
|
|
503
527
|
### Reading
|
|
504
528
|
|
|
505
529
|
```typescript
|
|
506
|
-
const note = await
|
|
507
|
-
const notes = await
|
|
530
|
+
const note = await db.getDoc(collections.note, id);
|
|
531
|
+
const notes = await db.getDocs(collections.note, { userId }, { sort: { created: -1 }, limit: 20 });
|
|
508
532
|
|
|
509
533
|
// Aggregation pipeline
|
|
510
|
-
const results = await
|
|
511
|
-
const count = await
|
|
512
|
-
const raw = await
|
|
534
|
+
const results = await db.getQuery<MyResult>('note', pipeline, { skip, limit });
|
|
535
|
+
const count = await db.getQueryCount('note', pipeline);
|
|
536
|
+
const raw = await db.getQueryRaw<T>('note', pipeline);
|
|
513
537
|
|
|
514
538
|
// Dynamic/untyped access (when collection name is a runtime string)
|
|
515
|
-
const doc = await
|
|
516
|
-
const docs = await
|
|
539
|
+
const doc = await db.rawGetDoc(collectionName, id);
|
|
540
|
+
const docs = await db.rawGetDocs(collectionName, filter);
|
|
517
541
|
```
|
|
518
542
|
|
|
519
543
|
### Deleting
|
|
520
544
|
|
|
521
545
|
```typescript
|
|
522
|
-
await
|
|
523
|
-
await
|
|
546
|
+
await db.deleteDoc(collections.note, id); // single doc (cascades via parent)
|
|
547
|
+
await db.deleteQuery(collections.note, { userId }); // bulk delete by filter
|
|
524
548
|
```
|
|
525
549
|
|
|
526
550
|
### Caching
|
|
527
551
|
|
|
528
552
|
```typescript
|
|
529
|
-
const cached =
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
const key =
|
|
553
|
+
const cached = db.cacheGet<MyType>(key);
|
|
554
|
+
db.cacheSet(key, value, ttlMs);
|
|
555
|
+
db.cacheDelete(key);
|
|
556
|
+
const key = db.cacheKey('prefix', id); // generate a cache key
|
|
533
557
|
```
|
|
534
558
|
|
|
535
559
|
### Helpers
|
|
@@ -554,15 +578,21 @@ await userHelper.set(db, { id: userId, ...dbDefaults(), email });
|
|
|
554
578
|
import { defineDbIndexes } from 'ugly-app/shared';
|
|
555
579
|
|
|
556
580
|
export const dbIndexes = defineDbIndexes({
|
|
557
|
-
note:
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
581
|
+
note: {
|
|
582
|
+
indexes: [
|
|
583
|
+
{ fields: { userId: 1, created: -1 } },
|
|
584
|
+
{ fields: { title: 1 }, unique: true },
|
|
585
|
+
],
|
|
586
|
+
searchIndexes: [
|
|
587
|
+
{ name: 'note_search', fields: { title: 'string', body: 'string' } },
|
|
588
|
+
],
|
|
589
|
+
vectorIndexes: [
|
|
590
|
+
{ name: 'note_embedding', field: 'embedding', dimensions: 1536, similarity: 'cosine' },
|
|
591
|
+
],
|
|
592
|
+
},
|
|
561
593
|
});
|
|
562
594
|
```
|
|
563
595
|
|
|
564
|
-
Index types supported: standard (`IndexDef`), text search (`SearchIndexDef`), and vector/embedding (`VectorIndexDef` with cosine, euclidean, or dotProduct similarity).
|
|
565
|
-
|
|
566
596
|
Run `npm run db:init` to create/update indexes.
|
|
567
597
|
|
|
568
598
|
---
|
|
@@ -572,10 +602,12 @@ Run `npm run db:init` to create/update indexes.
|
|
|
572
602
|
### Text generation
|
|
573
603
|
|
|
574
604
|
```typescript
|
|
575
|
-
|
|
576
|
-
const
|
|
577
|
-
|
|
578
|
-
const
|
|
605
|
+
import { createTextGenClient } from 'ugly-app';
|
|
606
|
+
const textGen = createTextGenClient();
|
|
607
|
+
|
|
608
|
+
const text = await textGen.generate(messages);
|
|
609
|
+
const json = await textGen.generateJson(schema, messages); // Zod schema, retries on parse failure
|
|
610
|
+
const result = await textGen.generateWithTools(messages, tools); // automatic tool-call loop
|
|
579
611
|
```
|
|
580
612
|
|
|
581
613
|
| Provider | `provider` value | JSON | Tools | Vision |
|
|
@@ -589,17 +621,13 @@ const result = await ctx.textGen.generateWithTools(messages, tools); // automati
|
|
|
589
621
|
|
|
590
622
|
Use `provider: 'auto'` (default) to let the system pick based on requirements.
|
|
591
623
|
|
|
592
|
-
**Standalone client (outside handlers):**
|
|
593
|
-
|
|
594
|
-
```typescript
|
|
595
|
-
import { createTextGenClient } from 'ugly-app';
|
|
596
|
-
const textGen = createTextGenClient();
|
|
597
|
-
```
|
|
598
|
-
|
|
599
624
|
### Image generation
|
|
600
625
|
|
|
601
626
|
```typescript
|
|
602
|
-
|
|
627
|
+
import { createImageGenClient } from 'ugly-app';
|
|
628
|
+
const imageGen = createImageGenClient();
|
|
629
|
+
|
|
630
|
+
const url = await imageGen.generate(prompt, { width: 1024, height: 1024 });
|
|
603
631
|
```
|
|
604
632
|
|
|
605
633
|
| Provider | `provider` value |
|
|
@@ -609,13 +637,6 @@ const url = await ctx.imageGen.generate(prompt, { width: 1024, height: 1024 });
|
|
|
609
637
|
| Google (Imagen 3) | `'google'` |
|
|
610
638
|
| Wavespeed | `'wavespeed'` |
|
|
611
639
|
|
|
612
|
-
**Standalone client:**
|
|
613
|
-
|
|
614
|
-
```typescript
|
|
615
|
-
import { createImageGenClient } from 'ugly-app';
|
|
616
|
-
const imageGen = createImageGenClient();
|
|
617
|
-
```
|
|
618
|
-
|
|
619
640
|
### Embeddings
|
|
620
641
|
|
|
621
642
|
```typescript
|
|
@@ -652,9 +673,9 @@ The client can call AI through the server proxy without managing tokens directly
|
|
|
652
673
|
```typescript
|
|
653
674
|
import { callTextGen, callJsonGen, callImageGen } from 'ugly-app/client';
|
|
654
675
|
|
|
655
|
-
const text = await callTextGen(
|
|
656
|
-
const json = await callJsonGen(
|
|
657
|
-
const image = await callImageGen(
|
|
676
|
+
const text = await callTextGen(input);
|
|
677
|
+
const json = await callJsonGen(input);
|
|
678
|
+
const image = await callImageGen(input);
|
|
658
679
|
```
|
|
659
680
|
|
|
660
681
|
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 +786,18 @@ Server-side, `getFeedbackHandlers(maintainBotUserId)` provides the RPC handlers
|
|
|
765
786
|
|
|
766
787
|
### Rate limiting
|
|
767
788
|
|
|
789
|
+
Rate limiting is configured per-endpoint in the request definition:
|
|
790
|
+
|
|
768
791
|
```typescript
|
|
769
|
-
|
|
770
|
-
|
|
792
|
+
submitFeedback: authReq({
|
|
793
|
+
input: z.object({ ... }),
|
|
794
|
+
output: z.object({ ... }),
|
|
795
|
+
rateLimit: { max: 20, window: 60 }, // 20 requests per 60 seconds
|
|
796
|
+
})
|
|
771
797
|
```
|
|
772
798
|
|
|
799
|
+
The framework enforces rate limits automatically before calling the handler.
|
|
800
|
+
|
|
773
801
|
---
|
|
774
802
|
|
|
775
803
|
## Built-in endpoints
|
|
@@ -781,8 +809,10 @@ await ctx.rateLimit.check();
|
|
|
781
809
|
| `POST /auth/logout` | Clear the auth cookie |
|
|
782
810
|
| `GET /auth/token` | Refresh and return the current token |
|
|
783
811
|
| `GET /auth/url` | Get the OAuth popup URL |
|
|
812
|
+
| `POST /api/:name` | RPC endpoint — dispatches any registered request handler |
|
|
784
813
|
| `POST /ai/request` | AI proxy — forwards to ugly.bot (requires auth) |
|
|
785
814
|
| `POST /api/client-error` | Client-side error capture |
|
|
815
|
+
| `POST /logs/client` | Client-side log ingestion |
|
|
786
816
|
| `GET /my_feedback` | User feedback history (markdown, requires auth) |
|
|
787
817
|
|
|
788
818
|
---
|
|
@@ -831,7 +861,7 @@ Run with `npm run db:migrate`. Use `npm run db:migrate -- --status` to preview p
|
|
|
831
861
|
| Variable | Description |
|
|
832
862
|
|----------|-------------|
|
|
833
863
|
| `JWT_SECRET` | **Required** — signs auth tokens |
|
|
834
|
-
| `JWT_EXPIRY_SECONDS` | Token lifetime (optional) |
|
|
864
|
+
| `JWT_EXPIRY_SECONDS` | Token lifetime (optional, default: 2592000 = 30 days) |
|
|
835
865
|
| `MONGODB_URI` | MongoDB connection string |
|
|
836
866
|
| `PORT` | Server port (default: 3000) |
|
|
837
867
|
| `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":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,GAEhB,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAS,GAAG,kBAAkB;IAE9B,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAClD,6DAA6D;QAC7D,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACvC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBACtC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEpD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;gBACjD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gBACtD,MAAM,CACJ,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAClE,CAAC;gBACF,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,GAAG;iBACA,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;iBAC/C,GAAG,CACF,8EAA8E,CAC/E,CAAC;YACJ,MAAM,CAAC,KAAK,EAAE,CAAC;YAEf,MAAM,IAAI,GAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YACvD,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC5C,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1B,MAAM,OAAO,GAAG,GAAG,SAAS,kBAAkB,IAAI,UAAU,KAAK,EAAE,CAAC;YAEpE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,0CAA0C,OAAO,IAAI,CAAC,CAAC;YAEnE,mDAAmD;YACnD,IAAI,CAAC;gBACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;gBAC/C,MAAM,GAAG,GACP,OAAO,CAAC,QAAQ,KAAK,QAAQ;oBAC3B,CAAC,CAAC,SAAS,OAAO,GAAG;oBACrB,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;wBAC9B,CAAC,CAAC,aAAa,OAAO,GAAG;wBACzB,CAAC,CAAC,aAAa,OAAO,GAAG,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,CAAC;YACZ,CAAC;YAAC,MAAM,CAAC;gBACP,sDAAsD;YACxD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACzB,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACjE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAS,GAAG,kBAAkB;IAE9B,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,IAAI,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS;
|
|
1
|
+
{"version":3,"file":"uglyBotLogin.js","sourceRoot":"","sources":["../../src/cli/uglyBotLogin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,GAEhB,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAS,GAAG,kBAAkB;IAE9B,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAClD,6DAA6D;QAC7D,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACvC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBACtC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEpD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;gBACjD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gBACtD,MAAM,CACJ,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAClE,CAAC;gBACF,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,GAAG;iBACA,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;iBAC/C,GAAG,CACF,8EAA8E,CAC/E,CAAC;YACJ,MAAM,CAAC,KAAK,EAAE,CAAC;YAEf,MAAM,IAAI,GAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YACvD,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC5C,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1B,MAAM,OAAO,GAAG,GAAG,SAAS,kBAAkB,IAAI,UAAU,KAAK,EAAE,CAAC;YAEpE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,0CAA0C,OAAO,IAAI,CAAC,CAAC;YAEnE,mDAAmD;YACnD,IAAI,CAAC;gBACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;gBAC/C,MAAM,GAAG,GACP,OAAO,CAAC,QAAQ,KAAK,QAAQ;oBAC3B,CAAC,CAAC,SAAS,OAAO,GAAG;oBACrB,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;wBAC9B,CAAC,CAAC,aAAa,OAAO,GAAG;wBACzB,CAAC,CAAC,aAAa,OAAO,GAAG,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,CAAC;YACZ,CAAC;YAAC,MAAM,CAAC;gBACP,sDAAsD;YACxD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACzB,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACjE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAS,GAAG,kBAAkB;IAE9B,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,IAAI,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS;QACxE,OAAO,QAAQ,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -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"}
|