@vibes.diy/api-svc 2.0.3 → 2.0.6

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 (50) hide show
  1. package/create-handler.js +4 -0
  2. package/create-handler.js.map +1 -1
  3. package/index.d.ts +1 -0
  4. package/index.js +1 -0
  5. package/index.js.map +1 -1
  6. package/intern/ensure-chat-id.js +64 -1
  7. package/intern/ensure-chat-id.js.map +1 -1
  8. package/intern/ensure-slug-binding.d.ts +8 -1
  9. package/intern/ensure-slug-binding.js +71 -40
  10. package/intern/ensure-slug-binding.js.map +1 -1
  11. package/intern/grouped-vibe-import-map.d.ts +2 -22
  12. package/intern/grouped-vibe-import-map.js +3 -23
  13. package/intern/grouped-vibe-import-map.js.map +1 -1
  14. package/intern/pre-allocate.d.ts +12 -0
  15. package/intern/pre-allocate.js +56 -0
  16. package/intern/pre-allocate.js.map +1 -0
  17. package/intern/write-apps.js +16 -3
  18. package/intern/write-apps.js.map +1 -1
  19. package/models.json +19 -6
  20. package/package.json +11 -10
  21. package/public/app-documents.d.ts +7 -0
  22. package/public/app-documents.js +210 -0
  23. package/public/app-documents.js.map +1 -0
  24. package/public/ensure-app-settings.js +25 -2
  25. package/public/ensure-app-settings.js.map +1 -1
  26. package/public/fork-app.d.ts +5 -0
  27. package/public/fork-app.js +287 -0
  28. package/public/fork-app.js.map +1 -0
  29. package/public/open-chat.js +1 -0
  30. package/public/open-chat.js.map +1 -1
  31. package/public/prompt-chat-section.d.ts +5 -3
  32. package/public/prompt-chat-section.js +324 -41
  33. package/public/prompt-chat-section.js.map +1 -1
  34. package/public/request-flow.d.ts +5 -0
  35. package/public/request-flow.js +33 -0
  36. package/public/request-flow.js.map +1 -1
  37. package/svc-ws-send-provider.d.ts +1 -0
  38. package/svc-ws-send-provider.js +1 -0
  39. package/svc-ws-send-provider.js.map +1 -1
  40. package/types.d.ts +1 -0
  41. package/types.js.map +1 -1
  42. package/usage-report/inspect-db-report-template.d.ts +4 -0
  43. package/usage-report/inspect-db-report-template.js +25 -7
  44. package/usage-report/inspect-db-report-template.js.map +1 -1
  45. package/usage-report/inspect-db-report.js +25 -0
  46. package/usage-report/inspect-db-report.js.map +1 -1
  47. package/vibes-msg-evento.js +3 -1
  48. package/vibes-msg-evento.js.map +1 -1
  49. package/intern/import-map.ts-off +0 -405
  50. package/intern/invite-system.ts-off +0 -392
