@vibes.diy/api-svc 2.6.8 → 2.6.10

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/shard-gate.js ADDED
@@ -0,0 +1,65 @@
1
+ import { EventoResult, Option, Result } from "@adviser/cement";
2
+ import { openVibe, shardsForReq } from "@vibes.diy/api-types";
3
+ export function shardIdentityError(id, ownerHandle, appSlug) {
4
+ const expected = openVibe(ownerHandle, appSlug);
5
+ if (expected === id.shardId)
6
+ return Option.None();
7
+ return Option.Some({
8
+ type: "vibes.diy.res-error",
9
+ error: {
10
+ message: `request for ${expected} arrived on shard ${id.shardId}`,
11
+ code: "wrong-shard",
12
+ },
13
+ });
14
+ }
15
+ function vibeKeyedReq(req) {
16
+ if (typeof req !== "object" || req === null)
17
+ return undefined;
18
+ const r = req;
19
+ if (typeof r.ownerHandle === "string" && typeof r.appSlug === "string") {
20
+ return { ownerHandle: r.ownerHandle, appSlug: r.appSlug };
21
+ }
22
+ return undefined;
23
+ }
24
+ export function gated(reqType, handler) {
25
+ return {
26
+ ...handler,
27
+ handle: async (ctx) => {
28
+ const id = ctx.ctx.get("shardIdentity");
29
+ if (id === undefined) {
30
+ return handler.handle(ctx);
31
+ }
32
+ const validated = ctx.validated;
33
+ const req = validated?.payload ?? {};
34
+ const allowed = shardsForReq(reqType, req);
35
+ if (!allowed.includes(id.kind)) {
36
+ await ctx.send.send(ctx, {
37
+ type: "vibes.diy.res-error",
38
+ error: {
39
+ message: `${reqType} not allowed on shard kind ${id.kind}`,
40
+ code: "wrong-shard-kind",
41
+ },
42
+ });
43
+ return Result.Ok(EventoResult.Continue);
44
+ }
45
+ if (id.kind === "vibe") {
46
+ const keyed = vibeKeyedReq(req);
47
+ if (keyed !== undefined) {
48
+ const oErr = shardIdentityError(id, keyed.ownerHandle, keyed.appSlug);
49
+ if (oErr.IsSome()) {
50
+ await ctx.send.send(ctx, oErr.unwrap());
51
+ return Result.Ok(EventoResult.Continue);
52
+ }
53
+ }
54
+ }
55
+ return handler.handle(ctx);
56
+ },
57
+ };
58
+ }
59
+ export function assertChatShardIdentity(ctx, ownerHandle, appSlug) {
60
+ const id = ctx.ctx.get("shardIdentity");
61
+ if (id === undefined || id.kind !== "vibe")
62
+ return Option.None();
63
+ return shardIdentityError(id, ownerHandle, appSlug);
64
+ }
65
+ //# sourceMappingURL=shard-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shard-gate.js","sourceRoot":"","sources":["../jsr/shard-gate.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { Lazy, Evento, EventoResult, EventoType, Result } from "@adviser/cement";
2
2
  import { W3CWebSocketEventEventoEnDecoder } from "@vibes.diy/api-pkg";
