@fayz-ai/sdk 0.8.3 → 0.8.5

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 (64) hide show
  1. package/dist/agent.d.ts +57 -0
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +1 -1
  4. package/dist/{chunk-SKARZBEH.js → chunk-F6PAMHPI.js} +59 -59
  5. package/dist/{chunk-SKARZBEH.js.map → chunk-F6PAMHPI.js.map} +1 -1
  6. package/dist/chunk-LSBVNW75.js +139 -0
  7. package/dist/chunk-LSBVNW75.js.map +1 -0
  8. package/dist/{chunk-7ZHG7XTA.js → chunk-V4GWI7WH.js} +12 -13
  9. package/dist/chunk-V4GWI7WH.js.map +1 -0
  10. package/dist/index.d.ts +1 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +3 -3
  13. package/dist/release-channels.js +1 -1
  14. package/dist/shop.d.ts.map +1 -1
  15. package/dist/shop.js +1 -1
  16. package/dist/vite.js +1 -1
  17. package/dist/vite.js.map +1 -1
  18. package/package.json +15 -24
  19. package/src/agent.ts +152 -5
  20. package/src/index.ts +3 -0
  21. package/src/release-channels.json +57 -57
  22. package/src/shop.ts +22 -20
  23. package/src/vite.ts +1 -1
  24. package/dist/agent.cjs +0 -16
  25. package/dist/agent.cjs.map +0 -1
  26. package/dist/ai-builder.cjs +0 -20
  27. package/dist/ai-builder.cjs.map +0 -1
  28. package/dist/app-params.cjs +0 -16
  29. package/dist/app-params.cjs.map +0 -1
  30. package/dist/chunk-746EA3BV.cjs +0 -774
  31. package/dist/chunk-746EA3BV.cjs.map +0 -1
  32. package/dist/chunk-7UZH4XEV.cjs +0 -66
  33. package/dist/chunk-7UZH4XEV.cjs.map +0 -1
  34. package/dist/chunk-7ZHG7XTA.js.map +0 -1
  35. package/dist/chunk-B6FHOO34.cjs +0 -63
  36. package/dist/chunk-B6FHOO34.cjs.map +0 -1
  37. package/dist/chunk-DAUDGR5N.cjs +0 -88
  38. package/dist/chunk-DAUDGR5N.cjs.map +0 -1
  39. package/dist/chunk-DK3ZA6NA.cjs +0 -139
  40. package/dist/chunk-DK3ZA6NA.cjs.map +0 -1
  41. package/dist/chunk-ENWSXKQE.cjs +0 -125
  42. package/dist/chunk-ENWSXKQE.cjs.map +0 -1
  43. package/dist/chunk-VPMRURSI.js +0 -63
  44. package/dist/chunk-VPMRURSI.js.map +0 -1
  45. package/dist/chunk-WMH7SIER.cjs +0 -140
  46. package/dist/chunk-WMH7SIER.cjs.map +0 -1
  47. package/dist/chunk-ZMHI2XGY.cjs +0 -68
  48. package/dist/chunk-ZMHI2XGY.cjs.map +0 -1
  49. package/dist/client.cjs +0 -22
  50. package/dist/client.cjs.map +0 -1
  51. package/dist/index.cjs +0 -103
  52. package/dist/index.cjs.map +0 -1
  53. package/dist/release-channels.cjs +0 -24
  54. package/dist/release-channels.cjs.map +0 -1
  55. package/dist/runtime.cjs +0 -16
  56. package/dist/runtime.cjs.map +0 -1
  57. package/dist/shop.cjs +0 -20
  58. package/dist/shop.cjs.map +0 -1
  59. package/dist/supported-surface.cjs +0 -24
  60. package/dist/supported-surface.cjs.map +0 -1
  61. package/dist/types.cjs +0 -4
  62. package/dist/types.cjs.map +0 -1
  63. package/dist/vite.cjs +0 -101
  64. package/dist/vite.cjs.map +0 -1
