ugly-app 0.1.578 → 0.1.579
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/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/server/PushSend.d.ts.map +1 -1
- package/dist/server/PushSend.js +6 -7
- package/dist/server/PushSend.js.map +1 -1
- package/dist/server/User.d.ts.map +1 -1
- package/dist/server/User.js +4 -1
- package/dist/server/User.js.map +1 -1
- package/dist/server/ai/providers/UglyBotImageGenProvider.d.ts.map +1 -1
- package/dist/server/ai/providers/UglyBotImageGenProvider.js +7 -6
- package/dist/server/ai/providers/UglyBotImageGenProvider.js.map +1 -1
- package/dist/server/ai/providers/UglyBotTextGenProvider.d.ts.map +1 -1
- package/dist/server/ai/providers/UglyBotTextGenProvider.js +23 -7
- package/dist/server/ai/providers/UglyBotTextGenProvider.js.map +1 -1
- package/dist/server/embeddings/providers/OpenAI.js.map +1 -1
- package/dist/server/uglyBotProxy.d.ts +16 -1
- package/dist/server/uglyBotProxy.d.ts.map +1 -1
- package/dist/server/uglyBotProxy.js +28 -4
- package/dist/server/uglyBotProxy.js.map +1 -1
- package/dist/shared/ProxyOps.d.ts +747 -0
- package/dist/shared/ProxyOps.d.ts.map +1 -0
- package/dist/shared/ProxyOps.js +272 -0
- package/dist/shared/ProxyOps.js.map +1 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -0
- package/dist/shared/index.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/version.ts +1 -1
- package/src/server/PushSend.ts +7 -9
- package/src/server/User.ts +4 -1
- package/src/server/ai/providers/UglyBotImageGenProvider.ts +13 -21
- package/src/server/ai/providers/UglyBotTextGenProvider.ts +47 -37
- package/src/server/embeddings/providers/OpenAI.ts +1 -1
- package/src/server/uglyBotProxy.ts +48 -10
- package/src/shared/ProxyOps.ts +301 -0
- package/src/shared/index.ts +1 -0
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.579";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PushSend.d.ts","sourceRoot":"","sources":["../../src/server/PushSend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PushSend.d.ts","sourceRoot":"","sources":["../../src/server/PushSend.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAS5E"}
|
package/dist/server/PushSend.js
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import { DEFAULT_LOCAL_PORT } from '../shared/Defaults.js';
|
|
2
1
|
import { uglyBotRequest } from './uglyBotProxy.js';
|
|
3
2
|
/**
|
|
4
3
|
* Send a push notification to a user via the ugly.bot platform.
|
|
5
4
|
* Returns { sent: true } if the notification was delivered to at least one device.
|
|
6
5
|
*/
|
|
7
6
|
export async function pushSend(input) {
|
|
8
|
-
// Include the project's base URL so ugly.bot can construct absolute click URLs
|
|
9
|
-
const baseUrl = process.env['PROJECT_URL'] ??
|
|
10
|
-
`http://localhost:${process.env['PORT'] ?? DEFAULT_LOCAL_PORT}`;
|
|
11
7
|
const result = await uglyBotRequest('pushSend', {
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
targetUserId: input.targetUserId,
|
|
9
|
+
title: input.title,
|
|
10
|
+
body: input.body,
|
|
11
|
+
path: input.path,
|
|
12
|
+
imageUrl: input.imageUrl,
|
|
14
13
|
});
|
|
15
|
-
return { sent:
|
|
14
|
+
return { sent: result.sent };
|
|
16
15
|
}
|
|
17
16
|
//# sourceMappingURL=PushSend.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PushSend.js","sourceRoot":"","sources":["../../src/server/PushSend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"PushSend.js","sourceRoot":"","sources":["../../src/server/PushSend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAkBnD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAoB;IACjD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE;QAC9C,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"User.d.ts","sourceRoot":"","sources":["../../src/server/User.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"User.d.ts","sourceRoot":"","sources":["../../src/server/User.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAKjE"}
|
package/dist/server/User.js
CHANGED
|
@@ -3,6 +3,9 @@ import { uglyBotRequest } from './uglyBotProxy.js';
|
|
|
3
3
|
* Fetch public user data (name, image) by user ID via the ugly.bot platform.
|
|
4
4
|
*/
|
|
5
5
|
export async function userGet(userId) {
|
|
6
|
-
|
|
6
|
+
// `userGet` returns the raw platform user doc (app-specific fields); this is
|
|
7
|
+
// the framework's adaptation boundary to its PublicUser view.
|
|
8
|
+
const doc = await uglyBotRequest('userGet', { userId });
|
|
9
|
+
return (doc ?? {});
|
|
7
10
|
}
|
|
8
11
|
//# sourceMappingURL=User.js.map
|
package/dist/server/User.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/server/User.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc;IAC1C,
|
|
1
|
+
{"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/server/User.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc;IAC1C,6EAA6E;IAC7E,8DAA8D;IAC9D,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,IAAI,EAAE,CAA0B,CAAC;AAC9C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UglyBotImageGenProvider.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotImageGenProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGrE,eAAO,MAAM,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"UglyBotImageGenProvider.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotImageGenProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGrE,eAAO,MAAM,uBAAuB,EAAE,gBAsBrC,CAAC"}
|
|
@@ -10,14 +10,15 @@ export const uglyBotImageGenProvider = {
|
|
|
10
10
|
options: {
|
|
11
11
|
aspectRatio: options?.aspectRatio,
|
|
12
12
|
},
|
|
13
|
-
|
|
13
|
+
// Bill the end user when one is in scope (the platform charges the named
|
|
14
|
+
// user; falls back to the app owner when absent).
|
|
15
|
+
chargeUserIds: options?.userId ? [options.userId] : undefined,
|
|
14
16
|
});
|
|
15
|
-
// ugly.bot returns base64-encoded images; convert to data URI
|
|
16
|
-
if (data
|
|
17
|
-
return data.url;
|
|
18
|
-
if (data.base64)
|
|
17
|
+
// ugly.bot returns base64-encoded images; convert to a data URI.
|
|
18
|
+
if (data?.base64) {
|
|
19
19
|
return `data:${data.mime ?? 'image/png'};base64,${data.base64}`;
|
|
20
|
-
|
|
20
|
+
}
|
|
21
|
+
throw new Error('[UglyBot] imageGen returned no image');
|
|
21
22
|
},
|
|
22
23
|
};
|
|
23
24
|
//# sourceMappingURL=UglyBotImageGenProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UglyBotImageGenProvider.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotImageGenProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACvD,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,gBAAgB;IAE3B,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,OAAyB;QACtD,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,YAAY,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"UglyBotImageGenProvider.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotImageGenProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACvD,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,gBAAgB;IAE3B,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,OAAyB;QACtD,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,YAAY,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE;YAC5C,KAAK;YACL,MAAM;YACN,OAAO,EAAE;gBACP,WAAW,EAAE,OAAO,EAAE,WAAW;aAClC;YACD,yEAAyE;YACzE,kDAAkD;YAClD,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9D,CAAC,CAAC;QACH,iEAAiE;QACjE,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;YACjB,OAAO,QAAQ,IAAI,CAAC,IAAI,IAAI,WAAW,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;QAClE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UglyBotTextGenProvider.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotTextGenProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"UglyBotTextGenProvider.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotTextGenProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,aAAa,CAAC;AAmBrB,eAAO,MAAM,sBAAsB,EAAE,eAoEpC,CAAC"}
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
import { uglyBotRequest } from '../../uglyBotProxy.js';
|
|
2
|
+
/** Flatten a textGen message content (string or content-part array) to text. */
|
|
3
|
+
function contentToString(content) {
|
|
4
|
+
if (typeof content === 'string')
|
|
5
|
+
return content;
|
|
6
|
+
if (Array.isArray(content)) {
|
|
7
|
+
return content
|
|
8
|
+
.map((p) => p && typeof p === 'object' && 'text' in p
|
|
9
|
+
? String(p.text ?? '')
|
|
10
|
+
: '')
|
|
11
|
+
.join('');
|
|
12
|
+
}
|
|
13
|
+
return '';
|
|
14
|
+
}
|
|
2
15
|
export const uglyBotTextGenProvider = {
|
|
3
16
|
name: 'uglybot',
|
|
4
17
|
apiKeyEnv: 'UGLY_BOT_TOKEN',
|
|
@@ -19,9 +32,9 @@ export const uglyBotTextGenProvider = {
|
|
|
19
32
|
maxTokens: options?.maxTokens,
|
|
20
33
|
temperature: options?.temperature,
|
|
21
34
|
},
|
|
22
|
-
|
|
35
|
+
chargeUserIds: options?.userId ? [options.userId] : undefined,
|
|
23
36
|
});
|
|
24
|
-
return data
|
|
37
|
+
return contentToString(data?.message.content);
|
|
25
38
|
},
|
|
26
39
|
async generateJson(schema, messages, options) {
|
|
27
40
|
const model = options?.model ?? 'llama_4_scout';
|
|
@@ -33,22 +46,25 @@ export const uglyBotTextGenProvider = {
|
|
|
33
46
|
maxTokens: options?.maxTokens,
|
|
34
47
|
temperature: options?.temperature,
|
|
35
48
|
},
|
|
36
|
-
|
|
49
|
+
chargeUserIds: options?.userId ? [options.userId] : undefined,
|
|
37
50
|
});
|
|
38
|
-
return JSON.parse(data
|
|
51
|
+
return JSON.parse(contentToString(data?.message.content));
|
|
39
52
|
},
|
|
40
53
|
async generateWithTools(messages, tools, options) {
|
|
41
54
|
const model = options?.model ?? 'llama_4_scout';
|
|
42
|
-
|
|
55
|
+
const data = await uglyBotRequest('textGen', {
|
|
43
56
|
model,
|
|
44
57
|
messages,
|
|
45
|
-
tools,
|
|
58
|
+
tools: tools,
|
|
46
59
|
options: {
|
|
47
60
|
maxTokens: options?.maxTokens,
|
|
48
61
|
temperature: options?.temperature,
|
|
49
62
|
},
|
|
50
|
-
|
|
63
|
+
chargeUserIds: options?.userId ? [options.userId] : undefined,
|
|
51
64
|
});
|
|
65
|
+
// The tool-call shape is carried in the returned message; adapt at this
|
|
66
|
+
// provider boundary (the op's contract is the message, not ToolCallResult).
|
|
67
|
+
return data;
|
|
52
68
|
},
|
|
53
69
|
};
|
|
54
70
|
//# sourceMappingURL=UglyBotTextGenProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UglyBotTextGenProvider.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotTextGenProvider.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"UglyBotTextGenProvider.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotTextGenProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAI.js","sourceRoot":"","sources":["../../../../src/server/embeddings/providers/OpenAI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAC/C,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,IAAI,EAAE,QAAQ;IACd,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,UAA4B,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"OpenAI.js","sourceRoot":"","sources":["../../../../src/server/embeddings/providers/OpenAI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAC/C,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,IAAI,EAAE,QAAQ;IACd,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,UAA4B,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE;YAC9C,KAAK;YACL,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,kBAAkB;SACrD,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,UAAU,CAAC;IAC3B,CAAC;CACF,CAAC"}
|
|
@@ -1,2 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
import type { ProxyOpName, ProxyOpInput, ProxyOpOutput } from '../shared/index.js';
|
|
2
|
+
export interface UglyBotRequestOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Who ugly.bot bills:
|
|
5
|
+
* - 'owner' (default): the app owner, via `UGLY_BOT_TOKEN`. Works when no
|
|
6
|
+
* end user is logged in (cron / background / admin-charged work).
|
|
7
|
+
* - 'user': the end user, via their forwarded session JWT. Requires a
|
|
8
|
+
* logged-in user in the current request context.
|
|
9
|
+
*/
|
|
10
|
+
billTo?: 'owner' | 'user';
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Call a ugly.bot op. `input` is type-checked against the op's registered Zod
|
|
14
|
+
* schema and the result is typed as that op's output.
|
|
15
|
+
*/
|
|
16
|
+
export declare function uglyBotRequest<K extends ProxyOpName>(op: K, input: ProxyOpInput<K>, options?: UglyBotRequestOptions): Promise<ProxyOpOutput<K>>;
|
|
2
17
|
//# sourceMappingURL=uglyBotProxy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uglyBotProxy.d.ts","sourceRoot":"","sources":["../../src/server/uglyBotProxy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"uglyBotProxy.d.ts","sourceRoot":"","sources":["../../src/server/uglyBotProxy.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnF,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC3B;AAmBD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,WAAW,EACxD,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAmC3B"}
|
|
@@ -1,16 +1,39 @@
|
|
|
1
1
|
// src/server/uglyBotProxy.ts
|
|
2
|
+
//
|
|
3
|
+
// The ONLY way to call a ugly.bot op from app server code. Fully typed against
|
|
4
|
+
// the shared `proxyOps` registry: the op name, the input shape, and the return
|
|
5
|
+
// type are all inferred, so it is impossible to call an op with the wrong input
|
|
6
|
+
// or misread its result at compile time (see ugly-bot/CLAUDE.md "API exposure
|
|
7
|
+
// contract"). There is intentionally NO untyped escape hatch.
|
|
2
8
|
import { getUglyBotUrl } from '../shared/uglyBotUrl.js';
|
|
3
|
-
|
|
9
|
+
import { getUserToken } from './auth/userContext.js';
|
|
10
|
+
function resolveBearer(billTo) {
|
|
11
|
+
if (billTo === 'user') {
|
|
12
|
+
const userToken = getUserToken();
|
|
13
|
+
if (!userToken) {
|
|
14
|
+
throw new Error("[UglyBot] billTo:'user' requires a logged-in user, but no session token is in context.");
|
|
15
|
+
}
|
|
16
|
+
return userToken;
|
|
17
|
+
}
|
|
4
18
|
const appToken = process.env.UGLY_BOT_TOKEN;
|
|
5
|
-
if (!appToken)
|
|
19
|
+
if (!appToken) {
|
|
6
20
|
throw new Error('[UglyBot] UGLY_BOT_TOKEN not set — run: npx ugly-app login');
|
|
21
|
+
}
|
|
22
|
+
return appToken;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Call a ugly.bot op. `input` is type-checked against the op's registered Zod
|
|
26
|
+
* schema and the result is typed as that op's output.
|
|
27
|
+
*/
|
|
28
|
+
export async function uglyBotRequest(op, input, options = {}) {
|
|
29
|
+
const bearer = resolveBearer(options.billTo ?? 'owner');
|
|
7
30
|
const controller = new AbortController();
|
|
8
31
|
const timer = setTimeout(() => controller.abort(), 30_000);
|
|
9
32
|
try {
|
|
10
33
|
const res = await fetch(`${getUglyBotUrl()}/request`, {
|
|
11
34
|
method: 'POST',
|
|
12
35
|
headers: {
|
|
13
|
-
|
|
36
|
+
Authorization: `Bearer ${bearer}`,
|
|
14
37
|
'Content-Type': 'application/json',
|
|
15
38
|
},
|
|
16
39
|
body: JSON.stringify({ op, input, sessionId: 'server' }),
|
|
@@ -30,7 +53,8 @@ export async function uglyBotRequest(op, input) {
|
|
|
30
53
|
}
|
|
31
54
|
const data = (await res.json());
|
|
32
55
|
// ugly.bot returns flat responses; some paths wrap in { result: ... }
|
|
33
|
-
|
|
56
|
+
const payload = data.result !== undefined ? data.result : data;
|
|
57
|
+
return payload;
|
|
34
58
|
}
|
|
35
59
|
finally {
|
|
36
60
|
clearTimeout(timer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uglyBotProxy.js","sourceRoot":"","sources":["../../src/server/uglyBotProxy.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"uglyBotProxy.js","sourceRoot":"","sources":["../../src/server/uglyBotProxy.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,8DAA8D;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAarD,SAAS,aAAa,CAAC,MAAwB;IAC7C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAK,EACL,KAAsB,EACtB,UAAiC,EAAE;IAEnC,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;IAExD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,EAAE,UAAU,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;gBACjC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;YACxD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CACX,iCAAiC,EAAE,uCAAuC;oBACxE,6BAA6B;oBAC7B,WAAW,IAAI,EAAE,CACpB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,YAAY,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA4B,CAAC;QAC3D,sEAAsE;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,OAAO,OAA2B,CAAC;IACrC,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
|