@vibes.diy/api-queue 2.2.6 → 2.2.8
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/handlers/evt-icon-gen.d.ts +3 -0
- package/handlers/evt-icon-gen.js +26 -0
- package/handlers/evt-icon-gen.js.map +1 -0
- package/icon-shotter.d.ts +4 -0
- package/icon-shotter.js +70 -0
- package/icon-shotter.js.map +1 -0
- package/intern/generate-icon.d.ts +16 -0
- package/intern/generate-icon.js +120 -0
- package/intern/generate-icon.js.map +1 -0
- package/intern/store-icon.d.ts +15 -0
- package/intern/store-icon.js +69 -0
- package/intern/store-icon.js.map +1 -0
- package/intern/store-screenshot.js +6 -1
- package/intern/store-screenshot.js.map +1 -1
- package/package.json +6 -6
- package/queue-ctx.d.ts +7 -2
- package/queue-ctx.js +2 -0
- package/queue-ctx.js.map +1 -1
- package/queue-evento.js +2 -1
- package/queue-evento.js.map +1 -1
- package/worker.js +4 -0
- package/worker.js.map +1 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { EventoResult, Option, Result } from "@adviser/cement";
|
|
2
|
+
import { isEvtIconGen, msgBase } from "@vibes.diy/api-types";
|
|
3
|
+
import { type } from "arktype";
|
|
4
|
+
import { processIconGenEvent } from "../icon-shotter.js";
|
|
5
|
+
export const evtIconGenEvento = {
|
|
6
|
+
hash: "evt-icon-gen",
|
|
7
|
+
validate: async (ctx) => {
|
|
8
|
+
const msg = msgBase(ctx.enRequest);
|
|
9
|
+
if (msg instanceof type.errors) {
|
|
10
|
+
return Result.Ok(Option.None());
|
|
11
|
+
}
|
|
12
|
+
if (!isEvtIconGen(msg.payload)) {
|
|
13
|
+
return Result.Ok(Option.None());
|
|
14
|
+
}
|
|
15
|
+
return Result.Ok(Option.Some(msg));
|
|
16
|
+
},
|
|
17
|
+
handle: async (ctx) => {
|
|
18
|
+
const qctx = ctx.ctx.getOrThrow("queueCtx");
|
|
19
|
+
const res = await processIconGenEvent(qctx, ctx.validated.payload);
|
|
20
|
+
if (res.isErr()) {
|
|
21
|
+
console.error("Error processing evt-icon-gen:", res.Err());
|
|
22
|
+
}
|
|
23
|
+
return Result.Ok(EventoResult.Continue);
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=evt-icon-gen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evt-icon-gen.js","sourceRoot":"","sources":["../../jsr/handlers/evt-icon-gen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAoB,MAAM,EAAE,MAAM,EAAoB,MAAM,iBAAiB,CAAC;AAClH,OAAO,EAAuB,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,CAAC,MAAM,gBAAgB,GAAsD;IACjF,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,GAAG,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAA0B,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,GAAyD,EAAqC,EAAE;QAC7G,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAW,UAAU,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC"}
|
package/icon-shotter.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Result, exception2Result } from "@adviser/cement";
|
|
2
|
+
import { and, eq } from "drizzle-orm/sql/expressions";
|
|
3
|
+
import { ActiveEntry, isActiveIcon, isActiveIconDescription, parseArrayWarning } from "@vibes.diy/api-types";
|
|
4
|
+
import { ensureLogger } from "@fireproof/core-runtime";
|
|
5
|
+
import { generateIcon } from "./intern/generate-icon.js";
|
|
6
|
+
import { storeIcon } from "./intern/store-icon.js";
|
|
7
|
+
const ICON_MODEL = "prodia/flux-2.klein.9b";
|
|
8
|
+
const ICON_FALLBACK_MODEL = "openai/gpt-5-image-mini";
|
|
9
|
+
async function lookupIconState(qctx, userSlug, appSlug) {
|
|
10
|
+
const { db, tables } = qctx.sql;
|
|
11
|
+
const rRow = await exception2Result(() => db
|
|
12
|
+
.select({ settings: tables.appSettings.settings })
|
|
13
|
+
.from(tables.appSettings)
|
|
14
|
+
.where(and(eq(tables.appSettings.userSlug, userSlug), eq(tables.appSettings.appSlug, appSlug)))
|
|
15
|
+
.limit(1)
|
|
16
|
+
.then((r) => r[0]));
|
|
17
|
+
if (rRow.isErr())
|
|
18
|
+
return Result.Err(rRow);
|
|
19
|
+
const row = rRow.Ok();
|
|
20
|
+
if (!row)
|
|
21
|
+
return Result.Ok(undefined);
|
|
22
|
+
const { filtered: entries, warning } = parseArrayWarning(row.settings ?? [], ActiveEntry);
|
|
23
|
+
if (warning.length > 0) {
|
|
24
|
+
ensureLogger(qctx.sthis, "lookupIconState").Warn().Any({ parseErrors: warning }).Msg("skip");
|
|
25
|
+
}
|
|
26
|
+
const descEntry = entries.find(isActiveIconDescription);
|
|
27
|
+
const iconEntry = entries.find(isActiveIcon);
|
|
28
|
+
const head = iconEntry?.versions.find((v) => v.cid === iconEntry.currentCid);
|
|
29
|
+
return Result.Ok({
|
|
30
|
+
description: descEntry?.description,
|
|
31
|
+
headDescriptionAt: head?.descriptionAt,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export async function processIconGenEvent(qctx, evt) {
|
|
35
|
+
const rLookup = await lookupIconState(qctx, evt.userSlug, evt.appSlug);
|
|
36
|
+
if (rLookup.isErr())
|
|
37
|
+
return Result.Err(rLookup);
|
|
38
|
+
const lookup = rLookup.Ok();
|
|
39
|
+
if (!lookup)
|
|
40
|
+
return Result.Ok(undefined);
|
|
41
|
+
if (!lookup.description)
|
|
42
|
+
return Result.Ok(undefined);
|
|
43
|
+
if (evt.force !== true && lookup.headDescriptionAt === lookup.description) {
|
|
44
|
+
return Result.Ok(undefined);
|
|
45
|
+
}
|
|
46
|
+
const env = qctx.params.vibes.env;
|
|
47
|
+
const rGen = await generateIcon({
|
|
48
|
+
description: lookup.description,
|
|
49
|
+
model: ICON_MODEL,
|
|
50
|
+
fallbackModel: ICON_FALLBACK_MODEL,
|
|
51
|
+
llmUrl: env.LLM_BACKEND_URL,
|
|
52
|
+
llmApiKey: env.LLM_BACKEND_API_KEY,
|
|
53
|
+
prodiaToken: env.PRODIA_TOKEN,
|
|
54
|
+
});
|
|
55
|
+
if (rGen.isErr())
|
|
56
|
+
return Result.Err(rGen);
|
|
57
|
+
const { bytes, mime, model } = rGen.Ok();
|
|
58
|
+
console.log(`Icon generated for ${evt.userSlug}/${evt.appSlug} via ${model}: ${bytes.byteLength} bytes (${mime})`);
|
|
59
|
+
const rStore = await storeIcon(qctx, {
|
|
60
|
+
userSlug: evt.userSlug,
|
|
61
|
+
appSlug: evt.appSlug,
|
|
62
|
+
bytes,
|
|
63
|
+
mime,
|
|
64
|
+
description: lookup.description,
|
|
65
|
+
});
|
|
66
|
+
if (rStore.isErr())
|
|
67
|
+
return Result.Err(rStore);
|
|
68
|
+
return Result.Ok(undefined);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=icon-shotter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-shotter.js","sourceRoot":"","sources":["../jsr/icon-shotter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
export interface GenerateIconArgs {
|
|
3
|
+
description: string;
|
|
4
|
+
model: string;
|
|
5
|
+
fallbackModel: string;
|
|
6
|
+
llmUrl: string;
|
|
7
|
+
llmApiKey: string;
|
|
8
|
+
prodiaToken?: string;
|
|
9
|
+
fetch?: typeof fetch;
|
|
10
|
+
}
|
|
11
|
+
export interface GenerateIconResult {
|
|
12
|
+
bytes: Uint8Array;
|
|
13
|
+
mime: string;
|
|
14
|
+
model: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function generateIcon(args: GenerateIconArgs): Promise<Result<GenerateIconResult>>;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Result, exception2Result } from "@adviser/cement";
|
|
2
|
+
const ICON_PROMPT_PREFIX = `Minimal black icon on a white background, enclosed in a circle. ` +
|
|
3
|
+
`The icon will be displayed at a very small size — only a little larger than a favicon — ` +
|
|
4
|
+
`so the design must prioritize legibility above all else: bold, simple shapes, ` +
|
|
5
|
+
`high contrast, no fine detail. Subject: `;
|
|
6
|
+
const ICON_PROMPT_SUFFIX = `. Use clear, text-free imagery. Avoid letters, numbers, or thin lines.`;
|
|
7
|
+
export async function generateIcon(args) {
|
|
8
|
+
const prompt = `${ICON_PROMPT_PREFIX}${args.description}${ICON_PROMPT_SUFFIX}`;
|
|
9
|
+
const doFetch = args.fetch ?? fetch;
|
|
10
|
+
if (args.model.startsWith("prodia/")) {
|
|
11
|
+
if (!args.prodiaToken) {
|
|
12
|
+
console.warn(`PRODIA_TOKEN not configured for model ${args.model}; falling back to OpenRouter (${args.fallbackModel})`);
|
|
13
|
+
return generateIconOpenRouter({
|
|
14
|
+
prompt,
|
|
15
|
+
model: args.fallbackModel,
|
|
16
|
+
llmUrl: args.llmUrl,
|
|
17
|
+
llmApiKey: args.llmApiKey,
|
|
18
|
+
fetch: doFetch,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return generateIconProdia({ prompt, model: args.model, prodiaToken: args.prodiaToken, fetch: doFetch });
|
|
22
|
+
}
|
|
23
|
+
return generateIconOpenRouter({
|
|
24
|
+
prompt,
|
|
25
|
+
model: args.model,
|
|
26
|
+
llmUrl: args.llmUrl,
|
|
27
|
+
llmApiKey: args.llmApiKey,
|
|
28
|
+
fetch: doFetch,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async function generateIconProdia(args) {
|
|
32
|
+
const stem = args.model.slice("prodia/".length);
|
|
33
|
+
if (!stem)
|
|
34
|
+
return Result.Err(`Invalid Prodia model id: ${args.model}`);
|
|
35
|
+
const doFetch = args.fetch;
|
|
36
|
+
const rRes = await exception2Result(() => doFetch("https://inference.prodia.com/v2/job", {
|
|
37
|
+
method: "POST",
|
|
38
|
+
headers: {
|
|
39
|
+
Authorization: `Bearer ${args.prodiaToken}`,
|
|
40
|
+
Accept: "image/png",
|
|
41
|
+
"Content-Type": "application/json",
|
|
42
|
+
},
|
|
43
|
+
body: JSON.stringify({
|
|
44
|
+
type: `inference.${stem}.txt2img.v1`,
|
|
45
|
+
config: { prompt: args.prompt },
|
|
46
|
+
}),
|
|
47
|
+
}));
|
|
48
|
+
if (rRes.isErr())
|
|
49
|
+
return Result.Err(rRes);
|
|
50
|
+
const res = rRes.Ok();
|
|
51
|
+
if (!res.ok) {
|
|
52
|
+
const rBody = await exception2Result(() => res.text());
|
|
53
|
+
const body = rBody.isOk() ? rBody.Ok() : "";
|
|
54
|
+
return Result.Err(`prodia icon-gen failed: ${res.status} ${res.statusText}: ${body.slice(0, 200)}`);
|
|
55
|
+
}
|
|
56
|
+
const rBuf = await exception2Result(() => res.arrayBuffer());
|
|
57
|
+
if (rBuf.isErr())
|
|
58
|
+
return Result.Err(`prodia icon-gen body read failed: ${rBuf.Err()}`);
|
|
59
|
+
return Result.Ok({ bytes: new Uint8Array(rBuf.Ok()), mime: "image/png", model: args.model });
|
|
60
|
+
}
|
|
61
|
+
async function generateIconOpenRouter(args) {
|
|
62
|
+
const doFetch = args.fetch;
|
|
63
|
+
const rRes = await exception2Result(() => doFetch(args.llmUrl, {
|
|
64
|
+
method: "POST",
|
|
65
|
+
headers: {
|
|
66
|
+
Authorization: `Bearer ${args.llmApiKey}`,
|
|
67
|
+
"Content-Type": "application/json",
|
|
68
|
+
},
|
|
69
|
+
body: JSON.stringify({
|
|
70
|
+
model: args.model,
|
|
71
|
+
modalities: ["text", "image"],
|
|
72
|
+
stream: false,
|
|
73
|
+
messages: [{ role: "user", content: args.prompt }],
|
|
74
|
+
}),
|
|
75
|
+
}));
|
|
76
|
+
if (rRes.isErr())
|
|
77
|
+
return Result.Err(rRes);
|
|
78
|
+
const res = rRes.Ok();
|
|
79
|
+
if (!res.ok) {
|
|
80
|
+
const rBody = await exception2Result(() => res.text());
|
|
81
|
+
const body = rBody.isOk() ? rBody.Ok() : "";
|
|
82
|
+
return Result.Err(`openrouter icon-gen failed: ${res.status} ${res.statusText}: ${body.slice(0, 200)}`);
|
|
83
|
+
}
|
|
84
|
+
const rJson = await exception2Result(() => res.json());
|
|
85
|
+
if (rJson.isErr())
|
|
86
|
+
return Result.Err(`openrouter icon-gen JSON parse failed: ${rJson.Err()}`);
|
|
87
|
+
const dataUrl = findFirstDataImageUrl(rJson.Ok());
|
|
88
|
+
if (!dataUrl)
|
|
89
|
+
return Result.Err("openrouter icon-gen response did not contain a data:image/ URL");
|
|
90
|
+
const match = dataUrl.match(/^data:([^;]+);base64,(.+)$/);
|
|
91
|
+
if (!match)
|
|
92
|
+
return Result.Err("openrouter icon-gen data URL not in base64 form");
|
|
93
|
+
const mime = match[1];
|
|
94
|
+
const rBytes = exception2Result(() => Uint8Array.from(atob(match[2]), (c) => c.charCodeAt(0)));
|
|
95
|
+
if (rBytes.isErr())
|
|
96
|
+
return Result.Err(`openrouter icon-gen base64 decode failed: ${rBytes.Err()}`);
|
|
97
|
+
return Result.Ok({ bytes: rBytes.Ok(), mime, model: args.model });
|
|
98
|
+
}
|
|
99
|
+
function findFirstDataImageUrl(node) {
|
|
100
|
+
if (typeof node === "string") {
|
|
101
|
+
return node.startsWith("data:image/") ? node : undefined;
|
|
102
|
+
}
|
|
103
|
+
if (Array.isArray(node)) {
|
|
104
|
+
for (const item of node) {
|
|
105
|
+
const hit = findFirstDataImageUrl(item);
|
|
106
|
+
if (hit)
|
|
107
|
+
return hit;
|
|
108
|
+
}
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
if (node && typeof node === "object") {
|
|
112
|
+
for (const v of Object.values(node)) {
|
|
113
|
+
const hit = findFirstDataImageUrl(v);
|
|
114
|
+
if (hit)
|
|
115
|
+
return hit;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=generate-icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-icon.js","sourceRoot":"","sources":["../../jsr/intern/generate-icon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { QueueCtx } from "../queue-ctx.js";
|
|
3
|
+
export interface StoreIconResult {
|
|
4
|
+
readonly userSlug: string;
|
|
5
|
+
readonly appSlug: string;
|
|
6
|
+
readonly cid: string;
|
|
7
|
+
readonly mime: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function storeIcon(qctx: QueueCtx, args: {
|
|
10
|
+
userSlug: string;
|
|
11
|
+
appSlug: string;
|
|
12
|
+
bytes: Uint8Array;
|
|
13
|
+
mime: string;
|
|
14
|
+
description: string;
|
|
15
|
+
}): Promise<Result<StoreIconResult>>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Result, exception2Result, uint8array2stream } from "@adviser/cement";
|
|
2
|
+
import { and, eq } from "drizzle-orm/sql/expressions";
|
|
3
|
+
import { createSQLPeer } from "@vibes.diy/api-sql";
|
|
4
|
+
import { ActiveEntry, isActiveIcon, parseArrayWarning } from "@vibes.diy/api-types";
|
|
5
|
+
import { ensureLogger } from "@fireproof/core-runtime";
|
|
6
|
+
import { ensureStorage } from "@vibes.diy/api-pkg";
|
|
7
|
+
import { createS3Peer } from "@vibes.diy/api-svc";
|
|
8
|
+
export async function storeIcon(qctx, args) {
|
|
9
|
+
const { db, tables } = qctx.sql;
|
|
10
|
+
const rRow = await exception2Result(() => db
|
|
11
|
+
.select()
|
|
12
|
+
.from(tables.appSettings)
|
|
13
|
+
.where(and(eq(tables.appSettings.userSlug, args.userSlug), eq(tables.appSettings.appSlug, args.appSlug)))
|
|
14
|
+
.limit(1)
|
|
15
|
+
.then((r) => r[0]));
|
|
16
|
+
if (rRow.isErr())
|
|
17
|
+
return Result.Err(rRow);
|
|
18
|
+
const row = rRow.Ok();
|
|
19
|
+
if (!row) {
|
|
20
|
+
return Result.Err(`appSettings row not found for ${args.userSlug}/${args.appSlug}`);
|
|
21
|
+
}
|
|
22
|
+
const peers = [createSQLPeer(qctx.storageSystems.sql)];
|
|
23
|
+
if (qctx.storageSystems.s3) {
|
|
24
|
+
peers.push(createS3Peer({ s3: qctx.storageSystems.s3 }));
|
|
25
|
+
}
|
|
26
|
+
const [storageResult] = await ensureStorage(...peers).ensure(uint8array2stream(args.bytes));
|
|
27
|
+
if (!storageResult || storageResult.isErr()) {
|
|
28
|
+
return Result.Err(`Failed to store icon: ${storageResult?.Err()}`);
|
|
29
|
+
}
|
|
30
|
+
const cid = storageResult.Ok().getURL;
|
|
31
|
+
const { filtered: entries, warning } = parseArrayWarning(row.settings ?? [], ActiveEntry);
|
|
32
|
+
if (warning.length > 0) {
|
|
33
|
+
ensureLogger(qctx.sthis, "storeIcon").Warn().Any({ parseErrors: warning }).Msg("skip");
|
|
34
|
+
}
|
|
35
|
+
const now = new Date().toISOString();
|
|
36
|
+
const newVersion = {
|
|
37
|
+
cid,
|
|
38
|
+
mime: args.mime,
|
|
39
|
+
descriptionAt: args.description,
|
|
40
|
+
created: now,
|
|
41
|
+
};
|
|
42
|
+
const idx = entries.findIndex(isActiveIcon);
|
|
43
|
+
if (idx >= 0) {
|
|
44
|
+
const prev = entries[idx];
|
|
45
|
+
if (isActiveIcon(prev)) {
|
|
46
|
+
const next = {
|
|
47
|
+
type: "active.icon",
|
|
48
|
+
versions: [...prev.versions, newVersion],
|
|
49
|
+
currentCid: cid,
|
|
50
|
+
};
|
|
51
|
+
entries[idx] = next;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
entries.push({
|
|
56
|
+
type: "active.icon",
|
|
57
|
+
versions: [newVersion],
|
|
58
|
+
currentCid: cid,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
const rUpd = await exception2Result(() => db
|
|
62
|
+
.update(tables.appSettings)
|
|
63
|
+
.set({ settings: entries, updated: now })
|
|
64
|
+
.where(and(eq(tables.appSettings.userSlug, args.userSlug), eq(tables.appSettings.appSlug, args.appSlug))));
|
|
65
|
+
if (rUpd.isErr())
|
|
66
|
+
return Result.Err(rUpd);
|
|
67
|
+
return Result.Ok({ userSlug: args.userSlug, appSlug: args.appSlug, cid, mime: args.mime });
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=store-icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-icon.js","sourceRoot":"","sources":["../../jsr/intern/store-icon.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { createSQLPeer } from "@vibes.diy/api-sql";
|
|
|
4
4
|
import { isMetaScreenShot, MetaItem, parseArrayWarning } from "@vibes.diy/api-types";
|
|
5
5
|
import { ensureLogger } from "@fireproof/core-runtime";
|
|
6
6
|
import { ensureStorage } from "@vibes.diy/api-pkg";
|
|
7
|
+
import { createS3Peer } from "@vibes.diy/api-svc";
|
|
7
8
|
export async function storeScreenshot(qctx, fsId, screenshotData) {
|
|
8
9
|
const { db, tables } = qctx.sql;
|
|
9
10
|
const found = await db.select().from(tables.apps).where(eq(tables.apps.fsId, fsId)).limit(1);
|
|
@@ -15,7 +16,11 @@ export async function storeScreenshot(qctx, fsId, screenshotData) {
|
|
|
15
16
|
if (metaWarning.length > 0) {
|
|
16
17
|
ensureLogger(qctx.sthis, "storeScreenshot").Warn().Any({ parseErrors: metaWarning }).Msg("skip");
|
|
17
18
|
}
|
|
18
|
-
const
|
|
19
|
+
const peers = [createSQLPeer(qctx.storageSystems.sql)];
|
|
20
|
+
if (qctx.storageSystems.s3) {
|
|
21
|
+
peers.push(createS3Peer({ s3: qctx.storageSystems.s3 }));
|
|
22
|
+
}
|
|
23
|
+
const [storageResult] = await ensureStorage(...peers).ensure(uint8array2stream(screenshotData));
|
|
19
24
|
if (!storageResult || storageResult.isErr()) {
|
|
20
25
|
return Result.Err(`Failed to store screenshot: ${storageResult?.Err()}`);
|
|
21
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-screenshot.js","sourceRoot":"","sources":["../../jsr/intern/store-screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,EAAE,EAAE,MAAM,6BAA6B,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"store-screenshot.js","sourceRoot":"","sources":["../../jsr/intern/store-screenshot.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibes.diy/api-queue",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -12,13 +12,13 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@adviser/cement": "~0.5.34",
|
|
15
|
-
"@cloudflare/puppeteer": "~1.0
|
|
15
|
+
"@cloudflare/puppeteer": "~1.1.0",
|
|
16
16
|
"@fireproof/core-runtime": "~0.24.19",
|
|
17
17
|
"@fireproof/core-types-base": "~0.24.19",
|
|
18
|
-
"@vibes.diy/api-pkg": "2.2.
|
|
19
|
-
"@vibes.diy/api-sql": "2.2.
|
|
20
|
-
"@vibes.diy/api-svc": "2.2.
|
|
21
|
-
"@vibes.diy/api-types": "2.2.
|
|
18
|
+
"@vibes.diy/api-pkg": "2.2.8",
|
|
19
|
+
"@vibes.diy/api-sql": "2.2.8",
|
|
20
|
+
"@vibes.diy/api-svc": "2.2.8",
|
|
21
|
+
"@vibes.diy/api-types": "2.2.8",
|
|
22
22
|
"arktype": "~2.2.0",
|
|
23
23
|
"drizzle-orm": "~0.45.2"
|
|
24
24
|
},
|
package/queue-ctx.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Result } from "@adviser/cement";
|
|
2
|
-
import { RawEmailWithoutFrom } from "@vibes.diy/api-types";
|
|
3
|
-
import { D1Database, Fetcher } from "@cloudflare/workers-types";
|
|
2
|
+
import { RawEmailWithoutFrom, S3Api } from "@vibes.diy/api-types";
|
|
3
|
+
import { D1Database, Fetcher, R2Bucket } from "@cloudflare/workers-types";
|
|
4
4
|
import { cfDrizzle, CreateSQLPeerParams, VibesApiTables } from "@vibes.diy/api-sql";
|
|
5
5
|
import { SuperThis } from "@fireproof/core-types-base";
|
|
6
6
|
export interface QueueCtxParams {
|
|
@@ -8,6 +8,7 @@ export interface QueueCtxParams {
|
|
|
8
8
|
cf: {
|
|
9
9
|
BROWSER: Fetcher;
|
|
10
10
|
D1: D1Database;
|
|
11
|
+
FS_IDS_BUCKET?: R2Bucket;
|
|
11
12
|
};
|
|
12
13
|
vibes: {
|
|
13
14
|
env: {
|
|
@@ -17,6 +18,9 @@ export interface QueueCtxParams {
|
|
|
17
18
|
DB_FLAVOUR: string;
|
|
18
19
|
NEON_DATABASE_URL?: string;
|
|
19
20
|
DISCORD_WEBHOOK_URL?: string;
|
|
21
|
+
LLM_BACKEND_URL: string;
|
|
22
|
+
LLM_BACKEND_API_KEY: string;
|
|
23
|
+
PRODIA_TOKEN?: string;
|
|
20
24
|
};
|
|
21
25
|
};
|
|
22
26
|
}
|
|
@@ -41,6 +45,7 @@ export declare class QueueCtx {
|
|
|
41
45
|
readonly params: QueueCtxParams;
|
|
42
46
|
readonly storageSystems: {
|
|
43
47
|
sql: CreateSQLPeerParams;
|
|
48
|
+
s3?: S3Api;
|
|
44
49
|
};
|
|
45
50
|
readonly sql: {
|
|
46
51
|
db: ReturnType<typeof cfDrizzle>["db"];
|
package/queue-ctx.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { exception2Result, Result } from "@adviser/cement";
|
|
2
2
|
import { createVibesApiTables, cfDrizzle, toDBFlavour } from "@vibes.diy/api-sql";
|
|
3
|
+
import { R2ToS3Api } from "@vibes.diy/api-svc";
|
|
3
4
|
export class QueueCtx {
|
|
4
5
|
sthis;
|
|
5
6
|
params;
|
|
@@ -20,6 +21,7 @@ export class QueueCtx {
|
|
|
20
21
|
db,
|
|
21
22
|
assets: tables.assets,
|
|
22
23
|
},
|
|
24
|
+
s3: this.params.cf.FS_IDS_BUCKET ? new R2ToS3Api(this.params.cf.FS_IDS_BUCKET, this.sthis) : undefined,
|
|
23
25
|
};
|
|
24
26
|
}
|
|
25
27
|
async postToDiscord(body) {
|
package/queue-ctx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-ctx.js","sourceRoot":"","sources":["../jsr/queue-ctx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG3D,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAuB,WAAW,EAAkB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"queue-ctx.js","sourceRoot":"","sources":["../jsr/queue-ctx.ts"],"names":[],"mappings":"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"}
|
package/queue-evento.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Evento, EventoResult, EventoType, Lazy, Result } from "@adviser/cement";
|
|
2
2
|
import { evtNewFsIdEvento } from "./handlers/evt-new-fs-id.js";
|
|
3
3
|
import { evtAppSettingEvento } from "./handlers/evt-app-setting.js";
|
|
4
|
+
import { evtIconGenEvento } from "./handlers/evt-icon-gen.js";
|
|
4
5
|
import { evtInviteGrantEvento } from "./handlers/evt-invite-grant.js";
|
|
5
6
|
import { evtRequestGrantEvento } from "./handlers/evt-request-grant.js";
|
|
6
7
|
import { evtCommentPostedEvento } from "./handlers/evt-comment-posted.js";
|
|
7
8
|
import { MsgBaseEventoEnDecoder } from "@vibes.diy/api-pkg";
|
|
8
9
|
export const vibesQueueEvento = Lazy(() => {
|
|
9
10
|
const evento = new Evento(new MsgBaseEventoEnDecoder());
|
|
10
|
-
evento.push(evtNewFsIdEvento, evtAppSettingEvento, evtInviteGrantEvento, evtRequestGrantEvento, evtCommentPostedEvento, {
|
|
11
|
+
evento.push(evtNewFsIdEvento, evtAppSettingEvento, evtIconGenEvento, evtInviteGrantEvento, evtRequestGrantEvento, evtCommentPostedEvento, {
|
|
11
12
|
type: EventoType.Error,
|
|
12
13
|
hash: "queue-error-handler",
|
|
13
14
|
handle: async (ctx) => {
|
package/queue-evento.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-evento.js","sourceRoot":"","sources":["../jsr/queue-evento.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE;IACxC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EAStB;QACE,IAAI,EAAE,UAAU,CAAC,KAAK;QACtB,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpB,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,KAAK,EAAG,GAAG,CAAC,KAA6B,EAAE,KAAK,CAAC,CAAC;YACtG,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;KACF,CACF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"queue-evento.js","sourceRoot":"","sources":["../jsr/queue-evento.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE;IACxC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EAStB;QACE,IAAI,EAAE,UAAU,CAAC,KAAK;QACtB,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpB,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,KAAK,EAAG,GAAG,CAAC,KAA6B,EAAE,KAAK,CAAC,CAAC;YACtG,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;KACF,CACF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC,CAAC"}
|
package/worker.js
CHANGED
|
@@ -16,6 +16,7 @@ export default {
|
|
|
16
16
|
cf: {
|
|
17
17
|
BROWSER: env.BROWSER,
|
|
18
18
|
D1: env.DB,
|
|
19
|
+
FS_IDS_BUCKET: env.FS_IDS_BUCKET,
|
|
19
20
|
},
|
|
20
21
|
vibes: {
|
|
21
22
|
env: {
|
|
@@ -25,6 +26,9 @@ export default {
|
|
|
25
26
|
DB_FLAVOUR: toDBFlavour(env.DB_FLAVOUR),
|
|
26
27
|
NEON_DATABASE_URL: env.NEON_DATABASE_URL,
|
|
27
28
|
DISCORD_WEBHOOK_URL: env.DISCORD_WEBHOOK_URL,
|
|
29
|
+
LLM_BACKEND_URL: env.LLM_BACKEND_URL,
|
|
30
|
+
LLM_BACKEND_API_KEY: env.LLM_BACKEND_API_KEY,
|
|
31
|
+
PRODIA_TOKEN: env.PRODIA_TOKEN,
|
|
28
32
|
},
|
|
29
33
|
},
|
|
30
34
|
});
|
package/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../jsr/worker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAwC,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,qBAAqB;IACzB,KAAK,CAAC,IAAI,CAAI,IAAiD,EAAE,KAAc;QAC7E,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC;IACrB,CAAC;CACF;AAED,eAAe;IACb,KAAK,CAAC,KAAK,CAAC,KAAmB,EAAE,GAAU;QACzC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC;YACxB,KAAK;YACL,EAAE,EAAE;gBACF,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,EAAE,EAAE,GAAG,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../jsr/worker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAwC,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,qBAAqB;IACzB,KAAK,CAAC,IAAI,CAAI,IAAiD,EAAE,KAAc;QAC7E,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC;IACrB,CAAC;CACF;AAED,eAAe;IACb,KAAK,CAAC,KAAK,CAAC,KAAmB,EAAE,GAAU;QACzC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC;YACxB,KAAK;YACL,EAAE,EAAE;gBACF,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,aAAa,EAAE,GAAG,CAAC,aAAa;aACjC;YACD,KAAK,EAAE;gBACL,GAAG,EAAE;oBACH,yBAAyB,EAAE,GAAG,CAAC,yBAAyB;oBACxD,cAAc,EAAE,GAAG,CAAC,cAAc;oBAClC,oBAAoB,EAAE,GAAG,CAAC,oBAAoB;oBAC9C,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;oBACvC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;oBACxC,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;oBAC5C,eAAe,EAAE,GAAG,CAAC,eAAe;oBACpC,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;oBAC5C,YAAY,EAAE,GAAG,CAAC,YAAY;iBAC/B;aACF;SACF,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAElC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5E,IAAI,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC9E,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;CAC+B,CAAC"}
|