@nextsparkjs/core 0.1.0-beta.184 → 0.1.0-beta.185

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 (60) hide show
  1. package/dist/hooks/useAuth.d.ts +74 -25
  2. package/dist/hooks/useAuth.d.ts.map +1 -1
  3. package/dist/hooks/useValidationSchemas.d.ts +7 -7
  4. package/dist/lib/api/auth/dual-auth.d.ts +7 -0
  5. package/dist/lib/api/auth/dual-auth.d.ts.map +1 -1
  6. package/dist/lib/api/auth/dual-auth.js +1 -1
  7. package/dist/lib/api/auth.d.ts +20 -3
  8. package/dist/lib/api/auth.d.ts.map +1 -1
  9. package/dist/lib/api/auth.js +37 -19
  10. package/dist/lib/api/entity/generic-handler.d.ts.map +1 -1
  11. package/dist/lib/api/entity/generic-handler.js +19 -22
  12. package/dist/lib/auth.d.ts +1 -3057
  13. package/dist/lib/auth.d.ts.map +1 -1
  14. package/dist/lib/billing/schema.d.ts +1 -1
  15. package/dist/lib/mcp/audit.d.ts +17 -0
  16. package/dist/lib/mcp/audit.d.ts.map +1 -0
  17. package/dist/lib/mcp/audit.js +48 -0
  18. package/dist/lib/mcp/engine.d.ts +28 -0
  19. package/dist/lib/mcp/engine.d.ts.map +1 -0
  20. package/dist/lib/mcp/engine.js +158 -0
  21. package/dist/lib/mcp/errors.d.ts +16 -0
  22. package/dist/lib/mcp/errors.d.ts.map +1 -0
  23. package/dist/lib/mcp/errors.js +66 -0
  24. package/dist/lib/mcp/executor.d.ts +15 -0
  25. package/dist/lib/mcp/executor.d.ts.map +1 -0
  26. package/dist/lib/mcp/executor.js +63 -0
  27. package/dist/lib/mcp/index.d.ts +9 -0
  28. package/dist/lib/mcp/index.d.ts.map +1 -0
  29. package/dist/lib/mcp/index.js +32 -0
  30. package/dist/lib/mcp/schema-builder.d.ts +45 -0
  31. package/dist/lib/mcp/schema-builder.d.ts.map +1 -0
  32. package/dist/lib/mcp/schema-builder.js +212 -0
  33. package/dist/lib/mcp/tool-generator.d.ts +31 -0
  34. package/dist/lib/mcp/tool-generator.d.ts.map +1 -0
  35. package/dist/lib/mcp/tool-generator.js +271 -0
  36. package/dist/lib/mcp/transport.d.ts +31 -0
  37. package/dist/lib/mcp/transport.d.ts.map +1 -0
  38. package/dist/lib/mcp/transport.js +58 -0
  39. package/dist/lib/mcp/types.d.ts +184 -0
  40. package/dist/lib/mcp/types.d.ts.map +1 -0
  41. package/dist/lib/mcp/types.js +11 -0
  42. package/dist/styles/classes.json +1 -1
  43. package/dist/styles/ui.css +1 -1
  44. package/dist/templates/app/api/mcp/route.ts +173 -0
  45. package/dist/templates/app/api/v1/api-keys/route.ts +15 -3
  46. package/dist/templates/app/layout.tsx +3 -0
  47. package/package.json +8 -3
  48. package/scripts/build/registry/__tests__/mcp-registry.test.mjs +64 -0
  49. package/scripts/build/registry/__tests__/scope-registry.test.mjs +88 -0
  50. package/scripts/build/registry/discovery/mcp-overrides.mjs +72 -0
  51. package/scripts/build/registry/discovery/mcp-overrides.test.mjs +86 -0
  52. package/scripts/build/registry/generators/mcp-registry.mjs +61 -0
  53. package/scripts/build/registry/generators/scope-registry.mjs +133 -88
  54. package/scripts/build/registry.mjs +8 -4
  55. package/templates/app/api/mcp/route.ts +173 -0
  56. package/templates/app/api/v1/api-keys/route.ts +15 -3
  57. package/templates/app/layout.tsx +3 -0
  58. package/tests/jest/__mocks__/@nextsparkjs/registries/scope-registry.ts +56 -6
  59. package/dist/lib/auth-client.d.ts +0 -3595
  60. package/dist/lib/auth-client.d.ts.map +0 -1
