@vibes.diy/api-svc 11.1.1 → 11.1.3

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 (51) hide show
  1. package/cf-serve.js +38 -0
  2. package/cf-serve.js.map +1 -1
  3. package/evento-handler-manifest.js +2 -0
  4. package/evento-handler-manifest.js.map +1 -1
  5. package/intern/append-turn-to-chat.js +5 -2
  6. package/intern/append-turn-to-chat.js.map +1 -1
  7. package/intern/attach-draft-handle.d.ts +16 -0
  8. package/intern/attach-draft-handle.js +199 -0
  9. package/intern/attach-draft-handle.js.map +1 -0
  10. package/intern/draft-chat-store.d.ts +46 -0
  11. package/intern/draft-chat-store.js +82 -0
  12. package/intern/draft-chat-store.js.map +1 -0
  13. package/intern/ensure-chat-id.d.ts +14 -0
  14. package/intern/ensure-chat-id.js +83 -28
  15. package/intern/ensure-chat-id.js.map +1 -1
  16. package/intern/ensure-slug-binding.d.ts +21 -7
  17. package/intern/ensure-slug-binding.js +49 -70
  18. package/intern/ensure-slug-binding.js.map +1 -1
  19. package/intern/onboarding-handle.d.ts +1 -0
  20. package/intern/onboarding-handle.js +9 -9
  21. package/intern/onboarding-handle.js.map +1 -1
  22. package/intern/prompt-assembly.js +13 -1
  23. package/intern/prompt-assembly.js.map +1 -1
  24. package/package.json +11 -11
  25. package/public/attach-draft-handle.d.ts +3 -0
  26. package/public/attach-draft-handle.js +44 -0
  27. package/public/attach-draft-handle.js.map +1 -0
  28. package/public/ensure-app-slug-item.js +8 -3
  29. package/public/ensure-app-slug-item.js.map +1 -1
  30. package/public/fork-app.js +7 -4
  31. package/public/fork-app.js.map +1 -1
  32. package/public/llm-dispatch.d.ts +9 -0
  33. package/public/llm-dispatch.js +50 -11
  34. package/public/llm-dispatch.js.map +1 -1
  35. package/public/onboarding-handle.js +1 -0
  36. package/public/onboarding-handle.js.map +1 -1
  37. package/public/open-chat.js +8 -2
  38. package/public/open-chat.js.map +1 -1
  39. package/public/shared-mint.js +2 -1
  40. package/public/shared-mint.js.map +1 -1
  41. package/public/social-flow.js +5 -13
  42. package/public/social-flow.js.map +1 -1
  43. package/public/user-slug-bindings.d.ts +7 -0
  44. package/public/user-slug-bindings.js +18 -12
  45. package/public/user-slug-bindings.js.map +1 -1
  46. package/public/who-am-i.d.ts +1 -0
  47. package/public/who-am-i.js +4 -11
  48. package/public/who-am-i.js.map +1 -1
  49. package/sessions-dispatch-timing.d.ts +43 -0
  50. package/sessions-dispatch-timing.js +98 -0
  51. package/sessions-dispatch-timing.js.map +1 -0
