@vibes.diy/api-svc 2.3.5 → 2.4.1

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.
Files changed (40) hide show
  1. package/create-handler.js +8 -2
  2. package/create-handler.js.map +1 -1
  3. package/intern/write-apps.js +5 -3
  4. package/intern/write-apps.js.map +1 -1
  5. package/package.json +11 -11
  6. package/public/app-documents.js.map +1 -1
  7. package/public/asset-upload-grant.js.map +1 -1
  8. package/public/ensure-app-slug-item.js +5 -3
  9. package/public/ensure-app-slug-item.js.map +1 -1
  10. package/public/invite-flow.js +2 -3
  11. package/public/invite-flow.js.map +1 -1
  12. package/public/list-members.js.map +1 -1
  13. package/public/list-recent-vibes.js +2 -3
  14. package/public/list-recent-vibes.js.map +1 -1
  15. package/public/pin-recent-vibe.js +5 -3
  16. package/public/pin-recent-vibe.js.map +1 -1
  17. package/public/report-active-members.d.ts +3 -0
  18. package/public/report-active-members.js +94 -0
  19. package/public/report-active-members.js.map +1 -0
  20. package/public/report-attribution-referrers.js +38 -7
  21. package/public/report-attribution-referrers.js.map +1 -1
  22. package/public/report-campaign-health.d.ts +3 -0
  23. package/public/report-campaign-health.js +133 -0
  24. package/public/report-campaign-health.js.map +1 -0
  25. package/public/report-growth-memberships.js +2 -3
  26. package/public/report-growth-memberships.js.map +1 -1
  27. package/public/report-growth-vibes-with-data.js +2 -3
  28. package/public/report-growth-vibes-with-data.js.map +1 -1
  29. package/public/report-top-vibes-by-members.d.ts +3 -0
  30. package/public/report-top-vibes-by-members.js +76 -0
  31. package/public/report-top-vibes-by-members.js.map +1 -0
  32. package/public/request-flow.js +18 -18
  33. package/public/request-flow.js.map +1 -1
  34. package/public/user-slug-bindings.js +4 -4
  35. package/public/user-slug-bindings.js.map +1 -1
  36. package/public/who-am-i.js.map +1 -1
  37. package/types.d.ts +3 -0
  38. package/types.js.map +1 -1
  39. package/vibes-msg-evento.js +8 -5
  40. package/vibes-msg-evento.js.map +1 -1
