@bemaestro/sdk 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 (47) hide show
  1. package/LICENSE +193 -0
  2. package/README.md +78 -0
  3. package/dist/generator/generate-sdk.d.ts +14 -0
  4. package/dist/generator/generate-sdk.d.ts.map +1 -0
  5. package/dist/generator/generate-sdk.js +64 -0
  6. package/dist/generator/generate-sdk.js.map +1 -0
  7. package/dist/index.d.ts +8 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +6 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/openapi/build-openapi.d.ts +3 -0
  12. package/dist/openapi/build-openapi.d.ts.map +1 -0
  13. package/dist/openapi/build-openapi.js +386 -0
  14. package/dist/openapi/build-openapi.js.map +1 -0
  15. package/dist/openapi/schema-mapping.d.ts +9 -0
  16. package/dist/openapi/schema-mapping.d.ts.map +1 -0
  17. package/dist/openapi/schema-mapping.js +120 -0
  18. package/dist/openapi/schema-mapping.js.map +1 -0
  19. package/dist/openapi/types.d.ts +37 -0
  20. package/dist/openapi/types.d.ts.map +1 -0
  21. package/dist/openapi/types.js +2 -0
  22. package/dist/openapi/types.js.map +1 -0
  23. package/dist/runtime/client.d.ts +495 -0
  24. package/dist/runtime/client.d.ts.map +1 -0
  25. package/dist/runtime/client.js +46 -0
  26. package/dist/runtime/client.js.map +1 -0
  27. package/dist/runtime/http.d.ts +11 -0
  28. package/dist/runtime/http.d.ts.map +1 -0
  29. package/dist/runtime/http.js +120 -0
  30. package/dist/runtime/http.js.map +1 -0
  31. package/dist/runtime/index.d.ts +7 -0
  32. package/dist/runtime/index.d.ts.map +1 -0
  33. package/dist/runtime/index.js +6 -0
  34. package/dist/runtime/index.js.map +1 -0
  35. package/dist/runtime/modules.d.ts +623 -0
  36. package/dist/runtime/modules.d.ts.map +1 -0
  37. package/dist/runtime/modules.js +694 -0
  38. package/dist/runtime/modules.js.map +1 -0
  39. package/dist/runtime/types.d.ts +72 -0
  40. package/dist/runtime/types.d.ts.map +1 -0
  41. package/dist/runtime/types.js +11 -0
  42. package/dist/runtime/types.js.map +1 -0
  43. package/dist/runtime/webhook-verify.d.ts +31 -0
  44. package/dist/runtime/webhook-verify.d.ts.map +1 -0
  45. package/dist/runtime/webhook-verify.js +51 -0
  46. package/dist/runtime/webhook-verify.js.map +1 -0
  47. package/package.json +36 -0