@@ -0,0 +1,82 @@
1
+ import { exception2Result, Result } from "@adviser/cement";
2
+ import { type } from "arktype";
3
+ import { and, eq, inArray, isNotNull } from "drizzle-orm/sql/expressions";
4
+ import { DRAFT_OWNER_HANDLE } from "@vibes.diy/api-types";
5
+ const draftPreAlloc = type({
6
+ "pairs?": type({ title: "string", slug: "string" }).array(),
7
+ "skills?": "string[]",
8
+ "iconDescription?": "string",
9
+ "theme?": "string",
10
+ "enrichedPrompt?": "string",
11
+ "privacySensitive?": "boolean",
12
+ "deferred?": {
13
+ "access?": { needed: "boolean", why: "string" },
14
+ "backend?": { recommended: "boolean", why: "string" },
15
+ },
16
+ });
17
+ export function parseDraftPreAlloc(raw) {
18
+ if (raw === null || raw === undefined)
19
+ return undefined;
20
+ const parsed = draftPreAlloc(raw);
21
+ return parsed instanceof type.errors ? undefined : parsed;
22
+ }
23
+ const DRAFT_STATES = ["unowned", "turn-parked", "attached"];
24
+ function coerceState(raw) {
25
+ return DRAFT_STATES.find((s) => s === raw) ?? "unowned";
26
+ }
27
+ export async function readDraftChat(vctx, args) {
28
+ const t = vctx.sql.tables.chatContexts;
29
+ const r = await exception2Result(() => vctx.sql.db
30
+ .select({
31
+ chatId: t.chatId,
32
+ userId: t.userId,
33
+ appSlug: t.appSlug,
34
+ ownerHandle: t.ownerHandle,
35
+ draftState: t.draftState,
36
+ draftPreAlloc: t.draftPreAlloc,
37
+ })
38
+ .from(t)
39
+ .where(and(eq(t.chatId, args.chatId), isNotNull(t.draftState), ...(args.userId === undefined ? [] : [eq(t.userId, args.userId)])))
40
+ .limit(1)
41
+ .then((rows) => rows[0]));
42
+ if (r.isErr())
43
+ return Result.Err(r);
44
+ const row = r.Ok();
45
+ if (row === undefined || row.draftState === null)
46
+ return Result.Ok(undefined);
47
+ const preAlloc = parseDraftPreAlloc(row.draftPreAlloc);
48
+ return Result.Ok({
49
+ chatId: row.chatId,
50
+ userId: row.userId,
51
+ appSlug: row.appSlug,
52
+ ownerHandle: row.ownerHandle,
53
+ draftState: coerceState(row.draftState),
54
+ ...(preAlloc === undefined ? {} : { preAlloc }),
55
+ });
56
+ }
57
+ export async function claimDraftState(vctx, chatId, fromStates, toState) {
58
+ const t = vctx.sql.tables.chatContexts;
59
+ const r = await exception2Result(() => vctx.sql.db
60
+ .update(t)
61
+ .set({ draftState: toState })
62
+ .where(and(eq(t.chatId, chatId), inArray(t.draftState, fromStates)))
63
+ .returning({ chatId: t.chatId }));
64
+ if (r.isErr())
65
+ return Result.Err(r);
66
+ return Result.Ok(r.Ok().length > 0);
67
+ }
68
+ export async function insertDraftChat(vctx, args) {
69
+ const r = await exception2Result(() => vctx.sql.db.insert(vctx.sql.tables.chatContexts).values({
70
+ chatId: args.chatId,
71
+ userId: args.userId,
72
+ appSlug: args.appSlug,
73
+ ownerHandle: DRAFT_OWNER_HANDLE,
74
+ created: new Date().toISOString(),
75
+ draftState: "unowned",
76
+ ...(args.preAlloc === undefined ? {} : { draftPreAlloc: args.preAlloc }),
77
+ }));
78
+ if (r.isErr())
79
+ return Result.Err(r);
80
+ return Result.Ok(undefined);
81
+ }
82
+ //# sourceMappingURL=draft-chat-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-chat-store.js","sourceRoot":"","sources":["../../jsr/intern/draft-chat-store.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { VibesApiSQLCtx } from "../types.js";
2
2
  import { Result } from "@adviser/cement";
3
+ import { type PreAllocateResult } from "./pre-allocate.js";
3
4
  import { ReqOpenChat, ReqWithVerifiedAuth } from "@vibes.diy/api-types";
4
5
  export declare const DRY_RUN_PLACEHOLDER_HANDLE = "dry-run-preview";
5
6
  export declare const DRY_RUN_PLACEHOLDER_APP_SLUG = "dry-run-preview";
@@ -14,8 +15,21 @@ interface EnsureChatIdPResult {
14
15
  appSlug: string;
15
16
  ownerHandle: string;
16
17
  chatId: string;
18
+ draft?: boolean;
17
19
  chatCreated?: boolean;
18
20
  }
19
21
  export declare function dryRunHandleIsForeign(ctx: VibesApiSQLCtx, handle: string, userId: string): Promise<Result<boolean>>;
20
22
  export declare function ensureChatId(ctx: VibesApiSQLCtx, req: ReqWithVerifiedAuth<ReqOpenChat>): Promise<Result<EnsureChatIdPResult>>;
23
+ export declare function writePreAllocActiveEntries(ctx: VibesApiSQLCtx, { userId, ownerHandle, appSlug, title, skills, iconDescription, theme, enrichedPrompt, privacySensitive, deferred, }: {
24
+ userId: string;
25
+ ownerHandle: string;
26
+ appSlug: string;
27
+ title?: string;
28
+ skills?: string[];
29
+ iconDescription?: string;
30
+ theme?: string;
31
+ enrichedPrompt?: string;
32
+ privacySensitive?: boolean;
33
+ deferred?: PreAllocateResult["deferred"];
34
+ }): Promise<void>;
21
35
  export {};