@@ -0,0 +1,94 @@
1
+ import { Result, Option, EventoResult } from "@adviser/cement";
2
+ import { reqReportActiveMembers, resReportActiveMembers, } from "@vibes.diy/api-types";
3
+ import { type } from "arktype";
4
+ import { eq, gte } from "drizzle-orm";
5
+ import { unwrapMsgBase } from "../unwrap-msg-base.js";
6
+ import { checkAuth } from "../check-auth.js";
7
+ import { cachedReport, hasReport } from "./report-cache.js";
8
+ function last30DaysUTC() {
9
+ const days = [];
10
+ const now = new Date();
11
+ for (let i = 29; i >= 0; i--) {
12
+ const d = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() - i));
13
+ days.push(d.toISOString().slice(0, 10));
14
+ }
15
+ return days;
16
+ }
17
+ async function computeActiveMembers(vctx) {
18
+ const t = vctx.sql.tables;
19
+ const reqRows = await vctx.sql.db
20
+ .select({
21
+ memberId: t.requestGrants.foreignUserId,
22
+ userSlug: t.requestGrants.userSlug,
23
+ appSlug: t.requestGrants.appSlug,
24
+ })
25
+ .from(t.requestGrants)
26
+ .where(eq(t.requestGrants.state, "approved"));
27
+ const invRows = await vctx.sql.db
28
+ .select({
29
+ memberId: t.inviteGrants.tokenOrGrantUserId,
30
+ userSlug: t.inviteGrants.userSlug,
31
+ appSlug: t.inviteGrants.appSlug,
32
+ })
33
+ .from(t.inviteGrants)
34
+ .where(eq(t.inviteGrants.state, "accepted"));
35
+ const memberKeys = new Set();
36
+ for (const r of [...reqRows, ...invRows]) {
37
+ memberKeys.add(`${r.memberId}:${r.userSlug}:${r.appSlug}`);
38
+ }
39
+ const days = last30DaysUTC();
40
+ const since = `${days[0]}T00:00:00.000Z`;
41
+ const writes = await vctx.sql.db
42
+ .select({
43
+ userId: t.appDocuments.userId,
44
+ userSlug: t.appDocuments.userSlug,
45
+ appSlug: t.appDocuments.appSlug,
46
+ created: t.appDocuments.created,
47
+ })
48
+ .from(t.appDocuments)
49
+ .where(gte(t.appDocuments.created, since));
50
+ const dayBuckets = new Map();
51
+ for (const w of writes) {
52
+ if (w.userId === "unknown")
53
+ continue;
54
+ const key = `${w.userId}:${w.userSlug}:${w.appSlug}`;
55
+ if (!memberKeys.has(key))
56
+ continue;
57
+ const day = w.created.slice(0, 10);
58
+ let bucket = dayBuckets.get(day);
59
+ if (bucket === undefined) {
60
+ bucket = new Set();
61
+ dayBuckets.set(day, bucket);
62
+ }
63
+ bucket.add(w.userId);
64
+ }
65
+ return {
66
+ type: "vibes.diy.res-report-active-members",
67
+ generatedAt: new Date().toISOString(),
68
+ days: days.map((day) => ({ day, count: dayBuckets.get(day)?.size ?? 0 })),
69
+ };
70
+ }
71
+ export const reportActiveMembersEvento = {
72
+ hash: "vibes.diy.req-report-active-members",
73
+ validate: unwrapMsgBase(async (msg) => {
74
+ const ret = reqReportActiveMembers(msg.payload);
75
+ if (ret instanceof type.errors)
76
+ return Result.Ok(Option.None());
77
+ return Result.Ok(Option.Some({ ...msg, payload: ret }));
78
+ }),
79
+ handle: checkAuth(async (ctx) => {
80
+ const req = ctx.validated.payload;
81
+ const vctx = ctx.ctx.getOrThrow("vibesApiCtx");
82
+ if (hasReport(req._auth.verifiedAuth.claims, "growth") === false) {
83
+ await ctx.send.send(ctx, {
84
+ type: "vibes.diy.res-error",
85
+ error: { message: "not authorized for growth report", code: "report-not-authorized" },
86
+ });
87
+ return Result.Ok(EventoResult.Continue);
88
+ }
89
+ const res = await cachedReport(vctx, "active-members", resReportActiveMembers, () => computeActiveMembers(vctx));
90
+ await ctx.send.send(ctx, res);
91
+ return Result.Ok(EventoResult.Continue);
92
+ }),
93
+ };
94
+ //# sourceMappingURL=report-active-members.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-active-members.js","sourceRoot":"","sources":["../../jsr/public/report-active-members.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,63 @@
1
1
  import { Result, Option, EventoResult } from "@adviser/cement";
2
2
  import { reqReportAttributionReferrers, resReportAttributionReferrers, } from "@vibes.diy/api-types";
3
3
  import { type } from "arktype";
4
- import { sql, desc, eq } from "drizzle-orm";
4
+ import { sql, desc, eq, notInArray, and } from "drizzle-orm";
5
5
  import { unwrapMsgBase } from "../unwrap-msg-base.js";
6
6
  import { checkAuth } from "../check-auth.js";
7
7
  import { cachedReport, hasReport } from "./report-cache.js";
