@bubblelab/shared-schemas 0.1.0

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 (75) hide show
  1. package/LICENSE.txt +202 -0
  2. package/README.md +138 -0
  3. package/dist/api-schema.d.ts +38 -0
  4. package/dist/api-schema.d.ts.map +1 -0
  5. package/dist/api-schema.js +26 -0
  6. package/dist/api-schema.js.map +1 -0
  7. package/dist/bubble-definition-schema.d.ts +242 -0
  8. package/dist/bubble-definition-schema.d.ts.map +1 -0
  9. package/dist/bubble-definition-schema.js +95 -0
  10. package/dist/bubble-definition-schema.js.map +1 -0
  11. package/dist/bubbleflow-execution-schema.d.ts +580 -0
  12. package/dist/bubbleflow-execution-schema.d.ts.map +1 -0
  13. package/dist/bubbleflow-execution-schema.js +230 -0
  14. package/dist/bubbleflow-execution-schema.js.map +1 -0
  15. package/dist/bubbleflow-schema.d.ts +785 -0
  16. package/dist/bubbleflow-schema.d.ts.map +1 -0
  17. package/dist/bubbleflow-schema.js +206 -0
  18. package/dist/bubbleflow-schema.js.map +1 -0
  19. package/dist/credential-schema.d.ts +405 -0
  20. package/dist/credential-schema.d.ts.map +1 -0
  21. package/dist/credential-schema.js +327 -0
  22. package/dist/credential-schema.js.map +1 -0
  23. package/dist/database-definition-schema.d.ts +97 -0
  24. package/dist/database-definition-schema.d.ts.map +1 -0
  25. package/dist/database-definition-schema.js +36 -0
  26. package/dist/database-definition-schema.js.map +1 -0
  27. package/dist/generate-bubbleflow-schema.d.ts +481 -0
  28. package/dist/generate-bubbleflow-schema.d.ts.map +1 -0
  29. package/dist/generate-bubbleflow-schema.js +247 -0
  30. package/dist/generate-bubbleflow-schema.js.map +1 -0
  31. package/dist/index.d.ts +16 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +18 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/mock-data-generator.d.ts +51 -0
  36. package/dist/mock-data-generator.d.ts.map +1 -0
  37. package/dist/mock-data-generator.js +325 -0
  38. package/dist/mock-data-generator.js.map +1 -0
  39. package/dist/mock-data-generator.test.d.ts +2 -0
  40. package/dist/mock-data-generator.test.d.ts.map +1 -0
  41. package/dist/mock-data-generator.test.js +176 -0
  42. package/dist/mock-data-generator.test.js.map +1 -0
  43. package/dist/oauth-schema.d.ts +61 -0
  44. package/dist/oauth-schema.d.ts.map +1 -0
  45. package/dist/oauth-schema.js +75 -0
  46. package/dist/oauth-schema.js.map +1 -0
  47. package/dist/prompts.d.ts +12 -0
  48. package/dist/prompts.d.ts.map +1 -0
  49. package/dist/prompts.js +40 -0
  50. package/dist/prompts.js.map +1 -0
  51. package/dist/routes.d.ts +2207 -0
  52. package/dist/routes.d.ts.map +1 -0
  53. package/dist/routes.js +978 -0
  54. package/dist/routes.js.map +1 -0
  55. package/dist/streaming-events.d.ts +35 -0
  56. package/dist/streaming-events.d.ts.map +1 -0
  57. package/dist/streaming-events.js +5 -0
  58. package/dist/streaming-events.js.map +1 -0
  59. package/dist/subscription-status-schema.d.ts +90 -0
  60. package/dist/subscription-status-schema.d.ts.map +1 -0
  61. package/dist/subscription-status-schema.js +66 -0
  62. package/dist/subscription-status-schema.js.map +1 -0
  63. package/dist/types.d.ts +19 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +27 -0
  66. package/dist/types.js.map +1 -0
  67. package/dist/waitlist-schema.d.ts +30 -0
  68. package/dist/waitlist-schema.d.ts.map +1 -0
  69. package/dist/waitlist-schema.js +39 -0
  70. package/dist/waitlist-schema.js.map +1 -0
  71. package/dist/webhook-schema.d.ts +95 -0
  72. package/dist/webhook-schema.d.ts.map +1 -0
  73. package/dist/webhook-schema.js +50 -0
  74. package/dist/webhook-schema.js.map +1 -0
  75. package/package.json +45 -0