3
- import { sharedHandlers } from "./evento-handler-manifest.js";
3
+ import { handlersForShard } from "./evento-handler-manifest.js";
4
4
  export const sharedMsgEvento = Lazy(() => {
5
5
  const evento = new Evento(new W3CWebSocketEventEventoEnDecoder());
6
- evento.push(...sharedHandlers, {
6
+ evento.push(...handlersForShard("shared"), {
7
7
  type: EventoType.WildCard,
8
8
  hash: "shared-not-msg-implemented-handler",
9
9
  handle: async (ctx) => {
@@ -1 +1 @@
1
- {"version":3,"file":"shared-msg-evento.js","sourceRoot":"","sources":["../jsr/shared-msg-evento.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE;IACvC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,gCAAgC,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,IAAI,CACT,GAAG,cAAc,EACjB;QACE,IAAI,EAAE,UAAU,CAAC,QAAQ;QACzB,IAAI,EAAE,oCAAoC;QAC1C,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpB,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACvB,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,EAAE,OAAO,EAAE,oBAAoB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE;aACrD,CAAC,CAAC;YACtB,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;KACF,EACD;QACE,IAAI,EAAE,UAAU,CAAC,KAAK;QACtB,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,KAAK,EAAG,GAAG,CAAC,KAA6B,EAAE,KAAK,CAAC,CAAC;YACrG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACvB,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,uBAAuB,EAAE,EAAE;aACvE,CAAC,CAAC;YACtB,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":"shared-msg-evento.js","sourceRoot":"","sources":["../jsr/shared-msg-evento.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAKhE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE;IACvC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,gCAAgC,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,IAAI,CACT,GAAG,gBAAgB,CAAC,QAAQ,CAAC,EAC7B;QACE,IAAI,EAAE,UAAU,CAAC,QAAQ;QACzB,IAAI,EAAE,oCAAoC;QAC1C,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpB,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACvB,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,EAAE,OAAO,EAAE,oBAAoB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE;aACrD,CAAC,CAAC;YACtB,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;KACF,EACD;QACE,IAAI,EAAE,UAAU,CAAC,KAAK;QACtB,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,KAAK,EAAG,GAAG,CAAC,KAA6B,EAAE,KAAK,CAAC,CAAC;YACrG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACvB,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,uBAAuB,EAAE,EAAE;aACvE,CAAC,CAAC;YACtB,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;KACF,CACF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import { Lazy, Evento, EventoResult, EventoType, Result } from "@adviser/cement";
2
2
  import { W3CWebSocketEventEventoEnDecoder } from "@vibes.diy/api-pkg";
3
- import { sharedHandlers, appHandlers, chatHandlers } from "./evento-handler-manifest.js";
3
+ import { handlerManifest } from "./evento-handler-manifest.js";
4
4
  export const vibesMsgEvento = Lazy(() => {
5
5
  const evento = new Evento(new W3CWebSocketEventEventoEnDecoder());
6
- evento.push(...sharedHandlers, ...appHandlers, ...chatHandlers, {
6
+ evento.push(...handlerManifest.map((e) => e.handler), {
7
7
  type: EventoType.WildCard,
8
8
  hash: "not-msg-implemented-handler",
9
9
  handle: async (ctx) => {
@@ -1 +1 @@
1
- {"version":3,"file":"vibes-msg-evento.js","sourceRoot":"","sources":["../jsr/vibes-msg-evento.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEzF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE;IACtC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,gCAAgC,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,IAAI,CACT,GAAG,cAAc,EACjB,GAAG,WAAW,EACd,GAAG,YAAY,EACf;QACE,IAAI,EAAE,UAAU,CAAC,QAAQ;QACzB,IAAI,EAAE,6BAA6B;QACnC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpB,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACvB,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,EAAE,OAAO,EAAE,oBAAoB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE;aACrD,CAAC,CAAC;YACtB,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;KACF,EACD;QACE,IAAI,EAAE,UAAU,CAAC,KAAK;QACtB,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpB,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,KAAK,EAAG,GAAG,CAAC,KAA6B,EAAE,KAAK,CAAC,CAAC;YACpG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACvB,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,uBAAuB,EAAE,EAAE;aACvE,CAAC,CAAC;YACtB,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":"vibes-msg-evento.js","sourceRoot":"","sources":["../jsr/vibes-msg-evento.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAI/D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE;IACtC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,gCAAgC,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,IAAI,CACT,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EACxC;QACE,IAAI,EAAE,UAAU,CAAC,QAAQ;QACzB,IAAI,EAAE,6BAA6B;QACnC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpB,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACvB,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,EAAE,OAAO,EAAE,oBAAoB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE;aACrD,CAAC,CAAC;YACtB,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;KACF,EACD;QACE,IAAI,EAAE,UAAU,CAAC,KAAK;QACtB,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpB,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,KAAK,EAAG,GAAG,CAAC,KAA6B,EAAE,KAAK,CAAC,CAAC;YACpG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACvB,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,uBAAuB,EAAE,EAAE;aACvE,CAAC,CAAC;YACtB,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;KACF,CACF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC,CAAC"}