@@ -0,0 +1,184 @@
1
+ /**
2
+ * MCP Engine — shared types.
3
+ *
4
+ * The engine is registry-driven: it reads the entity registry passed into
5
+ * createMcpEngine() and never imports theme files directly. Theme extensions
6
+ * (overrides, extra tools, translations) are injected via McpEngineOptions,
7
+ * which the default route template assembles from the generated
8
+ * MCP_OVERRIDES registry.
9
+ */
10
+ import type { z } from 'zod';
11
+ import type { EntityConfig } from '../entities/types';
12
+ export type McpOperation = 'list' | 'get' | 'create' | 'update' | 'delete';
13
+ /**
14
+ * Mutable shape used while building tool input schemas. Assignable to the
15
+ * SDK's ZodRawShape (zod 4 declares it Readonly<Record<string, $ZodType>>).
16
+ */
17
+ export type McpShape = Record<string, z.ZodTypeAny>;
18
+ export declare const MUTATION_OPERATIONS: McpOperation[];
19
+ /** Resolved per-request identity, injected into every tool handler. */
20
+ export interface ToolExecutionContext {
21
+ userId: string;
22
+ userRole: string;
23
+ teamId: string;
24
+ /** Raw Authorization header, forwarded verbatim to in-process handlers. */
25
+ authHeader: string;
26
+ /** api_key.id of the caller — required for audit logging. */
27
+ apiKeyId: string | null;
28
+ scopes: string[];
29
+ }
30
+ export interface McpToolAnnotations {
31
+ readOnlyHint?: boolean;
32
+ destructiveHint?: boolean;
33
+ idempotentHint?: boolean;
34
+ openWorldHint?: boolean;
35
+ }
36
+ export interface McpToolResultContent {
37
+ type: 'text';
38
+ text: string;
39
+ }
40
+ export interface McpToolResult {
41
+ content: McpToolResultContent[];
42
+ structuredContent?: Record<string, unknown>;
43
+ isError?: boolean;
44
+ }
45
+ export interface McpToolDefinition {
46
+ name: string;
47
+ title: string;
48
+ description: string;
49
+ /** Raw shape passed to the SDK for tools/list JSON Schema generation. */
50
+ inputSchema: McpShape;
51
+ /**
52
+ * Strict validator run inside the handler before executing. The SDK builds
53
+ * a non-strict object from inputSchema; this one rejects unknown keys and
54
+ * enforces cross-field rules (e.g. from/to require dateField).
55
+ */
56
+ strictSchema: z.ZodTypeAny;
57
+ annotations?: McpToolAnnotations;
58
+ handler: (args: Record<string, unknown>, ctx: ToolExecutionContext) => Promise<McpToolResult>;
59
+ /** Metadata for audit entries. */
60
+ meta?: {
61
+ entitySlug?: string;
62
+ operation?: McpOperation | 'workflow';
63
+ };
64
+ }
65
+ /** Thrown by overrides/handlers to short-circuit with an actionable message. */
66
+ export declare class McpToolError extends Error {
67
+ constructor(message: string);
68
+ }
69
+ /** Result of an in-process entity API invocation. */
70
+ export interface EntityApiResult {
71
+ status: number;
72
+ body: {
73
+ success: boolean;
74
+ data?: unknown;
75
+ info?: Record<string, unknown>;
76
+ error?: string;
77
+ code?: string;
78
+ details?: unknown;
79
+ };
80
+ }
81
+ export interface ExecuteEntityArgs {
82
+ slug: string;
83
+ operation: McpOperation;
84
+ id?: string;
85
+ query?: Record<string, string>;
86
+ body?: unknown;
87
+ }
88
+ export type EntityExecutor = (args: ExecuteEntityArgs, ctx: ToolExecutionContext) => Promise<EntityApiResult>;
89
+ /**
90
+ * API handed to override extraTools factories.
91
+ *
92
+ * `execute` and `entitySchemas` are the ENGINE's own wired versions: output
93
+ * normalization (dates, transformOutput) and schema context (i18n option
94
+ * labels, overrides) are applied there, so a workflow tool behaves exactly
95
+ * like a generated one. Building schemas or calling handlers directly from an
96
+ * override would silently skip both.
97
+ */
98
+ export interface EngineApi {
99
+ execute: EntityExecutor;
100
+ /** Schemas for an entity, built with the engine's i18n + override context. */
101
+ entitySchemas: (slug: string) => {
102
+ createShape: McpShape;
103
+ updateShape: McpShape;
104
+ };
105
+ toolPrefix: string;
106
+ defaultTimezone: string;
107
+ registry: Record<string, EntityConfig>;
108
+ translateApiError: (result: EntityApiResult, context: {
109
+ slug: string;
110
+ operation: string;
111
+ hints?: string[];
112
+ }) => string;
113
+ }
114
+ export interface McpEntityOverride {
115
+ /** Hide the whole entity from the MCP surface. */
116
+ exclude?: boolean;
117
+ /** Hide specific generated tools. First-class security mechanism. */
118
+ excludeOperations?: McpOperation[];
119
+ /** Field names that become optional in the MCP input schema even if the API requires them (pair with transformInput enforcement). */
120
+ relaxRequired?: string[];
121
+ describe?: {
122
+ entity?: string;
123
+ fields?: Record<string, string>;
124
+ tools?: Partial<Record<McpOperation, string>>;
125
+ };
126
+ /** Appended to 500-with-no-code errors (core swallows CHECK violations). */
127
+ errorHints?: string[];
128
+ /** May throw McpToolError to reject with an actionable message. */
129
+ transformInput?: (operation: McpOperation, input: Record<string, unknown>, ctx: ToolExecutionContext) => Record<string, unknown> | Promise<Record<string, unknown>>;
130
+ transformOutput?: (operation: McpOperation, output: unknown) => unknown;
131
+ extraTools?: (api: EngineApi) => McpToolDefinition[];
132
+ }
133
+ export interface AuditEntry {
134
+ apiKeyId: string | null;
135
+ userId: string;
136
+ tool: string;
137
+ entitySlug?: string;
138
+ operation?: string;
139
+ recordId?: string;
140
+ teamId: string;
141
+ statusCode: number;
142
+ requestSummary: Record<string, unknown>;
143
+ responseTimeMs: number;
144
+ }
145
+ export interface EntityPresetInfo {
146
+ summary?: string;
147
+ presets: Array<{
148
+ id: string;
149
+ title?: string;
150
+ method?: string;
151
+ description?: string;
152
+ params?: Record<string, unknown>;
153
+ payload?: Record<string, unknown>;
154
+ }>;
155
+ }
156
+ export interface McpEngineOptions {
157
+ /** e.g. 'acme' → acme_list_customers. Comes from app/theme config. */
158
+ toolPrefix: string;
159
+ serverInfo?: {
160
+ name: string;
161
+ version: string;
162
+ };
163
+ /** Core/reserved slugs never exposed (e.g. 'patterns'). */
164
+ excludeSlugs?: string[];
165
+ /** Operations generated by default for every entity. */
166
+ defaultOperations?: McpOperation[];
167
+ overrides?: Record<string, McpEntityOverride>;
168
+ /**
169
+ * Per-entity description material harvested from api/presets.ts
170
+ * (summary → entity description, presets → few-shot examples).
171
+ */
172
+ presets?: Record<string, EntityPresetInfo>;
173
+ /** Resolve the localized label of a select option ("dairy" → "Lácteos"). */
174
+ translateOption?: (slug: string, fieldName: string, value: string) => string | undefined;
175
+ /** IANA timezone used to resolve relative dates ("this_week"). */
176
+ defaultTimezone?: string;
177
+ /** Extra tools not attached to an entity (e.g. list_team_members). */
178
+ utilityTools?: (api: EngineApi) => McpToolDefinition[];
179
+ /** Injectable for tests. Defaults to the api_audit_log writer. */
180
+ audit?: (entry: AuditEntry) => Promise<void>;
181
+ /** Injectable for tests. Defaults to the in-process executor. */
182
+ executor?: EntityExecutor;
183
+ }
184
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/mcp/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ const MUTATION_OPERATIONS = ["create", "update", "delete"];
2
+ class McpToolError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = "McpToolError";
6
+ }
7
+ }
8
+ export {
9
+ MUTATION_OPERATIONS,
10
+ McpToolError
11
+ };
@@ -1,5 +1,5 @@
1
1
  {
2
- "generated": "2026-08-06T23:38:43.156Z",
2
+ "generated": "2026-09-01T15:13:00.302Z",
3
3
  "totalClasses": 1087,
4
4
  "classes": [
5
5
  "!text-2xl",