@@ -1,405 +0,0 @@
1
- import { exception2Result } from "@adviser/cement";
2
- import { VibesImportMap } from "@vibes.diy/api-types";
3
- import * as semver from "semver";
4
-
5
- const lockedGroupsVersions = {
6
- tailwindcss: {
7
- tailwindcss: "version:TAILWINDCSS",
8
- },
9
- fireproof: {
10
- "@adviser/cement": "version:ADVISER_CEMENT",
11
- yaml: "version:YAML",
12
- multiformats: "version:MULTIFORMATS",
13
- cborg: "version:CBORG",
14
- "cborg/json": "version:CBORG",
15
- "cborg/length": "version:CBORG",
16
- zod: "version:ZOD",
17
- arktype: "version:ARKTYPE",
18
- jose: "version:JOSE",
19
- "jose/jwt/decode": "version:JOSE",
20
- dompurify: "version:DOMPURIFY",
21
- "@fireproof/core-base": "version:FP",
22
- "@fireproof/core-blockstore": "version:FP",
23
- "@fireproof/core-cli": "version:FP",
24
- "@fireproof/core-device-id": "version:FP",
25
- "@fireproof/core-gateways-base": "version:FP",
26
- "@fireproof/core-gateways-cloud": "version:FP",
27
- "@fireproof/core-gateways-file-deno": "version:FP",
28
- "@fireproof/core-gateways-file-node": "version:FP",
29
- "@fireproof/core-gateways-file": "version:FP",
30
- "@fireproof/core-gateways-indexeddb": "version:FP",
31
- "@fireproof/core-gateways-memory": "version:FP",
32
- "@fireproof/core-keybag": "version:FP",
33
- "@fireproof/core-protocols-cloud": "version:FP",
34
- "@fireproof/core-protocols-dashboard": "version:FP",
35
- "@fireproof/core-runtime": "version:FP",
36
- "@fireproof/core-types-base": "version:FP",
37
- "@fireproof/core-types-blockstore": "version:FP",
38
- "@fireproof/core-types-protocols-cloud": "version:FP",
39
- "@fireproof/core-types-runtime": "version:FP",
40
- "@fireproof/core": "version:FP",
41
- "@fireproof/vendor": "version:FP",
42
- "@fireproof/use-fireproof": "version:FP,dep:react",
43
- "use-fireproof": "version:FP",
44
-
45
- // deps=react@19.2.1,react-dom@19.2.1
46
- },
47
- react: {
48
- react: "version:REACT",
49
- "react-dom": "version:REACT",
50
- },
51
- "react-dom-helpers": {
52
- "react-dom/client": "version:REACT",
53
- "react/jsx-runtime": "version:REACT",
54
- "react/jsx-dev-runtime": "version:REACT",
55
- },
56
- "vibe-runtime": {
57
- "@vibes.diy/base": "privateNpm:,dep:react",
58
- "@vibes.diy/vibe-runtime": "privateNpm:,dep:react",
59
-
60
- // "@vibes.diy/call-ai-v2": "privateNpm:",
61
- // "use-vibes": "privateNpm:",
62
- // "use-fireproof": "privateNpm:",
63
- // "@vibes.diy/prompts": "privateNpm:",
64
- // what the fuck
65
- // "@vibes.diy/use-vibes-base": "privateNpm:",
66
- // "call-ai": "privateNpm:",
67
- },
68
- };
69
-
70
- const reScopedPkg = /^(@[^/]+\/[^/]+)(\/.*)?$/;
71
- const rePkg = /^([^/@]+)(\/.*)?$/;
72
-
73
- interface ImportMap {
74
- imports: Record<string, string>;
75
- }
76
-
77
- interface ParsedVersion {
78
- version: string; // defaults to "LATEST" if not set or empty
79
- privateNpm: boolean; // true if "privateNpm:" is present
80
- dep: string[]; // always an array, e.g., ["react", "react-dom"]
81
- semVersion?: string; // if a semver version is detected
82
- }
83
-
84
-
85
- function lockedGroupsVersions2ImportMap(lockedGroupsVersions: Record<string, Record<string, string>>): ImportMap {
86
- const imports: Record<string, string> = {};
87
-
88
- for (const group of Object.values(lockedGroupsVersions)) {
89
- for (const [pkg, version] of Object.entries(group)) {
90
- imports[pkg] = version;
91
- }
92
- }
93
-
94
- return { imports };
95
- }
96
-
97
- export function packageName(key: string): { pkg: string; suffix?: string } {
98
- // For scoped packages, return the first two segments, otherwise return the first segment
99
- const scopedMatch = reScopedPkg.exec(key);
100
- if (scopedMatch) {
101
- return { pkg: scopedMatch[1], suffix: scopedMatch[2] }; // Returns @scope/package
102
- }
103
- const unscopedMatch = rePkg.exec(key);
104
- if (unscopedMatch) {
105
- return { pkg: unscopedMatch[1], suffix: unscopedMatch[2] }; // Returns package
106
- }
107
- return { pkg: key }; // Fallback to the original key if no match
108
- }
109
-
110
- interface ImportMapOptions {
111
- genImport: VibesImportMap;
112
- version: Record<string, string>;
113
- fetchPkgVersion(pkg: string): Promise<string | undefined>;
114
- resolveVersionImportMap(pkg: string, version: string, deps: Record<string, string>): string;
115
- }
116
-
117
- export async function genImportMap(opts: ImportMapOptions): Promise<ImportMap> {
118
- const lockedImportMap = lockedGroupsVersions2ImportMap(lockedGroupsVersions);
119
- // console.log("Locked import map:", lockedImportMap, "genImport:", opts.genImport.imports);
120
- for (const [pkg, ver] of Object.entries(opts.genImport.imports)) {
121
- if (ver.startsWith("vibed:")) {
122
- const { pkg: pkgName } = packageName(pkg);
123
- if (lockedImportMap.imports[pkgName]) {
124
- opts.genImport.imports[pkg] = lockedImportMap.imports[pkg];
125
- } else {
126
- opts.genImport.imports[pkg] = "version:LATEST";
127
- }
128
- }
129
- }
130
- const mergedImports = { ...lockedImportMap.imports, ...opts.genImport.imports };
131
- // console.log("Merged import map:", "genImport:", opts.genImport.imports);
132
- for (const [pkg, ver] of Object.entries(mergedImports)) {
133
- const parsed = parseVersionString(ver);
134
- if (!parsed.semVersion) {
135
- if (opts.version[parsed.version]) {
136
- mergedImports[pkg] = opts.resolveVersionImportMap(pkg, `npm:${opts.version[parsed.version]}`, {});
137
- } else {
138
- const { pkg: pkgName } = packageName(pkg);
139
- const pkgParsed = parseVersionString(mergedImports[pkgName]);
140
- if (!pkgParsed.semVersion && pkgParsed.version !== "LATEST") {
141
- const fetched = await exception2Result(() => opts.fetchPkgVersion(pkgName));
142
- if (fetched.isErr()) {
143
- console.error(`Failed to fetch version for package ${pkgName}:`, fetched.Err());
144
- }
145
- mergedImports[pkgName] = mergedImports[pkg] = opts.resolveVersionImportMap(pkg, `npm:${fetched.Ok() ?? "latest"}`, {});
146
- } else {
147
- mergedImports[pkg] = mergedImports[pkgName];
148
- }
149
- }
150
- } else {
151
- // Has semVersion, use it directly
152
- mergedImports[pkg] = opts.resolveVersionImportMap(pkg, `npm:${parsed.semVersion}`, {});
153
- }
154
- }
155
- return { imports: mergedImports };
156
- }
157
-
158
- // function enhance(
159
- // importMap: Record<string, string | undefined>,
160
- // ver: Record<string, string>,
161
- // localServe?: string
162
- // ): Record<string, string> {
163
- // const enhancedMap: Record<string, string> = {};
164
-
165
- // for (const [key, value] of Object.entries(importMap)) {
166
- // if (value === undefined) {
167
- // continue;
168
- // }
169
-
170
- // // Replace version placeholders
171
- // let enhancedValue = value;
172
- // for (const [verKey, verValue] of Object.entries(ver)) {
173
- // if (enhancedValue === verKey) {
174
- // // Use the actual package name from the key
175
- // if (key.endsWith("/")) {
176
- // enhancedValue = `https://esm.sh/${key}${verValue}/`;
177
- // } else {
178
- // enhancedValue = `https://esm.sh/${key}@${verValue}`;
179
- // }
180
- // break;
181
- // }
182
- // }
183
- // if (localServe && enhancedValue.startsWith("/")) {
184
- // const buri = BuildURI.from(localServe);
185
- // buri.appendRelative(enhancedValue);
186
- // enhancedValue = buri.toString();
187
- // }
188
- // enhancedMap[key] = enhancedValue;
189
- // }
190
- // return enhancedMap;
191
- // }
192
-
193
- // export interface ImportMapProps {
194
- // versions?: {
195
- // FP: string; // Fireproof version URL
196
- // };
197
- // PUB_NPM_URL?: string; // Optional URL to fetch npm packages from, defaults to https://esm.sh/
198
- // PRIV_NPM_URL?: string; // Optional URL to fetch npm packages from, defaults to https://esm.sh/ -
199
- // // can be different from PUB_NPM_URL and only used server-side to avoid exposing certain packages to the client
200
- // }
201
-
202
- // export async function toEsmSh(
203
- // myImports: string[],
204
- // predefined: Record<string, string>,
205
- // urlBase: string,
206
- // fetchPkgVersion: (pkg: string) => Promise<string | undefined>
207
- // ) {
208
- // return (
209
- // await Promise.all(
210
- // myImports
211
- // .filter((imp) => !predefined[imp])
212
- // .map(async (imp): Promise<{ pkg: string; version: string; subpath?: string } | undefined> => {
213
- // const scopedVersionMatch = reScopedPkgWithVersion.exec(imp);
214
- // if (scopedVersionMatch) {
215
- // return {
216
- // pkg: scopedVersionMatch[1],
217
- // version: scopedVersionMatch[2],
218
- // subpath: scopedVersionMatch[3],
219
- // };
220
- // }
221
- // const unscopedVersionMatch = rePkgWithVersion.exec(imp);
222
- // if (unscopedVersionMatch) {
223
- // return {
224
- // pkg: unscopedVersionMatch[1],
225
- // version: unscopedVersionMatch[2],
226
- // subpath: unscopedVersionMatch[3],
227
- // };
228
- // }
229
-
230
- // const scopedMatch = reScopedPkg.exec(imp);
231
- // if (scopedMatch) {
232
- // const res = await fetchPkgVersion(scopedMatch[1]);
233
- // if (res) {
234
- // return {
235
- // pkg: scopedMatch[1],
236
- // version: res,
237
- // subpath: scopedMatch[2],
238
- // };
239
- // }
240
- // return;
241
- // }
242
- // const unscopedMatch = rePkg.exec(imp);
243
- // if (unscopedMatch) {
244
- // const res = await fetchPkgVersion(unscopedMatch[1]);
245
- // if (res) {
246
- // return {
247
- // pkg: unscopedMatch[1],
248
- // version: res,
249
- // subpath: unscopedMatch[2],
250
- // };
251
- // }
252
- // return;
253
- // }
254
- // })
255
- // )
256
- // )
257
- // .filter((r): r is { pkg: string; version: string; subpath?: string } => r !== undefined)
258
- // .reduce(
259
- // (acc, cur) => {
260
- // const buri = BuildURI.from("https://esm.sh").appendRelative(`${cur.pkg}${cur.version ? "@" + cur.version : ""}`);
261
- // if (cur.subpath && cur.subpath !== "/") {
262
- // buri.appendRelative(cur.subpath);
263
- // }
264
- // acc[cur.pkg] = buri.toString();
265
- // return acc;
266
- // },
267
- // {} as Record<string, string>
268
- // );
269
- // }
270
-
271
- // export async function svcImportMap(
272
- // myImports: string[],
273
- // prop: (Partial<ImportMapProps> & { mode: ReqEnsureAppSlug["mode"] }) | undefined,
274
- // fetchPkgVersion: (pkg: string) => Promise<string | undefined>
275
- // ): Promise<VibesImportMap> {
276
- // if (!(prop && prop.versions)) {
277
- // throw "WE need the Fireproof Version to be set";
278
- // }
279
- // const { versions } = {
280
- // versions: {
281
- // FP: `${prop.versions.FP}?deps=react@19.2.1,react-dom@19.2.1`,
282
- // },
283
- // };
284
-
285
- // let importMap = {};
286
- // if (prop.mode === "production") {
287
- // importMap = {
288
- // tailwindcss: "https://esm.sh/tailwindcss",
289
- // "dequal/lite": "https://esm.sh/dequal@2.0.3/lite",
290
- // "use-sync-external-store": "https://esm.sh/use-sync-external-store@1.6.0",
291
- // "@adviser/cement": "https://esm.sh/@adviser/cement@0.5.5",
292
- // "@clerk/clerk-react": "https://esm.sh/@clerk/clerk-react?deps=react@19.2.1,react-dom@19.2.1",
293
- // "@clerk/clerk-js": "https://esm.sh/@clerk/clerk-js@5",
294
- // multiformats: "https://esm.sh/multiformats",
295
- // cborg: "https://esm.sh/cborg",
296
- // "cborg/json": "https://esm.sh/cborg/json",
297
- // "cborg/length": "https://esm.sh/cborg/length",
298
- // zod: "https://esm.sh/zod",
299
- // jose: "https://esm.sh/jose",
300
- // "jose/jwt/decode": "https://esm.sh/jose/jwt/decode",
301
- // dompurify: "https://esm.sh/dompurify",
302
- // yaml: "https://esm.sh/yaml",
303
- // "posthog-js": "https://esm.sh/posthog-js?deps=react@19.2.1,react-dom@19.2.1",
304
- // "posthog-js@1.302.2": "https://esm.sh/posthog-js?deps=react@19.2.1,react-dom@19.2.1",
305
- // "posthog-js/react": "https://esm.sh/posthog-js/react?deps=react@19.2.1,react-dom@19.2.1",
306
-
307
- // react: "https://esm.sh/react@19.2.1",
308
-
309
- // "/react": "https://esm.sh/react@19.2.1",
310
-
311
- // "react?target=es2022": "https://esm.sh/react@19.2.1",
312
- // "/react?target=es2022": "https://esm.sh/react@19.2.1",
313
-
314
- // "react@^=18?target=es2022": "https://esm.sh/react@19.2.1",
315
- // "/react@^=18?target=es2022": "https://esm.sh/react@19.2.1",
316
-
317
- // "react@%3E=18?target=es2022": "https://esm.sh/react@19.2.1",
318
- // "/react@%3E=18?target=es2022": "https://esm.sh/react@19.2.1",
319
- // "react@>=18?target=es2022": "https://esm.sh/react@19.2.1",
320
- // "/react@>=18?target=es2022": "https://esm.sh/react@19.2.1",
321
-
322
- // "react@%3E=18": "https://esm.sh/react@19.2.1",
323
- // "/react@%3E=18": "https://esm.sh/react@19.2.1",
324
- // "react@>=18": "https://esm.sh/react@19.2.1",
325
- // "/react@>=18": "https://esm.sh/react@19.2.1",
326
-
327
- // "/react@^19.2.0?target=es2022": "https://esm.sh/react@19.2.1",
328
- // "/react@19.2.1/es2022/react.mjs": "https://esm.sh/react@19.2.1",
329
- // "react@19.3.0-canary-fd524fe0-20251121": "https://esm.sh/react@19.2.1",
330
- // "/react@19.3.0-canary-fd524fe0-20251121": "https://esm.sh/react@19.2.1",
331
- // "react-dom": "https://esm.sh/react-dom@19.2.1",
332
- // "react-dom/client": "https://esm.sh/react-dom@19.2.1/client",
333
- // "react/jsx-runtime": "https://esm.sh/react@19.2.1/jsx-runtime",
334
- // "react/jsx-dev-runtime": "https://esm.sh/react@19.2.1/jsx-dev-runtime",
335
- // "react-router": "https://esm.sh/react-router?deps=react@19.2.1,react-dom@19.2.1",
336
- // "react-router-dom": "https://esm.sh/react-router-dom?deps=react@19.2.1,react-dom@19.2.1",
337
- // "call-ai": "https://esm.sh/call-ai@v0.14.5",
338
-
339
- // "react-hot-toast": "https://esm.sh/react-hot-toast?deps=react@19.2.1,react-dom@19.2.1",
340
- // "@radix-ui/react-slot": "https://esm.sh/@radix-ui/react-slot",
341
- // "class-variance-authority": "https://esm.sh/class-variance-authority",
342
- // clsx: "https://esm.sh/clsx",
343
- // "react-markdown": "https://esm.sh/react-markdown",
344
-
345
- // "tailwind-merge": "https://esm.sh/tailwind-merge",
346
- // "@monaco-editor/react": "https://esm.sh/@monaco-editor/react?deps=react@19.2.1,react-dom@19.2.1",
347
- // "@shikijs/monaco": "https://esm.sh/@shikijs/monaco",
348
- // "shiki/core": "https://esm.sh/shiki/core",
349
- // "shiki/langs/javascript.mjs": "https://esm.sh/shiki/langs/javascript.mjs",
350
- // "shiki/langs/typescript.mjs": "https://esm.sh/shiki/langs/typescript.mjs",
351
- // "shiki/langs/jsx.mjs": "https://esm.sh/shiki/langs/jsx.mjs",
352
- // "shiki/langs/tsx.mjs": "https://esm.sh/shiki/langs/tsx.mjs",
353
- // "shiki/themes/github-dark-default.mjs": "https://esm.sh/shiki/themes/github-dark-default.mjs",
354
- // "shiki/themes/github-light-default.mjs": "https://esm.sh/shiki/themes/github-light-default.mjs",
355
- // "shiki/engine/oniguruma": "https://esm.sh/shiki/engine/oniguruma",
356
- // "shiki/wasm": "https://esm.sh/shiki/wasm",
357
- // "react-cookie-consent": "https://esm.sh/react-cookie-consent?deps=react@19.2.1,react-dom@19.2.1",
358
-
359
- // "use-vibes": "/dist/use-vibes/pkg/index.js",
360
- // "use-fireproof": "/dist/use-vibes/pkg/index.js",
361
-
362
- // "@vibes.diy/prompts": "/dist/prompts/pkg/index.js",
363
- // "@vibes.diy/use-vibes-base": "/dist/use-vibes/base/index.js",
364
-
365
- // "@fireproof/core-base": "FP",
366
- // "@fireproof/core-blockstore": "FP",
367
- // "@fireproof/core-cli": "FP",
368
- // "@fireproof/core-device-id": "FP",
369
- // "@fireproof/core-gateways-base": "FP",
370
- // "@fireproof/core-gateways-cloud": "FP",
371
- // "@fireproof/core-gateways-file-deno": "FP",
372
- // "@fireproof/core-gateways-file-node": "FP",
373
- // "@fireproof/core-gateways-file": "FP",
374
- // "@fireproof/core-gateways-indexeddb": "FP",
375
- // "@fireproof/core-gateways-memory": "FP",
376
- // "@fireproof/core-keybag": "FP",
377
- // "@fireproof/core-protocols-cloud": "FP",
378
- // "@fireproof/core-protocols-dashboard": "FP",
379
- // "@fireproof/core-runtime": "FP",
380
- // "@fireproof/core-types-base": "FP",
381
- // "@fireproof/core-types-blockstore": "FP",
382
- // "@fireproof/core-types-protocols-cloud": "FP",
383
- // "@fireproof/core-types-runtime": "FP",
384
- // "@fireproof/core": "FP",
385
- // "@fireproof/vendor": "FP",
386
- // "@fireproof/use-fireproof": "FP",
387
-
388
- // "@vibes.diy/api-pkg": "http://localhost:8888/dev-npm/@vibes.diy/api-pkg",
389
- // "@vibes.diy/api-types": "http://localhost:8888/dev-npm/@vibes.diy/api-types",
390
- // "@vibes-diy/pkg/styles.css": "http://localhost:8888/vibes-controls/styles.css",
391
- // };
392
- // }
393
-
394
- // return {
395
- // imports: toSortedObject(
396
- // enhance(
397
- // {
398
- // ...(await toEsmSh(myImports, importMap, "https://esm.sh", fetchPkgVersion)),
399
- // ...importMap,
400
- // },
401
- // versions
402
- // )
403
- // ) as Record<string, string>,
404
- // };
405
- // }