@opensaas/stack-core 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +7 -0
- package/README.md +5 -5
- package/dist/config/index.d.ts +6 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +12 -2
- package/dist/config/index.js.map +1 -1
- package/dist/config/plugin-engine.d.ts +25 -0
- package/dist/config/plugin-engine.d.ts.map +1 -0
- package/dist/config/plugin-engine.js +240 -0
- package/dist/config/plugin-engine.js.map +1 -0
- package/dist/config/types.d.ts +129 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/handler.d.ts +1 -1
- package/dist/mcp/handler.d.ts.map +1 -1
- package/dist/mcp/handler.js +2 -2
- package/dist/mcp/handler.js.map +1 -1
- package/package.json +5 -1
- package/src/config/index.ts +17 -2
- package/src/config/plugin-engine.ts +302 -0
- package/src/config/types.ts +147 -0
- package/src/index.ts +4 -0
- package/src/mcp/handler.ts +6 -6
- package/tests/context.test.ts +13 -13
- package/tests/nested-access-and-hooks.test.ts +13 -13
- package/tests/password-type-distribution.test.ts +3 -3
- package/tests/password-types.test.ts +5 -5
- package/tsconfig.tsbuildinfo +1 -1
package/dist/mcp/handler.js
CHANGED
|
@@ -351,7 +351,7 @@ async function handleCrudTool(dbKey, operation,
|
|
|
351
351
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Tool arguments vary by operation
|
|
352
352
|
args, session, config, getContext, id) {
|
|
353
353
|
// Create context with user session
|
|
354
|
-
const context = getContext({ userId: session.userId });
|
|
354
|
+
const context = await getContext({ userId: session.userId });
|
|
355
355
|
try {
|
|
356
356
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Result type varies by Prisma operation
|
|
357
357
|
let result;
|
|
@@ -410,7 +410,7 @@ args, session, config, getContext, id) {
|
|
|
410
410
|
for (const [_listKey, listConfig] of Object.entries(config.lists)) {
|
|
411
411
|
const customTool = listConfig.mcp?.customTools?.find((t) => t.name === toolName);
|
|
412
412
|
if (customTool) {
|
|
413
|
-
const context = getContext({ userId: session.userId });
|
|
413
|
+
const context = await getContext({ userId: session.userId });
|
|
414
414
|
try {
|
|
415
415
|
const result = await customTool.handler({
|
|
416
416
|
input: args,
|
package/dist/mcp/handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/mcp/handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/mcp/handler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensaas/stack-core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Core stack for OpenSaas - schema definition, access control, and runtime utilities",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -17,6 +17,10 @@
|
|
|
17
17
|
"./mcp": {
|
|
18
18
|
"types": "./dist/mcp/index.d.ts",
|
|
19
19
|
"default": "./dist/mcp/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./config/plugin-engine": {
|
|
22
|
+
"types": "./dist/config/plugin-engine.d.ts",
|
|
23
|
+
"default": "./dist/config/plugin-engine.js"
|
|
20
24
|
}
|
|
21
25
|
},
|
|
22
26
|
"keywords": [
|
package/src/config/index.ts
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
import type { OpenSaasConfig, ListConfig, FieldConfig, OperationAccess, Hooks } from './types.js'
|
|
2
|
+
import { executePlugins } from './plugin-engine.js'
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Helper function to define configuration with type safety
|
|
6
|
+
* Executes plugins if present in config.plugins array
|
|
7
|
+
*
|
|
8
|
+
* Note: This function is now async when plugins are present
|
|
9
|
+
* For synchronous config definition without plugins, config can still be returned directly
|
|
5
10
|
*/
|
|
6
|
-
export function config(
|
|
7
|
-
return config
|
|
11
|
+
export function config(userConfig: OpenSaasConfig): OpenSaasConfig | Promise<OpenSaasConfig> {
|
|
12
|
+
// If no plugins, return config as-is (synchronous, backward compatible)
|
|
13
|
+
if (!userConfig.plugins || userConfig.plugins.length === 0) {
|
|
14
|
+
return userConfig
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Execute plugins and return promise
|
|
18
|
+
return executePlugins(userConfig)
|
|
8
19
|
}
|
|
9
20
|
|
|
10
21
|
/**
|
|
@@ -77,4 +88,8 @@ export type {
|
|
|
77
88
|
FileMetadata,
|
|
78
89
|
ImageMetadata,
|
|
79
90
|
ImageTransformationResult,
|
|
91
|
+
// Plugin system types
|
|
92
|
+
Plugin,
|
|
93
|
+
PluginContext,
|
|
94
|
+
GeneratedFiles,
|
|
80
95
|
} from './types.js'
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
OpenSaasConfig,
|
|
3
|
+
Plugin,
|
|
4
|
+
PluginContext,
|
|
5
|
+
ListConfig,
|
|
6
|
+
Hooks,
|
|
7
|
+
OperationAccess,
|
|
8
|
+
McpCustomTool,
|
|
9
|
+
BaseFieldConfig,
|
|
10
|
+
} from './types.js'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Topological sort for plugin dependency resolution
|
|
14
|
+
* Ensures plugins execute in correct order based on dependencies
|
|
15
|
+
*/
|
|
16
|
+
function sortPluginsByDependencies(plugins: Plugin[]): Plugin[] {
|
|
17
|
+
const pluginMap = new Map<string, Plugin>()
|
|
18
|
+
const visited = new Set<string>()
|
|
19
|
+
const visiting = new Set<string>()
|
|
20
|
+
const sorted: Plugin[] = []
|
|
21
|
+
|
|
22
|
+
// Build plugin map
|
|
23
|
+
for (const plugin of plugins) {
|
|
24
|
+
if (pluginMap.has(plugin.name)) {
|
|
25
|
+
throw new Error(`Duplicate plugin name: ${plugin.name}`)
|
|
26
|
+
}
|
|
27
|
+
pluginMap.set(plugin.name, plugin)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function visit(pluginName: string, path: string[] = []): void {
|
|
31
|
+
if (visited.has(pluginName)) return
|
|
32
|
+
|
|
33
|
+
if (visiting.has(pluginName)) {
|
|
34
|
+
throw new Error(`Circular dependency detected: ${[...path, pluginName].join(' -> ')}`)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const plugin = pluginMap.get(pluginName)
|
|
38
|
+
if (!plugin) {
|
|
39
|
+
throw new Error(
|
|
40
|
+
`Plugin "${pluginName}" is required by "${path[path.length - 1]}" but not found`,
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
visiting.add(pluginName)
|
|
45
|
+
|
|
46
|
+
// Visit dependencies first
|
|
47
|
+
if (plugin.dependencies) {
|
|
48
|
+
for (const dep of plugin.dependencies) {
|
|
49
|
+
visit(dep, [...path, pluginName])
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
visiting.delete(pluginName)
|
|
54
|
+
visited.add(pluginName)
|
|
55
|
+
sorted.push(plugin)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Visit all plugins
|
|
59
|
+
for (const plugin of plugins) {
|
|
60
|
+
visit(plugin.name)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return sorted
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Merge hooks from extension into existing hooks
|
|
68
|
+
* Combines hook arrays so multiple plugins can add hooks
|
|
69
|
+
*/
|
|
70
|
+
function mergeHooks(existing: Hooks | undefined, extension: Hooks | undefined): Hooks | undefined {
|
|
71
|
+
if (!extension) return existing
|
|
72
|
+
if (!existing) return extension
|
|
73
|
+
|
|
74
|
+
const merged: Partial<Hooks> = {}
|
|
75
|
+
|
|
76
|
+
// Merge resolveInput hooks (chain them, passing resolvedData through)
|
|
77
|
+
if (existing.resolveInput || extension.resolveInput) {
|
|
78
|
+
if (existing.resolveInput && extension.resolveInput) {
|
|
79
|
+
merged.resolveInput = async (args) => {
|
|
80
|
+
const result1 = await existing.resolveInput!(args)
|
|
81
|
+
const result2 = await extension.resolveInput!({ ...args, resolvedData: result1 })
|
|
82
|
+
return result2
|
|
83
|
+
}
|
|
84
|
+
} else {
|
|
85
|
+
merged.resolveInput = existing.resolveInput || extension.resolveInput
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Merge validateInput hooks (run both)
|
|
90
|
+
if (existing.validateInput || extension.validateInput) {
|
|
91
|
+
if (existing.validateInput && extension.validateInput) {
|
|
92
|
+
merged.validateInput = async (args) => {
|
|
93
|
+
await existing.validateInput!(args)
|
|
94
|
+
await extension.validateInput!(args)
|
|
95
|
+
}
|
|
96
|
+
} else {
|
|
97
|
+
merged.validateInput = existing.validateInput || extension.validateInput
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Merge beforeOperation hooks (run both in sequence)
|
|
102
|
+
if (existing.beforeOperation || extension.beforeOperation) {
|
|
103
|
+
if (existing.beforeOperation && extension.beforeOperation) {
|
|
104
|
+
merged.beforeOperation = async (args) => {
|
|
105
|
+
await existing.beforeOperation!(args)
|
|
106
|
+
await extension.beforeOperation!(args)
|
|
107
|
+
}
|
|
108
|
+
} else {
|
|
109
|
+
merged.beforeOperation = existing.beforeOperation || extension.beforeOperation
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Merge afterOperation hooks (run both in sequence)
|
|
114
|
+
if (existing.afterOperation || extension.afterOperation) {
|
|
115
|
+
if (existing.afterOperation && extension.afterOperation) {
|
|
116
|
+
merged.afterOperation = async (args) => {
|
|
117
|
+
await existing.afterOperation!(args)
|
|
118
|
+
await extension.afterOperation!(args)
|
|
119
|
+
}
|
|
120
|
+
} else {
|
|
121
|
+
merged.afterOperation = existing.afterOperation || extension.afterOperation
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return Object.keys(merged).length > 0 ? (merged as Hooks) : undefined
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Merge access control from extension into existing access
|
|
130
|
+
*/
|
|
131
|
+
function mergeAccess(
|
|
132
|
+
existing: { operation?: OperationAccess } | undefined,
|
|
133
|
+
extension: { operation?: OperationAccess } | undefined,
|
|
134
|
+
): { operation?: OperationAccess } | undefined {
|
|
135
|
+
if (!extension) return existing
|
|
136
|
+
if (!existing) return extension
|
|
137
|
+
|
|
138
|
+
const merged: { operation?: OperationAccess } = {}
|
|
139
|
+
|
|
140
|
+
// Merge operation access (use extension if provided, otherwise keep existing)
|
|
141
|
+
if (existing.operation || extension.operation) {
|
|
142
|
+
merged.operation = {
|
|
143
|
+
...existing.operation,
|
|
144
|
+
...extension.operation,
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return merged
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Execute plugins and transform config
|
|
153
|
+
* Returns modified config with plugin data attached
|
|
154
|
+
*/
|
|
155
|
+
export async function executePlugins(config: OpenSaasConfig): Promise<OpenSaasConfig> {
|
|
156
|
+
if (!config.plugins || config.plugins.length === 0) {
|
|
157
|
+
return config
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Sort plugins by dependencies
|
|
161
|
+
const sortedPlugins = sortPluginsByDependencies(config.plugins)
|
|
162
|
+
|
|
163
|
+
// Initialize mutable config state - preserve all config properties
|
|
164
|
+
let currentConfig: OpenSaasConfig = {
|
|
165
|
+
...config,
|
|
166
|
+
lists: { ...config.lists }, // Clone lists object to avoid mutating original
|
|
167
|
+
_pluginData: {},
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Field type registry (for third-party fields)
|
|
171
|
+
const fieldTypeRegistry = new Map<string, (options?: unknown) => BaseFieldConfig>()
|
|
172
|
+
|
|
173
|
+
// MCP tools registry
|
|
174
|
+
const mcpToolsRegistry: McpCustomTool[] = []
|
|
175
|
+
|
|
176
|
+
// Execute each plugin
|
|
177
|
+
for (const plugin of sortedPlugins) {
|
|
178
|
+
const context: PluginContext = {
|
|
179
|
+
config: currentConfig,
|
|
180
|
+
|
|
181
|
+
addList: (name: string, listConfig: ListConfig) => {
|
|
182
|
+
if (currentConfig.lists[name]) {
|
|
183
|
+
throw new Error(
|
|
184
|
+
`Plugin "${plugin.name}" tried to add list "${name}" but it already exists. Use extendList() to modify existing lists.`,
|
|
185
|
+
)
|
|
186
|
+
}
|
|
187
|
+
currentConfig.lists[name] = listConfig
|
|
188
|
+
},
|
|
189
|
+
|
|
190
|
+
extendList: (name, extension) => {
|
|
191
|
+
const existing = currentConfig.lists[name]
|
|
192
|
+
if (!existing) {
|
|
193
|
+
throw new Error(
|
|
194
|
+
`Plugin "${plugin.name}" tried to extend list "${name}" but it doesn't exist. Use addList() to create new lists.`,
|
|
195
|
+
)
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Deep merge fields
|
|
199
|
+
const mergedFields = {
|
|
200
|
+
...existing.fields,
|
|
201
|
+
...extension.fields,
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Merge hooks
|
|
205
|
+
const mergedHooks = mergeHooks(existing.hooks, extension.hooks)
|
|
206
|
+
|
|
207
|
+
// Merge access control
|
|
208
|
+
const mergedAccess = mergeAccess(existing.access, extension.access)
|
|
209
|
+
|
|
210
|
+
// Merge MCP config
|
|
211
|
+
const mergedMcp = extension.mcp
|
|
212
|
+
? {
|
|
213
|
+
...existing.mcp,
|
|
214
|
+
...extension.mcp,
|
|
215
|
+
}
|
|
216
|
+
: existing.mcp
|
|
217
|
+
|
|
218
|
+
currentConfig.lists[name] = {
|
|
219
|
+
...existing,
|
|
220
|
+
fields: mergedFields,
|
|
221
|
+
hooks: mergedHooks,
|
|
222
|
+
access: mergedAccess,
|
|
223
|
+
mcp: mergedMcp,
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
|
|
227
|
+
registerFieldType: (type: string, builder: (options?: unknown) => BaseFieldConfig) => {
|
|
228
|
+
if (fieldTypeRegistry.has(type)) {
|
|
229
|
+
throw new Error(
|
|
230
|
+
`Plugin "${plugin.name}" tried to register field type "${type}" but it's already registered`,
|
|
231
|
+
)
|
|
232
|
+
}
|
|
233
|
+
fieldTypeRegistry.set(type, builder)
|
|
234
|
+
},
|
|
235
|
+
|
|
236
|
+
registerMcpTool: (tool: McpCustomTool) => {
|
|
237
|
+
mcpToolsRegistry.push(tool)
|
|
238
|
+
},
|
|
239
|
+
|
|
240
|
+
setPluginData: <T>(pluginName: string, data: T) => {
|
|
241
|
+
if (!currentConfig._pluginData) {
|
|
242
|
+
currentConfig._pluginData = {}
|
|
243
|
+
}
|
|
244
|
+
currentConfig._pluginData[pluginName] = data
|
|
245
|
+
},
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Execute plugin init
|
|
249
|
+
await plugin.init(context)
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Store registered MCP tools in config (if any)
|
|
253
|
+
if (mcpToolsRegistry.length > 0) {
|
|
254
|
+
if (!currentConfig._pluginData) {
|
|
255
|
+
currentConfig._pluginData = {}
|
|
256
|
+
}
|
|
257
|
+
currentConfig._pluginData.__mcpTools = mcpToolsRegistry
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return currentConfig
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Execute beforeGenerate hooks from plugins
|
|
265
|
+
*/
|
|
266
|
+
export async function executeBeforeGenerateHooks(config: OpenSaasConfig): Promise<OpenSaasConfig> {
|
|
267
|
+
if (!config.plugins || config.plugins.length === 0) {
|
|
268
|
+
return config
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
let currentConfig = config
|
|
272
|
+
|
|
273
|
+
for (const plugin of config.plugins) {
|
|
274
|
+
if (plugin.beforeGenerate) {
|
|
275
|
+
currentConfig = await plugin.beforeGenerate(currentConfig)
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
return currentConfig
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Execute afterGenerate hooks from plugins
|
|
284
|
+
*/
|
|
285
|
+
export async function executeAfterGenerateHooks(
|
|
286
|
+
config: OpenSaasConfig,
|
|
287
|
+
files: { prismaSchema: string; types: string; context: string; [key: string]: string },
|
|
288
|
+
): Promise<{ prismaSchema: string; types: string; context: string; [key: string]: string }> {
|
|
289
|
+
if (!config.plugins || config.plugins.length === 0) {
|
|
290
|
+
return files
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
let currentFiles = files
|
|
294
|
+
|
|
295
|
+
for (const plugin of config.plugins) {
|
|
296
|
+
if (plugin.afterGenerate) {
|
|
297
|
+
currentFiles = await plugin.afterGenerate(currentFiles)
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
return currentFiles
|
|
302
|
+
}
|
package/src/config/types.ts
CHANGED
|
@@ -212,6 +212,27 @@ export type BaseFieldConfig<TInput = any, TOutput = TInput> = {
|
|
|
212
212
|
type: string
|
|
213
213
|
optional: boolean
|
|
214
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Get TypeScript imports needed for this field's type
|
|
217
|
+
* @returns Array of import statements needed for the generated types file
|
|
218
|
+
*/
|
|
219
|
+
getTypeScriptImports?: () => Array<{
|
|
220
|
+
/**
|
|
221
|
+
* The type/value names to import
|
|
222
|
+
* e.g., ['StoredEmbedding', 'EmbeddingMetadata']
|
|
223
|
+
*/
|
|
224
|
+
names: string[]
|
|
225
|
+
/**
|
|
226
|
+
* The module to import from
|
|
227
|
+
* e.g., '@opensaas/stack-rag'
|
|
228
|
+
*/
|
|
229
|
+
from: string
|
|
230
|
+
/**
|
|
231
|
+
* Whether this is a type-only import
|
|
232
|
+
* @default true
|
|
233
|
+
*/
|
|
234
|
+
typeOnly?: boolean
|
|
235
|
+
}>
|
|
215
236
|
}
|
|
216
237
|
|
|
217
238
|
export type TextField = BaseFieldConfig<string, string> & {
|
|
@@ -712,6 +733,121 @@ export interface ImageTransformationResult {
|
|
|
712
733
|
|
|
713
734
|
export type StorageConfig = Record<string, { type: string; [key: string]: unknown }>
|
|
714
735
|
|
|
736
|
+
/**
|
|
737
|
+
* Plugin system types
|
|
738
|
+
*/
|
|
739
|
+
|
|
740
|
+
/**
|
|
741
|
+
* Files generated by the core generators
|
|
742
|
+
* Plugins can modify these during afterGenerate hooks
|
|
743
|
+
*/
|
|
744
|
+
export type GeneratedFiles = {
|
|
745
|
+
prismaSchema: string
|
|
746
|
+
types: string
|
|
747
|
+
context: string
|
|
748
|
+
[key: string]: string // Allow plugins to add custom generated files
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
/**
|
|
752
|
+
* Context provided to plugins during initialization
|
|
753
|
+
* Provides helpers for safely modifying config
|
|
754
|
+
*/
|
|
755
|
+
export type PluginContext = {
|
|
756
|
+
/**
|
|
757
|
+
* Current config state (read-only)
|
|
758
|
+
* Plugins should use helper methods to modify config, not mutate directly
|
|
759
|
+
*/
|
|
760
|
+
readonly config: OpenSaasConfig
|
|
761
|
+
|
|
762
|
+
/**
|
|
763
|
+
* Add a new list to the config
|
|
764
|
+
* Throws error if list already exists (unless merge strategy used)
|
|
765
|
+
*/
|
|
766
|
+
addList: (name: string, listConfig: ListConfig) => void
|
|
767
|
+
|
|
768
|
+
/**
|
|
769
|
+
* Extend an existing list with additional fields, hooks, or access control
|
|
770
|
+
* Deep merges fields, hooks, and access control
|
|
771
|
+
* Throws error if list doesn't exist
|
|
772
|
+
*/
|
|
773
|
+
extendList: (
|
|
774
|
+
name: string,
|
|
775
|
+
extension: {
|
|
776
|
+
fields?: Record<string, FieldConfig>
|
|
777
|
+
hooks?: Hooks
|
|
778
|
+
access?: {
|
|
779
|
+
operation?: OperationAccess
|
|
780
|
+
}
|
|
781
|
+
mcp?: ListMcpConfig
|
|
782
|
+
},
|
|
783
|
+
) => void
|
|
784
|
+
|
|
785
|
+
/**
|
|
786
|
+
* Register a field type globally
|
|
787
|
+
* Useful for third-party field packages
|
|
788
|
+
*/
|
|
789
|
+
registerFieldType?: (type: string, builder: (options?: unknown) => BaseFieldConfig) => void
|
|
790
|
+
|
|
791
|
+
/**
|
|
792
|
+
* Register a custom MCP tool
|
|
793
|
+
* Tools are added to the global MCP server
|
|
794
|
+
*/
|
|
795
|
+
registerMcpTool?: (tool: McpCustomTool) => void
|
|
796
|
+
|
|
797
|
+
/**
|
|
798
|
+
* Store plugin-specific data in config for runtime access
|
|
799
|
+
* Prefixed with plugin name to avoid conflicts
|
|
800
|
+
*/
|
|
801
|
+
setPluginData: <T>(pluginName: string, data: T) => void
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
/**
|
|
805
|
+
* Plugin definition
|
|
806
|
+
* Plugins can extend config, inject lists, add hooks, and participate in generation lifecycle
|
|
807
|
+
*/
|
|
808
|
+
export type Plugin = {
|
|
809
|
+
/**
|
|
810
|
+
* Unique plugin name (used for dependency resolution and data storage)
|
|
811
|
+
*/
|
|
812
|
+
name: string
|
|
813
|
+
|
|
814
|
+
/**
|
|
815
|
+
* Plugin version (semantic versioning)
|
|
816
|
+
*/
|
|
817
|
+
version?: string
|
|
818
|
+
|
|
819
|
+
/**
|
|
820
|
+
* Dependencies on other plugins (by name)
|
|
821
|
+
* Ensures plugins execute in correct order
|
|
822
|
+
*/
|
|
823
|
+
dependencies?: string[]
|
|
824
|
+
|
|
825
|
+
/**
|
|
826
|
+
* Main initialization hook
|
|
827
|
+
* Called during config processing to extend or modify configuration
|
|
828
|
+
*/
|
|
829
|
+
init: (context: PluginContext) => void | Promise<void>
|
|
830
|
+
|
|
831
|
+
/**
|
|
832
|
+
* Optional: Modify config before Prisma schema generation
|
|
833
|
+
* Useful for programmatic config transformations
|
|
834
|
+
*/
|
|
835
|
+
beforeGenerate?: (config: OpenSaasConfig) => OpenSaasConfig | Promise<OpenSaasConfig>
|
|
836
|
+
|
|
837
|
+
/**
|
|
838
|
+
* Optional: Post-process generated files
|
|
839
|
+
* Allows plugins to modify Prisma schema, types, or add custom generated files
|
|
840
|
+
*/
|
|
841
|
+
afterGenerate?: (files: GeneratedFiles) => GeneratedFiles | Promise<GeneratedFiles>
|
|
842
|
+
|
|
843
|
+
/**
|
|
844
|
+
* Optional: Provide runtime services
|
|
845
|
+
* Called when creating context to provide plugin-specific services
|
|
846
|
+
* Return value is stored in context.plugins[pluginName]
|
|
847
|
+
*/
|
|
848
|
+
runtime?: (context: import('../access/types.js').AccessContext) => unknown
|
|
849
|
+
}
|
|
850
|
+
|
|
715
851
|
/**
|
|
716
852
|
* Main configuration type
|
|
717
853
|
*/
|
|
@@ -734,4 +870,15 @@ export type OpenSaasConfig = {
|
|
|
734
870
|
* @default ".opensaas"
|
|
735
871
|
*/
|
|
736
872
|
opensaasPath?: string
|
|
873
|
+
/**
|
|
874
|
+
* Plugins to extend the stack
|
|
875
|
+
* Executed in array order (or dependency order if dependencies specified)
|
|
876
|
+
*/
|
|
877
|
+
plugins?: Plugin[]
|
|
878
|
+
/**
|
|
879
|
+
* Plugin-specific data storage
|
|
880
|
+
* Keyed by plugin name, used for runtime configuration
|
|
881
|
+
* @internal
|
|
882
|
+
*/
|
|
883
|
+
_pluginData?: Record<string, unknown>
|
|
737
884
|
}
|
package/src/index.ts
CHANGED
package/src/mcp/handler.ts
CHANGED
|
@@ -32,7 +32,7 @@ import type { McpSession, McpSessionProvider } from './types.js'
|
|
|
32
32
|
export function createMcpHandlers(options: {
|
|
33
33
|
config: OpenSaasConfig
|
|
34
34
|
getSession: McpSessionProvider
|
|
35
|
-
getContext: (session?: { userId: string }) => AccessContext
|
|
35
|
+
getContext: (session?: { userId: string }) => Promise<AccessContext>
|
|
36
36
|
}): {
|
|
37
37
|
GET: (req: Request) => Promise<Response>
|
|
38
38
|
POST: (req: Request) => Promise<Response>
|
|
@@ -403,7 +403,7 @@ async function handleToolsCall(
|
|
|
403
403
|
params: any,
|
|
404
404
|
session: McpSession,
|
|
405
405
|
config: OpenSaasConfig,
|
|
406
|
-
getContext: (session?: { userId: string }) => AccessContext
|
|
406
|
+
getContext: (session?: { userId: string }) => Promise<AccessContext>,
|
|
407
407
|
id?: number | string,
|
|
408
408
|
): Promise<Response> {
|
|
409
409
|
const toolName = params?.name
|
|
@@ -447,11 +447,11 @@ async function handleCrudTool(
|
|
|
447
447
|
args: any,
|
|
448
448
|
session: McpSession,
|
|
449
449
|
config: OpenSaasConfig,
|
|
450
|
-
getContext: (session?: { userId: string }) => AccessContext
|
|
450
|
+
getContext: (session?: { userId: string }) => Promise<AccessContext>,
|
|
451
451
|
id?: number | string,
|
|
452
452
|
): Promise<Response> {
|
|
453
453
|
// Create context with user session
|
|
454
|
-
const context = getContext({ userId: session.userId })
|
|
454
|
+
const context = await getContext({ userId: session.userId })
|
|
455
455
|
|
|
456
456
|
try {
|
|
457
457
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Result type varies by Prisma operation
|
|
@@ -530,7 +530,7 @@ async function handleCustomTool(
|
|
|
530
530
|
args: any,
|
|
531
531
|
session: McpSession,
|
|
532
532
|
config: OpenSaasConfig,
|
|
533
|
-
getContext: (session?: { userId: string }) => AccessContext
|
|
533
|
+
getContext: (session?: { userId: string }) => Promise<AccessContext>,
|
|
534
534
|
id?: number | string,
|
|
535
535
|
): Promise<Response> {
|
|
536
536
|
// Find custom tool in config
|
|
@@ -538,7 +538,7 @@ async function handleCustomTool(
|
|
|
538
538
|
const customTool = listConfig.mcp?.customTools?.find((t) => t.name === toolName)
|
|
539
539
|
|
|
540
540
|
if (customTool) {
|
|
541
|
-
const context = getContext({ userId: session.userId })
|
|
541
|
+
const context = await getContext({ userId: session.userId })
|
|
542
542
|
|
|
543
543
|
try {
|
|
544
544
|
const result = await customTool.handler({
|