@@ -0,0 +1,386 @@
1
+ import { ERROR_CODES } from '@bemaestro/shared';
2
+ import { collectionRecordSchema } from './schema-mapping.js';
3
+ function ref(name) {
4
+ return { $ref: `#/components/schemas/${name}` };
5
+ }
6
+ function jsonBody(schema, required = true) {
7
+ return {
8
+ required,
9
+ content: { 'application/json': { schema } },
10
+ };
11
+ }
12
+ function okJson(schema) {
13
+ return { description: 'Success', content: { 'application/json': { schema } } };
14
+ }
15
+ function errorResponse() {
16
+ return { description: 'Error', content: { 'application/json': { schema: ref('ErrorBody') } } };
17
+ }
18
+ function bearerSecurity() {
19
+ return [{ bearerAuth: [] }];
20
+ }
21
+ function appPath(appKey, suffix) {
22
+ return `/v1/${appKey}${suffix}`;
23
+ }
24
+ function addOperation(paths, path, method, operation) {
25
+ paths[path] ??= {};
26
+ paths[path][method] = operation;
27
+ }
28
+ function listQueryParameters() {
29
+ return [
30
+ { name: 'limit', in: 'query', schema: { type: 'integer', default: 50 } },
31
+ { name: 'offset', in: 'query', schema: { type: 'integer', default: 0 } },
32
+ { name: 'sort', in: 'query', schema: { type: 'string' } },
33
+ { name: 'filter', in: 'query', schema: { type: 'string' } },
34
+ { name: 'fields', in: 'query', schema: { type: 'string' } },
35
+ { name: 'expand', in: 'query', schema: { type: 'string' } },
36
+ { name: 'search', in: 'query', schema: { type: 'string' } },
37
+ { name: 'withTotal', in: 'query', schema: { type: 'integer', enum: [0, 1] } },
38
+ ];
39
+ }
40
+ function addCollectionPaths(paths, appKey, collection) {
41
+ const recordName = `${collection.key}_Record`;
42
+ const createName = `${collection.key}_Create`;
43
+ const patchName = `${collection.key}_Patch`;
44
+ const listName = `${collection.key}_ListResponse`;
45
+ const basePath = appPath(appKey, `/${collection.key}`);
46
+ const itemPath = appPath(appKey, `/${collection.key}/{id}`);
47
+ addOperation(paths, basePath, 'get', {
48
+ operationId: `${collection.key}_list`,
49
+ tags: ['data', collection.key],
50
+ security: bearerSecurity(),
51
+ parameters: listQueryParameters(),
52
+ responses: {
53
+ '200': okJson(ref(listName)),
54
+ '401': errorResponse(),
55
+ '403': errorResponse(),
56
+ },
57
+ });
58
+ addOperation(paths, basePath, 'post', {
59
+ operationId: `${collection.key}_create`,
60
+ tags: ['data', collection.key],
61
+ security: bearerSecurity(),
62
+ requestBody: jsonBody(ref(createName)),
63
+ responses: {
64
+ '201': okJson(ref(recordName)),
65
+ '400': errorResponse(),
66
+ '401': errorResponse(),
67
+ },
68
+ });
69
+ addOperation(paths, itemPath, 'get', {
70
+ operationId: `${collection.key}_get`,
71
+ tags: ['data', collection.key],
72
+ security: bearerSecurity(),
73
+ parameters: [
74
+ { name: 'id', in: 'path', required: true, schema: { type: 'string', format: 'uuid' } },
75
+ ],
76
+ responses: {
77
+ '200': okJson(ref(recordName)),
78
+ '404': errorResponse(),
79
+ },
80
+ });
81
+ addOperation(paths, itemPath, 'patch', {
82
+ operationId: `${collection.key}_patch`,
83
+ tags: ['data', collection.key],
84
+ security: bearerSecurity(),
85
+ parameters: [
86
+ { name: 'id', in: 'path', required: true, schema: { type: 'string', format: 'uuid' } },
87
+ ],
88
+ requestBody: jsonBody(ref(patchName)),
89
+ responses: {
90
+ '200': okJson(ref(recordName)),
91
+ '400': errorResponse(),
92
+ },
93
+ });
94
+ addOperation(paths, itemPath, 'put', {
95
+ operationId: `${collection.key}_put`,
96
+ tags: ['data', collection.key],
97
+ security: bearerSecurity(),
98
+ parameters: [
99
+ { name: 'id', in: 'path', required: true, schema: { type: 'string', format: 'uuid' } },
100
+ ],
101
+ requestBody: jsonBody(ref(createName)),
102
+ responses: {
103
+ '200': okJson(ref(recordName)),
104
+ '400': errorResponse(),
105
+ },
106
+ });
107
+ addOperation(paths, itemPath, 'delete', {
108
+ operationId: `${collection.key}_delete`,
109
+ tags: ['data', collection.key],
110
+ security: bearerSecurity(),
111
+ parameters: [
112
+ { name: 'id', in: 'path', required: true, schema: { type: 'string', format: 'uuid' } },
113
+ ],
114
+ responses: {
115
+ '204': { description: 'Deleted' },
116
+ '404': errorResponse(),
117
+ },
118
+ });
119
+ }
120
+ function addCommonModulePaths(paths, appKey) {
121
+ addOperation(paths, appPath(appKey, '/auth/login'), 'post', {
122
+ operationId: 'auth_login',
123
+ tags: ['auth'],
124
+ requestBody: jsonBody({
125
+ type: 'object',
126
+ required: ['email', 'password'],
127
+ properties: { email: { type: 'string' }, password: { type: 'string' } },
128
+ }),
129
+ responses: {
130
+ '200': okJson(ref('AuthLoginResult')),
131
+ '401': errorResponse(),
132
+ },
133
+ });
134
+ addOperation(paths, appPath(appKey, '/auth/refresh'), 'post', {
135
+ operationId: 'auth_refresh',
136
+ tags: ['auth'],
137
+ requestBody: jsonBody({
138
+ type: 'object',
139
+ required: ['refreshToken'],
140
+ properties: { refreshToken: { type: 'string' } },
141
+ }),
142
+ responses: { '200': okJson(ref('TokenPair')) },
143
+ });
144
+ addOperation(paths, appPath(appKey, '/auth/switch-org'), 'post', {
145
+ operationId: 'auth_switch_org',
146
+ tags: ['auth'],
147
+ security: bearerSecurity(),
148
+ requestBody: jsonBody({
149
+ type: 'object',
150
+ required: ['orgId'],
151
+ properties: { orgId: { type: 'string', format: 'uuid' } },
152
+ }),
153
+ responses: { '200': okJson(ref('AuthLoginResult')) },
154
+ });
155
+ addOperation(paths, appPath(appKey, '/me'), 'get', {
156
+ operationId: 'me_get',
157
+ tags: ['orgs'],
158
+ security: bearerSecurity(),
159
+ responses: { '200': okJson(ref('UserProfile')) },
160
+ });
161
+ addOperation(paths, appPath(appKey, '/me/orgs'), 'get', {
162
+ operationId: 'me_orgs',
163
+ tags: ['orgs'],
164
+ security: bearerSecurity(),
165
+ responses: {
166
+ '200': okJson({
167
+ type: 'object',
168
+ properties: { data: { type: 'array', items: ref('OrgMembership') } },
169
+ }),
170
+ },
171
+ });
172
+ addOperation(paths, appPath(appKey, '/orgs'), 'post', {
173
+ operationId: 'orgs_create',
174
+ tags: ['orgs'],
175
+ security: bearerSecurity(),
176
+ requestBody: jsonBody({
177
+ type: 'object',
178
+ required: ['name'],
179
+ properties: { name: { type: 'string' } },
180
+ }),
181
+ responses: { '201': okJson(ref('OrgCreateResult')) },
182
+ });
183
+ addOperation(paths, appPath(appKey, '/orgs/{orgId}/members'), 'get', {
184
+ operationId: 'members_list',
185
+ tags: ['orgs'],
186
+ security: bearerSecurity(),
187
+ parameters: [
188
+ { name: 'orgId', in: 'path', required: true, schema: { type: 'string', format: 'uuid' } },
189
+ ],
190
+ responses: {
191
+ '200': okJson({
192
+ type: 'object',
193
+ properties: { data: { type: 'array', items: ref('Member') } },
194
+ }),
195
+ },
196
+ });
197
+ addOperation(paths, appPath(appKey, '/plans'), 'get', {
198
+ operationId: 'billing_plans',
199
+ tags: ['billing'],
200
+ responses: { '200': okJson({ type: 'array', items: ref('Plan') }) },
201
+ });
202
+ addOperation(paths, appPath(appKey, '/orgs/{orgId}/usage'), 'get', {
203
+ operationId: 'billing_usage',
204
+ tags: ['billing'],
205
+ security: bearerSecurity(),
206
+ parameters: [
207
+ { name: 'orgId', in: 'path', required: true, schema: { type: 'string', format: 'uuid' } },
208
+ ],
209
+ responses: { '200': okJson(ref('UsageSummary')) },
210
+ });
211
+ addOperation(paths, appPath(appKey, '/files:sign'), 'post', {
212
+ operationId: 'files_sign',
213
+ tags: ['files'],
214
+ security: bearerSecurity(),
215
+ requestBody: jsonBody({
216
+ type: 'object',
217
+ required: ['filename', 'mime', 'size'],
218
+ properties: {
219
+ filename: { type: 'string' },
220
+ mime: { type: 'string' },
221
+ size: { type: 'integer' },
222
+ },
223
+ }),
224
+ responses: { '200': okJson(ref('FileSignResult')) },
225
+ });
226
+ addOperation(paths, appPath(appKey, '/files'), 'get', {
227
+ operationId: 'files_list',
228
+ tags: ['files'],
229
+ security: bearerSecurity(),
230
+ parameters: listQueryParameters(),
231
+ responses: { '200': okJson(ref('FileListResponse')) },
232
+ });
233
+ }
234
+ function buildComponentSchemas(collections) {
235
+ const schemas = {
236
+ ErrorBody: {
237
+ type: 'object',
238
+ required: ['error'],
239
+ properties: {
240
+ error: {
241
+ type: 'object',
242
+ required: ['code', 'message'],
243
+ properties: {
244
+ code: { type: 'string', enum: Object.keys(ERROR_CODES) },
245
+ message: { type: 'string' },
246
+ details: {},
247
+ traceId: { type: 'string' },
248
+ },
249
+ },
250
+ },
251
+ },
252
+ ListMeta: {
253
+ type: 'object',
254
+ required: ['limit', 'offset'],
255
+ properties: {
256
+ total: { type: 'integer' },
257
+ limit: { type: 'integer' },
258
+ offset: { type: 'integer' },
259
+ },
260
+ },
261
+ TokenPair: {
262
+ type: 'object',
263
+ required: ['accessToken', 'refreshToken'],
264
+ properties: {
265
+ accessToken: { type: 'string' },
266
+ refreshToken: { type: 'string' },
267
+ },
268
+ },
269
+ AuthLoginResult: {
270
+ allOf: [
271
+ ref('TokenPair'),
272
+ {
273
+ type: 'object',
274
+ properties: {
275
+ user: ref('UserProfile'),
276
+ orgs: { type: 'array', items: ref('OrgMembership') },
277
+ },
278
+ },
279
+ ],
280
+ },
281
+ UserProfile: {
282
+ type: 'object',
283
+ properties: {
284
+ id: { type: 'string', format: 'uuid' },
285
+ email: { type: 'string' },
286
+ name: { type: 'string' },
287
+ emailVerifiedAt: { type: 'string', nullable: true },
288
+ },
289
+ },
290
+ OrgMembership: {
291
+ type: 'object',
292
+ properties: {
293
+ orgId: { type: 'string', format: 'uuid' },
294
+ orgName: { type: 'string' },
295
+ orgStatus: { type: 'string' },
296
+ role: { type: 'string' },
297
+ membershipStatus: { type: 'string' },
298
+ },
299
+ },
300
+ OrgCreateResult: {
301
+ type: 'object',
302
+ properties: {
303
+ org: { type: 'object', additionalProperties: true },
304
+ accessToken: { type: 'string' },
305
+ refreshToken: { type: 'string' },
306
+ },
307
+ },
308
+ Member: {
309
+ type: 'object',
310
+ properties: {
311
+ userId: { type: 'string', format: 'uuid' },
312
+ email: { type: 'string' },
313
+ name: { type: 'string' },
314
+ role: { type: 'string' },
315
+ status: { type: 'string' },
316
+ },
317
+ },
318
+ Plan: {
319
+ type: 'object',
320
+ properties: {
321
+ key: { type: 'string' },
322
+ name: { type: 'string' },
323
+ priceCents: { type: 'integer' },
324
+ },
325
+ },
326
+ UsageSummary: { type: 'object', additionalProperties: true },
327
+ FileSignResult: {
328
+ type: 'object',
329
+ properties: {
330
+ fileId: { type: 'string', format: 'uuid' },
331
+ uploadUrl: { type: 'string' },
332
+ headers: { type: 'object', additionalProperties: { type: 'string' } },
333
+ },
334
+ },
335
+ FileListResponse: {
336
+ type: 'object',
337
+ properties: {
338
+ data: { type: 'array', items: { type: 'object', additionalProperties: true } },
339
+ meta: ref('ListMeta'),
340
+ },
341
+ },
342
+ };
343
+ for (const collection of collections) {
344
+ const record = collectionRecordSchema(collection.fields, 'read');
345
+ const create = collectionRecordSchema(collection.fields, 'create');
346
+ const patch = collectionRecordSchema(collection.fields, 'patch');
347
+ schemas[`${collection.key}_Record`] = record;
348
+ schemas[`${collection.key}_Create`] = create;
349
+ schemas[`${collection.key}_Patch`] = patch;
350
+ schemas[`${collection.key}_ListResponse`] = {
351
+ type: 'object',
352
+ required: ['data', 'meta'],
353
+ properties: {
354
+ data: { type: 'array', items: ref(`${collection.key}_Record`) },
355
+ meta: ref('ListMeta'),
356
+ },
357
+ };
358
+ }
359
+ return schemas;
360
+ }
361
+ export function buildOpenApi(input) {
362
+ const collections = input.collections;
363
+ const paths = {};
364
+ addCommonModulePaths(paths, input.appKey);
365
+ for (const collection of collections) {
366
+ addCollectionPaths(paths, input.appKey, collection);
367
+ }
368
+ return {
369
+ openapi: '3.0.3',
370
+ info: {
371
+ title: `Maestro ${input.appKey} API`,
372
+ version: `schema-${input.schemaVersion}`,
373
+ description: 'Generated OpenAPI document for Maestro Core SDK (spec 12 US-12.1).',
374
+ },
375
+ servers: [{ url: input.baseUrl, description: 'Maestro API' }],
376
+ paths,
377
+ components: {
378
+ schemas: buildComponentSchemas(collections),
379
+ securitySchemes: {
380
+ bearerAuth: { type: 'http', scheme: 'bearer', bearerFormat: 'JWT' },
381
+ apiKeyAuth: { type: 'apiKey', in: 'header', name: 'Authorization' },
382
+ },
383
+ },
384
+ };
385
+ }
386
+ //# sourceMappingURL=build-openapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-openapi.js","sourceRoot":"","sources":["../../src/openapi/build-openapi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { FieldSchema } from '@bemaestro/schema-engine';
2
+ export type JsonSchema = Record<string, unknown>;
3
+ export declare function fieldToJsonSchema(field: FieldSchema, required: boolean): JsonSchema;
4
+ export declare function collectionRecordSchema(fields: FieldSchema[], mode: 'create' | 'patch' | 'read'): JsonSchema;
5
+ export declare function fieldToTsType(field: FieldSchema): string;
6
+ export declare function collectionToTsType(collectionKey: string, fields: FieldSchema[]): string;
7
+ export declare function toPascalCase(value: string): string;
8
+ export declare function toCamelCase(value: string): string;
9
+ //# sourceMappingURL=schema-mapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-mapping.d.ts","sourceRoot":"","sources":["../../src/openapi/schema-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,GAAG,UAAU,CAgDnF;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,WAAW,EAAE,EACrB,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAChC,UAAU,CAwBZ;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CA2BxD;AAED,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAMvF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGjD"}
@@ -0,0 +1,120 @@
1
+ export function fieldToJsonSchema(field, required) {
2
+ let schema;
3
+ switch (field.type) {
4
+ case 'string':
5
+ case 'text':
6
+ schema = { type: 'string' };
7
+ break;
8
+ case 'integer':
9
+ schema = { type: 'integer' };
10
+ break;
11
+ case 'decimal':
12
+ schema = { oneOf: [{ type: 'number' }, { type: 'string' }] };
13
+ break;
14
+ case 'boolean':
15
+ schema = { type: 'boolean' };
16
+ break;
17
+ case 'date':
18
+ schema = { type: 'string', format: 'date' };
19
+ break;
20
+ case 'datetime':
21
+ schema = { type: 'string', format: 'date-time' };
22
+ break;
23
+ case 'uuid':
24
+ case 'relation':
25
+ case 'file':
26
+ schema = { type: 'string', format: 'uuid' };
27
+ break;
28
+ case 'json':
29
+ schema = {};
30
+ break;
31
+ case 'enum':
32
+ schema = { type: 'string', enum: field.options ?? [] };
33
+ break;
34
+ case 'vector':
35
+ schema = { type: 'array', items: { type: 'number' } };
36
+ break;
37
+ default: {
38
+ const _exhaustive = field.type;
39
+ schema = _exhaustive;
40
+ }
41
+ }
42
+ if (field.default !== undefined) {
43
+ schema = { ...schema, default: field.default };
44
+ }
45
+ if (!required) {
46
+ return schema;
47
+ }
48
+ return schema;
49
+ }
50
+ export function collectionRecordSchema(fields, mode) {
51
+ const properties = {};
52
+ const required = [];
53
+ for (const field of fields) {
54
+ const isRequired = mode === 'create' && !!field.required;
55
+ properties[field.key] = fieldToJsonSchema(field, isRequired);
56
+ if (isRequired)
57
+ required.push(field.key);
58
+ }
59
+ if (mode === 'read') {
60
+ properties.id = { type: 'string', format: 'uuid' };
61
+ properties.created_at = { type: 'string', format: 'date-time' };
62
+ properties.updated_at = { type: 'string', format: 'date-time' };
63
+ required.push('id', 'created_at', 'updated_at');
64
+ }
65
+ const base = {
66
+ type: 'object',
67
+ properties,
68
+ additionalProperties: false,
69
+ };
70
+ if (required.length > 0)
71
+ base.required = required;
72
+ return base;
73
+ }
74
+ export function fieldToTsType(field) {
75
+ switch (field.type) {
76
+ case 'string':
77
+ case 'text':
78
+ case 'date':
79
+ case 'datetime':
80
+ case 'uuid':
81
+ case 'relation':
82
+ case 'file':
83
+ return 'string';
84
+ case 'integer':
85
+ return 'number';
86
+ case 'decimal':
87
+ return 'number | string';
88
+ case 'boolean':
89
+ return 'boolean';
90
+ case 'json':
91
+ return 'unknown';
92
+ case 'enum':
93
+ return field.options?.map((o) => JSON.stringify(o)).join(' | ') || 'string';
94
+ case 'vector':
95
+ return 'number[]';
96
+ default: {
97
+ const _exhaustive = field.type;
98
+ return _exhaustive;
99
+ }
100
+ }
101
+ }
102
+ export function collectionToTsType(collectionKey, fields) {
103
+ const lines = fields.map((field) => {
104
+ const optional = field.required ? '' : '?';
105
+ return ` ${field.key}${optional}: ${fieldToTsType(field)};`;
106
+ });
107
+ return `export interface ${toPascalCase(collectionKey)}Record {\n${lines.join('\n')}\n id?: string;\n created_at?: string;\n updated_at?: string;\n}`;
108
+ }
109
+ export function toPascalCase(value) {
110
+ return value
111
+ .split(/[_-]+/)
112
+ .filter(Boolean)
113
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
114
+ .join('');
115
+ }
116
+ export function toCamelCase(value) {
117
+ const pascal = toPascalCase(value);
118
+ return pascal.charAt(0).toLowerCase() + pascal.slice(1);
119
+ }
120
+ //# sourceMappingURL=schema-mapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-mapping.js","sourceRoot":"","sources":["../../src/openapi/schema-mapping.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { CollectionSchema } from '@bemaestro/schema-engine';
2
+ export interface OpenApiDocument {
3
+ openapi: '3.0.3';
4
+ info: {
5
+ title: string;
6
+ version: string;
7
+ description?: string;
8
+ };
9
+ servers: Array<{
10
+ url: string;
11
+ description?: string;
12
+ }>;
13
+ paths: Record<string, Record<string, OpenApiOperation>>;
14
+ components: {
15
+ schemas: Record<string, unknown>;
16
+ securitySchemes: Record<string, unknown>;
17
+ };
18
+ }
19
+ export interface OpenApiOperation {
20
+ operationId?: string;
21
+ summary?: string;
22
+ tags?: string[];
23
+ security?: Array<Record<string, string[]>>;
24
+ parameters?: Array<Record<string, unknown>>;
25
+ requestBody?: Record<string, unknown>;
26
+ responses: Record<string, {
27
+ description: string;
28
+ content?: Record<string, unknown>;
29
+ }>;
30
+ }
31
+ export interface BuildOpenApiInput {
32
+ appKey: string;
33
+ baseUrl: string;
34
+ schemaVersion: number;
35
+ collections: CollectionSchema[];
36
+ }
37
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/openapi/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACxD,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC1C,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3C,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CACvF;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/openapi/types.ts"],"names":[],"mappings":""}