@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.
@@ -0,0 +1,3 @@
1
+ import { EventoHandler } from "@adviser/cement";
2
+ import { EvtIconGen, MsgBase } from "@vibes.diy/api-types";
3
+ export declare const evtIconGenEvento: EventoHandler<unknown, MsgBase<EvtIconGen>, void>;
@@ -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"}
@@ -0,0 +1,4 @@
1
+ import { Result } from "@adviser/cement";
2
+ import { EvtIconGen } from "@vibes.diy/api-types";
3
+ import { QueueCtx } from "./queue-ctx.js";
4
+ export declare function processIconGenEvent(qctx: QueueCtx, evt: EvtIconGen): Promise<Result<void>>;
@@ -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 [storageResult] = await ensureStorage(createSQLPeer(qctx.storageSystems.sql)).ensure(uint8array2stream(screenshotData));
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;AAkBnD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAc,EACd,IAAY,EACZ,cAA0B;IAE1B,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;IAEhC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE7F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,GAAG,CAAC,iBAAiB,IAAI,YAAY,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAGrB,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnG,CAAC;IAMD,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;IAC9H,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,GAAG,CAAC,+BAA+B,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IACrE,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IAGD,IAAI,CAAC,IAAI,CAAC;QACR,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,MAAM;KACpC,CAAC,CAAC;IAGH,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAE7E,OAAO,MAAM,CAAC,EAAE,CAAC;QACf,IAAI;QACJ,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,MAAM;KACpC,CAAC,CAAC;AACL,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.6",
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.6",
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.6",
19
- "@vibes.diy/api-sql": "2.2.6",
20
- "@vibes.diy/api-svc": "2.2.6",
21
- "@vibes.diy/api-types": "2.2.6",
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":"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"}
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) => {
@@ -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;aACX;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;iBAC7C;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"}
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"}