@vibes.diy/api-queue 2.0.0-dev-cli-e → 2.0.0-dev-cli-i

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 { EvtAppSetting, MsgBase } from "@vibes.diy/api-types";
3
+ export declare const evtAppSettingEvento: EventoHandler<unknown, MsgBase<EvtAppSetting>, void>;
@@ -0,0 +1,23 @@
1
+ import { EventoResult, Option, Result } from "@adviser/cement";
2
+ import { isEvtAppSetting, msgBase } from "@vibes.diy/api-types";
3
+ import { type } from "arktype";
4
+ export const evtAppSettingEvento = {
5
+ hash: "evt-app-setting",
6
+ validate: async (ctx) => {
7
+ const msg = msgBase(ctx.enRequest);
8
+ if (msg instanceof type.errors) {
9
+ return Result.Ok(Option.None());
10
+ }
11
+ if (!isEvtAppSetting(msg.payload)) {
12
+ return Result.Ok(Option.None());
13
+ }
14
+ return Result.Ok(Option.Some(msg));
15
+ },
16
+ handle: async (ctx) => {
17
+ const _env = ctx.ctx.getOrThrow("queueCtx");
18
+ const _payload = ctx.validated.payload;
19
+ console.log("Handling evt-app-setting event with payload:", _payload);
20
+ return Result.Ok(EventoResult.Continue);
21
+ },
22
+ };
23
+ //# sourceMappingURL=evt-app-setting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evt-app-setting.js","sourceRoot":"","sources":["../../jsr/handlers/evt-app-setting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAoB,MAAM,EAAE,MAAM,EAAoB,MAAM,iBAAiB,CAAC;AAClH,OAAO,EAAiC,eAAe,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,MAAM,CAAC,MAAM,mBAAmB,GAAyD;IACvF,IAAI,EAAE,iBAAiB;IACvB,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,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAA6B,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,GAA4D,EAAqC,EAAE;QAChH,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAQ,UAAU,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,8CAA8C,EAAE,QAAQ,CAAC,CAAC;QAEtE,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { EventoHandler } from "@adviser/cement";
2
+ import { EvtInviteGrant, MsgBase } from "@vibes.diy/api-types";
3
+ export declare const evtInviteGrantEvento: EventoHandler<unknown, MsgBase<EvtInviteGrant>, void>;
@@ -0,0 +1,53 @@
1
+ import { EventoResult, Option, Result } from "@adviser/cement";
2
+ import { isEvtInviteGrant, msgBase } from "@vibes.diy/api-types";
3
+ import { type } from "arktype";
4
+ import { sendEmailOpts } from "../intern/send-email.js";
5
+ export const evtInviteGrantEvento = {
6
+ hash: "evt-invite-grant",
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 (!isEvtInviteGrant(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 payload = ctx.validated.payload;
20
+ console.log("Handling evt-invite-grant event with payload:", payload);
21
+ if (payload.op === "delete") {
22
+ return Result.Ok(EventoResult.Continue);
23
+ }
24
+ if (!payload.grant.foreignInfo.givenEmail) {
25
+ return Result.Ok(EventoResult.Continue);
26
+ }
27
+ if (payload.grant.state === "pending") {
28
+ await sendEmailOpts(qctx, [
29
+ {
30
+ action: "invite",
31
+ dst: payload.grant.foreignInfo.givenEmail,
32
+ userSlug: payload.grant.userSlug,
33
+ appSlug: payload.grant.appSlug,
34
+ role: payload.grant.role,
35
+ token: payload.grant.tokenOrGrantUserId,
36
+ },
37
+ ]);
38
+ }
39
+ if (payload.grant.state === "revoked") {
40
+ await sendEmailOpts(qctx, [
41
+ {
42
+ action: "invite-revoked",
43
+ dst: payload.grant.foreignInfo.givenEmail,
44
+ userSlug: payload.grant.userSlug,
45
+ appSlug: payload.grant.appSlug,
46
+ role: payload.grant.role,
47
+ },
48
+ ]);
49
+ }
50
+ return Result.Ok(EventoResult.Continue);
51
+ },
52
+ };
53
+ //# sourceMappingURL=evt-invite-grant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evt-invite-grant.js","sourceRoot":"","sources":["../../jsr/handlers/evt-invite-grant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAoB,MAAM,EAAE,MAAM,EAAoB,MAAM,iBAAiB,CAAC;AAClH,OAAO,EAA2B,gBAAgB,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,MAAM,oBAAoB,GAA0D;IACzF,IAAI,EAAE,kBAAkB;IACxB,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,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAA8B,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,GAA6D,EAAqC,EAAE;QACjH,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAW,UAAU,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;QAEtC,OAAO,CAAC,GAAG,CAAC,+CAA+C,EAAE,OAAO,CAAC,CAAC;QACtE,IAAI,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YAE5B,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;YAE1C,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,aAAa,CAAC,IAAI,EAAE;gBACxB;oBACE,MAAM,EAAE,QAAQ;oBAChB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU;oBACzC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;oBAChC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;oBAC9B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;oBACxB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,kBAAkB;iBACxC;aACF,CAAC,CAAC;QACL,CAAC;QAID,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAEtC,MAAM,aAAa,CAAC,IAAI,EAAE;gBACxB;oBACE,MAAM,EAAE,gBAAgB;oBACxB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU;oBACzC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;oBAChC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;oBAC9B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;iBACzB;aACF,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { EventoHandler } from "@adviser/cement";
2
+ import { EvtNewFsId, MsgBase } from "@vibes.diy/api-types";
3
+ export declare const evtNewFsIdEvento: EventoHandler<unknown, MsgBase<EvtNewFsId>, void>;
@@ -0,0 +1,27 @@
1
+ import { EventoResult, Option, Result } from "@adviser/cement";
2
+ import { isEvtNewFsId, msgBase } from "@vibes.diy/api-types";
3
+ import { type } from "arktype";
4
+ import { processScreenShotEvent } from "../screen-shotter.js";
5
+ export const evtNewFsIdEvento = {
6
+ hash: "evt-new-fs-id",
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 (!isEvtNewFsId(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 payload = ctx.validated.payload;
20
+ const res = await processScreenShotEvent(qctx, payload);
21
+ if (res.isErr()) {
22
+ console.error("Error processing screen shot event:", res.Err());
23
+ }
24
+ return Result.Ok(EventoResult.Continue);
25
+ },
26
+ };
27
+ //# sourceMappingURL=evt-new-fs-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evt-new-fs-id.js","sourceRoot":"","sources":["../../jsr/handlers/evt-new-fs-id.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,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,CAAC,MAAM,gBAAgB,GAAsD;IACjF,IAAI,EAAE,eAAe;IACrB,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,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;QAEtC,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { EventoHandler } from "@adviser/cement";
2
+ import { EvtRequestGrant, MsgBase } from "@vibes.diy/api-types";
3
+ export declare const evtRequestGrantEvento: EventoHandler<unknown, MsgBase<EvtRequestGrant>, void>;
@@ -0,0 +1,48 @@
1
+ import { EventoResult, Option, Result } from "@adviser/cement";
2
+ import { isEvtRequestGrant, msgBase } from "@vibes.diy/api-types";
3
+ import { type } from "arktype";
4
+ import { sendEmailOpts } from "../intern/send-email.js";
5
+ export const evtRequestGrantEvento = {
6
+ hash: "evt-request-grant",
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 (!isEvtRequestGrant(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 payload = ctx.validated.payload;
20
+ if (!(payload.grant.foreignInfo.claims?.params.email && payload.grant.foreignInfo.givenEmail)) {
21
+ return Result.Ok(EventoResult.Continue);
22
+ }
23
+ if (payload.grant.state === "approved") {
24
+ await sendEmailOpts(qctx, [
25
+ {
26
+ action: "req-accepted",
27
+ dst: payload.grant.foreignInfo.claims?.params.email || payload.grant.foreignInfo.givenEmail,
28
+ userSlug: payload.grant.userSlug,
29
+ appSlug: payload.grant.appSlug,
30
+ role: payload.grant.role,
31
+ },
32
+ ]);
33
+ }
34
+ if (payload.grant.state === "revoked") {
35
+ await sendEmailOpts(qctx, [
36
+ {
37
+ action: "req-rejected",
38
+ dst: payload.grant.foreignInfo.claims?.params.email || payload.grant.foreignInfo.givenEmail,
39
+ userSlug: payload.grant.userSlug,
40
+ appSlug: payload.grant.appSlug,
41
+ role: payload.grant.role,
42
+ },
43
+ ]);
44
+ }
45
+ return Result.Ok(EventoResult.Continue);
46
+ },
47
+ };
48
+ //# sourceMappingURL=evt-request-grant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evt-request-grant.js","sourceRoot":"","sources":["../../jsr/handlers/evt-request-grant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAoB,MAAM,EAAE,MAAM,EAAoB,MAAM,iBAAiB,CAAC;AAClH,OAAO,EAA4B,iBAAiB,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,MAAM,qBAAqB,GAA2D;IAC3F,IAAI,EAAE,mBAAmB;IACzB,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,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAA+B,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,GAA8D,EAAqC,EAAE;QAClH,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAW,UAAU,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;QAYtC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9F,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,aAAa,CAAC,IAAI,EAAE;gBACxB;oBACE,MAAM,EAAE,cAAc;oBACtB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU;oBAC3F,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;oBAChC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;oBAC9B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;iBACzB;aACF,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAEtC,MAAM,aAAa,CAAC,IAAI,EAAE;gBACxB;oBACE,MAAM,EAAE,cAAc;oBACtB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU;oBAC3F,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;oBAChC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;oBAC9B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;iBACzB;aACF,CAAC,CAAC;QACL,CAAC;QAED,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 { EmailOps } from "@vibes.diy/api-types";
3
+ import { QueueCtx } from "../queue-ctx.js";
4
+ export declare function sendEmailOpts(vctx: QueueCtx, ops: EmailOps[]): Promise<Result<void>[]>;
@@ -0,0 +1,70 @@
1
+ import { BuildURI, Result } from "@adviser/cement";
2
+ import { isEmailOpsInvite } from "@vibes.diy/api-types";
3
+ export function sendEmailOpts(vctx, ops) {
4
+ return Promise.all(ops.map((op) => {
5
+ let raw;
6
+ const buri = BuildURI.from(vctx.params.vibes.env.VIBES_DIY_PUBLIC_BASE_URL)
7
+ .appendRelative("vibe")
8
+ .appendRelative(op.userSlug)
9
+ .appendRelative(op.appSlug);
10
+ if (isEmailOpsInvite(op)) {
11
+ buri.setParam("token", op.token);
12
+ }
13
+ if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(op.dst)) {
14
+ console.warn(`Invalid email address: ${op.dst}, skipping email sending for this operation.`);
15
+ return Result.Ok();
16
+ }
17
+ switch (op.action) {
18
+ case "invite-revoked":
19
+ raw = {
20
+ to: op.dst,
21
+ subject: `Your invitation as ${op.role} to the Vibe App "${op.appSlug}" has been revoked`,
22
+ text: [
23
+ "Hello,",
24
+ `We wanted to inform you that your invitation as ${op.role} to the app "${op.appSlug}" on Vibes DIY has been revoked by ${op.userSlug}.`,
25
+ "If you have any questions or believe this was a mistake, please reach out to the app owner directly.",
26
+ ].join("\n\n"),
27
+ };
28
+ break;
29
+ case "invite":
30
+ raw = {
31
+ to: op.dst,
32
+ subject: `You've been invited as ${op.role} a Vibe App from ${op.userSlug}`,
33
+ text: [
34
+ "Hello,",
35
+ `You have been invited as ${op.role} to the app "${op.appSlug}" on Vibes DIY by ${op.userSlug}.`,
36
+ "To accept the invitation and start collaborating, please click the link below:",
37
+ `${buri.toString()}`,
38
+ ].join("\n"),
39
+ };
40
+ break;
41
+ case "req-accepted":
42
+ raw = {
43
+ to: op.dst,
44
+ subject: `Your request to join "${op.appSlug}" has been approved`,
45
+ text: [
46
+ "Hello,",
47
+ `Great news — ${op.userSlug} has approved your request to access the app "${op.appSlug}" on Vibes DIY as ${op.role}.`,
48
+ "You can open the app here:",
49
+ `${buri.toString()}`,
50
+ ].join("\n\n"),
51
+ };
52
+ break;
53
+ case "req-rejected":
54
+ raw = {
55
+ to: op.dst,
56
+ subject: `Your request to join "${op.appSlug}" was not approved`,
57
+ text: [
58
+ "Hello,",
59
+ `Unfortunately, your request to access the app "${op.appSlug}" on Vibes DIY was not approved by ${op.userSlug}.`,
60
+ "If you think this was a mistake, you can reach out to the app owner directly.",
61
+ ].join("\n\n"),
62
+ };
63
+ break;
64
+ default:
65
+ return Result.Err(new Error(`unsupported email action: ${JSON.stringify(op)}`));
66
+ }
67
+ return vctx.sendEmail(raw);
68
+ }));
69
+ }
70
+ //# sourceMappingURL=send-email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-email.js","sourceRoot":"","sources":["../../jsr/intern/send-email.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Result } from "@adviser/cement";
2
+ import { QueueCtx } from "../queue-ctx.js";
3
+ export interface StoreScreenshotResult {
4
+ readonly fsId: string;
5
+ readonly assetUrl: string;
6
+ }
7
+ export declare function storeScreenshot(qctx: QueueCtx, fsId: string, screenshotData: Uint8Array): Promise<Result<StoreScreenshotResult>>;
@@ -0,0 +1,37 @@
1
+ import { Result, uint8array2stream } from "@adviser/cement";
2
+ import { eq } from "drizzle-orm/sql/expressions";
3
+ import { createSQLPeer } from "@vibes.diy/api-sql";
4
+ import { isMetaScreenShot, MetaItem, parseArrayWarning } from "@vibes.diy/api-types";
5
+ import { ensureLogger } from "@fireproof/core-runtime";
6
+ import { ensureStorage } from "@vibes.diy/api-pkg";
7
+ export async function storeScreenshot(qctx, fsId, screenshotData) {
8
+ const { db, tables } = qctx.sql;
9
+ const found = await db.select().from(tables.apps).where(eq(tables.apps.fsId, fsId)).limit(1);
10
+ if (found.length === 0) {
11
+ return Result.Err(`App with fsId ${fsId} not found`);
12
+ }
13
+ const app = found[0];
14
+ const { filtered: meta, warning: metaWarning } = parseArrayWarning(app.meta, MetaItem);
15
+ if (metaWarning.length > 0) {
16
+ ensureLogger(qctx.sthis, "storeScreenshot").Warn().Any({ parseErrors: metaWarning }).Msg("skip");
17
+ }
18
+ const [storageResult] = await ensureStorage(createSQLPeer(qctx.storageSystems.sql)).ensure(uint8array2stream(screenshotData));
19
+ if (!storageResult || storageResult.isErr()) {
20
+ return Result.Err(`Failed to store screenshot: ${storageResult?.Err()}`);
21
+ }
22
+ const existingIdx = meta.findIndex((item) => isMetaScreenShot(item));
23
+ if (existingIdx >= 0) {
24
+ meta.splice(existingIdx, 1);
25
+ }
26
+ meta.push({
27
+ type: "screen-shot-ref",
28
+ mime: "image/jpeg",
29
+ assetUrl: storageResult.Ok().getURL,
30
+ });
31
+ await db.update(tables.apps).set({ meta }).where(eq(tables.apps.fsId, fsId));
32
+ return Result.Ok({
33
+ fsId,
34
+ assetUrl: storageResult.Ok().getURL,
35
+ });
36
+ }
37
+ //# sourceMappingURL=store-screenshot.js.map
@@ -0,0 +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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibes.diy/api-queue",
3
- "version": "2.0.0-dev-cli-e",
3
+ "version": "2.0.0-dev-cli-i",
4
4
  "type": "module",
5
5
  "main": "./index.js",
6
6
  "scripts": {
@@ -14,8 +14,11 @@
14
14
  "@adviser/cement": "~0.5.34",
15
15
  "@cloudflare/puppeteer": "~1.0.6",
16
16
  "@fireproof/core-runtime": "~0.24.15",
17
- "@vibes.diy/api-svc": "2.0.0-dev-cli-e",
18
- "@vibes.diy/api-types": "2.0.0-dev-cli-e",
17
+ "@fireproof/core-types-base": "~0.24.15",
18
+ "@vibes.diy/api-pkg": "2.0.0-dev-cli-i",
19
+ "@vibes.diy/api-sql": "2.0.0-dev-cli-i",
20
+ "@vibes.diy/api-svc": "2.0.0-dev-cli-i",
21
+ "@vibes.diy/api-types": "2.0.0-dev-cli-i",
19
22
  "arktype": "~2.2.0",
20
23
  "drizzle-orm": "~0.45.1"
21
24
  },
package/queue-ctx.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ import { Result } from "@adviser/cement";
2
+ import { RawEmailWithoutFrom } from "@vibes.diy/api-types";
3
+ import { D1Database, Fetcher } from "@cloudflare/workers-types";
4
+ import { cfDrizzle, CreateSQLPeerParams, VibesApiTables } from "@vibes.diy/api-sql";
5
+ import { SuperThis } from "@fireproof/core-types-base";
6
+ export interface QueueCtxParams {
7
+ sthis: SuperThis;
8
+ cf: {
9
+ BROWSER: Fetcher;
10
+ D1: D1Database;
11
+ };
12
+ vibes: {
13
+ env: {
14
+ VIBES_DIY_PUBLIC_BASE_URL: string;
15
+ RESEND_API_KEY: string;
16
+ VIBES_DIY_FROM_EMAIL: string;
17
+ DB_FLAVOUR: string;
18
+ NEON_DATABASE_URL?: string;
19
+ };
20
+ };
21
+ }
22
+ export declare class QueueCtx {
23
+ readonly sthis: SuperThis;
24
+ readonly params: QueueCtxParams;
25
+ readonly storageSystems: {
26
+ sql: CreateSQLPeerParams;
27
+ };
28
+ readonly sql: {
29
+ db: ReturnType<typeof cfDrizzle>["db"];
30
+ tables: VibesApiTables;
31
+ };
32
+ constructor(params: QueueCtxParams);
33
+ sendEmail(rm: RawEmailWithoutFrom): Promise<Result<{
34
+ result: unknown;
35
+ }>>;
36
+ }
package/queue-ctx.js ADDED
@@ -0,0 +1,49 @@
1
+ import { exception2Result, Result } from "@adviser/cement";
2
+ import { createVibesApiTables, cfDrizzle, toDBFlavour } from "@vibes.diy/api-sql";
3
+ export class QueueCtx {
4
+ sthis;
5
+ params;
6
+ storageSystems;
7
+ sql;
8
+ constructor(params) {
9
+ this.sthis = params.sthis;
10
+ this.params = params;
11
+ const { db } = cfDrizzle(this.params.vibes.env, this.params.cf.D1);
12
+ const tables = createVibesApiTables(toDBFlavour(this.params.vibes.env.DB_FLAVOUR));
13
+ this.sql = {
14
+ db,
15
+ tables,
16
+ };
17
+ this.storageSystems = {
18
+ sql: {
19
+ flavour: toDBFlavour(this.params.vibes.env.DB_FLAVOUR),
20
+ db,
21
+ assets: tables.assets,
22
+ },
23
+ };
24
+ }
25
+ async sendEmail(rm) {
26
+ const rRes = await exception2Result(() => fetch("https://api.resend.com/emails", {
27
+ method: "POST",
28
+ headers: {
29
+ Authorization: `Bearer ${this.params.vibes.env.RESEND_API_KEY}`,
30
+ "Content-Type": "application/json",
31
+ },
32
+ body: JSON.stringify({
33
+ ...rm,
34
+ from: this.params.vibes.env.VIBES_DIY_FROM_EMAIL,
35
+ }),
36
+ }));
37
+ if (rRes.isErr()) {
38
+ return Result.Err(rRes);
39
+ }
40
+ const res = rRes.Ok();
41
+ if (!res.ok) {
42
+ return Result.Err(`Resend got an error: ${res.status}:${res.statusText}`);
43
+ }
44
+ const jsonTxt = await res.text();
45
+ const rJson = exception2Result(() => JSON.parse(jsonTxt));
46
+ return Result.Ok({ result: rJson.isOk() ? rJson.Ok() : jsonTxt });
47
+ }
48
+ }
49
+ //# sourceMappingURL=queue-ctx.js.map
@@ -0,0 +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;AAoBvH,MAAM,OAAO,QAAQ;IACV,KAAK,CAAY;IACjB,MAAM,CAAiB;IACvB,cAAc,CAErB;IACO,GAAG,CAGV;IACF,YAAY,MAAsB;QAChC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,MAAM,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QAEnF,IAAI,CAAC,GAAG,GAAG;YACT,EAAE;YACF,MAAM;SACP,CAAC;QACF,IAAI,CAAC,cAAc,GAAG;YACpB,GAAG,EAAE;gBACH,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;gBACtD,EAAE;gBACF,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAuB;QACrC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CACvC,KAAK,CAAC,+BAA+B,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE;gBAC/D,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,GAAG,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB;aACjD,CAAC;SACH,CAAC,CACH,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ import { Evento } from "@adviser/cement";
2
+ export declare const vibesQueueEvento: () => Evento;
@@ -0,0 +1,19 @@
1
+ import { Evento, EventoResult, EventoType, Lazy, Result } from "@adviser/cement";
2
+ import { evtNewFsIdEvento } from "./handlers/evt-new-fs-id.js";
3
+ import { evtAppSettingEvento } from "./handlers/evt-app-setting.js";
4
+ import { evtInviteGrantEvento } from "./handlers/evt-invite-grant.js";
5
+ import { evtRequestGrantEvento } from "./handlers/evt-request-grant.js";
6
+ import { MsgBaseEventoEnDecoder } from "@vibes.diy/api-pkg";
7
+ export const vibesQueueEvento = Lazy(() => {
8
+ const evento = new Evento(new MsgBaseEventoEnDecoder());
9
+ evento.push(evtNewFsIdEvento, evtAppSettingEvento, evtInviteGrantEvento, evtRequestGrantEvento, {
10
+ type: EventoType.Error,
11
+ hash: "queue-error-handler",
12
+ handle: async (ctx) => {
13
+ console.error("vibesQueueEvento error-handler", ctx.error, ctx.error?.cause);
14
+ return Result.Ok(EventoResult.Continue);
15
+ },
16
+ });
17
+ return evento;
18
+ });
19
+ //# sourceMappingURL=queue-evento.js.map
@@ -0,0 +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,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,EASrB;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,3 +1,6 @@
1
- import { CFEnv, EvtNewFsId } from "@vibes.diy/api-types";
2
- export declare function takeScreenshot(event: EvtNewFsId, env: CFEnv): Promise<Uint8Array>;
3
- export declare function processScreenShotEvent(message: unknown, env: CFEnv): Promise<void>;
1
+ import { EvtNewFsId } from "@vibes.diy/api-types";
2
+ import { Result } from "@adviser/cement";
3
+ import { QueueCtx } from "./queue-ctx.js";
4
+ import { Fetcher } from "@cloudflare/workers-types";
5
+ export declare function takeScreenshot(event: EvtNewFsId, browserFetcher: Fetcher): Promise<Uint8Array>;
6
+ export declare function processScreenShotEvent(qctx: QueueCtx, evt: EvtNewFsId): Promise<Result<void>>;
package/screen-shotter.js CHANGED
@@ -1,14 +1,9 @@
1
1
  import puppeteer from "@cloudflare/puppeteer";
2
- import { isEvtNewFsId, isMsgBase, msgBase } from "@vibes.diy/api-types";
3
- import { R2ToS3Api, storeScreenshot } from "@vibes.diy/api-svc";
4
- import { cfDrizzle } from "@vibes.diy/api-svc/cf-serve.js";
5
- import { createVibesApiTables } from "@vibes.diy/api-svc/sql/tables.js";
6
- import { type } from "arktype";
7
- import { ensureSuperThis } from "@fireproof/core-runtime";
8
- import { LoggerImpl } from "@adviser/cement";
9
- export async function takeScreenshot(event, env) {
2
+ import { Result } from "@adviser/cement";
3
+ import { storeScreenshot } from "./intern/store-screenshot.js";
4
+ export async function takeScreenshot(event, browserFetcher) {
10
5
  console.log(`Taking screenshot for ${event.vibeUrl} (fsId: ${event.fsId})`);
11
- const browser = await puppeteer.launch(env.BROWSER);
6
+ const browser = await puppeteer.launch(browserFetcher);
12
7
  try {
13
8
  const page = await browser.newPage();
14
9
  await page.setViewport({
@@ -31,40 +26,15 @@ export async function takeScreenshot(event, env) {
31
26
  await browser.close();
32
27
  }
33
28
  }
34
- export async function processScreenShotEvent(message, env) {
35
- if (!isMsgBase(message)) {
36
- const x = msgBase(message);
37
- if (x instanceof type.errors) {
38
- console.error("Received message that is not MsgBase but matches MsgBase structure:", x.summary, message);
39
- }
40
- else {
41
- console.error("Received message that is not MsgBase:", message);
42
- }
43
- return;
29
+ export async function processScreenShotEvent(qctx, evt) {
30
+ const screenshot = await takeScreenshot(evt, qctx.params.cf.BROWSER);
31
+ const screenshotData = new Uint8Array(screenshot);
32
+ console.log(`Screenshot taken for ${evt.fsId}: ${screenshotData.byteLength} bytes`);
33
+ const result = await storeScreenshot(qctx, evt.fsId, screenshotData);
34
+ if (result.isErr()) {
35
+ return Result.Err(`Failed to store screenshot: ${result.Err()}`);
44
36
  }
45
- const payload = message.payload;
46
- if (isEvtNewFsId(payload)) {
47
- console.log("Processing ScreenShotEvent:", {
48
- shotUrl: payload.vibeUrl,
49
- fsId: payload.fsId,
50
- });
51
- const screenshot = await takeScreenshot(payload, env);
52
- const screenshotData = new Uint8Array(screenshot);
53
- console.log(`Screenshot taken for ${payload.fsId}: ${screenshotData.byteLength} bytes`);
54
- const { db } = await cfDrizzle(env);
55
- const sthis = ensureSuperThis({ logger: new LoggerImpl() });
56
- const tables = createVibesApiTables(env.DB_FLAVOUR ?? "sqlite");
57
- const result = await storeScreenshot({
58
- sql: { dbFlavour: env.DB_FLAVOUR ?? "sqlite", db, tables },
59
- s3Api: new R2ToS3Api(env.FS_IDS_BUCKET, sthis),
60
- }, payload.fsId, screenshotData);
61
- if (result.isErr()) {
62
- console.error(`Failed to store screenshot: ${result.Err()}`);
63
- return;
64
- }
65
- console.log(`Screenshot stored with assetId: ${result.Ok().assetUrl}`);
66
- return;
67
- }
68
- console.error("Received message with unrecognized payload:", payload);
37
+ console.log(`Screenshot stored with assetId: ${result.Ok().assetUrl}`);
38
+ return Result.Ok();
69
39
  }
70
40
  //# sourceMappingURL=screen-shotter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"screen-shotter.js","sourceRoot":"","sources":["../jsr/screen-shotter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screen-shotter.js","sourceRoot":"","sources":["../jsr/screen-shotter.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAO/D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAiB,EAAE,cAAuB;IAC7E,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IAE5E,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,cAAuB,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAErC,MAAM,IAAI,CAAC,WAAW,CAAC;YACrB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,GAAG;YACX,iBAAiB,EAAE,CAAC;SACrB,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YAC7B,SAAS,EAAE,cAAc;YACzB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;YACvC,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAKD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAc,EAAE,GAAe;IAC1E,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU,QAAQ,CAAC,CAAC;IAEpF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAErE,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,mCAAmC,MAAM,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC;AACrB,CAAC"}
package/worker.js CHANGED
@@ -1,21 +1,45 @@
1
- import { processScreenShotEvent } from "./screen-shotter.js";
1
+ import { AppContext, Result } from "@adviser/cement";
2
+ import { vibesQueueEvento } from "./queue-evento.js";
3
+ import { QueueCtx } from "./queue-ctx.js";
4
+ import { toDBFlavour } from "@vibes.diy/api-sql";
5
+ import { ensureSuperThis } from "@fireproof/core-runtime";
6
+ class NoopQueueSendProvider {
7
+ async send(_ctx, _data) {
8
+ return Result.Ok();
9
+ }
10
+ }
2
11
  export default {
3
12
  async queue(batch, env) {
13
+ const sthis = ensureSuperThis();
14
+ const qctx = new QueueCtx({
15
+ sthis,
16
+ cf: {
17
+ BROWSER: env.BROWSER,
18
+ D1: env.DB,
19
+ },
20
+ vibes: {
21
+ env: {
22
+ VIBES_DIY_PUBLIC_BASE_URL: env.VIBES_DIY_PUBLIC_BASE_URL,
23
+ RESEND_API_KEY: env.RESEND_API_KEY,
24
+ VIBES_DIY_FROM_EMAIL: env.VIBES_DIY_FROM_EMAIL,
25
+ DB_FLAVOUR: toDBFlavour(env.DB_FLAVOUR),
26
+ NEON_DATABASE_URL: env.NEON_DATABASE_URL,
27
+ },
28
+ },
29
+ });
30
+ const ctx = new AppContext().set("queueCtx", qctx);
31
+ const send = new NoopQueueSendProvider();
32
+ const evento = vibesQueueEvento();
4
33
  for (const message of batch.messages) {
5
- try {
6
- console.log("Queue message received:", message.id, typeof message.body);
7
- let body = message.body;
8
- if (typeof message.body === "string") {
9
- body = JSON.parse(message.body);
10
- console.log("Message body:", body);
11
- }
12
- await processScreenShotEvent(body, env);
13
- message.ack();
14
- }
15
- catch (error) {
16
- console.error("Failed to process queue message:", error);
34
+ console.log("message", message);
35
+ const rTrigger = await evento.trigger({ ctx, send, request: message.body });
36
+ if (rTrigger.isErr()) {
37
+ console.error("Failed to process queue message:", message.id, rTrigger.Err());
17
38
  message.retry();
18
39
  }
40
+ else {
41
+ message.ack();
42
+ }
19
43
  }
20
44
  },
21
45
  };
package/worker.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../jsr/worker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,eAAe;IACb,KAAK,CAAC,KAAK,CAAC,KAAmB,EAAE,GAAU;QACzC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;gBACxE,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;gBACxB,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACrC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAc,CAAC,CAAC;oBAC1C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;gBACrC,CAAC;gBACD,MAAM,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;gBACzD,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,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;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;iBACzC;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"}
package/wrangler.toml CHANGED
@@ -18,7 +18,7 @@ bucket_name = "vibes-diy-fs-ids"
18
18
  [[queues.consumers]]
19
19
  queue = "vibes-service"
20
20
  max_batch_size = 10
21
- max_batch_timeout = 30
21
+ max_batch_timeout = 1
22
22
 
23
23
  [env.dev]
24
24
  name = "vibes-diy-v2-queue-consumer-dev"
@@ -38,7 +38,7 @@ bucket_name = "vibes-diy-fs-ids"
38
38
  [[env.dev.queues.consumers]]
39
39
  queue = "vibes-service-dev"
40
40
  max_batch_size = 10
41
- max_batch_timeout = 30
41
+ max_batch_timeout = 1
42
42
 
43
43
  [env.prod]
44
44
  name = "vibes-diy-v2-queue-consumer-prod"
@@ -58,4 +58,4 @@ bucket_name = "vibes-diy-fs-ids"
58
58
  [[env.prod.queues.consumers]]
59
59
  queue = "vibes-service-prod"
60
60
  max_batch_size = 10
61
- max_batch_timeout = 30
61
+ max_batch_timeout = 5