@@ -1,11 +1,14 @@
1
1
  import { and, desc, eq } from "drizzle-orm/sql/expressions";
2
2
  import { exception2Result, Result } from "@adviser/cement";
3
3
  import { ensureLogger } from "@vibes.diy/identity";
4
- import { ensureUserSlug, ensureAppSlug, getDefaultUserSlug, persistDefaultUserSlug, resolveAdminOwnerBinding, toRFC2822_32ByteLength, } from "./ensure-slug-binding.js";
4
+ import { resolveUserHandleBinding, ensureAppSlug, getDefaultUserSlug, persistDefaultUserSlug, resolveAdminOwnerBinding, toRFC2822_32ByteLength, } from "./ensure-slug-binding.js";
5
5
  import { preAllocate } from "./pre-allocate.js";
6
+ import { insertDraftChat } from "./draft-chat-store.js";
6
7
  import { upsertPendingMintJob } from "./mint-job-store.js";
8
+ import { generate } from "random-words";
7
9
  import { resolveDeveloperAccess } from "../public/developer-grants.js";
8
10
  import { writeAppSettingItems } from "../public/app-setting-items.js";
11
+ import { DRAFT_OWNER_HANDLE, HANDLE_REQUIRED_CODE, HANDLE_REQUIRED_MESSAGE, isDraftOwnerHandle, mkResError, } from "@vibes.diy/api-types";
9
12
  export const DRY_RUN_PLACEHOLDER_HANDLE = "dry-run-preview";
10
13
  export const DRY_RUN_PLACEHOLDER_APP_SLUG = "dry-run-preview";