8
+ const OWNED_HOSTS = [
9
+ "vibesdiy.app",
10
+ "www.vibesdiy.app",
11
+ "vibesdiy.work",
12
+ "www.vibesdiy.work",
13
+ "vibing.cool",
14
+ "www.vibing.cool",
15
+ "vibecode.garden",
16
+ "www.vibecode.garden",
17
+ "www.justvibes.dev",
18
+ "www.vibrate.dev",
19
+ "www.realize.run",
20
+ "www.dreamcode.live",
21
+ "www.vibes.software",
22
+ ];
23
+ const LEGACY_VIBE_PATH_RE = sql `'^/vibe/[^/]+$'`;
8
24
  async function computeAttributionReferrers(vctx, reqPathFilter) {
9
25
  const t = vctx.sql.tables;
26
+ const ownedFilter = notInArray(t.refererEvents.refHost, OWNED_HOSTS);
27
+ const notLegacyVibeFilter = sql `${t.refererEvents.reqPath} !~ ${LEGACY_VIBE_PATH_RE}`;
10
28
  const baseQuery = vctx.sql.db
11
29
  .select({
12
30
  refHost: t.refererEvents.refHost,
13
31
  refPath: t.refererEvents.refPath,
14
32
  reqPath: t.refererEvents.reqPath,
15
33
  total: sql `cast(count(*) as int)`,
16
- conversions: sql `cast(count(*) filter (where ${t.refererEvents.reqPath} like '/api/%' or ${t.refererEvents.reqPath} like '/new%' or ${t.refererEvents.reqPath} like '/vibe/%') as int)`,
17
34
  })
18
35
  .from(t.refererEvents)
19
36
  .$dynamic();
20
- const filtered = reqPathFilter !== undefined ? baseQuery.where(eq(t.refererEvents.reqPath, reqPathFilter)) : baseQuery;
37
+ const filtered = reqPathFilter !== undefined
38
+ ? baseQuery.where(and(ownedFilter, notLegacyVibeFilter, eq(t.refererEvents.reqPath, reqPathFilter)))
39
+ : baseQuery.where(and(ownedFilter, notLegacyVibeFilter));
21
40
  const rows = await filtered
22
41
  .groupBy(t.refererEvents.refHost, t.refererEvents.refPath, t.refererEvents.reqPath)
23
42
  .orderBy(desc(sql `count(*)`))
24
43
  .limit(100);
44
+ const legacyVibeRows = reqPathFilter === undefined
45
+ ? await vctx.sql.db
46
+ .select({
47
+ reqPath: t.refererEvents.reqPath,
48
+ total: sql `cast(count(*) as int)`,
49
+ })
50
+ .from(t.refererEvents)
51
+ .where(sql `${t.refererEvents.reqPath} ~ ${LEGACY_VIBE_PATH_RE}`)
52
+ .groupBy(t.refererEvents.reqPath)
53
+ .orderBy(desc(sql `count(*)`))
54
+ .limit(200)
55
+ : [];
25
56
  return {
26
57
  type: "vibes.diy.res-report-attribution-referrers",
27
58
  generatedAt: new Date().toISOString(),
28
- rows: rows.map((r) => ({ ...r, browse: r.total - r.conversions })),
59
+ rows,
60
+ legacyVibeRows,
29
61
  };
30
62
  }