@@ -1,88 +0,0 @@
1
- 'use strict';
2
-
3
- // src/ai-builder.ts
4
- var AI_BUILDER_REQUEST_CLASSES = {
5
- "app-edit": {
6
- id: "app-edit",
7
- label: "App edit",
8
- layer: "app",
9
- editableBy: "ai",
10
- needsCode: false,
11
- needsDeploy: false,
12
- description: "Change the generated app: pages, routes, layout, theme, copy, blocks, slots. Manifest-level edits (ladder 1\u20134) need no code; custom components/pages (ladder 5\u20136) are app-owned code.",
13
- examples: [
14
- "Change the brand color and headline",
15
- "Add a new landing page with a hero and product grid",
16
- "Reorder dashboard cards"
17
- ]
18
- },
19
- "plugin-config": {
20
- id: "plugin-config",
21
- label: "Plugin config",
22
- layer: "plugin-config",
23
- editableBy: "ai",
24
- needsCode: false,
25
- needsDeploy: false,
26
- description: "Configure an installed plugin as manifest data: enabled modules, fields, statuses, rules, feature flags, labels, currency.",
27
- examples: [
28
- "Enable the reconciliation module in financial",
29
- 'Add a "VIP" status to clients',
30
- "Turn on delivery pricing in the menu"
31
- ]
32
- },
33
- "private-extension": {
34
- id: "private-extension",
35
- label: "Private extension",
36
- layer: "private-extension",
37
- editableBy: "partner",
38
- needsCode: true,
39
- needsDeploy: true,
40
- description: "Add new business behaviour as an app-local plugin (own entities, data, migrations, AI tools, connectors). The sanctioned partner/Silvio path \u2014 scaffold with `fayz create plugin`. See CUSTOMIZATION.md.",
41
- examples: [
42
- "Build a loyalty-points engine with its own table",
43
- "Add a custom importer for a legacy ERP",
44
- "Integrate a provider Fayz does not support yet (adapter)"
45
- ]
46
- },
47
- "platform-or-plugin-upgrade": {
48
- id: "platform-or-plugin-upgrade",
49
- label: "Platform / plugin upgrade",
50
- layer: "platform",
51
- editableBy: "fayz",
52
- needsCode: true,
53
- needsDeploy: true,
54
- description: "Change owned by Fayz: bump SDK/plugin versions, run manifest/DB migrations, evolve an engine. Not editable from a generated app.",
55
- examples: [
56
- "Upgrade @fayz-ai/core across the fleet",
57
- "Migrate manifests v2 \u2192 v3",
58
- "Add a capability to an official plugin"
59
- ]
60
- },
61
- "unsafe-blocked": {
62
- id: "unsafe-blocked",
63
- label: "Unsafe / blocked",
64
- layer: "none",
65
- editableBy: "none",
66
- needsCode: false,
67
- needsDeploy: false,
68
- description: "Requests that would break the boundary and must be refused or rerouted: mutating SDK/runtime/plugin internals, forking an SDK page, importing a provider SDK directly into app code, or bypassing tenancy/permissions/security.",
69
- examples: [
70
- "Edit the code inside @fayz-ai/plugin-crm",
71
- "Copy an SDK page into the app and modify it",
72
- "Call the Supabase client directly from a storefront component",
73
- "Disable row-level security for a tenant"
74
- ]
75
- }
76
- };
77
- var AI_BUILDER_REQUEST_CLASS_IDS = Object.keys(
78
- AI_BUILDER_REQUEST_CLASSES
79
- );
80
- function isAllowedRequestClass(id) {
81
- return id !== "unsafe-blocked";
82
- }
83
-
84
- exports.AI_BUILDER_REQUEST_CLASSES = AI_BUILDER_REQUEST_CLASSES;
85
- exports.AI_BUILDER_REQUEST_CLASS_IDS = AI_BUILDER_REQUEST_CLASS_IDS;
86
- exports.isAllowedRequestClass = isAllowedRequestClass;
87
- //# sourceMappingURL=chunk-DAUDGR5N.cjs.map
88
- //# sourceMappingURL=chunk-DAUDGR5N.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ai-builder.ts"],"names":[],"mappings":";;;AA4BO,IAAM,0BAAA,GAAsF;AAAA,EACjG,UAAA,EAAY;AAAA,IACV,EAAA,EAAI,UAAA;AAAA,IACJ,KAAA,EAAO,UAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,IAAA;AAAA,IACZ,SAAA,EAAW,KAAA;AAAA,IACX,WAAA,EAAa,KAAA;AAAA,IACb,WAAA,EACE,iMAAA;AAAA,IACF,QAAA,EAAU;AAAA,MACR,qCAAA;AAAA,MACA,qDAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,EAAA,EAAI,eAAA;AAAA,IACJ,KAAA,EAAO,eAAA;AAAA,IACP,KAAA,EAAO,eAAA;AAAA,IACP,UAAA,EAAY,IAAA;AAAA,IACZ,SAAA,EAAW,KAAA;AAAA,IACX,WAAA,EAAa,KAAA;AAAA,IACb,WAAA,EACE,4HAAA;AAAA,IACF,QAAA,EAAU;AAAA,MACR,+CAAA;AAAA,MACA,+BAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,EAAA,EAAI,mBAAA;AAAA,IACJ,KAAA,EAAO,mBAAA;AAAA,IACP,KAAA,EAAO,mBAAA;AAAA,IACP,UAAA,EAAY,SAAA;AAAA,IACZ,SAAA,EAAW,IAAA;AAAA,IACX,WAAA,EAAa,IAAA;AAAA,IACb,WAAA,EACE,+MAAA;AAAA,IACF,QAAA,EAAU;AAAA,MACR,kDAAA;AAAA,MACA,wCAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA,EACA,4BAAA,EAA8B;AAAA,IAC5B,EAAA,EAAI,4BAAA;AAAA,IACJ,KAAA,EAAO,2BAAA;AAAA,IACP,KAAA,EAAO,UAAA;AAAA,IACP,UAAA,EAAY,MAAA;AAAA,IACZ,SAAA,EAAW,IAAA;AAAA,IACX,WAAA,EAAa,IAAA;AAAA,IACb,WAAA,EACE,kIAAA;AAAA,IACF,QAAA,EAAU;AAAA,MACR,wCAAA;AAAA,MACA,gCAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,EAAA,EAAI,gBAAA;AAAA,IACJ,KAAA,EAAO,kBAAA;AAAA,IACP,KAAA,EAAO,MAAA;AAAA,IACP,UAAA,EAAY,MAAA;AAAA,IACZ,SAAA,EAAW,KAAA;AAAA,IACX,WAAA,EAAa,KAAA;AAAA,IACb,WAAA,EACE,iOAAA;AAAA,IACF,QAAA,EAAU;AAAA,MACR,0CAAA;AAAA,MACA,6CAAA;AAAA,MACA,+DAAA;AAAA,MACA;AAAA;AACF;AAEJ;AAEO,IAAM,+BAA+B,MAAA,CAAO,IAAA;AAAA,EACjD;AACF;AAGO,SAAS,sBAAsB,EAAA,EAAoC;AACxE,EAAA,OAAO,EAAA,KAAO,gBAAA;AAChB","file":"chunk-DAUDGR5N.cjs","sourcesContent":["// The AI Builder request taxonomy — the contract the platform's request\n// classifier targets. The classifier itself lives in the `fayz` platform repo;\n// this is the canonical source of truth for the request classes and the\n// architecture layer each is allowed to touch (docs/ARCHITECTURE.md).\n\n/** Ownership layer a request may modify. */\nexport type FayzLayer = 'app' | 'plugin-config' | 'private-extension' | 'platform' | 'none'\n\nexport type AiBuilderRequestClass =\n | 'app-edit'\n | 'plugin-config'\n | 'private-extension'\n | 'platform-or-plugin-upgrade'\n | 'unsafe-blocked'\n\nexport interface AiBuilderRequestClassDef {\n id: AiBuilderRequestClass\n label: string\n /** Which ownership layer this class is allowed to modify. */\n layer: FayzLayer\n /** Who may perform it. */\n editableBy: 'ai' | 'partner' | 'fayz' | 'none'\n needsCode: boolean\n needsDeploy: boolean\n description: string\n examples: string[]\n}\n\nexport const AI_BUILDER_REQUEST_CLASSES: Record<AiBuilderRequestClass, AiBuilderRequestClassDef> = {\n 'app-edit': {\n id: 'app-edit',\n label: 'App edit',\n layer: 'app',\n editableBy: 'ai',\n needsCode: false,\n needsDeploy: false,\n description:\n 'Change the generated app: pages, routes, layout, theme, copy, blocks, slots. Manifest-level edits (ladder 1–4) need no code; custom components/pages (ladder 5–6) are app-owned code.',\n examples: [\n 'Change the brand color and headline',\n 'Add a new landing page with a hero and product grid',\n 'Reorder dashboard cards',\n ],\n },\n 'plugin-config': {\n id: 'plugin-config',\n label: 'Plugin config',\n layer: 'plugin-config',\n editableBy: 'ai',\n needsCode: false,\n needsDeploy: false,\n description:\n 'Configure an installed plugin as manifest data: enabled modules, fields, statuses, rules, feature flags, labels, currency.',\n examples: [\n 'Enable the reconciliation module in financial',\n 'Add a \"VIP\" status to clients',\n 'Turn on delivery pricing in the menu',\n ],\n },\n 'private-extension': {\n id: 'private-extension',\n label: 'Private extension',\n layer: 'private-extension',\n editableBy: 'partner',\n needsCode: true,\n needsDeploy: true,\n description:\n 'Add new business behaviour as an app-local plugin (own entities, data, migrations, AI tools, connectors). The sanctioned partner/Silvio path — scaffold with `fayz create plugin`. See CUSTOMIZATION.md.',\n examples: [\n 'Build a loyalty-points engine with its own table',\n 'Add a custom importer for a legacy ERP',\n 'Integrate a provider Fayz does not support yet (adapter)',\n ],\n },\n 'platform-or-plugin-upgrade': {\n id: 'platform-or-plugin-upgrade',\n label: 'Platform / plugin upgrade',\n layer: 'platform',\n editableBy: 'fayz',\n needsCode: true,\n needsDeploy: true,\n description:\n 'Change owned by Fayz: bump SDK/plugin versions, run manifest/DB migrations, evolve an engine. Not editable from a generated app.',\n examples: [\n 'Upgrade @fayz-ai/core across the fleet',\n 'Migrate manifests v2 → v3',\n 'Add a capability to an official plugin',\n ],\n },\n 'unsafe-blocked': {\n id: 'unsafe-blocked',\n label: 'Unsafe / blocked',\n layer: 'none',\n editableBy: 'none',\n needsCode: false,\n needsDeploy: false,\n description:\n 'Requests that would break the boundary and must be refused or rerouted: mutating SDK/runtime/plugin internals, forking an SDK page, importing a provider SDK directly into app code, or bypassing tenancy/permissions/security.',\n examples: [\n 'Edit the code inside @fayz-ai/plugin-crm',\n 'Copy an SDK page into the app and modify it',\n 'Call the Supabase client directly from a storefront component',\n 'Disable row-level security for a tenant',\n ],\n },\n}\n\nexport const AI_BUILDER_REQUEST_CLASS_IDS = Object.keys(\n AI_BUILDER_REQUEST_CLASSES,\n) as AiBuilderRequestClass[]\n\n/** True when a request class is permitted (anything but unsafe-blocked). */\nexport function isAllowedRequestClass(id: AiBuilderRequestClass): boolean {\n return id !== 'unsafe-blocked'\n}\n"]}
@@ -1,139 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkENWSXKQE_cjs = require('./chunk-ENWSXKQE.cjs');
4
- var chunkZMHI2XGY_cjs = require('./chunk-ZMHI2XGY.cjs');
5
-
6
- // src/client.ts
7
- var FayzApiError = class extends Error {
8
- constructor(message, status, responseBody) {
9
- super(message);
10
- this.status = status;
11
- this.responseBody = responseBody;
12
- this.name = "FayzApiError";
13
- }
14
- };
15
- function normalizeBaseUrl(baseUrl) {
16
- return baseUrl.replace(/\/+$/, "");
17
- }
18
- function apiPath(path) {
19
- if (/^https?:\/\//.test(path)) return path;
20
- const normalized = path.startsWith("/") ? path : `/${path}`;
21
- return normalized.startsWith("/api/") ? normalized : `/api${normalized}`;
22
- }
23
- async function parseResponse(response) {
24
- if (response.status === 204) return void 0;
25
- const text = await response.text();
26
- let body;
27
- try {
28
- body = text ? JSON.parse(text) : void 0;
29
- } catch {
30
- body = text;
31
- }
32
- if (!response.ok) {
33
- const message = typeof body === "object" && body ? String(body.message ?? body.error ?? `Fayz API request failed with status ${response.status}`) : `Fayz API request failed with status ${response.status}`;
34
- throw new FayzApiError(message, response.status, body);
35
- }
36
- return body;
37
- }
38
- async function resolveToken(token) {
39
- return typeof token === "function" ? token() : token;
40
- }
41
- function unwrapUser(body) {
42
- return typeof body === "object" && body && "user" in body ? body.user : body;
43
- }
44
- function tableRowsPath(options) {
45
- const route = tableRowsRoute(options);
46
- const params = new URLSearchParams();
47
- if (options.schema) params.set("schema", options.schema);
48
- if (options.filters?.length) params.set("filters", JSON.stringify(options.filters));
49
- if (options.sortColumn) params.set("sortColumn", options.sortColumn);
50
- if (options.sortDirection) params.set("sortDirection", options.sortDirection);
51
- if (options.page != null) params.set("page", String(options.page));
52
- if (options.limit != null) params.set("limit", String(options.limit));
53
- const query = params.toString();
54
- return query ? `${route}?${query}` : route;
55
- }
56
- function tableRowsRoute(options) {
57
- const projectId = encodeURIComponent(options.projectId ?? chunkZMHI2XGY_cjs.appParams.projectId ?? "current");
58
- const table = encodeURIComponent(options.table);
59
- return options.runtime ? `/api/v1/runtime/projects/${projectId}/database/tables/${table}/rows` : `/api/projects/${projectId}/database/tables/${table}/rows`;
60
- }
61
- function mutationRowsPath(options) {
62
- const route = tableRowsRoute(options);
63
- const params = new URLSearchParams();
64
- if (options.schema) params.set("schema", options.schema);
65
- const query = params.toString();
66
- return query ? `${route}?${query}` : route;
67
- }
68
- function createFayzClient(options = {}) {
69
- const baseUrl = normalizeBaseUrl(options.baseUrl ?? chunkZMHI2XGY_cjs.appParams.apiBaseUrl);
70
- const fetcher = options.fetcher ?? fetch;
71
- const appId = options.appId ?? chunkZMHI2XGY_cjs.appParams.appId;
72
- const token = options.token ?? chunkZMHI2XGY_cjs.appParams.token;
73
- async function request(path, init = {}) {
74
- const requestToken = init.token ?? await resolveToken(token);
75
- const headers = {
76
- ...init.body ? { "Content-Type": "application/json" } : {},
77
- ...appId ? { "X-App-Id": appId } : {},
78
- ...init.headers,
79
- ...requestToken ? { Authorization: `Bearer ${requestToken}` } : {}
80
- };
81
- const response = await fetcher(`${baseUrl}${apiPath(path)}`, {
82
- ...init,
83
- headers
84
- });
85
- return parseResponse(response);
86
- }
87
- return {
88
- request,
89
- auth: {
90
- async me() {
91
- return unwrapUser(await request("/auth/me"));
92
- }
93
- },
94
- data: {
95
- async listRows(options2) {
96
- return request(tableRowsPath(options2));
97
- },
98
- async countRows(options2) {
99
- const response = await request(tableRowsPath({
100
- ...options2,
101
- page: options2.page ?? 1,
102
- limit: 1
103
- }));
104
- return response.total;
105
- },
106
- async createRow(options2) {
107
- return request(mutationRowsPath(options2), {
108
- method: "POST",
109
- body: JSON.stringify(options2.row)
110
- });
111
- },
112
- async updateRow(options2) {
113
- return request(mutationRowsPath(options2), {
114
- method: "PATCH",
115
- body: JSON.stringify({
116
- primaryKeys: options2.primaryKeys,
117
- data: options2.row
118
- })
119
- });
120
- },
121
- async deleteRows(options2) {
122
- return request(mutationRowsPath(options2), {
123
- method: "DELETE",
124
- body: JSON.stringify({ rows: options2.rows })
125
- });
126
- }
127
- },
128
- runtime: {
129
- createClient: chunkENWSXKQE_cjs.createFayzRuntimeClient
130
- }
131
- };
132
- }
133
- var fayz = createFayzClient();
134
-
135
- exports.FayzApiError = FayzApiError;
136
- exports.createFayzClient = createFayzClient;
137
- exports.fayz = fayz;
138
- //# sourceMappingURL=chunk-DK3ZA6NA.cjs.map
139
- //# sourceMappingURL=chunk-DK3ZA6NA.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/client.ts"],"names":["appParams","options","createFayzRuntimeClient"],"mappings":"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","file":"chunk-DK3ZA6NA.cjs","sourcesContent":["import { appParams } from './app-params'\nimport { createFayzRuntimeClient } from './runtime'\nimport type { FayzAuthMeResponse, FayzUser } from './types'\n\nexport interface FayzClientOptions {\n baseUrl?: string\n token?: string | (() => string | undefined | Promise<string | undefined>)\n appId?: string\n fetcher?: typeof fetch\n}\n\nexport interface FayzRequestOptions extends Omit<RequestInit, 'headers'> {\n headers?: Record<string, string>\n token?: string\n}\n\nexport type FayzTableFilterOperator =\n | 'eq'\n | 'neq'\n | 'gt'\n | 'lt'\n | 'gte'\n | 'lte'\n | 'like'\n | 'ilike'\n | 'is_null'\n | 'is_not_null'\n\nexport interface FayzTableFilter {\n column: string\n operator: FayzTableFilterOperator\n value?: unknown\n}\n\nexport interface FayzTableListOptions {\n projectId?: string\n table: string\n schema?: string\n filters?: FayzTableFilter[]\n sortColumn?: string\n sortDirection?: 'asc' | 'desc'\n page?: number\n limit?: number\n runtime?: boolean\n}\n\nexport interface FayzTableListResponse<T> {\n rows: T[]\n total: number\n}\n\nexport interface FayzTableMutationOptions {\n projectId?: string\n table: string\n schema?: string\n runtime?: boolean\n}\n\nexport interface FayzTableCreateOptions<T = Record<string, unknown>> extends FayzTableMutationOptions {\n row: T\n}\n\nexport interface FayzTableUpdateOptions<T = Record<string, unknown>> extends FayzTableMutationOptions {\n primaryKeys: Record<string, unknown>\n row: Partial<T>\n}\n\nexport interface FayzTableDeleteOptions extends FayzTableMutationOptions {\n rows: Record<string, unknown>[]\n}\n\nexport interface FayzTableDeleteResponse {\n deletedCount: number\n}\n\nexport class FayzApiError extends Error {\n constructor(\n message: string,\n readonly status: number,\n readonly responseBody?: unknown,\n ) {\n super(message)\n this.name = 'FayzApiError'\n }\n}\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '')\n}\n\nfunction apiPath(path: string): string {\n if (/^https?:\\/\\//.test(path)) return path\n const normalized = path.startsWith('/') ? path : `/${path}`\n return normalized.startsWith('/api/') ? normalized : `/api${normalized}`\n}\n\nasync function parseResponse<T>(response: Response): Promise<T> {\n if (response.status === 204) return undefined as T\n\n const text = await response.text()\n let body: unknown\n try {\n body = text ? JSON.parse(text) : undefined\n } catch {\n body = text\n }\n\n if (!response.ok) {\n const message = typeof body === 'object' && body\n ? String((body as { message?: unknown; error?: unknown }).message ?? (body as { error?: unknown }).error ?? `Fayz API request failed with status ${response.status}`)\n : `Fayz API request failed with status ${response.status}`\n throw new FayzApiError(message, response.status, body)\n }\n\n return body as T\n}\n\nasync function resolveToken(token: FayzClientOptions['token']): Promise<string | undefined> {\n return typeof token === 'function' ? token() : token\n}\n\nfunction unwrapUser(body: FayzUser | FayzAuthMeResponse): FayzUser {\n return typeof body === 'object' && body && 'user' in body\n ? (body as FayzAuthMeResponse).user\n : body as FayzUser\n}\n\nfunction tableRowsPath(options: FayzTableListOptions): string {\n const route = tableRowsRoute(options)\n const params = new URLSearchParams()\n\n if (options.schema) params.set('schema', options.schema)\n if (options.filters?.length) params.set('filters', JSON.stringify(options.filters))\n if (options.sortColumn) params.set('sortColumn', options.sortColumn)\n if (options.sortDirection) params.set('sortDirection', options.sortDirection)\n if (options.page != null) params.set('page', String(options.page))\n if (options.limit != null) params.set('limit', String(options.limit))\n\n const query = params.toString()\n return query ? `${route}?${query}` : route\n}\n\nfunction tableRowsRoute(options: FayzTableMutationOptions): string {\n const projectId = encodeURIComponent(options.projectId ?? appParams.projectId ?? 'current')\n const table = encodeURIComponent(options.table)\n return options.runtime\n ? `/api/v1/runtime/projects/${projectId}/database/tables/${table}/rows`\n : `/api/projects/${projectId}/database/tables/${table}/rows`\n}\n\nfunction mutationRowsPath(options: FayzTableMutationOptions): string {\n const route = tableRowsRoute(options)\n const params = new URLSearchParams()\n\n if (options.schema) params.set('schema', options.schema)\n\n const query = params.toString()\n return query ? `${route}?${query}` : route\n}\n\nexport function createFayzClient(options: FayzClientOptions = {}) {\n const baseUrl = normalizeBaseUrl(options.baseUrl ?? appParams.apiBaseUrl)\n const fetcher = options.fetcher ?? fetch\n const appId = options.appId ?? appParams.appId\n const token = options.token ?? appParams.token\n\n async function request<T>(path: string, init: FayzRequestOptions = {}): Promise<T> {\n const requestToken = init.token ?? await resolveToken(token)\n const headers: Record<string, string> = {\n ...(init.body ? { 'Content-Type': 'application/json' } : {}),\n ...(appId ? { 'X-App-Id': appId } : {}),\n ...init.headers,\n ...(requestToken ? { Authorization: `Bearer ${requestToken}` } : {}),\n }\n const response = await fetcher(`${baseUrl}${apiPath(path)}`, {\n ...init,\n headers,\n })\n return parseResponse<T>(response)\n }\n\n return {\n request,\n auth: {\n async me(): Promise<FayzUser> {\n return unwrapUser(await request<FayzUser | FayzAuthMeResponse>('/auth/me'))\n },\n },\n data: {\n async listRows<T = Record<string, unknown>>(options: FayzTableListOptions): Promise<FayzTableListResponse<T>> {\n return request<FayzTableListResponse<T>>(tableRowsPath(options))\n },\n async countRows(options: FayzTableListOptions): Promise<number> {\n const response = await request<FayzTableListResponse<unknown>>(tableRowsPath({\n ...options,\n page: options.page ?? 1,\n limit: 1,\n }))\n return response.total\n },\n async createRow<T = Record<string, unknown>>(options: FayzTableCreateOptions<Partial<T>>): Promise<T> {\n return request<T>(mutationRowsPath(options), {\n method: 'POST',\n body: JSON.stringify(options.row),\n })\n },\n async updateRow<T = Record<string, unknown>>(options: FayzTableUpdateOptions<T>): Promise<T> {\n return request<T>(mutationRowsPath(options), {\n method: 'PATCH',\n body: JSON.stringify({\n primaryKeys: options.primaryKeys,\n data: options.row,\n }),\n })\n },\n async deleteRows(options: FayzTableDeleteOptions): Promise<FayzTableDeleteResponse> {\n return request<FayzTableDeleteResponse>(mutationRowsPath(options), {\n method: 'DELETE',\n body: JSON.stringify({ rows: options.rows }),\n })\n },\n },\n runtime: {\n createClient: createFayzRuntimeClient,\n },\n }\n}\n\nexport const fayz = createFayzClient()\n"]}
@@ -1,125 +0,0 @@
1
- 'use strict';
2
-
3
- // src/runtime.ts
4
- var FayzRuntimeError = class extends Error {
5
- constructor(message, status, responseBody) {
6
- super(message);
7
- this.status = status;
8
- this.responseBody = responseBody;
9
- this.name = "FayzRuntimeError";
10
- }
11
- };
12
- function normalizeBaseUrl(baseUrl) {
13
- return baseUrl.replace(/\/+$/, "");
14
- }
15
- function assertRequired(value, field) {
16
- const normalized = value.trim();
17
- if (!normalized) throw new Error(`${field} is required`);
18
- return normalized;
19
- }
20
- function runtimePath(projectId, suffix) {
21
- return `/api/v1/runtime/projects/${encodeURIComponent(projectId)}${suffix}`;
22
- }
23
- function queryString(params) {
24
- const search = new URLSearchParams();
25
- for (const [key, value2] of Object.entries(params)) {
26
- if (value2 !== void 0 && value2 !== "") search.set(key, String(value2));
27
- }
28
- const value = search.toString();
29
- return value ? `?${value}` : "";
30
- }
31
- async function parseResponse(response) {
32
- if (response.status === 204) return void 0;
33
- const text = await response.text();
34
- let body;
35
- try {
36
- body = text ? JSON.parse(text) : void 0;
37
- } catch {
38
- body = text;
39
- }
40
- if (!response.ok) {
41
- const message = typeof body === "object" && body && "message" in body ? String(body.message) : `Fayz runtime request failed with status ${response.status}`;
42
- throw new FayzRuntimeError(message, response.status, body);
43
- }
44
- return body;
45
- }
46
- function createFayzRuntimeClient(options) {
47
- const baseUrl = normalizeBaseUrl(assertRequired(options.baseUrl, "baseUrl"));
48
- const projectId = assertRequired(options.projectId, "projectId");
49
- const runtimeToken = assertRequired(options.runtimeToken, "runtimeToken");
50
- const fetcher = options.fetcher ?? fetch;
51
- async function request(path, token, init = {}) {
52
- const response = await fetcher(`${baseUrl}${path}`, {
53
- ...init,
54
- headers: {
55
- ...init.body ? { "Content-Type": "application/json" } : {},
56
- ...init.headers,
57
- Authorization: `Bearer ${token}`
58
- }
59
- });
60
- return parseResponse(response);
61
- }
62
- async function exchangePluginOAuth(input) {
63
- return request(
64
- runtimePath(projectId, "/oauth/exchange"),
65
- runtimeToken,
66
- {
67
- method: "POST",
68
- body: JSON.stringify({
69
- pluginId: input.pluginId,
70
- environment: input.environment ?? "preview",
71
- ...input.scopes ? { scopes: input.scopes } : {}
72
- })
73
- }
74
- );
75
- }
76
- function googleCalendar(pluginOAuthToken) {
77
- const brokerToken = assertRequired(pluginOAuthToken, "pluginOAuthToken");
78
- const eventsPath = runtimePath(projectId, "/oauth/google-calendar/events");
79
- return {
80
- listEvents(input) {
81
- const calendarId = assertRequired(input.calendarId, "calendarId");
82
- return request(
83
- `${eventsPath}${queryString({
84
- calendarId,
85
- timeMin: input.timeMin,
86
- timeMax: input.timeMax,
87
- maxResults: input.maxResults,
88
- q: input.q
89
- })}`,
90
- brokerToken
91
- );
92
- },
93
- createEvent(calendarId, event) {
94
- return request(
95
- `${eventsPath}${queryString({ calendarId: assertRequired(calendarId, "calendarId") })}`,
96
- brokerToken,
97
- { method: "POST", body: JSON.stringify(event) }
98
- );
99
- },
100
- updateEvent(calendarId, eventId, updates) {
101
- return request(
102
- `${eventsPath}/${encodeURIComponent(assertRequired(eventId, "eventId"))}${queryString({ calendarId: assertRequired(calendarId, "calendarId") })}`,
103
- brokerToken,
104
- { method: "PATCH", body: JSON.stringify(updates) }
105
- );
106
- },
107
- deleteEvent(calendarId, eventId) {
108
- return request(
109
- `${eventsPath}/${encodeURIComponent(assertRequired(eventId, "eventId"))}${queryString({ calendarId: assertRequired(calendarId, "calendarId") })}`,
110
- brokerToken,
111
- { method: "DELETE" }
112
- );
113
- }
114
- };
115
- }
116
- return {
117
- exchangePluginOAuth,
118
- googleCalendar
119
- };
120
- }
121
-
122
- exports.FayzRuntimeError = FayzRuntimeError;
123
- exports.createFayzRuntimeClient = createFayzRuntimeClient;
124
- //# sourceMappingURL=chunk-ENWSXKQE.cjs.map
125
- //# sourceMappingURL=chunk-ENWSXKQE.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/runtime.ts"],"names":["value"],"mappings":"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","file":"chunk-ENWSXKQE.cjs","sourcesContent":["export interface FayzRuntimeClientOptions {\n baseUrl: string\n projectId: string\n runtimeToken: string\n fetcher?: typeof fetch\n}\n\nexport type FayzRuntimeEnvironment = 'preview' | 'production'\n\nexport interface PluginOAuthExchangeInput {\n pluginId: string\n environment?: FayzRuntimeEnvironment\n scopes?: string[]\n}\n\nexport interface RuntimePluginOAuthGrant {\n grantId: string\n provider: string\n scopes: string[]\n}\n\nexport interface PluginOAuthExchangeResponse {\n token: string\n tokenType: 'Bearer'\n expiresIn: number\n projectId: string\n tenantKey: string\n environment: FayzRuntimeEnvironment\n pluginId: string\n grants: RuntimePluginOAuthGrant[]\n}\n\nexport interface GoogleCalendarEventTime {\n dateTime: string\n timeZone?: string\n}\n\nexport interface GoogleCalendarEventInput {\n summary: string\n description?: string\n location?: string\n start: GoogleCalendarEventTime\n end: GoogleCalendarEventTime\n attendees?: Array<{ email: string }>\n}\n\nexport interface GoogleCalendarEvent {\n id: string\n summary?: string\n description?: string\n location?: string\n start: { dateTime?: string; date?: string; timeZone?: string }\n end: { dateTime?: string; date?: string; timeZone?: string }\n status?: string\n htmlLink?: string\n [key: string]: unknown\n}\n\nexport interface ListGoogleCalendarEventsInput {\n calendarId: string\n timeMin?: string\n timeMax?: string\n maxResults?: number\n q?: string\n}\n\nexport class FayzRuntimeError extends Error {\n constructor(\n message: string,\n readonly status: number,\n readonly responseBody?: unknown,\n ) {\n super(message)\n this.name = 'FayzRuntimeError'\n }\n}\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '')\n}\n\nfunction assertRequired(value: string, field: string): string {\n const normalized = value.trim()\n if (!normalized) throw new Error(`${field} is required`)\n return normalized\n}\n\nfunction runtimePath(projectId: string, suffix: string): string {\n return `/api/v1/runtime/projects/${encodeURIComponent(projectId)}${suffix}`\n}\n\nfunction queryString(params: Record<string, string | number | undefined>): string {\n const search = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== '') search.set(key, String(value))\n }\n const value = search.toString()\n return value ? `?${value}` : ''\n}\n\nasync function parseResponse<T>(response: Response): Promise<T> {\n if (response.status === 204) return undefined as T\n\n const text = await response.text()\n let body: unknown\n try {\n body = text ? JSON.parse(text) : undefined\n } catch {\n body = text\n }\n\n if (!response.ok) {\n const message = typeof body === 'object' && body && 'message' in body\n ? String((body as { message: unknown }).message)\n : `Fayz runtime request failed with status ${response.status}`\n throw new FayzRuntimeError(message, response.status, body)\n }\n\n return body as T\n}\n\nexport function createFayzRuntimeClient(options: FayzRuntimeClientOptions) {\n const baseUrl = normalizeBaseUrl(assertRequired(options.baseUrl, 'baseUrl'))\n const projectId = assertRequired(options.projectId, 'projectId')\n const runtimeToken = assertRequired(options.runtimeToken, 'runtimeToken')\n const fetcher = options.fetcher ?? fetch\n\n async function request<T>(\n path: string,\n token: string,\n init: Omit<RequestInit, 'headers'> & { headers?: Record<string, string> } = {},\n ): Promise<T> {\n const response = await fetcher(`${baseUrl}${path}`, {\n ...init,\n headers: {\n ...(init.body ? { 'Content-Type': 'application/json' } : {}),\n ...init.headers,\n Authorization: `Bearer ${token}`,\n },\n })\n return parseResponse<T>(response)\n }\n\n async function exchangePluginOAuth(input: PluginOAuthExchangeInput): Promise<PluginOAuthExchangeResponse> {\n return request<PluginOAuthExchangeResponse>(\n runtimePath(projectId, '/oauth/exchange'),\n runtimeToken,\n {\n method: 'POST',\n body: JSON.stringify({\n pluginId: input.pluginId,\n environment: input.environment ?? 'preview',\n ...(input.scopes ? { scopes: input.scopes } : {}),\n }),\n },\n )\n }\n\n function googleCalendar(pluginOAuthToken: string) {\n const brokerToken = assertRequired(pluginOAuthToken, 'pluginOAuthToken')\n const eventsPath = runtimePath(projectId, '/oauth/google-calendar/events')\n\n return {\n listEvents(input: ListGoogleCalendarEventsInput) {\n const calendarId = assertRequired(input.calendarId, 'calendarId')\n return request<{\n provider: 'google-calendar'\n calendarId: string\n timeMin: string\n timeMax: string\n events: GoogleCalendarEvent[]\n }>(\n `${eventsPath}${queryString({\n calendarId,\n timeMin: input.timeMin,\n timeMax: input.timeMax,\n maxResults: input.maxResults,\n q: input.q,\n })}`,\n brokerToken,\n )\n },\n createEvent(calendarId: string, event: GoogleCalendarEventInput) {\n return request<{ provider: 'google-calendar'; calendarId: string; event: GoogleCalendarEvent }>(\n `${eventsPath}${queryString({ calendarId: assertRequired(calendarId, 'calendarId') })}`,\n brokerToken,\n { method: 'POST', body: JSON.stringify(event) },\n )\n },\n updateEvent(calendarId: string, eventId: string, updates: Partial<GoogleCalendarEventInput>) {\n return request<{ provider: 'google-calendar'; calendarId: string; event: GoogleCalendarEvent }>(\n `${eventsPath}/${encodeURIComponent(assertRequired(eventId, 'eventId'))}${queryString({ calendarId: assertRequired(calendarId, 'calendarId') })}`,\n brokerToken,\n { method: 'PATCH', body: JSON.stringify(updates) },\n )\n },\n deleteEvent(calendarId: string, eventId: string) {\n return request<void>(\n `${eventsPath}/${encodeURIComponent(assertRequired(eventId, 'eventId'))}${queryString({ calendarId: assertRequired(calendarId, 'calendarId') })}`,\n brokerToken,\n { method: 'DELETE' },\n )\n },\n }\n }\n\n return {\n exchangePluginOAuth,\n googleCalendar,\n }\n}\n"]}
@@ -1,63 +0,0 @@
1
- // src/agent.ts
2
- var FayzAgentError = class extends Error {
3
- constructor(message, status) {
4
- super(message);
5
- this.status = status;
6
- this.name = "FayzAgentError";
7
- }
8
- };
9
- function createFayzAgentClient(options) {
10
- const fetcher = options.fetcher ?? globalThis.fetch;
11
- const base = `${options.baseUrl.replace(/\/+$/, "")}/public/projects/${options.projectId}/agents`;
12
- const headers = {
13
- "Content-Type": "application/json",
14
- "x-fayz-agent-key": options.publishableKey
15
- };
16
- async function request(path, init) {
17
- const response = await fetcher(`${base}${path}`, { ...init, headers });
18
- if (!response.ok) {
19
- const body = await response.json().catch(() => null);
20
- throw new FayzAgentError(body?.error ?? `Agent request failed (${response.status})`, response.status);
21
- }
22
- return await response.json();
23
- }
24
- return {
25
- async getInfo(signal) {
26
- const body = await request("/config", { method: "GET", signal });
27
- return body.agent;
28
- },
29
- async chat({ signal, ...input }) {
30
- const body = await request("/chat", {
31
- method: "POST",
32
- body: JSON.stringify(input),
33
- signal
34
- });
35
- return {
36
- conversationId: body.conversationId ?? "",
37
- content: body.content ?? "",
38
- toolCalls: body.toolCalls ?? [],
39
- ...body.pendingAction ? { pendingAction: body.pendingAction } : {}
40
- };
41
- },
42
- async listConversations(externalUserId, signal) {
43
- const query = externalUserId ? `?externalUserId=${encodeURIComponent(externalUserId)}` : "";
44
- const body = await request(
45
- `/conversations${query}`,
46
- { method: "GET", signal }
47
- );
48
- return body.conversations ?? [];
49
- },
50
- async getConversation(conversationId, externalUserId, signal) {
51
- const query = externalUserId ? `?externalUserId=${encodeURIComponent(externalUserId)}` : "";
52
- const body = await request(
53
- `/conversations/${encodeURIComponent(conversationId)}${query}`,
54
- { method: "GET", signal }
55
- );
56
- return body.conversation;
57
- }
58
- };
59
- }
60
-
61
- export { FayzAgentError, createFayzAgentClient };
62
- //# sourceMappingURL=chunk-VPMRURSI.js.map
63
- //# sourceMappingURL=chunk-VPMRURSI.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/agent.ts"],"names":[],"mappings":"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","file":"chunk-VPMRURSI.js","sourcesContent":["/**\n * Client for the Fayz agent broker — the runtime surface a generated app uses\n * to reach the AI agent configured for its project in Fayz.\n *\n * Mirrors `createFayzShopProvider`: the app holds a publishable key, Fayz holds\n * the model credentials. The key ships in the bundle the same way a Supabase\n * anon key does; it only ever resolves to the one agent its web channel belongs\n * to, and the broker rate-limits per project.\n *\n * Tools are client-plane. The app declares what it can do (`tools`), the model\n * decides what to call, and the app executes the calls against its own session\n * before handing results back. Fayz never needs the app's data credentials.\n */\n\nexport interface FayzAgentClientOptions {\n /** Fayz API base, e.g. https://fayz.ai/api */\n baseUrl: string\n projectId: string\n /** Publishable key of the project's WEB agent channel. */\n publishableKey: string\n fetcher?: typeof fetch\n}\n\nexport interface FayzAgentTool {\n name: string\n description: string\n /** JSON Schema for the tool's arguments. */\n parameters?: Record<string, unknown>\n}\n\nexport interface FayzAgentToolCall {\n id: string\n name: string\n arguments: Record<string, unknown>\n}\n\nexport interface FayzAgentToolResult {\n toolCallId: string\n content: string\n}\n\nexport interface FayzAgentChatInput {\n /** New end-user message. Omit when replying with tool results. */\n message?: string\n conversationId?: string\n /** Identity of the end user, required by channels with an INTERNAL audience. */\n externalUserId?: string\n /** Human label for that user, so the owner's dashboard shows a name. */\n externalUserName?: string\n tools?: FayzAgentTool[]\n toolResults?: FayzAgentToolResult[]\n /** Decision for a server-parked write (broker PENDING_CONFIRMATION step). */\n confirmAction?: { id: string; approved: boolean }\n /** Runtime context the agent should know about (page, locale, tenant). */\n context?: Record<string, unknown>\n signal?: AbortSignal\n}\n\n/** A server-plane write the broker parked pending human confirmation. */\nexport interface FayzAgentPendingAction {\n id: string\n toolName: string\n title?: string\n params?: Record<string, unknown>\n}\n\nexport interface FayzAgentChatResponse {\n conversationId: string\n content: string\n toolCalls: FayzAgentToolCall[]\n /** Present when the broker is waiting on a confirmAction for this write. */\n pendingAction?: FayzAgentPendingAction\n}\n\nexport interface FayzAgentInfo {\n id: string\n name: string\n description: string | null\n icon: string | null\n}\n\nexport class FayzAgentError extends Error {\n constructor(\n message: string,\n readonly status: number,\n ) {\n super(message)\n this.name = 'FayzAgentError'\n }\n}\n\nexport interface FayzAgentConversationSummary {\n id: string\n title: string | null\n /** Last activity — the field the list is ordered by. */\n updatedAt: string\n}\n\nexport interface FayzAgentConversationMessage {\n id: string\n role: string\n content: string\n createdAt: string\n /** Tool calls this reply made, with their results — so a resumed thread shows\n * the same trace and record links it showed live. */\n toolCalls?: Array<{\n name: string\n arguments?: Record<string, unknown>\n result?: string\n }>\n}\n\nexport interface FayzAgentConversationDetail {\n id: string\n title: string | null\n messages: FayzAgentConversationMessage[]\n}\n\nexport interface FayzAgentClient {\n /** Identity of the agent behind the key, for rendering its name/icon. */\n getInfo(signal?: AbortSignal): Promise<FayzAgentInfo>\n chat(input: FayzAgentChatInput): Promise<FayzAgentChatResponse>\n /** The signed-in user's own threads, most-recently-active first. */\n listConversations(externalUserId?: string, signal?: AbortSignal): Promise<FayzAgentConversationSummary[]>\n /** One thread with its transcript — 404s on another user's thread. */\n getConversation(\n conversationId: string,\n externalUserId?: string,\n signal?: AbortSignal,\n ): Promise<FayzAgentConversationDetail>\n}\n\nexport function createFayzAgentClient(options: FayzAgentClientOptions): FayzAgentClient {\n const fetcher = options.fetcher ?? globalThis.fetch\n const base = `${options.baseUrl.replace(/\\/+$/, '')}/public/projects/${options.projectId}/agents`\n const headers = {\n 'Content-Type': 'application/json',\n 'x-fayz-agent-key': options.publishableKey,\n }\n\n async function request<T>(path: string, init: RequestInit): Promise<T> {\n const response = await fetcher(`${base}${path}`, { ...init, headers })\n if (!response.ok) {\n const body = (await response.json().catch(() => null)) as { error?: string } | null\n throw new FayzAgentError(body?.error ?? `Agent request failed (${response.status})`, response.status)\n }\n return (await response.json()) as T\n }\n\n return {\n async getInfo(signal) {\n const body = await request<{ agent: FayzAgentInfo }>('/config', { method: 'GET', signal })\n return body.agent\n },\n\n async chat({ signal, ...input }) {\n const body = await request<Partial<FayzAgentChatResponse>>('/chat', {\n method: 'POST',\n body: JSON.stringify(input),\n signal,\n })\n return {\n conversationId: body.conversationId ?? '',\n content: body.content ?? '',\n toolCalls: body.toolCalls ?? [],\n ...(body.pendingAction ? { pendingAction: body.pendingAction } : {}),\n }\n },\n\n async listConversations(externalUserId, signal) {\n const query = externalUserId ? `?externalUserId=${encodeURIComponent(externalUserId)}` : ''\n const body = await request<{ conversations?: FayzAgentConversationSummary[] }>(\n `/conversations${query}`,\n { method: 'GET', signal },\n )\n return body.conversations ?? []\n },\n\n async getConversation(conversationId, externalUserId, signal) {\n const query = externalUserId ? `?externalUserId=${encodeURIComponent(externalUserId)}` : ''\n const body = await request<{ conversation: FayzAgentConversationDetail }>(\n `/conversations/${encodeURIComponent(conversationId)}${query}`,\n { method: 'GET', signal },\n )\n return body.conversation\n },\n }\n}\n"]}
@@ -1,140 +0,0 @@
1
- 'use strict';
2
-
3
- // src/release-channels.json
4
- var release_channels_default = {
5
- channels: {
6
- stable: {
7
- "@fayz-ai/sdk": "^0.8.1",
8
- "@fayz-ai/core": "^0.8.1",
9
- "@fayz-ai/auth": "^0.8.1",
10
- "@fayz-ai/ui": "^0.8.1",
11
- "@fayz-ai/saas": "^0.8.1",
12
- "@fayz-ai/shop": "^0.8.0",
13
- "@fayz-ai/storefront": "^0.8.0",
14
- "@fayz-ai/portal": "^0.8.0",
15
- "@fayz-ai/courses": "^0.8.0",
16
- "@fayz-ai/db": "^0.8.0",
17
- "@fayz-ai/plugin-agenda": "^0.8.1",
18
- "@fayz-ai/plugin-auth": "^0.8.0",
19
- "@fayz-ai/plugin-automations": "^0.8.0",
20
- "@fayz-ai/plugin-blog": "^0.8.1",
21
- "@fayz-ai/plugin-conversations": "^0.8.0",
22
- "@fayz-ai/plugin-courses": "^0.8.0",
23
- "@fayz-ai/plugin-crm": "^0.8.0",
24
- "@fayz-ai/plugin-dashboard": "^0.8.0",
25
- "@fayz-ai/plugin-financial": "^0.8.0",
26
- "@fayz-ai/plugin-forms": "^0.8.0",
27
- "@fayz-ai/plugin-inventory": "^0.8.0",
28
- "@fayz-ai/plugin-marketing": "^0.8.1",
29
- "@fayz-ai/plugin-menu": "^0.8.0",
30
- "@fayz-ai/plugin-orders": "^0.8.0",
31
- "@fayz-ai/plugin-payments": "^0.8.0",
32
- "@fayz-ai/plugin-reports": "^0.8.0",
33
- "@fayz-ai/plugin-reputation": "^0.8.0",
34
- "@fayz-ai/plugin-shop": "^0.8.0",
35
- "@fayz-ai/plugin-sites": "^0.8.0",
36
- "@fayz-ai/plugin-tables": "^0.8.0",
37
- "@fayz-ai/plugin-tasks": "^0.8.0"
38
- },
39
- latest: {
40
- "@fayz-ai/sdk": "^0.8.1",
41
- "@fayz-ai/core": "^0.8.1",
42
- "@fayz-ai/auth": "^0.8.1",
43
- "@fayz-ai/ui": "^0.8.1",
44
- "@fayz-ai/saas": "^0.8.1",
45
- "@fayz-ai/shop": "^0.8.0",
46
- "@fayz-ai/storefront": "^0.8.0",
47
- "@fayz-ai/portal": "^0.8.0",
48
- "@fayz-ai/courses": "^0.8.0",
49
- "@fayz-ai/db": "^0.8.0",
50
- "@fayz-ai/plugin-agenda": "^0.8.1",
51
- "@fayz-ai/plugin-auth": "^0.8.0",
52
- "@fayz-ai/plugin-automations": "^0.8.0",
53
- "@fayz-ai/plugin-blog": "^0.8.1",
54
- "@fayz-ai/plugin-conversations": "^0.8.0",
55
- "@fayz-ai/plugin-courses": "^0.8.0",
56
- "@fayz-ai/plugin-crm": "^0.8.0",
57
- "@fayz-ai/plugin-dashboard": "^0.8.0",
58
- "@fayz-ai/plugin-financial": "^0.8.0",
59
- "@fayz-ai/plugin-forms": "^0.8.0",
60
- "@fayz-ai/plugin-inventory": "^0.8.0",
61
- "@fayz-ai/plugin-marketing": "^0.8.1",
62
- "@fayz-ai/plugin-menu": "^0.8.0",
63
- "@fayz-ai/plugin-orders": "^0.8.0",
64
- "@fayz-ai/plugin-payments": "^0.8.0",
65
- "@fayz-ai/plugin-reports": "^0.8.0",
66
- "@fayz-ai/plugin-reputation": "^0.8.0",
67
- "@fayz-ai/plugin-shop": "^0.8.0",
68
- "@fayz-ai/plugin-sites": "^0.8.0",
69
- "@fayz-ai/plugin-tables": "^0.8.0",
70
- "@fayz-ai/plugin-tasks": "^0.8.0"
71
- },
72
- preview: {
73
- "@fayz-ai/sdk": "^0.8.1",
74
- "@fayz-ai/core": "^0.8.1",
75
- "@fayz-ai/auth": "^0.8.1",
76
- "@fayz-ai/ui": "^0.8.1",
77
- "@fayz-ai/saas": "^0.8.1",
78
- "@fayz-ai/shop": "^0.8.0",
79
- "@fayz-ai/storefront": "^0.8.0",
80
- "@fayz-ai/portal": "^0.8.0",
81
- "@fayz-ai/courses": "^0.8.0",
82
- "@fayz-ai/db": "^0.8.0",
83
- "@fayz-ai/plugin-agenda": "^0.8.1",
84
- "@fayz-ai/plugin-auth": "^0.8.0",
85
- "@fayz-ai/plugin-automations": "^0.8.0",
86
- "@fayz-ai/plugin-blog": "^0.8.1",
87
- "@fayz-ai/plugin-conversations": "^0.8.0",
88
- "@fayz-ai/plugin-courses": "^0.8.0",
89
- "@fayz-ai/plugin-crm": "^0.8.0",
90
- "@fayz-ai/plugin-dashboard": "^0.8.0",
91
- "@fayz-ai/plugin-financial": "^0.8.0",
92
- "@fayz-ai/plugin-forms": "^0.8.0",
93
- "@fayz-ai/plugin-inventory": "^0.8.0",
94
- "@fayz-ai/plugin-marketing": "^0.8.1",
95
- "@fayz-ai/plugin-menu": "^0.8.0",
96
- "@fayz-ai/plugin-orders": "^0.8.0",
97
- "@fayz-ai/plugin-payments": "^0.8.0",
98
- "@fayz-ai/plugin-reports": "^0.8.0",
99
- "@fayz-ai/plugin-reputation": "^0.8.0",
100
- "@fayz-ai/plugin-shop": "^0.8.0",
101
- "@fayz-ai/plugin-sites": "^0.8.0",
102
- "@fayz-ai/plugin-tables": "^0.8.0",
103
- "@fayz-ai/plugin-tasks": "^0.8.0"
104
- }
105
- }
106
- };
107
-
108
- // src/release-channels.ts
109
- var releaseChannelPackages = release_channels_default.channels;
110
- function buildVersionSet(channel) {
111
- return {
112
- channel,
113
- packages: { ...releaseChannelPackages[channel] }
114
- };
115
- }
116
- var fayzPackageVersionSets = {
117
- stable: buildVersionSet("stable"),
118
- latest: buildVersionSet("latest"),
119
- preview: buildVersionSet("preview")
120
- };
121
- function resolveFayzPackageVersions(channel = "stable") {
122
- return fayzPackageVersionSets[channel];
123
- }
124
- function resolveFayzPackageDependencies(channel = "stable") {
125
- return { ...resolveFayzPackageVersions(channel).packages };
126
- }
127
- function resolveFayzPackageVersion(packageName, channel = "stable") {
128
- const version = resolveFayzPackageVersions(channel).packages[packageName];
129
- if (!version) {
130
- throw new Error(`No Fayz package version configured for ${packageName} in ${channel} channel`);
131
- }
132
- return version;
133
- }
134
-
135
- exports.fayzPackageVersionSets = fayzPackageVersionSets;
136
- exports.resolveFayzPackageDependencies = resolveFayzPackageDependencies;
137
- exports.resolveFayzPackageVersion = resolveFayzPackageVersion;
138
- exports.resolveFayzPackageVersions = resolveFayzPackageVersions;
139
- //# sourceMappingURL=chunk-WMH7SIER.cjs.map
140
- //# sourceMappingURL=chunk-WMH7SIER.cjs.map