11
14
  export function preAllocEligible(req) {
@@ -87,6 +90,7 @@ export async function ensureChatId(ctx, req) {
87
90
  let ownerHandle = "";
88
91
  let chatId;
89
92
  let chatCreated = false;
93
+ let draft = false;
90
94
  const userId = req._auth.verifiedAuth.claims.userId;
91
95
  if (req.dryRun === true && !req.chatId) {
92
96
  return dryRunResolveChatId(ctx, req);
@@ -110,14 +114,17 @@ export async function ensureChatId(ctx, req) {
110
114
  }
111
115
  else {
112
116
  if (req.ownerHandle) {
113
- const resUser = await ensureUserSlug(ctx, req._auth.verifiedAuth.claims, {
117
+ const resUser = await resolveUserHandleBinding(ctx, req._auth.verifiedAuth.claims, {
114
118
  userId,
115
119
  ownerHandle: req.ownerHandle,
116
120
  appSlug: req.appSlug,
117
121
  });
118
122
  if (resUser.isErr())
119
123
  return Result.Err(`Failed to ensure ownerHandle: ${resUser.Err().message}`);
120
- ownerHandle = resUser.Ok().ownerHandle;
124
+ const resolved = resUser.Ok();
125
+ if (resolved.status === "needs-handle")
126
+ return Result.Err(mkResError(HANDLE_REQUIRED_MESSAGE, HANDLE_REQUIRED_CODE));
127
+ ownerHandle = resolved.binding.ownerHandle;
121
128
  }
122
129
  else {
123
130
  const resDefault = await getDefaultUserSlug(ctx, userId);
@@ -128,11 +135,20 @@ export async function ensureChatId(ctx, req) {
128
135
  ownerHandle = defaultBinding.ownerHandle;
129
136
  }
130
137
  else {
131
- const resNew = await ensureUserSlug(ctx, req._auth.verifiedAuth.claims, { userId });
138
+ const resNew = await resolveUserHandleBinding(ctx, req._auth.verifiedAuth.claims, { userId });
132
139
  if (resNew.isErr())
133
140
  return Result.Err(`Failed to ensure ownerHandle: ${resNew.Err().message}`);
134
- ownerHandle = resNew.Ok().ownerHandle;
135
- await persistDefaultUserSlug(ctx, userId, ownerHandle);
141
+ const resolvedNew = resNew.Ok();
142
+ if (resolvedNew.status === "needs-handle") {
143
+ if (req.allowDraft !== true)
144
+ return Result.Err(mkResError(HANDLE_REQUIRED_MESSAGE, HANDLE_REQUIRED_CODE));
145
+ draft = true;
146
+ ownerHandle = DRAFT_OWNER_HANDLE;
147
+ }
148
+ else {
149
+ ownerHandle = resolvedNew.binding.ownerHandle;
150
+ await persistDefaultUserSlug(ctx, userId, ownerHandle);
151
+ }
136
152
  }
137
153
  }
138
154
  if (req.appSlug) {
@@ -171,20 +187,44 @@ export async function ensureChatId(ctx, req) {
171
187
  console.warn("preAllocate failed; falling through to random-words:", rPre.Err());
172
188
  }
173
189
  }
174
- const resApp = await ensureAppSlug(ctx, { userId, ownerHandle, appSlug: req.appSlug, preferredPairs });
175
- if (resApp.isErr()) {
176
- return Result.Err(`Failed to ensure appSlug: ${resApp.Err().message}`);
190
+ let chosenTitle;
191
+ if (draft) {
192
+ appSlug = proposeDraftAppSlug(ctx, req.appSlug, preferredPairs);
193
+ chatId = ctx.sthis.nextId(12).str;
194
+ const rDraft = await insertDraftChat(ctx, {
195
+ chatId,
196
+ userId,
197
+ appSlug,
198
+ preAlloc: {
199
+ ...(preferredPairs === undefined ? {} : { pairs: preferredPairs }),
200
+ ...(preAllocSkills === undefined ? {} : { skills: preAllocSkills }),
201
+ ...(preAllocIconDescription === undefined ? {} : { iconDescription: preAllocIconDescription }),
202
+ ...(preAllocTheme === undefined ? {} : { theme: preAllocTheme }),
203
+ ...(preAllocEnrichedPrompt === undefined ? {} : { enrichedPrompt: preAllocEnrichedPrompt }),
204
+ ...(preAllocPrivacySensitive === undefined ? {} : { privacySensitive: preAllocPrivacySensitive }),
205
+ ...(preAllocDeferred === undefined ? {} : { deferred: preAllocDeferred }),
206
+ },
207
+ });
208
+ if (rDraft.isErr()) {
209
+ return Result.Err(`Failed to create draft chat: ${rDraft.Err().message}`);
210
+ }
211
+ }
212
+ else {
213
+ const resApp = await ensureAppSlug(ctx, { userId, ownerHandle, appSlug: req.appSlug, preferredPairs });
214
+ if (resApp.isErr()) {
215
+ return Result.Err(`Failed to ensure appSlug: ${resApp.Err().message}`);
216
+ }
217
+ appSlug = resApp.Ok().appSlug;
218
+ chosenTitle = resApp.Ok().chosenTitle;
219
+ chatId = ctx.sthis.nextId(12).str;
220
+ await ctx.sql.db.insert(ctx.sql.tables.chatContexts).values({
221
+ chatId,
222
+ userId,
223
+ appSlug,
224
+ ownerHandle,
225
+ created: new Date().toISOString(),
226
+ });
177
227
  }
178
- appSlug = resApp.Ok().appSlug;
179
- const chosenTitle = resApp.Ok().chosenTitle;
180
- chatId = ctx.sthis.nextId(12).str;
181
- await ctx.sql.db.insert(ctx.sql.tables.chatContexts).values({
182
- chatId,
183
- userId,
184
- appSlug,
185
- ownerHandle,
186
- created: new Date().toISOString(),
187
- });
188
228
  if (preAllocEligible(req)) {
189
229
  const mintPrompt = req.prompt;
190
230
  void upsertPendingMintJob(ctx, { chatId, userId, ownerHandle, appSlug, prompt: mintPrompt }).then((rJob) => {
@@ -198,13 +238,14 @@ export async function ensureChatId(ctx, req) {
198
238
  }
199
239
  });
200
240
  }
201
- if (chosenTitle !== undefined ||
202
- (preAllocSkills !== undefined && preAllocSkills.length > 0) ||
203
- preAllocIconDescription !== undefined ||
204
- preAllocTheme !== undefined ||
205
- preAllocEnrichedPrompt !== undefined ||
206
- preAllocPrivacySensitive === true ||
207
- preAllocDeferred !== undefined) {
241
+ if (!draft &&
242
+ (chosenTitle !== undefined ||
243
+ (preAllocSkills !== undefined && preAllocSkills.length > 0) ||
244
+ preAllocIconDescription !== undefined ||
245
+ preAllocTheme !== undefined ||
246
+ preAllocEnrichedPrompt !== undefined ||
247
+ preAllocPrivacySensitive === true ||
248
+ preAllocDeferred !== undefined)) {
208
249
  await writePreAllocActiveEntries(ctx, {
209
250
  userId,
210
251
  ownerHandle,
@@ -220,9 +261,23 @@ export async function ensureChatId(ctx, req) {
220
261
  }
221
262
  }
222
263
  }
223
- return Result.Ok({ appSlug, ownerHandle, chatId, chatCreated });
264
+ const isDraft = draft || isDraftOwnerHandle(ownerHandle);
265
+ return Result.Ok({ appSlug, ownerHandle, chatId, chatCreated, ...(isDraft ? { draft: true } : {}) });
266
+ }
267
+ function proposeDraftAppSlug(ctx, explicit, preferredPairs) {
268
+ const candidates = [
269
+ ...(explicit === undefined ? [] : [explicit]),
270
+ ...(preferredPairs ?? []).map((p) => p.slug),
271
+ generate({ exactly: 1, wordsPerString: 3, separator: "-" })[0],
272
+ ];
273
+ for (const candidate of candidates) {
274
+ const sanitized = toRFC2822_32ByteLength(candidate);
275
+ if (sanitized.length > 0)
276
+ return sanitized;
277
+ }
278
+ return `draft-${toRFC2822_32ByteLength(ctx.sthis.nextId(8).str)}`;
224
279
  }
225
- async function writePreAllocActiveEntries(ctx, { userId, ownerHandle, appSlug, title, skills, iconDescription, theme, enrichedPrompt, privacySensitive, deferred, }) {
280
+ export async function writePreAllocActiveEntries(ctx, { userId, ownerHandle, appSlug, title, skills, iconDescription, theme, enrichedPrompt, privacySensitive, deferred, }) {
226
281
  const entries = [];
227
282
  if (title) {
228
283
  entries.push({ type: "active.title", title });
@@ -1 +1 @@
1
- {"version":3,"file":"ensure-chat-id.js","sourceRoot":"","sources":["../../jsr/intern/ensure-chat-id.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ensure-chat-id.js","sourceRoot":"","sources":["../../jsr/intern/ensure-chat-id.ts"],"names":[],"mappings":"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"}
@@ -6,13 +6,21 @@ export type AppSlugBindingParam = Partial<NeedOneAppSlugUserSlug> & {
6
6
  userId: string;
7
7
  claims: ClerkClaim;
8
8
  };
9
- export declare function writeHandleBinding(ctx: VibesApiSQLCtx, userId: string, ownerHandle: string): Promise<Result<HandleBinding>>;
9
+ declare const boundHandleBrand: unique symbol;
10
+ export type BoundHandle = HandleBinding & {
11
+ readonly [boundHandleBrand]: true;
12
+ };
13
+ export type HandleResolution = {
14
+ readonly status: "bound";
15
+ readonly binding: BoundHandle;
16
+ } | {
17
+ readonly status: "needs-handle";
18
+ };
19
+ export declare function writeHandleBinding(ctx: VibesApiSQLCtx, userId: string, ownerHandle: string): Promise<Result<BoundHandle>>;
10
20
  export declare function ownerHandleFromClaims(claims: ClerkClaim): string[];
11
- export declare function deterministicUserSlugCandidate(userId: string): string;
12
- export declare function silentMintCandidates(userId: string): string[];
13
- export declare function ensureUserSlug(ctx: VibesApiSQLCtx, claims: ClerkClaim, binding: (OptAppSlugOptUserSlug | OptAppSlugUserSlug | AppSlugOptUserSlug | AppSlugUserSlug) & {
21
+ export declare function resolveUserHandleBinding(ctx: VibesApiSQLCtx, claims: ClerkClaim, binding: (OptAppSlugOptUserSlug | OptAppSlugUserSlug | AppSlugOptUserSlug | AppSlugUserSlug) & {
14
22
  userId: string;
15
- }): Promise<Result<HandleBinding>>;
23
+ }): Promise<Result<HandleResolution>>;
16
24
  export declare function writeAppSlugBinding(ctx: VibesApiSQLCtx, userId: string, ownerHandle: string, appSlug: string): Promise<Result<AppSlugBinding>>;
17
25
  export declare function ensureAppSlug(ctx: VibesApiSQLCtx, binding: (OptAppSlugUserSlug | AppSlugUserSlug) & {
18
26
  userId: string;
@@ -37,11 +45,17 @@ export declare function claimForkAppSlug(ctx: VibesApiSQLCtx, args: {
37
45
  export declare function allocateForkAppSlug(claim: (appSlug: string) => Promise<Result<ForkSlugClaim>>, candidates: string[]): Promise<Result<string>>;
38
46
  export declare function getDefaultUserSlug(ctx: VibesApiSQLCtx, userId: string): Promise<Result<HandleBinding | undefined>>;
39
47
  export declare function persistDefaultUserSlug(ctx: VibesApiSQLCtx, userId: string, ownerHandle: string): Promise<void>;
40
- export declare function ensureSlugBinding(ctx: VibesApiSQLCtx, binding: AppSlugBindingParam): Promise<Result<AppHandleBinding>>;
48
+ export type AppHandleResolution = {
49
+ readonly status: "bound";
50
+ readonly binding: AppHandleBinding;
51
+ } | {
52
+ readonly status: "needs-handle";
53
+ };
54
+ export declare function ensureSlugBinding(ctx: VibesApiSQLCtx, binding: AppSlugBindingParam): Promise<Result<AppHandleResolution>>;
41
55
  export declare function resolveAdminOwnerBinding(ctx: VibesApiSQLCtx, args: {
42
56
  callerUserId: string;
43
57
  requestedOwnerHandle: string;
44
58
  sanitizedOwnerHandle: string;
45
59
  appSlug: string | undefined;
46
- }): Promise<HandleBinding | null>;
60
+ }): Promise<BoundHandle | null>;
47
61
  export { toRFC2822_32ByteLength };
@@ -2,7 +2,7 @@ import { exception2Result, Result } from "@adviser/cement";
2
2
  import { generate } from "random-words";
3
3
  import { and, eq } from "drizzle-orm/sql/expressions";
4
4
  import { sql } from "drizzle-orm/sql";
5
- import { isUserSettingDefaultHandle, userSettingItem, parseArrayWarning, } from "@vibes.diy/api-types";
5
+ import { isReservedHandle, isUserSettingDefaultHandle, userSettingItem, parseArrayWarning, } from "@vibes.diy/api-types";
6
6
  import { ensureLogger } from "@vibes.diy/identity";
7
7
  import { toRFC2822_32ByteLength } from "@vibes.diy/vibe-types";
8
8
  import { matchInvitesToNewHandle } from "../public/social-invite-signup-match.js";
@@ -20,20 +20,26 @@ async function runSignupInviteMatch(ctx, input) {
20
20
  if (r.isErr())
21
21
  console.error("[social-invite] signup contact-match failed (isolated):", r.Err());
22
22
  }
23
+ function asBoundHandle(binding) {
24
+ return binding;
25
+ }
23
26
  export async function writeHandleBinding(ctx, userId, ownerHandle) {
24
27
  return exception2Result(async () => {
28
+ if (isReservedHandle(ownerHandle)) {
29
+ return Result.Err(`ownerHandle "${ownerHandle}" is reserved`);
30
+ }
25
31
  const existing = await ctx.sql.db
26
32
  .select()
27
33
  .from(ctx.sql.tables.handleBinding)
28
34
  .where(eq(ctx.sql.tables.handleBinding.userId, userId));
29
35
  const owned = existing.find((e) => e.handle === ownerHandle);
30
36
  if (owned) {
31
- return Result.Ok({
37
+ return Result.Ok(asBoundHandle({
32
38
  type: "vibes.diy-user-slug-binding",
33
39
  userId,
34
40
  ownerHandle: owned.handle,
35
41
  tenant: owned.tenant,
36
- });
42
+ }));
37
43
  }
38
44
  if (existing.length >= ctx.params.maxUserSlugPerUserId) {
39
45
  return Result.Err("maximum ownerHandle bindings reached for this userId");
@@ -57,12 +63,12 @@ export async function writeHandleBinding(ctx, userId, ownerHandle) {
57
63
  if (!owner || owner.userId !== userId) {
58
64
  return Result.Err(`ownerHandle "${ownerHandle}" is owned by another user`);
59
65
  }
60
- return Result.Ok({
66
+ return Result.Ok(asBoundHandle({
61
67
  type: "vibes.diy-user-slug-binding",
62
68
  userId,
63
69
  ownerHandle,
64
70
  tenant: owner.tenant,
65
- });
71
+ }));
66
72
  });
67
73
  }
68
74
  export function ownerHandleFromClaims(claims) {
@@ -87,68 +93,26 @@ export function ownerHandleFromClaims(claims) {
87
93
  }
88
94
  return result;
89
95
  }
90
- export function deterministicUserSlugCandidate(userId) {
91
- let h = 0;
92
- for (let i = 0; i < userId.length; i = i + 1) {
93
- h = (h * 31 + userId.charCodeAt(i)) >>> 0;
94
- }
95
- return `vibe-${h.toString(36)}`;
96
- }
97
- export function silentMintCandidates(userId) {
98
- return [
99
- ...new Array(5).fill(0).map(() => generate({ exactly: 1, wordsPerString: 3, separator: "-" })[0]),
100
- deterministicUserSlugCandidate(userId),
101
- ];
102
- }
103
- export async function ensureUserSlug(ctx, claims, binding) {
96
+ export async function resolveUserHandleBinding(ctx, claims, binding) {
104
97
  return exception2Result(async () => {
105
98
  if (!binding.ownerHandle) {
106
99
  const existingForUser = await ctx.sql.db
107
100
  .select()
108
101
  .from(ctx.sql.tables.handleBinding)
109
102
  .where(eq(ctx.sql.tables.handleBinding.userId, binding.userId));
110
- if (existingForUser.length >= ctx.params.maxUserSlugPerUserId) {
111
- return Result.Err("maximum ownerHandle bindings reached for this userId");
112
- }
113
103
  if (existingForUser.length > 0) {
114
104
  const earliest = [...existingForUser].sort((a, b) => a.created.localeCompare(b.created) || a.handle.localeCompare(b.handle))[0];
115
105
  return Result.Ok({
116
- type: "vibes.diy-user-slug-binding",
117
- userId: binding.userId,
118
- ownerHandle: earliest.handle,
119
- tenant: earliest.tenant,
106
+ status: "bound",
107
+ binding: asBoundHandle({
108
+ type: "vibes.diy-user-slug-binding",
109
+ userId: binding.userId,
110
+ ownerHandle: earliest.handle,
111
+ tenant: earliest.tenant,
112
+ }),
120
113
  });
121
114
  }
122
- const ownerHandleCandidates = silentMintCandidates(binding.userId);
123
- for (const tryUserSlug of ownerHandleCandidates) {
124
- const sanitizedUserSlug = toRFC2822_32ByteLength(tryUserSlug);
125
- if (!sanitizedUserSlug) {
126
- continue;
127
- }
128
- const existing = await ctx.sql.db
129
- .select()
130
- .from(ctx.sql.tables.handleBinding)
131
- .where(eq(ctx.sql.tables.handleBinding.handle, sanitizedUserSlug))
132
- .limit(1)
133
- .then((r) => r[0]);
134
- if (existing) {
135
- if (existing.userId === binding.userId) {
136
- return Result.Ok({
137
- type: "vibes.diy-user-slug-binding",
138
- userId: binding.userId,
139
- ownerHandle: existing.handle,
140
- tenant: existing.tenant,
141
- });
142
- }
143
- continue;
144
- }
145
- const rWrite = await writeHandleBinding(ctx, binding.userId, sanitizedUserSlug);
146
- if (rWrite.isOk()) {
147
- await runSignupInviteMatch(ctx, { claims, userId: binding.userId, ownerHandle: sanitizedUserSlug });
148
- return rWrite;
149
- }
150
- }
151
- return Result.Err("could not generate unique ownerHandle after attempts");
115
+ return Result.Ok({ status: "needs-handle" });
152
116
  }
153
117
  const sanitizedUserSlug = toRFC2822_32ByteLength(binding.ownerHandle);
154
118
  const existing = await ctx.sql.db
@@ -161,7 +125,7 @@ export async function ensureUserSlug(ctx, claims, binding) {
161
125
  const rWrite = await writeHandleBinding(ctx, binding.userId, sanitizedUserSlug);
162
126
  if (rWrite.isOk()) {
163
127
  await runSignupInviteMatch(ctx, { claims, userId: binding.userId, ownerHandle: sanitizedUserSlug });
164
- return rWrite;
128
+ return Result.Ok({ status: "bound", binding: rWrite.Ok() });
165
129
  }
166
130
  const devOwner = await resolveDeveloperOwnerBinding(ctx, {
167
131
  callerUserId: binding.userId,
@@ -169,7 +133,7 @@ export async function ensureUserSlug(ctx, claims, binding) {
169
133
  appSlug: binding.appSlug,
170
134
  });
171
135
  if (devOwner !== null)
172
- return Result.Ok(devOwner);
136
+ return Result.Ok({ status: "bound", binding: devOwner });
173
137
  const adminOwner = await resolveAdminOwnerBinding(ctx, {
174
138
  callerUserId: binding.userId,
175
139
  requestedOwnerHandle: binding.ownerHandle,
@@ -177,20 +141,23 @@ export async function ensureUserSlug(ctx, claims, binding) {
177
141
  appSlug: binding.appSlug,
178
142
  });
179
143
  if (adminOwner === null)
180
- return rWrite;
144
+ return Result.Err(rWrite.Err());
181
145
  logAdminWriteOverride(ctx, {
182
146
  op: "source-write",
183
147
  actingUserId: binding.userId,
184
148
  ownerHandle: sanitizedUserSlug,
185
149
  appSlug: binding.appSlug ?? "",
186
150
  });
187
- return Result.Ok(adminOwner);
151
+ return Result.Ok({ status: "bound", binding: adminOwner });
188
152
  }
189
153
  return Result.Ok({
190
- type: "vibes.diy-user-slug-binding",
191
- userId: binding.userId,
192
- ownerHandle: existing.handle,
193
- tenant: existing.tenant,
154
+ status: "bound",
155
+ binding: asBoundHandle({
156
+ type: "vibes.diy-user-slug-binding",
157
+ userId: binding.userId,
158
+ ownerHandle: existing.handle,
159
+ tenant: existing.tenant,
160
+ }),
194
161
  });
195
162
  });
196
163
  }
@@ -398,21 +365,28 @@ export async function persistDefaultUserSlug(ctx, userId, ownerHandle) {
398
365
  }
399
366
  }
400
367
  export async function ensureSlugBinding(ctx, binding) {
401
- const rUserSlug = await ensureUserSlug(ctx, binding.claims, binding);
368
+ const rUserSlug = await resolveUserHandleBinding(ctx, binding.claims, binding);
402
369
  if (rUserSlug.isErr()) {
403
370
  return Result.Err(rUserSlug);
404
371
  }
372
+ const resolution = rUserSlug.Ok();
373
+ if (resolution.status === "needs-handle") {
374
+ return Result.Ok({ status: "needs-handle" });
375
+ }
405
376
  const rAppSlug = await ensureAppSlug(ctx, {
406
377
  ...binding,
407
- ownerHandle: rUserSlug.Ok().ownerHandle,
378
+ ownerHandle: resolution.binding.ownerHandle,
408
379
  });
409
380
  if (rAppSlug.isErr()) {
410
381
  return Result.Err(rAppSlug);
411
382
  }
412
383
  return Result.Ok({
413
- type: "vibes.diy-app-user-slug-binding",
414
- ownerHandle: rUserSlug.Ok(),
415
- appSlug: rAppSlug.Ok(),
384
+ status: "bound",
385
+ binding: {
386
+ type: "vibes.diy-app-user-slug-binding",
387
+ ownerHandle: resolution.binding,
388
+ appSlug: rAppSlug.Ok(),
389
+ },
416
390
  });
417
391
  }
418
392
  async function resolveDeveloperOwnerBinding(ctx, args) {
@@ -450,7 +424,12 @@ async function lookupOwnerHandleBinding(ctx, sanitizedOwnerHandle) {
450
424
  .then((r) => r[0]);
451
425
  if (owner === undefined)
452
426
  return null;
453
- return { type: "vibes.diy-user-slug-binding", userId: owner.userId, ownerHandle: sanitizedOwnerHandle, tenant: owner.tenant };
427
+ return asBoundHandle({
428
+ type: "vibes.diy-user-slug-binding",
429
+ userId: owner.userId,
430
+ ownerHandle: sanitizedOwnerHandle,
431
+ tenant: owner.tenant,
432
+ });
454
433
  }
455
434
  export { toRFC2822_32ByteLength };
456
435
  //# sourceMappingURL=ensure-slug-binding.js.map