31
63
  export const reportAttributionReferrersEvento = {
@@ -41,9 +73,8 @@ export const reportAttributionReferrersEvento = {
41
73
  const vctx = ctx.ctx.getOrThrow("vibesApiCtx");
42
74
  if (hasReport(req._auth.verifiedAuth.claims, "attribution") === false) {
43
75
  await ctx.send.send(ctx, {
44
- type: "vibes.diy.error",
45
- message: "not authorized for attribution report",
46
- code: "report-not-authorized",
76
+ type: "vibes.diy.res-error",
77
+ error: { message: "not authorized for attribution report", code: "report-not-authorized" },
47
78
  });
48
79
  return Result.Ok(EventoResult.Continue);
49
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"report-attribution-referrers.js","sourceRoot":"","sources":["../../jsr/public/report-attribution-referrers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report-attribution-referrers.js","sourceRoot":"","sources":["../../jsr/public/report-attribution-referrers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { EventoHandler } from "@adviser/cement";
2
+ import { MsgBase, ReqReportCampaignHealth, ResReportCampaignHealth, VibesDiyError, W3CWebSocketEvent } from "@vibes.diy/api-types";
3
+ export declare const reportCampaignHealthEvento: EventoHandler<W3CWebSocketEvent, MsgBase<ReqReportCampaignHealth>, ResReportCampaignHealth | VibesDiyError>;
@@ -0,0 +1,133 @@
1
+ import { Result, Option, EventoResult } from "@adviser/cement";
2
+ import { reqReportCampaignHealth, resReportCampaignHealth, } from "@vibes.diy/api-types";
3
+ import { type } from "arktype";
4
+ import { unwrapMsgBase } from "../unwrap-msg-base.js";
5
+ import { checkAuth } from "../check-auth.js";
6
+ import { cachedReport, hasReport } from "./report-cache.js";
7
+ const META_BASE = "https://graph.facebook.com/v19.0";
8
+ async function metaGet(path, token) {
9
+ const sep = path.includes("?") ? "&" : "?";
10
+ const res = await fetch(`${META_BASE}${path}${sep}access_token=${token}`);
11
+ const json = (await res.json());
12
+ if (json.error) {
13
+ throw new Error(`Meta API: ${json.error.message}`);
14
+ }
15
+ return json;
16
+ }
17
+ function lpv(row) {
18
+ return Number(row.actions?.find((a) => a.action_type === "landing_page_view")?.value ?? 0);
19
+ }
20
+ function costPerLpv(row) {
21
+ const l = lpv(row);
22
+ return l > 0 ? Number(row.spend) / l : Infinity;
23
+ }
24
+ async function fetchCampaignHealth(token, account, pixelId, days, since) {
25
+ const dateParam = since
26
+ ? `&time_range=${encodeURIComponent(JSON.stringify({ since, until: new Date().toISOString().slice(0, 10) }))}`
27
+ : `&date_preset=last_${days}d`;
28
+ const dateLabel = since ? `since ${since}` : `last ${days} days`;
29
+ const fields = "campaign_name,campaign_id,impressions,clicks,spend,ctr,cpc,reach,actions";
30
+ const rows = [];
31
+ let after = undefined;
32
+ for (;;) {
33
+ const cursor = after !== undefined ? `&after=${encodeURIComponent(after)}` : "";
34
+ const page = await metaGet(`/${account}/insights?fields=${fields}&level=campaign&limit=100${dateParam}${cursor}`, token);
35
+ rows.push(...(page.data ?? []));
36
+ if (page.paging?.next === undefined)
37
+ break;
38
+ after = page.paging.cursors?.after;
39
+ if (after === undefined)
40
+ break;
41
+ }
42
+ const pixel = await (async () => {
43
+ try {
44
+ const px = await metaGet(`/${pixelId}?fields=name,last_fired_time,stats`, token);
45
+ const events = px.stats?.data?.flatMap((h) => h.data ?? []) ?? [];
46
+ const sum = {};
47
+ for (const e of events) {
48
+ sum[e.value] = (sum[e.value] ?? 0) + Number(e.count);
49
+ }
50
+ return { lastFired: px.last_fired_time, counts: sum };
51
+ }
52
+ catch (e) {
53
+ return { error: e.message };
54
+ }
55
+ })();
56
+ const nameCounts = {};
57
+ for (const r of rows)
58
+ nameCounts[r.campaign_name] = (nameCounts[r.campaign_name] ?? 0) + 1;
59
+ const duplicateNames = Object.entries(nameCounts)
60
+ .filter(([, n]) => n > 1)
61
+ .map(([name]) => name);
62
+ const spends = rows.map((r) => Number(r.spend)).sort((a, b) => a - b);
63
+ const medianSpend = spends[Math.floor(spends.length / 2)] ?? 0;
64
+ const zeroSpend = rows.filter((r) => Number(r.spend) === 0).map((r) => r.campaign_name);
65
+ const budgetOutliers = rows
66
+ .filter((r) => Number(r.spend) > 0 && Number(r.spend) < medianSpend * 0.4)
67
+ .map((r) => ({ name: r.campaign_name, spend: Number(r.spend).toFixed(2), medianSpend: medianSpend.toFixed(2) }));
68
+ const lowLpvRatio = rows
69
+ .filter((r) => Number(r.clicks) >= 5)
70
+ .map((r) => ({ name: r.campaign_name, clicks: Number(r.clicks), lpvs: lpv(r), ratio: lpv(r) / Number(r.clicks) }))
71
+ .filter((r) => r.ratio < 0.6 && r.clicks > 0);
72
+ const ranked = [...rows]
73
+ .sort((a, b) => costPerLpv(a) - costPerLpv(b))
74
+ .map((r) => ({ ...r, actions: r.actions?.map((a) => ({ ...a })) }));
75
+ const anomalies = { duplicateNames, budgetOutliers, zeroSpend, lowLpvRatio, pixel };
76
+ return {
77
+ type: "vibes.diy.res-report-campaign-health",
78
+ generatedAt: new Date().toISOString(),
79
+ dateLabel,
80
+ ranked,
81
+ anomalies,
82
+ };
83
+ }
84
+ export const reportCampaignHealthEvento = {
85
+ hash: "vibes.diy.req-report-campaign-health",
86
+ validate: unwrapMsgBase(async (msg) => {
87
+ const ret = reqReportCampaignHealth(msg.payload);
88
+ if (ret instanceof type.errors)
89
+ return Result.Ok(Option.None());
90
+ return Result.Ok(Option.Some({ ...msg, payload: ret }));
91
+ }),
92
+ handle: checkAuth(async (ctx) => {
93
+ const req = ctx.validated.payload;
94
+ const vctx = ctx.ctx.getOrThrow("vibesApiCtx");
95
+ if (hasReport(req._auth.verifiedAuth.claims, "campaign-health") === false) {
96
+ await ctx.send.send(ctx, {
97
+ type: "vibes.diy.res-error",
98
+ error: { message: "not authorized for campaign-health report", code: "report-not-authorized" },
99
+ });
100
+ return Result.Ok(EventoResult.Continue);
101
+ }
102
+ const token = vctx.metaAccessToken;
103
+ const account = vctx.metaAdAccountId;
104
+ const pixelId = vctx.metaPixelId;
105
+ if (!token || !account || !pixelId) {
106
+ await ctx.send.send(ctx, {
107
+ type: "vibes.diy.res-error",
108
+ error: {
109
+ message: "Meta API credentials not configured (META_ACCESS_TOKEN, META_AD_ACCOUNT_ID, META_PIXEL_ID)",
110
+ code: "meta-creds-missing",
111
+ },
112
+ });
113
+ return Result.Ok(EventoResult.Continue);
114
+ }
115
+ const days = req.days ?? "7";
116
+ const since = req.since;
117
+ const cacheKey = since ? `campaign-health:since:${since}` : `campaign-health:days:${days}`;
118
+ let res;
119
+ try {
120
+ res = await cachedReport(vctx, cacheKey, resReportCampaignHealth, () => fetchCampaignHealth(token, account, pixelId, days, since));
121
+ }
122
+ catch (e) {
123
+ await ctx.send.send(ctx, {
124
+ type: "vibes.diy.res-error",
125
+ error: { message: `Meta API error: ${e.message}`, code: "meta-api-error" },
126
+ });
127
+ return Result.Ok(EventoResult.Continue);
128
+ }
129
+ await ctx.send.send(ctx, res);
130
+ return Result.Ok(EventoResult.Continue);
131
+ }),
132
+ };
133
+ //# sourceMappingURL=report-campaign-health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-campaign-health.js","sourceRoot":"","sources":["../../jsr/public/report-campaign-health.ts"],"names":[],"mappings":"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"}
@@ -104,9 +104,8 @@ export const reportGrowthMembershipsEvento = {
104
104
  const vctx = ctx.ctx.getOrThrow("vibesApiCtx");
105
105
  if (hasReport(req._auth.verifiedAuth.claims, "growth") === false) {
106
106
  await ctx.send.send(ctx, {
107
- type: "vibes.diy.error",
108
- message: "not authorized for growth report",
109
- code: "report-not-authorized",
107
+ type: "vibes.diy.res-error",
108
+ error: { message: "not authorized for growth report", code: "report-not-authorized" },
110
109
  });
111
110
  return Result.Ok(EventoResult.Continue);
112
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"report-growth-memberships.js","sourceRoot":"","sources":["../../jsr/public/report-growth-memberships.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report-growth-memberships.js","sourceRoot":"","sources":["../../jsr/public/report-growth-memberships.ts"],"names":[],"mappings":"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"}
@@ -51,9 +51,8 @@ export const reportGrowthVibesWithDataEvento = {
51
51
  const vctx = ctx.ctx.getOrThrow("vibesApiCtx");
52
52
  if (hasReport(req._auth.verifiedAuth.claims, "growth") === false) {
53
53
  await ctx.send.send(ctx, {
54
- type: "vibes.diy.error",
55
- message: "not authorized for growth report",
56
- code: "report-not-authorized",
54
+ type: "vibes.diy.res-error",
55
+ error: { message: "not authorized for growth report", code: "report-not-authorized" },
57
56
  });
58
57
  return Result.Ok(EventoResult.Continue);
59
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"report-growth-vibes-with-data.js","sourceRoot":"","sources":["../../jsr/public/report-growth-vibes-with-data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report-growth-vibes-with-data.js","sourceRoot":"","sources":["../../jsr/public/report-growth-vibes-with-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { EventoHandler } from "@adviser/cement";
2
+ import { MsgBase, ReqReportTopVibesByMembers, ResReportTopVibesByMembers, VibesDiyError, W3CWebSocketEvent } from "@vibes.diy/api-types";
3
+ export declare const reportTopVibesByMembersEvento: EventoHandler<W3CWebSocketEvent, MsgBase<ReqReportTopVibesByMembers>, ResReportTopVibesByMembers | VibesDiyError>;
@@ -0,0 +1,76 @@
1
+ import { Result, Option, EventoResult } from "@adviser/cement";
2
+ import { reqReportTopVibesByMembers, resReportTopVibesByMembers, } from "@vibes.diy/api-types";
3
+ import { type } from "arktype";
4
+ import { eq } from "drizzle-orm";
5
+ import { unwrapMsgBase } from "../unwrap-msg-base.js";
6
+ import { checkAuth } from "../check-auth.js";
7
+ import { cachedReport, hasReport } from "./report-cache.js";
8
+ async function computeTopVibesByMembers(vctx) {
9
+ const t = vctx.sql.tables;
10
+ const reqRows = await vctx.sql.db
11
+ .select({
12
+ memberId: t.requestGrants.foreignUserId,
13
+ userSlug: t.requestGrants.userSlug,
14
+ appSlug: t.requestGrants.appSlug,
15
+ })
16
+ .from(t.requestGrants)
17
+ .where(eq(t.requestGrants.state, "approved"));
18
+ const invRows = await vctx.sql.db
19
+ .select({
20
+ memberId: t.inviteGrants.tokenOrGrantUserId,
21
+ userSlug: t.inviteGrants.userSlug,
22
+ appSlug: t.inviteGrants.appSlug,
23
+ })
24
+ .from(t.inviteGrants)
25
+ .where(eq(t.inviteGrants.state, "accepted"));
26
+ const vibeMembers = new Map();
27
+ for (const r of [...reqRows, ...invRows]) {
28
+ const vibeKey = `${r.userSlug}\x00${r.appSlug}`;
29
+ let members = vibeMembers.get(vibeKey);
30
+ if (members === undefined) {
31
+ members = new Set();
32
+ vibeMembers.set(vibeKey, members);
33
+ }
34
+ members.add(r.memberId);
35
+ }
36
+ const rows = [...vibeMembers.entries()]
37
+ .map(([key, members]) => {
38
+ const sep = key.indexOf("\x00");
39
+ return {
40
+ userSlug: key.slice(0, sep),
41
+ appSlug: key.slice(sep + 1),
42
+ memberCount: members.size,
43
+ };
44
+ })
45
+ .sort((a, b) => b.memberCount - a.memberCount)
46
+ .slice(0, 20);
47
+ return {
48
+ type: "vibes.diy.res-report-top-vibes-by-members",
49
+ generatedAt: new Date().toISOString(),
50
+ rows,
51
+ };
52
+ }
53
+ export const reportTopVibesByMembersEvento = {
54
+ hash: "vibes.diy.req-report-top-vibes-by-members",
55
+ validate: unwrapMsgBase(async (msg) => {
56
+ const ret = reqReportTopVibesByMembers(msg.payload);
57
+ if (ret instanceof type.errors)
58
+ return Result.Ok(Option.None());
59
+ return Result.Ok(Option.Some({ ...msg, payload: ret }));
60
+ }),
61
+ handle: checkAuth(async (ctx) => {
62
+ const req = ctx.validated.payload;
63
+ const vctx = ctx.ctx.getOrThrow("vibesApiCtx");
64
+ if (hasReport(req._auth.verifiedAuth.claims, "growth") === false) {
65
+ await ctx.send.send(ctx, {
66
+ type: "vibes.diy.res-error",
67
+ error: { message: "not authorized for growth report", code: "report-not-authorized" },
68
+ });
69
+ return Result.Ok(EventoResult.Continue);
70
+ }
71
+ const res = await cachedReport(vctx, "top-vibes-by-members", resReportTopVibesByMembers, () => computeTopVibesByMembers(vctx));
72
+ await ctx.send.send(ctx, res);
73
+ return Result.Ok(EventoResult.Continue);
74
+ }),
75
+ };
76
+ //# sourceMappingURL=report-top-vibes-by-members.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-top-vibes-by-members.js","sourceRoot":"","sources":["../../jsr/public/report-top-vibes-by-members.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,MAAM,EAAE,MAAM,EAAsC,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAClH,OAAO,EAQL,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE5D,KAAK,UAAU,wBAAwB,CAAC,IAAoB;IAC1D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;IAE1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE;SAC9B,MAAM,CAAC;QACN,QAAQ,EAAE,CAAC,CAAC,aAAa,CAAC,aAAa;QACvC,QAAQ,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ;QAClC,OAAO,EAAE,CAAC,CAAC,aAAa,CAAC,OAAO;KACjC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;SACrB,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAEhD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE;SAC9B,MAAM,CAAC;QACN,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,kBAAkB;QAC3C,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ;QACjC,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,OAAO;KAChC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;SACpB,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAG/C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QAChD,IAAI,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;YACpB,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;SACpC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE;QACtB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC3B,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;YAC3B,WAAW,EAAE,OAAO,CAAC,IAAI;SAC1B,CAAC;IACJ,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;SAC7C,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,OAAO;QACL,IAAI,EAAE,2CAA2C;QACjD,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAItC;IACF,IAAI,EAAE,2CAA2C;IACjD,QAAQ,EAAE,aAAa,CAAC,KAAK,EAAE,GAAY,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,GAAG,YAAY,IAAI,CAAC,MAAM;YAAE,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC;IACF,MAAM,EAAE,SAAS,CACf,KAAK,EACH,GAIC,EACkC,EAAE;QACrC,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;QAClC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAiB,aAAa,CAAC,CAAC;QAE/D,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC;YACjE,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACvB,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,EAAE,OAAO,EAAE,kCAAkC,EAAE,IAAI,EAAE,uBAAuB,EAAE;aACnE,CAAC,CAAC;YACtB,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,GAAG,EAAE,CAC5F,wBAAwB,CAAC,IAAI,CAAC,CAC/B,CAAC;QACF,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CACF;CACF,CAAC"}
@@ -64,9 +64,8 @@ export async function hasAccessRequest(vctx, req) {
64
64
  .limit(1);
65
65
  if (ownerRows[0]?.userId === req.foreignUserId) {
66
66
  return Result.Ok({
67
- type: "vibes.diy.error",
68
- message: `owner cannot check own app access: ${req.userSlug}/${req.appSlug}`,
69
- code: "owner-error",
67
+ type: "vibes.diy.res-error",
68
+ error: { message: `owner cannot check own app access: ${req.userSlug}/${req.appSlug}`, code: "owner-error" },
70
69
  });
71
70
  }
72
71
  return exception2Result(() => vctx.sql.db
@@ -132,25 +131,22 @@ export async function requestAccess(vctx, req, senderConnId) {
132
131
  const record = rSettings.Ok();
133
132
  if (!record) {
134
133
  return Result.Ok({
135
- type: "vibes.diy.error",
136
- message: `app not found: ${req.userSlug}/${req.appSlug}`,
137
- code: "request-access-app-not-found",
134
+ type: "vibes.diy.res-error",
135
+ error: { message: `app not found: ${req.userSlug}/${req.appSlug}`, code: "request-access-app-not-found" },
138
136
  });
139
137
  }
140
138
  if (record.userId === req.foreignUserId) {
141
139
  return Result.Ok({
142
- type: "vibes.diy.error",
143
- message: `owner cannot request access to own app: ${req.userSlug}/${req.appSlug}`,
144
- code: "owner-error",
140
+ type: "vibes.diy.res-error",
141
+ error: { message: `owner cannot request access to own app: ${req.userSlug}/${req.appSlug}`, code: "owner-error" },
145
142
  });
146
143
  }
147
144
  const settings = (record.settings ?? []);
148
145
  const enableRequest = settings.find(isEnableRequest);
149
146
  if (!enableRequest?.enable) {
150
147
  return Result.Ok({
151
- type: "vibes.diy.error",
152
- message: `access requests not enabled for ${req.userSlug}/${req.appSlug}`,
153
- code: "request-access-not-enabled",
148
+ type: "vibes.diy.res-error",
149
+ error: { message: `access requests not enabled for ${req.userSlug}/${req.appSlug}`, code: "request-access-not-enabled" },
154
150
  });
155
151
  }
156
152
  const autoAcceptRole = enableRequest.autoAcceptRole;
@@ -358,9 +354,11 @@ export const approveRequestEvento = {
358
354
  .limit(1);
359
355
  if (!existing[0]) {
360
356
  await ctx.send.send(ctx, {
361
- type: "vibes.diy.error",
362
- message: `approve-request: not found ${req.userSlug}/${req.appSlug}/${req.foreignUserId}`,
363
- code: "approve-request-not-found",
357
+ type: "vibes.diy.res-error",
358
+ error: {
359
+ message: `approve-request: not found ${req.userSlug}/${req.appSlug}/${req.foreignUserId}`,
360
+ code: "approve-request-not-found",
361
+ },
364
362
  });
365
363
  return Result.Ok(EventoResult.Continue);
366
364
  }
@@ -421,9 +419,11 @@ export const requestSetRoleEvento = {
421
419
  .then((rows) => rows[0]);
422
420
  if (!existing) {
423
421
  await ctx.send.send(ctx, {
424
- type: "vibes.diy.error",
425
- message: `request-set-role: not found ${req.userSlug}/${req.appSlug}/${req.foreignUserId}`,
426
- code: "request-set-role-not-found",
422
+ type: "vibes.diy.res-error",
423
+ error: {
424
+ message: `request-set-role: not found ${req.userSlug}/${req.appSlug}/${req.foreignUserId}`,
425
+ code: "request-set-role-not-found",
426
+ },
427
427
  });
428
428
  return Result.Ok(EventoResult.Continue);
429
429
  }