@@ -0,0 +1,327 @@
1
+ import { CredentialType } from './types.js';
2
+ import { z } from '@hono/zod-openapi';
3
+ import { databaseMetadataSchema } from './database-definition-schema.js';
4
+ /**
5
+ * Maps credential types to their environment variable names (for backend only!!!!)
6
+ */
7
+ export const CREDENTIAL_ENV_MAP = {
8
+ [CredentialType.OPENAI_CRED]: 'OPENAI_API_KEY',
9
+ [CredentialType.GOOGLE_GEMINI_CRED]: 'GOOGLE_API_KEY',
10
+ [CredentialType.ANTHROPIC_CRED]: 'ANTHROPIC_API_KEY',
11
+ [CredentialType.FIRECRAWL_API_KEY]: 'FIRE_CRAWL_API_KEY',
12
+ [CredentialType.DATABASE_CRED]: 'BUBBLE_CONNECTING_STRING_URL',
13
+ [CredentialType.SLACK_CRED]: 'SLACK_TOKEN',
14
+ [CredentialType.RESEND_CRED]: 'RESEND_API_KEY',
15
+ [CredentialType.OPENROUTER_CRED]: 'OPENROUTER_API_KEY',
16
+ [CredentialType.CLOUDFLARE_R2_ACCESS_KEY]: 'CLOUDFLARE_R2_ACCESS_KEY',
17
+ [CredentialType.CLOUDFLARE_R2_SECRET_KEY]: 'CLOUDFLARE_R2_SECRET_KEY',
18
+ [CredentialType.CLOUDFLARE_R2_ACCOUNT_ID]: 'CLOUDFLARE_R2_ACCOUNT_ID',
19
+ [CredentialType.GOOGLE_DRIVE_CRED]: '',
20
+ [CredentialType.GMAIL_CRED]: '',
21
+ [CredentialType.GOOGLE_SHEETS_CRED]: '',
22
+ [CredentialType.GOOGLE_CALENDAR_CRED]: '',
23
+ };
24
+ /** Used by bubblelab studio */
25
+ export const SYSTEM_CREDENTIALS = new Set([
26
+ CredentialType.GOOGLE_GEMINI_CRED,
27
+ CredentialType.FIRECRAWL_API_KEY,
28
+ CredentialType.OPENAI_CRED,
29
+ CredentialType.ANTHROPIC_CRED,
30
+ CredentialType.RESEND_CRED,
31
+ CredentialType.OPENROUTER_CRED,
32
+ // Cloudflare R2 Storage credentials
33
+ CredentialType.CLOUDFLARE_R2_ACCESS_KEY,
34
+ CredentialType.CLOUDFLARE_R2_SECRET_KEY,
35
+ CredentialType.CLOUDFLARE_R2_ACCOUNT_ID,
36
+ ]);
37
+ /**
38
+ * OAuth provider configurations - single source of truth for OAuth providers
39
+ * Contains all information needed by frontend and backend
40
+ */
41
+ export const OAUTH_PROVIDERS = {
42
+ google: {
43
+ name: 'google',
44
+ displayName: 'Google',
45
+ credentialTypes: {
46
+ [CredentialType.GOOGLE_DRIVE_CRED]: {
47
+ displayName: 'Google Drive',
48
+ defaultScopes: [
49
+ 'https://www.googleapis.com/auth/drive.readonly',
50
+ 'https://www.googleapis.com/auth/drive.file',
51
+ ],
52
+ description: 'Access Google Drive files and folders',
53
+ },
54
+ [CredentialType.GMAIL_CRED]: {
55
+ displayName: 'Gmail',
56
+ defaultScopes: [
57
+ 'https://www.googleapis.com/auth/gmail.readonly',
58
+ 'https://www.googleapis.com/auth/gmail.send',
59
+ 'https://www.googleapis.com/auth/gmail.modify',
60
+ ],
61
+ description: 'Access Gmail for reading, sending, and managing emails',
62
+ },
63
+ [CredentialType.GOOGLE_SHEETS_CRED]: {
64
+ displayName: 'Google Sheets',
65
+ defaultScopes: [
66
+ 'https://www.googleapis.com/auth/spreadsheets',
67
+ 'https://www.googleapis.com/auth/drive.file',
68
+ ],
69
+ description: 'Access Google Sheets for reading and writing spreadsheet data',
70
+ },
71
+ [CredentialType.GOOGLE_CALENDAR_CRED]: {
72
+ displayName: 'Google Calendar',
73
+ defaultScopes: [
74
+ 'https://www.googleapis.com/auth/calendar.readonly',
75
+ 'https://www.googleapis.com/auth/calendar.events',
76
+ ],
77
+ description: 'Access Google Calendar for reading and managing events',
78
+ },
79
+ },
80
+ authorizationParams: {
81
+ access_type: 'offline', // Required for refresh tokens
82
+ prompt: 'consent', // Force consent screen to ensure refresh token is issued
83
+ },
84
+ },
85
+ };
86
+ /**
87
+ * Get the OAuth provider for a specific credential type
88
+ * Safely maps credential types to their OAuth providers
89
+ */
90
+ export function getOAuthProvider(credentialType) {
91
+ for (const [providerName, config] of Object.entries(OAUTH_PROVIDERS)) {
92
+ if (config.credentialTypes[credentialType]) {
93
+ return providerName;
94
+ }
95
+ }
96
+ return null;
97
+ }
98
+ /**
99
+ * Check if a credential type is OAuth-based
100
+ */
101
+ export function isOAuthCredential(credentialType) {
102
+ return getOAuthProvider(credentialType) !== null;
103
+ }
104
+ /**
105
+ * Collection of credential options for all bubbles
106
+ */
107
+ export const BUBBLE_CREDENTIAL_OPTIONS = {
108
+ 'ai-agent': [
109
+ CredentialType.OPENAI_CRED,
110
+ CredentialType.GOOGLE_GEMINI_CRED,
111
+ CredentialType.ANTHROPIC_CRED,
112
+ CredentialType.FIRECRAWL_API_KEY,
113
+ ],
114
+ postgresql: [CredentialType.DATABASE_CRED],
115
+ slack: [CredentialType.SLACK_CRED],
116
+ resend: [CredentialType.RESEND_CRED],
117
+ 'database-analyzer': [CredentialType.DATABASE_CRED],
118
+ 'slack-notifier': [
119
+ CredentialType.SLACK_CRED,
120
+ CredentialType.OPENAI_CRED,
121
+ CredentialType.GOOGLE_GEMINI_CRED,
122
+ CredentialType.ANTHROPIC_CRED,
123
+ ],
124
+ 'slack-formatter-agent': [
125
+ CredentialType.OPENAI_CRED,
126
+ CredentialType.GOOGLE_GEMINI_CRED,
127
+ CredentialType.ANTHROPIC_CRED,
128
+ ],
129
+ 'slack-data-assistant': [
130
+ CredentialType.DATABASE_CRED,
131
+ CredentialType.SLACK_CRED,
132
+ CredentialType.OPENAI_CRED,
133
+ CredentialType.GOOGLE_GEMINI_CRED,
134
+ CredentialType.ANTHROPIC_CRED,
135
+ ],
136
+ 'hello-world': [],
137
+ http: [],
138
+ 'get-bubble-details-tool': [],
139
+ 'list-bubbles-tool': [],
140
+ 'sql-query-tool': [],
141
+ 'chart-js-tool': [],
142
+ 'bubbleflow-validation-tool': [],
143
+ 'web-search-tool': [CredentialType.FIRECRAWL_API_KEY],
144
+ 'web-scrape-tool': [CredentialType.FIRECRAWL_API_KEY],
145
+ 'web-crawl-tool': [CredentialType.FIRECRAWL_API_KEY],
146
+ 'web-extract-tool': [CredentialType.FIRECRAWL_API_KEY],
147
+ 'research-agent-tool': [
148
+ CredentialType.FIRECRAWL_API_KEY,
149
+ CredentialType.GOOGLE_GEMINI_CRED,
150
+ ],
151
+ 'reddit-scrape-tool': [],
152
+ 'bubbleflow-code-generator': [],
153
+ 'bubbleflow-generator': [
154
+ CredentialType.GOOGLE_GEMINI_CRED,
155
+ CredentialType.OPENROUTER_CRED,
156
+ ],
157
+ 'pdf-form-operations': [],
158
+ 'pdf-ocr-workflow': [
159
+ CredentialType.GOOGLE_GEMINI_CRED,
160
+ CredentialType.OPENAI_CRED,
161
+ CredentialType.ANTHROPIC_CRED,
162
+ CredentialType.OPENROUTER_CRED,
163
+ ],
164
+ 'generate-document-workflow': [
165
+ CredentialType.GOOGLE_GEMINI_CRED,
166
+ CredentialType.OPENAI_CRED,
167
+ CredentialType.ANTHROPIC_CRED,
168
+ CredentialType.OPENROUTER_CRED,
169
+ ],
170
+ 'parse-document-workflow': [
171
+ CredentialType.GOOGLE_GEMINI_CRED,
172
+ CredentialType.OPENAI_CRED,
173
+ CredentialType.ANTHROPIC_CRED,
174
+ CredentialType.OPENROUTER_CRED,
175
+ CredentialType.CLOUDFLARE_R2_ACCESS_KEY,
176
+ CredentialType.CLOUDFLARE_R2_SECRET_KEY,
177
+ CredentialType.CLOUDFLARE_R2_ACCOUNT_ID,
178
+ ],
179
+ storage: [
180
+ CredentialType.CLOUDFLARE_R2_ACCESS_KEY,
181
+ CredentialType.CLOUDFLARE_R2_SECRET_KEY,
182
+ CredentialType.CLOUDFLARE_R2_ACCOUNT_ID,
183
+ ],
184
+ 'google-drive': [CredentialType.GOOGLE_DRIVE_CRED],
185
+ gmail: [CredentialType.GMAIL_CRED],
186
+ 'google-sheets': [CredentialType.GOOGLE_SHEETS_CRED],
187
+ 'google-calendar': [CredentialType.GOOGLE_CALENDAR_CRED],
188
+ };
189
+ // POST /credentials - Create credential schema
190
+ export const createCredentialSchema = z
191
+ .object({
192
+ credentialType: z.nativeEnum(CredentialType).openapi({
193
+ description: 'Type of credential to store',
194
+ example: CredentialType.OPENAI_CRED,
195
+ }),
196
+ value: z.string().min(1).openapi({
197
+ description: 'The credential value (will be encrypted)',
198
+ example: 'sk-1234567890abcdef',
199
+ }),
200
+ name: z.string().optional().openapi({
201
+ description: 'Optional user-friendly name for the credential',
202
+ example: 'My OpenAI Key',
203
+ }),
204
+ skipValidation: z.boolean().optional().openapi({
205
+ description: 'Skip credential validation before storing (for testing/admin use)',
206
+ example: false,
207
+ }),
208
+ credentialConfigurations: z
209
+ .record(z.string(), z.unknown())
210
+ .optional()
211
+ .openapi({
212
+ description: 'Optional configurations for credential validation (e.g., ignoreSSL for PostgreSQL)',
213
+ example: { ignoreSSL: true },
214
+ }),
215
+ metadata: databaseMetadataSchema.optional().openapi({
216
+ description: 'Optional metadata for the credential (e.g., database schema for DATABASE_CRED)',
217
+ example: {
218
+ tables: {
219
+ users: {
220
+ id: 'integer',
221
+ email: 'character varying',
222
+ created_at: 'timestamp with time zone',
223
+ },
224
+ },
225
+ rules: [
226
+ {
227
+ id: 'rule-1',
228
+ text: 'No direct DELETE on users table',
229
+ enabled: true,
230
+ createdAt: '2024-01-01T00:00:00Z',
231
+ updatedAt: '2024-01-01T00:00:00Z',
232
+ },
233
+ ],
234
+ },
235
+ }),
236
+ })
237
+ .openapi('CreateCredentialRequest');
238
+ // PUT /credentials/:id - Update credential schema
239
+ export const updateCredentialSchema = z
240
+ .object({
241
+ value: z.string().optional().openapi({
242
+ description: 'The credential value (will be encrypted). Leave empty to keep current value.',
243
+ example: 'sk-1234567890abcdef',
244
+ }),
245
+ name: z.string().optional().openapi({
246
+ description: 'Optional user-friendly name for the credential',
247
+ example: 'My OpenAI Key',
248
+ }),
249
+ skipValidation: z.boolean().optional().openapi({
250
+ description: 'Skip credential validation before storing (for testing/admin use)',
251
+ example: false,
252
+ }),
253
+ credentialConfigurations: z
254
+ .record(z.string(), z.unknown())
255
+ .optional()
256
+ .openapi({
257
+ description: 'Optional configurations for credential validation (e.g., ignoreSSL for PostgreSQL)',
258
+ example: { ignoreSSL: true },
259
+ }),
260
+ metadata: databaseMetadataSchema.optional().openapi({
261
+ description: 'Optional metadata for the credential (e.g., database schema for DATABASE_CRED)',
262
+ example: {
263
+ tables: {
264
+ users: {
265
+ id: 'integer',
266
+ email: 'character varying',
267
+ created_at: 'timestamp with time zone',
268
+ },
269
+ },
270
+ },
271
+ }),
272
+ })
273
+ .openapi('UpdateCredentialRequest');
274
+ // GET /credentials - List credentials response
275
+ export const credentialResponseSchema = z
276
+ .object({
277
+ id: z.number().openapi({ description: 'Credential ID' }),
278
+ credentialType: z.string().openapi({ description: 'Type of credential' }),
279
+ name: z.string().optional().openapi({ description: 'Credential name' }),
280
+ metadata: databaseMetadataSchema
281
+ .optional()
282
+ .openapi({ description: 'Credential metadata' }),
283
+ createdAt: z.string().openapi({ description: 'Creation timestamp' }),
284
+ // OAuth-specific fields
285
+ isOauth: z
286
+ .boolean()
287
+ .optional()
288
+ .openapi({ description: 'Whether this is an OAuth credential' }),
289
+ oauthProvider: z
290
+ .string()
291
+ .optional()
292
+ .openapi({ description: 'OAuth provider name' }),
293
+ oauthExpiresAt: z
294
+ .string()
295
+ .optional()
296
+ .openapi({ description: 'OAuth token expiration timestamp' }),
297
+ oauthScopes: z
298
+ .array(z.string())
299
+ .optional()
300
+ .openapi({ description: 'OAuth scopes granted' }),
301
+ oauthStatus: z
302
+ .enum(['active', 'expired', 'needs_refresh'])
303
+ .optional()
304
+ .openapi({ description: 'OAuth token status' }),
305
+ })
306
+ .openapi('CredentialResponse');
307
+ // POST /credentials - Create credential response
308
+ export const createCredentialResponseSchema = z
309
+ .object({
310
+ id: z.number().openapi({ description: 'Credential ID' }),
311
+ message: z.string().openapi({ description: 'Success message' }),
312
+ })
313
+ .openapi('CreateCredentialResponse');
314
+ // PUT /credentials/:id - Update credential response
315
+ export const updateCredentialResponseSchema = z
316
+ .object({
317
+ id: z.number().openapi({ description: 'Credential ID' }),
318
+ message: z.string().openapi({ description: 'Success message' }),
319
+ })
320
+ .openapi('UpdateCredentialResponse');
321
+ // General success message response (used by DELETE /credentials/:id, DELETE /bubble-flow/:id, PUT /bubble-flow/:id)
322
+ export const successMessageResponseSchema = z
323
+ .object({
324
+ message: z.string().openapi({ description: 'Success message' }),
325
+ })
326
+ .openapi('SuccessMessageResponse');
327
+ //# sourceMappingURL=credential-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-schema.js","sourceRoot":"","sources":["../src/credential-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Database Definition Schema
3
+ *
4
+ * This schema is designed to store database table definitions and metadata
5
+ */
6
+ import { z } from '@hono/zod-openapi';
7
+ export interface DatabaseConnection {
8
+ id: string;
9
+ name: string;
10
+ type: 'postgresql' | 'mysql' | 'mongodb' | 'bigquery' | 'sqlite';
11
+ host: string;
12
+ port: number;
13
+ database: string;
14
+ username?: string;
15
+ status: 'connected' | 'disconnected' | 'error';
16
+ createdAt: string;
17
+ lastUsed: string;
18
+ description?: string;
19
+ }
20
+ export type DatabaseStatus = 'connected' | 'disconnected' | 'error';
21
+ export type DatabaseType = 'postgresql' | 'mysql' | 'mongodb' | 'bigquery' | 'sqlite';
22
+ export interface DatabaseColumn {
23
+ name: string;
24
+ type: string;
25
+ isNullable: boolean;
26
+ defaultValue?: string;
27
+ constraints?: string[];
28
+ }
29
+ export interface DatabaseTable {
30
+ name: string;
31
+ schema: string;
32
+ columns: DatabaseColumn[];
33
+ rowCount?: number;
34
+ size?: string;
35
+ }
36
+ export interface DatabaseSchema {
37
+ tables: DatabaseTable[];
38
+ totalTables: number;
39
+ totalSize?: string;
40
+ }
41
+ export declare const databaseMetadataSchema: z.ZodObject<{
42
+ tables: z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>>;
43
+ tableNotes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
44
+ databaseName: z.ZodOptional<z.ZodString>;
45
+ databaseType: z.ZodOptional<z.ZodEnum<["postgresql", "mysql", "sqlite", "mssql", "oracle"]>>;
46
+ rules: z.ZodOptional<z.ZodArray<z.ZodObject<{
47
+ id: z.ZodString;
48
+ text: z.ZodString;
49
+ enabled: z.ZodBoolean;
50
+ createdAt: z.ZodString;
51
+ updatedAt: z.ZodString;
52
+ }, "strip", z.ZodTypeAny, {
53
+ id: string;
54
+ text: string;
55
+ enabled: boolean;
56
+ createdAt: string;
57
+ updatedAt: string;
58
+ }, {
59
+ id: string;
60
+ text: string;
61
+ enabled: boolean;
62
+ createdAt: string;
63
+ updatedAt: string;
64
+ }>, "many">>;
65
+ notes: z.ZodOptional<z.ZodString>;
66
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
67
+ }, "strip", z.ZodTypeAny, {
68
+ tables: Record<string, Record<string, string>>;
69
+ tableNotes?: Record<string, string> | undefined;
70
+ databaseName?: string | undefined;
71
+ databaseType?: "postgresql" | "mysql" | "sqlite" | "mssql" | "oracle" | undefined;
72
+ rules?: {
73
+ id: string;
74
+ text: string;
75
+ enabled: boolean;
76
+ createdAt: string;
77
+ updatedAt: string;
78
+ }[] | undefined;
79
+ notes?: string | undefined;
80
+ tags?: string[] | undefined;
81
+ }, {
82
+ tables: Record<string, Record<string, string>>;
83
+ tableNotes?: Record<string, string> | undefined;
84
+ databaseName?: string | undefined;
85
+ databaseType?: "postgresql" | "mysql" | "sqlite" | "mssql" | "oracle" | undefined;
86
+ rules?: {
87
+ id: string;
88
+ text: string;
89
+ enabled: boolean;
90
+ createdAt: string;
91
+ updatedAt: string;
92
+ }[] | undefined;
93
+ notes?: string | undefined;
94
+ tags?: string[] | undefined;
95
+ }>;
96
+ export type DatabaseMetadata = z.infer<typeof databaseMetadataSchema>;
97
+ //# sourceMappingURL=database-definition-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-definition-schema.d.ts","sourceRoot":"","sources":["../src/database-definition-schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAGtC,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,OAAO,CAAC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,CAAC;AACpE,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,OAAO,GACP,SAAS,GACT,UAAU,GACV,QAAQ,CAAC;AAGb,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Database Definition Schema
3
+ *
4
+ * This schema is designed to store database table definitions and metadata
5
+ */
6
+ import { z } from '@hono/zod-openapi';
7
+ // Schema for database metadata that can be stored in credentials
8
+ export const databaseMetadataSchema = z.object({
9
+ // Core database definition - mapping of table names to column definitions
10
+ // Format: { [tableName]: { [columnName]: columnType } }
11
+ tables: z.record(z.string(), // table name
12
+ z.record(z.string(), // column name
13
+ z.string() // notes about it
14
+ )),
15
+ // Table-level notes - mapping of table names to notes about the entire table
16
+ tableNotes: z.record(z.string(), z.string()).optional(),
17
+ // Optional metadata
18
+ databaseName: z.string().optional(),
19
+ databaseType: z
20
+ .enum(['postgresql', 'mysql', 'sqlite', 'mssql', 'oracle'])
21
+ .optional(),
22
+ // Rules and constraints - simplified to match frontend
23
+ rules: z
24
+ .array(z.object({
25
+ id: z.string(),
26
+ text: z.string(),
27
+ enabled: z.boolean(),
28
+ createdAt: z.string(), // ISO string
29
+ updatedAt: z.string(), // ISO string
30
+ }))
31
+ .optional(),
32
+ // Additional context
33
+ notes: z.string().optional(),
34
+ tags: z.array(z.string()).optional(),
35
+ });
36
+ //# sourceMappingURL=database-definition-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-definition-schema.js","sourceRoot":"","sources":["../src/database-definition-schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAgDtC,iEAAiE;AACjE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,0EAA0E;IAC1E,wDAAwD;IACxD,MAAM,EAAE,CAAC,CAAC,MAAM,CACd,CAAC,CAAC,MAAM,EAAE,EAAE,aAAa;IACzB,CAAC,CAAC,MAAM,CACN,CAAC,CAAC,MAAM,EAAE,EAAE,cAAc;IAC1B,CAAC,CAAC,MAAM,EAAE,CAAC,iBAAiB;KAC7B,CACF;IACD,6EAA6E;IAC7E,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvD,oBAAoB;IACpB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,YAAY,EAAE,CAAC;SACZ,IAAI,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;SAC1D,QAAQ,EAAE;IACb,uDAAuD;IACvD,KAAK,EAAE,CAAC;SACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,aAAa;QACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,aAAa;KACrC,CAAC,CACH;SACA,QAAQ,EAAE;IACb,qBAAqB;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC"}