@frontmcp/sdk 0.2.0 → 0.2.2

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 (84) hide show
  1. package/package.json +3 -3
  2. package/src/decorators/front-mcp.decorator.js.map +1 -1
  3. package/src/decorators/hook.decorator.d.ts +12 -0
  4. package/src/decorators/{flow-hooks.decorator.js → hook.decorator.js} +18 -13
  5. package/src/decorators/hook.decorator.js.map +1 -0
  6. package/src/decorators/index.d.ts +1 -1
  7. package/src/decorators/index.js +1 -1
  8. package/src/decorators/index.js.map +1 -1
  9. package/src/decorators/tool.decorator.d.ts +34 -6
  10. package/src/decorators/tool.decorator.js +8 -1
  11. package/src/decorators/tool.decorator.js.map +1 -1
  12. package/src/dynamic/dynamic.plugin.d.ts +1 -0
  13. package/src/dynamic/dynamic.plugin.js +3 -0
  14. package/src/dynamic/dynamic.plugin.js.map +1 -1
  15. package/src/entries/base.entry.d.ts +1 -1
  16. package/src/entries/base.entry.js.map +1 -1
  17. package/src/entries/flow.entry.js.map +1 -1
  18. package/src/entries/hook.entry.d.ts +12 -0
  19. package/src/entries/hook.entry.js +20 -0
  20. package/src/entries/hook.entry.js.map +1 -0
  21. package/src/entries/index.d.ts +1 -0
  22. package/src/entries/index.js +1 -0
  23. package/src/entries/index.js.map +1 -1
  24. package/src/entries/plugin.entry.d.ts +2 -1
  25. package/src/entries/plugin.entry.js.map +1 -1
  26. package/src/entries/scope.entry.d.ts +2 -1
  27. package/src/entries/scope.entry.js.map +1 -1
  28. package/src/entries/tool.entry.d.ts +6 -2
  29. package/src/entries/tool.entry.js +1 -0
  30. package/src/entries/tool.entry.js.map +1 -1
  31. package/src/interfaces/flow.interface.d.ts +9 -6
  32. package/src/interfaces/flow.interface.js +4 -2
  33. package/src/interfaces/flow.interface.js.map +1 -1
  34. package/src/interfaces/hook.interface.d.ts +3 -0
  35. package/src/{metadata/flow-hooks.metadata.js → interfaces/hook.interface.js} +1 -1
  36. package/src/interfaces/hook.interface.js.map +1 -0
  37. package/src/interfaces/index.d.ts +1 -0
  38. package/src/interfaces/index.js +1 -0
  39. package/src/interfaces/index.js.map +1 -1
  40. package/src/interfaces/internal/registry.interface.d.ts +30 -4
  41. package/src/interfaces/internal/registry.interface.js.map +1 -1
  42. package/src/interfaces/tool.interface.d.ts +13 -5
  43. package/src/interfaces/tool.interface.js +5 -4
  44. package/src/interfaces/tool.interface.js.map +1 -1
  45. package/src/metadata/flow.metadata.d.ts +2 -0
  46. package/src/metadata/flow.metadata.js.map +1 -1
  47. package/src/metadata/hook.metadata.d.ts +19 -0
  48. package/src/metadata/hook.metadata.js +3 -0
  49. package/src/metadata/hook.metadata.js.map +1 -0
  50. package/src/metadata/index.d.ts +1 -1
  51. package/src/metadata/index.js +1 -1
  52. package/src/metadata/index.js.map +1 -1
  53. package/src/metadata/tool.metadata.d.ts +0 -100
  54. package/src/metadata/tool.metadata.js +1 -6
  55. package/src/metadata/tool.metadata.js.map +1 -1
  56. package/src/records/hook.record.d.ts +11 -0
  57. package/src/records/hook.record.js +8 -0
  58. package/src/records/hook.record.js.map +1 -0
  59. package/src/records/index.d.ts +1 -0
  60. package/src/records/index.js +1 -0
  61. package/src/records/index.js.map +1 -1
  62. package/src/records/plugin.record.d.ts +13 -3
  63. package/src/records/plugin.record.js +1 -1
  64. package/src/records/plugin.record.js.map +1 -1
  65. package/src/records/tool.record.d.ts +1 -1
  66. package/src/records/tool.record.js.map +1 -1
  67. package/src/schemas/annotated-class.schema.js +5 -1
  68. package/src/schemas/annotated-class.schema.js.map +1 -1
  69. package/src/schemas/http-output.schema.d.ts +93 -93
  70. package/src/schemas/http-output.schema.js +2 -2
  71. package/src/schemas/http-output.schema.js.map +1 -1
  72. package/src/tokens/base.tokens.js.map +1 -1
  73. package/src/tokens/flow-hook.tokens.js +2 -2
  74. package/src/tokens/flow-hook.tokens.js.map +1 -1
  75. package/src/tokens/tool.tokens.d.ts +1 -0
  76. package/src/tokens/tool.tokens.js +2 -1
  77. package/src/tokens/tool.tokens.js.map +1 -1
  78. package/src/types/auth/session.types.d.ts +2 -2
  79. package/src/types/options/auth.options.d.ts +4 -4
  80. package/src/utils/decide-request-intent.utils.d.ts +7 -7
  81. package/src/decorators/flow-hooks.decorator.d.ts +0 -12
  82. package/src/decorators/flow-hooks.decorator.js.map +0 -1
  83. package/src/metadata/flow-hooks.metadata.d.ts +0 -20
  84. package/src/metadata/flow-hooks.metadata.js.map +0 -1
@@ -218,8 +218,8 @@ exports.httpOutputSchema = zod_1.z.discriminatedUnion('kind', [
218
218
  * Convenience factories
219
219
  */
220
220
  exports.httpRespond = {
221
- json: (body) => {
222
- return { kind: 'json', status: 200, body, contentType: 'application/json; charset=utf-8' };
221
+ json: (body, extra = {}) => {
222
+ return { kind: 'json', status: 200, body, contentType: 'application/json; charset=utf-8', ...extra };
223
223
  },
224
224
  ok: (body) => {
225
225
  return typeof body === 'string'
@@ -1 +1 @@
1
- {"version":3,"file":"http-output.schema.js","sourceRoot":"","sources":["../../../src/schemas/http-output.schema.ts"],"names":[],"mappings":"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","sourcesContent":["// output-schemas.ts\nimport { z } from 'zod';\nimport {\n JSONRPCError,\n JSONRPCMessage,\n RequestId,\n JSONRPCResponseSchema,\n JSONRPCErrorSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { randomUUID } from 'crypto';\n\n/**\n * Constants\n */\nexport const JSON_RPC = '2.0' as const;\nexport const REDIRECTS = [301, 302, 303, 307, 308] as const;\nexport const NO_BODY_STATUSES = [204, 304] as const;\n\n/**\n * Helpers\n */\n// numeric-literal union from a readonly tuple of at least TWO numbers (no any)\nconst zNumUnion = <T extends readonly [number, number, ...number[]]>(vals: T): z.ZodType<T[number]> => {\n let schema: z.ZodType<T[number]> = z.literal(vals[0]) as z.ZodType<T[number]>;\n for (let i = 1; i < vals.length; i++) {\n schema = schema.or(z.literal(vals[i])) as z.ZodType<T[number]>;\n }\n return schema;\n};\n\nexport const HttpStatus = z.number().int().min(100).max(599);\nexport const HttpRedirectStatus = zNumUnion(REDIRECTS);\nexport const HttpEmptyStatus = zNumUnion(NO_BODY_STATUSES);\n\nexport const HttpHeaders = z.record(z.union([z.string(), z.union([z.string(), z.array(z.string())])])).default({});\n\nexport const HttpCookieSchema = z.object({\n name: z.string().min(1),\n value: z.string(),\n path: z.string().default('/'),\n domain: z.string().optional(),\n httpOnly: z.boolean().default(true),\n secure: z.boolean().optional(),\n sameSite: z.enum(['lax', 'strict', 'none']).optional(),\n maxAge: z.number().int().nonnegative().optional(),\n expires: z.date().optional(),\n});\nexport type HttpCookie = z.infer<typeof HttpCookieSchema>;\n\nexport const HttpCookies = z.array(HttpCookieSchema).default([]);\n\nconst HttpMeta = z.object({\n headers: HttpHeaders.optional(),\n cookies: HttpCookies.optional(),\n});\n\nconst statusAllowsBody = (s: number) => !NO_BODY_STATUSES.includes(s as (typeof NO_BODY_STATUSES)[number]);\n\n/**\n * Redirect (3xx)\n */\nexport const HttpRedirectSchema = z\n .object({\n kind: z.literal('redirect'),\n status: HttpRedirectStatus.default(302),\n location: z.string().url(),\n })\n .merge(HttpMeta);\n\n/**\n * JSON (application/json)\n */\nexport const HttpJsonSchema = z\n .object({\n kind: z.literal('json'),\n status: HttpStatus.refine((s) => statusAllowsBody(s) && !REDIRECTS.includes(s as (typeof REDIRECTS)[number]), {\n message: 'JSON responses must allow a body and not be a redirect.',\n }),\n body: z.union([z.object({}).passthrough(), z.array(z.any()), z.record(z.string(), z.any())]),\n contentType: z.string().default('application/json; charset=utf-8'),\n })\n .merge(HttpMeta);\n\n/**\n * unknown — plain text, HTML, etc.\n */\nexport const HttpNextSchema = z\n .object({\n kind: z.literal('next'),\n })\n .passthrough();\n\nexport const HttpConsumedSchema = z.object({ kind: z.literal('consumed') });\n\n/**\n * Text (text/*) — plain text, HTML, etc.\n */\nexport const HttpTextSchema = z\n .object({\n kind: z.literal('text'),\n status: HttpStatus.refine((s) => statusAllowsBody(s) && !REDIRECTS.includes(s as (typeof REDIRECTS)[number]), {\n message: 'Text responses must allow a body and not be a redirect.',\n }),\n body: z.string(),\n contentType: z\n .string()\n .regex(/^text\\/[a-z0-9.+-]+/i, 'contentType must be a text/* MIME type')\n .default('text/plain; charset=utf-8'),\n })\n .merge(HttpMeta);\n\n/**\n * HTML (text/html) — convenience specialization of Text\n */\nexport const HttpHtmlSchema = HttpTextSchema.extend({\n kind: z.literal('html'),\n contentType: z.literal('text/html; charset=utf-8').default('text/html; charset=utf-8'),\n});\n\n/**\n * Binary/file (Uint8Array or string with encoding)\n * Works for PDFs, archives, audio, video, etc.\n */\nexport const HttpBinarySchema = z\n .object({\n kind: z.literal('binary'),\n status: HttpStatus.refine((s) => statusAllowsBody(s) && !REDIRECTS.includes(s as (typeof REDIRECTS)[number]), {\n message: 'Binary responses must allow a body and not be a redirect.',\n }),\n body: z.union([z.instanceof(Uint8Array), z.string()]),\n // how to interpret string body\n encoding: z.enum(['utf8', 'base64']).default('utf8'),\n contentType: z.string().min(1),\n disposition: z.enum(['inline', 'attachment']).default('inline'),\n filename: z.string().optional(),\n })\n .merge(HttpMeta);\n\n/**\n * Images — narrowed binary with common image types\n */\nexport const HttpImageSchema = HttpBinarySchema.extend({\n kind: z.literal('image'),\n contentType: z.enum([\n 'image/png',\n 'image/jpeg',\n 'image/webp',\n 'image/gif',\n 'image/svg+xml',\n 'image/avif',\n 'image/apng',\n 'image/bmp',\n 'image/x-icon',\n ]),\n});\n\n/**\n * Stream (Readable-like or AsyncIterable) — runtime-agnostic\n */\nexport type HttpReadableLike = { pipe?: (dest: unknown) => unknown } | AsyncIterable<Uint8Array>;\n\nconst isHttpReadableLike = (v: unknown): v is HttpReadableLike => {\n if (typeof v !== 'object' || v === null) return false;\n const maybePipe = (v as { pipe?: unknown }).pipe;\n const maybeAI = (v as { [Symbol.asyncIterator]?: unknown })[Symbol.asyncIterator];\n return typeof maybePipe === 'function' || typeof maybeAI === 'function';\n};\n\nexport const HttpStreamSchema = z\n .object({\n kind: z.literal('stream'),\n status: HttpStatus.refine((s) => statusAllowsBody(s) && !REDIRECTS.includes(s as (typeof REDIRECTS)[number]), {\n message: 'Stream responses must allow a body and not be a redirect.',\n }),\n stream: z.custom<HttpReadableLike>(isHttpReadableLike, 'stream must be a Readable-like or AsyncIterable'),\n contentType: z.string().min(1),\n disposition: z.enum(['inline', 'attachment']).default('inline'),\n filename: z.string().optional(),\n })\n .merge(HttpMeta);\n\n/**\n * Server-Sent Events (specialized stream)\n */\nexport const HttpSseSchema = HttpStreamSchema.extend({\n kind: z.literal('sse'),\n contentType: z.literal('text/event-stream').default('text/event-stream'),\n});\n\n/**\n * JSON-RPC 2.0 wrapped for HTTP union (kind='jsonrpc')\n */\nexport const HttpJsonRpcSchema = z\n .object({\n kind: z.literal('jsonrpc'),\n status: HttpStatus.refine((s) => statusAllowsBody(s) && !REDIRECTS.includes(s as (typeof REDIRECTS)[number]), {\n message: 'JSON-RPC responses must allow a body and not be a redirect.',\n }),\n contentType: z.string().default('application/json; charset=utf-8'),\n body: z.union([JSONRPCResponseSchema, JSONRPCErrorSchema]),\n })\n .merge(HttpMeta);\n\n/**\n * RFC 7807 Problem Details (application/problem+json)\n */\nexport const HttpProblemSchema = z\n .object({\n kind: z.literal('problem'),\n status: HttpStatus,\n contentType: z.literal('application/problem+json').default('application/problem+json'),\n body: z\n .object({\n error: z.string(),\n })\n .passthrough(), // allow extension members\n })\n .merge(HttpMeta);\n\n/**\n * Empty responses (204/304) — MUST NOT include a body\n */\nexport const HttpEmptySchema = z\n .object({\n kind: z.literal('empty'),\n status: HttpEmptyStatus,\n })\n .merge(HttpMeta);\n\n/**\n * Master union — validate all server outputs with this\n */\nexport const httpOutputSchema = z.discriminatedUnion('kind', [\n HttpRedirectSchema,\n HttpJsonSchema,\n HttpTextSchema,\n HttpHtmlSchema,\n HttpBinarySchema,\n HttpImageSchema,\n HttpStreamSchema,\n HttpSseSchema,\n HttpJsonRpcSchema,\n HttpProblemSchema,\n HttpEmptySchema,\n HttpNextSchema,\n HttpConsumedSchema,\n]);\n\nexport type HttpOutput = z.infer<typeof httpOutputSchema>;\n\n/**\n * Convenience factories\n */\nexport const httpRespond = {\n json: <T extends Record<string, any>>(body: T): z.infer<typeof HttpJsonSchema> => {\n return { kind: 'json', status: 200, body, contentType: 'application/json; charset=utf-8' };\n },\n\n ok: (body: string | Record<string, any>): z.infer<typeof HttpJsonSchema> | z.infer<typeof HttpTextSchema> => {\n return typeof body === 'string'\n ? { kind: 'text', status: 200, body, contentType: 'text/plain; charset=utf-8' }\n : { kind: 'json', status: 200, body, contentType: 'application/json; charset=utf-8' };\n },\n\n unauthorized: (options?: {\n headers?: Record<string, string>;\n body?: Record<string, string>;\n status?: number;\n }): z.infer<typeof HttpJsonSchema> => ({\n kind: 'json',\n status: options?.status ?? 401,\n body: options?.body ?? { error: 'Unauthorized' },\n headers: options?.headers,\n contentType: 'application/json; charset=utf-8',\n }),\n\n html: (markup: string, status = 200): z.infer<typeof HttpHtmlSchema> => ({\n kind: 'html',\n status,\n body: markup,\n contentType: 'text/html; charset=utf-8',\n }),\n\n notFound: (message = 'Not Found'): z.infer<typeof HttpTextSchema> => ({\n kind: 'text',\n status: 404,\n body: message,\n contentType: 'text/plain; charset=utf-8',\n }),\n\n noValidSessionError: (): JSONRPCError => ({\n jsonrpc: JSON_RPC,\n error: { code: -32000, message: 'Bad Request: No valid session ID provided' },\n id: randomUUID(),\n }),\n\n rpcError: (message: string, requestId?: RequestId | null):z.infer<typeof HttpJsonSchema> => ({\n kind: 'json',\n status: 400,\n contentType: 'application/json; charset=utf-8',\n body: {\n jsonrpc: JSON_RPC,\n error: { code: -32000, message },\n id: requestId ?? randomUUID(),\n },\n }),\n\n rpcRequest: (requestId: RequestId, method: string, params: any): JSONRPCMessage => ({\n jsonrpc: JSON_RPC,\n id: requestId ?? randomUUID(),\n method,\n params,\n }),\n redirect(location: string): z.infer<typeof HttpRedirectSchema> {\n return {\n kind: 'redirect',\n status: 302,\n location,\n };\n },\n next(extra?: Record<string, any>): z.infer<typeof HttpNextSchema> {\n return { kind: 'next', ...extra };\n },\n consumed(): z.infer<typeof HttpConsumedSchema> {\n return { kind: 'consumed' };\n },\n};\n"]}
1
+ {"version":3,"file":"http-output.schema.js","sourceRoot":"","sources":["../../../src/schemas/http-output.schema.ts"],"names":[],"mappings":"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","sourcesContent":["// output-schemas.ts\nimport { z } from 'zod';\nimport {\n JSONRPCError,\n JSONRPCMessage,\n RequestId,\n JSONRPCResponseSchema,\n JSONRPCErrorSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { randomUUID } from 'crypto';\n\n/**\n * Constants\n */\nexport const JSON_RPC = '2.0' as const;\nexport const REDIRECTS = [301, 302, 303, 307, 308] as const;\nexport const NO_BODY_STATUSES = [204, 304] as const;\n\n/**\n * Helpers\n */\n// numeric-literal union from a readonly tuple of at least TWO numbers (no any)\nconst zNumUnion = <T extends readonly [number, number, ...number[]]>(vals: T): z.ZodType<T[number]> => {\n let schema: z.ZodType<T[number]> = z.literal(vals[0]) as z.ZodType<T[number]>;\n for (let i = 1; i < vals.length; i++) {\n schema = schema.or(z.literal(vals[i])) as z.ZodType<T[number]>;\n }\n return schema;\n};\n\nexport const HttpStatus = z.number().int().min(100).max(599);\nexport const HttpRedirectStatus = zNumUnion(REDIRECTS);\nexport const HttpEmptyStatus = zNumUnion(NO_BODY_STATUSES);\n\nexport const HttpHeaders = z.record(z.union([z.string(), z.union([z.string(), z.array(z.string())])])).default({});\n\nexport const HttpCookieSchema = z.object({\n name: z.string().min(1),\n value: z.string(),\n path: z.string().default('/'),\n domain: z.string().optional(),\n httpOnly: z.boolean().default(true),\n secure: z.boolean().optional(),\n sameSite: z.enum(['lax', 'strict', 'none']).optional(),\n maxAge: z.number().int().nonnegative().optional(),\n expires: z.date().optional(),\n});\nexport type HttpCookie = z.infer<typeof HttpCookieSchema>;\n\nexport const HttpCookies = z.array(HttpCookieSchema).default([]);\n\nconst HttpMeta = z.object({\n headers: HttpHeaders.optional(),\n cookies: HttpCookies.optional(),\n});\n\nconst statusAllowsBody = (s: number) => !NO_BODY_STATUSES.includes(s as (typeof NO_BODY_STATUSES)[number]);\n\n/**\n * Redirect (3xx)\n */\nexport const HttpRedirectSchema = z\n .object({\n kind: z.literal('redirect'),\n status: HttpRedirectStatus.default(302),\n location: z.string().url(),\n })\n .merge(HttpMeta);\n\n/**\n * JSON (application/json)\n */\nexport const HttpJsonSchema = z\n .object({\n kind: z.literal('json'),\n status: HttpStatus.refine((s) => statusAllowsBody(s) && !REDIRECTS.includes(s as (typeof REDIRECTS)[number]), {\n message: 'JSON responses must allow a body and not be a redirect.',\n }),\n body: z.union([z.object({}).passthrough(), z.array(z.any()), z.record(z.string(), z.any())]),\n contentType: z.string().default('application/json; charset=utf-8'),\n })\n .merge(HttpMeta);\n\n/**\n * unknown — plain text, HTML, etc.\n */\nexport const HttpNextSchema = z\n .object({\n kind: z.literal('next'),\n })\n .passthrough();\n\nexport const HttpConsumedSchema = z.object({ kind: z.literal('consumed') });\n\n/**\n * Text (text/*) — plain text, HTML, etc.\n */\nexport const HttpTextSchema = z\n .object({\n kind: z.literal('text'),\n status: HttpStatus.refine((s) => statusAllowsBody(s) && !REDIRECTS.includes(s as (typeof REDIRECTS)[number]), {\n message: 'Text responses must allow a body and not be a redirect.',\n }),\n body: z.string(),\n contentType: z\n .string()\n .regex(/^text\\/[a-z0-9.+-]+/i, 'contentType must be a text/* MIME type')\n .default('text/plain; charset=utf-8'),\n })\n .merge(HttpMeta);\n\n/**\n * HTML (text/html) — convenience specialization of Text\n */\nexport const HttpHtmlSchema = HttpTextSchema.extend({\n kind: z.literal('html'),\n contentType: z.literal('text/html; charset=utf-8').default('text/html; charset=utf-8'),\n});\n\n/**\n * Binary/file (Uint8Array or string with encoding)\n * Works for PDFs, archives, audio, video, etc.\n */\nexport const HttpBinarySchema = z\n .object({\n kind: z.literal('binary'),\n status: HttpStatus.refine((s) => statusAllowsBody(s) && !REDIRECTS.includes(s as (typeof REDIRECTS)[number]), {\n message: 'Binary responses must allow a body and not be a redirect.',\n }),\n body: z.union([z.instanceof(Uint8Array), z.string()]),\n // how to interpret string body\n encoding: z.enum(['utf8', 'base64']).default('utf8'),\n contentType: z.string().min(1),\n disposition: z.enum(['inline', 'attachment']).default('inline'),\n filename: z.string().optional(),\n })\n .merge(HttpMeta);\n\n/**\n * Images — narrowed binary with common image types\n */\nexport const HttpImageSchema = HttpBinarySchema.extend({\n kind: z.literal('image'),\n contentType: z.enum([\n 'image/png',\n 'image/jpeg',\n 'image/webp',\n 'image/gif',\n 'image/svg+xml',\n 'image/avif',\n 'image/apng',\n 'image/bmp',\n 'image/x-icon',\n ]),\n});\n\n/**\n * Stream (Readable-like or AsyncIterable) — runtime-agnostic\n */\nexport type HttpReadableLike = { pipe?: (dest: unknown) => unknown } | AsyncIterable<Uint8Array>;\n\nconst isHttpReadableLike = (v: unknown): v is HttpReadableLike => {\n if (typeof v !== 'object' || v === null) return false;\n const maybePipe = (v as { pipe?: unknown }).pipe;\n const maybeAI = (v as { [Symbol.asyncIterator]?: unknown })[Symbol.asyncIterator];\n return typeof maybePipe === 'function' || typeof maybeAI === 'function';\n};\n\nexport const HttpStreamSchema = z\n .object({\n kind: z.literal('stream'),\n status: HttpStatus.refine((s) => statusAllowsBody(s) && !REDIRECTS.includes(s as (typeof REDIRECTS)[number]), {\n message: 'Stream responses must allow a body and not be a redirect.',\n }),\n stream: z.custom<HttpReadableLike>(isHttpReadableLike, 'stream must be a Readable-like or AsyncIterable'),\n contentType: z.string().min(1),\n disposition: z.enum(['inline', 'attachment']).default('inline'),\n filename: z.string().optional(),\n })\n .merge(HttpMeta);\n\n/**\n * Server-Sent Events (specialized stream)\n */\nexport const HttpSseSchema = HttpStreamSchema.extend({\n kind: z.literal('sse'),\n contentType: z.literal('text/event-stream').default('text/event-stream'),\n});\n\n/**\n * JSON-RPC 2.0 wrapped for HTTP union (kind='jsonrpc')\n */\nexport const HttpJsonRpcSchema = z\n .object({\n kind: z.literal('jsonrpc'),\n status: HttpStatus.refine((s) => statusAllowsBody(s) && !REDIRECTS.includes(s as (typeof REDIRECTS)[number]), {\n message: 'JSON-RPC responses must allow a body and not be a redirect.',\n }),\n contentType: z.string().default('application/json; charset=utf-8'),\n body: z.union([JSONRPCResponseSchema, JSONRPCErrorSchema]),\n })\n .merge(HttpMeta);\n\n/**\n * RFC 7807 Problem Details (application/problem+json)\n */\nexport const HttpProblemSchema = z\n .object({\n kind: z.literal('problem'),\n status: HttpStatus,\n contentType: z.literal('application/problem+json').default('application/problem+json'),\n body: z\n .object({\n error: z.string(),\n })\n .passthrough(), // allow extension members\n })\n .merge(HttpMeta);\n\n/**\n * Empty responses (204/304) — MUST NOT include a body\n */\nexport const HttpEmptySchema = z\n .object({\n kind: z.literal('empty'),\n status: HttpEmptyStatus,\n })\n .merge(HttpMeta);\n\n/**\n * Master union — validate all server outputs with this\n */\nexport const httpOutputSchema = z.discriminatedUnion('kind', [\n HttpRedirectSchema,\n HttpJsonSchema,\n HttpTextSchema,\n HttpHtmlSchema,\n HttpBinarySchema,\n HttpImageSchema,\n HttpStreamSchema,\n HttpSseSchema,\n HttpJsonRpcSchema,\n HttpProblemSchema,\n HttpEmptySchema,\n HttpNextSchema,\n HttpConsumedSchema,\n]);\n\nexport type HttpOutput = z.infer<typeof httpOutputSchema>;\n\n/**\n * Convenience factories\n */\nexport const httpRespond = {\n json: <T extends Record<string, any>>(body: T, extra: Partial<z.infer<typeof HttpJsonSchema>> = {}): z.infer<typeof HttpJsonSchema> => {\n return { kind: 'json', status: 200, body, contentType: 'application/json; charset=utf-8', ...extra };\n },\n\n ok: (body: string | Record<string, any>): z.infer<typeof HttpJsonSchema> | z.infer<typeof HttpTextSchema> => {\n return typeof body === 'string'\n ? { kind: 'text', status: 200, body, contentType: 'text/plain; charset=utf-8' }\n : { kind: 'json', status: 200, body, contentType: 'application/json; charset=utf-8' };\n },\n\n unauthorized: (options?: {\n headers?: Record<string, string>;\n body?: Record<string, string>;\n status?: number;\n }): z.infer<typeof HttpJsonSchema> => ({\n kind: 'json',\n status: options?.status ?? 401,\n body: options?.body ?? { error: 'Unauthorized' },\n headers: options?.headers,\n contentType: 'application/json; charset=utf-8',\n }),\n\n html: (markup: string, status = 200): z.infer<typeof HttpHtmlSchema> => ({\n kind: 'html',\n status,\n body: markup,\n contentType: 'text/html; charset=utf-8',\n }),\n\n notFound: (message = 'Not Found'): z.infer<typeof HttpTextSchema> => ({\n kind: 'text',\n status: 404,\n body: message,\n contentType: 'text/plain; charset=utf-8',\n }),\n\n noValidSessionError: (): JSONRPCError => ({\n jsonrpc: JSON_RPC,\n error: { code: -32000, message: 'Bad Request: No valid session ID provided' },\n id: randomUUID(),\n }),\n\n rpcError: (message: string, requestId?: RequestId | null):z.infer<typeof HttpJsonSchema> => ({\n kind: 'json',\n status: 400,\n contentType: 'application/json; charset=utf-8',\n body: {\n jsonrpc: JSON_RPC,\n error: { code: -32000, message },\n id: requestId ?? randomUUID(),\n },\n }),\n\n rpcRequest: (requestId: RequestId, method: string, params: any): JSONRPCMessage => ({\n jsonrpc: JSON_RPC,\n id: requestId ?? randomUUID(),\n method,\n params,\n }),\n redirect(location: string): z.infer<typeof HttpRedirectSchema> {\n return {\n kind: 'redirect',\n status: 302,\n location,\n };\n },\n next(extra?: Record<string, any>): z.infer<typeof HttpNextSchema> {\n return { kind: 'next', ...extra };\n },\n consumed(): z.infer<typeof HttpConsumedSchema> {\n return { kind: 'consumed' };\n },\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"base.tokens.js","sourceRoot":"","sources":["../../../src/tokens/base.tokens.ts"],"names":[],"mappings":";;;AAEa,QAAA,eAAe,GAAG,UAAU,CAAC;AAE7B,QAAA,YAAY,GAAG;IAC1B,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,uBAAe,SAAS,IAAI,EAAE,CAAC;IACjE,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,uBAAe,SAAS,IAAI,EAAE,CAAC;CAClE,CAAA","sourcesContent":["import { Token } from '../interfaces';\n\nexport const baseTokenPrefix = 'FrontMcp';\n\nexport const tokenFactory = {\n type: (name: string) => Symbol(`${baseTokenPrefix}:type:${name}`),\n meta: (name: string) => Symbol(`${baseTokenPrefix}:meta:${name}`),\n}"]}
1
+ {"version":3,"file":"base.tokens.js","sourceRoot":"","sources":["../../../src/tokens/base.tokens.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,UAAU,CAAC;AAE7B,QAAA,YAAY,GAAG;IAC1B,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,uBAAe,SAAS,IAAI,EAAE,CAAC;IACjE,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,uBAAe,SAAS,IAAI,EAAE,CAAC;CAClE,CAAA","sourcesContent":["export const baseTokenPrefix = 'FrontMcp';\n\nexport const tokenFactory = {\n type: (name: string) => Symbol(`${baseTokenPrefix}:type:${name}`),\n meta: (name: string) => Symbol(`${baseTokenPrefix}:meta:${name}`),\n}"]}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FrontMcpFlowHookTokens = void 0;
4
4
  const base_tokens_1 = require("./base.tokens");
5
5
  exports.FrontMcpFlowHookTokens = {
6
- type: base_tokens_1.tokenFactory.type('flow'),
7
- hooks: base_tokens_1.tokenFactory.meta('hooks'),
6
+ type: base_tokens_1.tokenFactory.type('hooks'),
7
+ hooks: base_tokens_1.tokenFactory.meta('hooks'), // used for aggregate hooks in a target class
8
8
  };
9
9
  //# sourceMappingURL=flow-hook.tokens.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flow-hook.tokens.js","sourceRoot":"","sources":["../../../src/tokens/flow-hook.tokens.ts"],"names":[],"mappings":";;;AAEA,+CAA6C;AAEhC,QAAA,sBAAsB,GAAG;IACpC,IAAI,EAAE,0BAAY,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B,KAAK,EAAE,0BAAY,CAAC,IAAI,CAAC,OAAO,CAAC;CACoB,CAAC","sourcesContent":["import { RawMetadataShape } from '../types';\nimport { FlowHookMetadata } from '../metadata';\nimport { tokenFactory } from './base.tokens';\n\nexport const FrontMcpFlowHookTokens = {\n type: tokenFactory.type('flow'),\n hooks: tokenFactory.meta('hooks'),\n} as const satisfies RawMetadataShape<FlowHookMetadata>;\n\n"]}
1
+ {"version":3,"file":"flow-hook.tokens.js","sourceRoot":"","sources":["../../../src/tokens/flow-hook.tokens.ts"],"names":[],"mappings":";;;AAEA,+CAA2C;AAE9B,QAAA,sBAAsB,GAAG;IACpC,IAAI,EAAE,0BAAY,CAAC,IAAI,CAAC,OAAO,CAAC;IAChC,KAAK,EAAE,0BAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,6CAA6C;CAC1B,CAAC","sourcesContent":["import {RawMetadataShape} from '../types';\nimport { TokenHookMetadata} from '../metadata';\nimport {tokenFactory} from './base.tokens';\n\nexport const FrontMcpFlowHookTokens = {\n type: tokenFactory.type('hooks'),\n hooks: tokenFactory.meta('hooks'), // used for aggregate hooks in a target class\n} as const satisfies RawMetadataShape<TokenHookMetadata>;\n\n"]}
@@ -11,3 +11,4 @@ export declare const FrontMcpToolTokens: {
11
11
  readonly hideFromDiscovery: symbol;
12
12
  readonly metadata: symbol;
13
13
  };
14
+ export declare const extendedToolMetadata: symbol;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FrontMcpToolTokens = void 0;
3
+ exports.extendedToolMetadata = exports.FrontMcpToolTokens = void 0;
4
4
  const base_tokens_1 = require("./base.tokens");
5
5
  exports.FrontMcpToolTokens = {
6
6
  type: base_tokens_1.tokenFactory.type('tool'),
@@ -15,4 +15,5 @@ exports.FrontMcpToolTokens = {
15
15
  hideFromDiscovery: base_tokens_1.tokenFactory.meta('hideFromDiscovery'),
16
16
  metadata: base_tokens_1.tokenFactory.meta('metadata'), // used in tool({}) construction
17
17
  };
18
+ exports.extendedToolMetadata = base_tokens_1.tokenFactory.meta('extendedToolMetadata');
18
19
  //# sourceMappingURL=tool.tokens.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool.tokens.js","sourceRoot":"","sources":["../../../src/tokens/tool.tokens.ts"],"names":[],"mappings":";;;AAAA,+CAA6C;AAIhC,QAAA,kBAAkB,GAAG;IAChC,IAAI,EAAE,0BAAY,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,0BAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B,IAAI,EAAE,0BAAY,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B,WAAW,EAAE,0BAAY,CAAC,IAAI,CAAC,aAAa,CAAC;IAC7C,WAAW,EAAE,0BAAY,CAAC,IAAI,CAAC,aAAa,CAAC;IAC7C,cAAc,EAAE,0BAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACnD,YAAY,EAAE,0BAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IAC/C,IAAI,EAAE,0BAAY,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B,WAAW,EAAE,0BAAY,CAAC,IAAI,CAAC,aAAa,CAAC;IAC7C,iBAAiB,EAAE,0BAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;IACzD,QAAQ,EAAE,0BAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,gCAAgC;CACI,CAAC","sourcesContent":["import { tokenFactory } from './base.tokens';\nimport { RawMetadataShape } from '../types';\nimport { ToolMetadata } from '../metadata';\n\nexport const FrontMcpToolTokens = {\n type: tokenFactory.type('tool'),\n id: tokenFactory.meta('id'),\n name: tokenFactory.meta('name'),\n description: tokenFactory.meta('description'),\n inputSchema: tokenFactory.meta('inputSchema'),\n rawInputSchema: tokenFactory.meta('rawInputSchema'),\n outputSchema: tokenFactory.meta('outputSchema'),\n tags: tokenFactory.meta('tags'),\n annotations: tokenFactory.meta('annotations'),\n hideFromDiscovery: tokenFactory.meta('hideFromDiscovery'),\n metadata: tokenFactory.meta('metadata'), // used in tool({}) construction\n} as const satisfies RawMetadataShape<ToolMetadata, ExtendFrontMcpToolMetadata>;\n"]}
1
+ {"version":3,"file":"tool.tokens.js","sourceRoot":"","sources":["../../../src/tokens/tool.tokens.ts"],"names":[],"mappings":";;;AAAA,+CAA6C;AAIhC,QAAA,kBAAkB,GAAG;IAChC,IAAI,EAAE,0BAAY,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,0BAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B,IAAI,EAAE,0BAAY,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B,WAAW,EAAE,0BAAY,CAAC,IAAI,CAAC,aAAa,CAAC;IAC7C,WAAW,EAAE,0BAAY,CAAC,IAAI,CAAC,aAAa,CAAC;IAC7C,cAAc,EAAE,0BAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACnD,YAAY,EAAE,0BAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IAC/C,IAAI,EAAE,0BAAY,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B,WAAW,EAAE,0BAAY,CAAC,IAAI,CAAC,aAAa,CAAC;IAC7C,iBAAiB,EAAE,0BAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;IACzD,QAAQ,EAAE,0BAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,gCAAgC;CACI,CAAC;AAEnE,QAAA,oBAAoB,GAAG,0BAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC","sourcesContent":["import { tokenFactory } from './base.tokens';\nimport { RawMetadataShape } from '../types';\nimport { ToolMetadata } from '../metadata';\n\nexport const FrontMcpToolTokens = {\n type: tokenFactory.type('tool'),\n id: tokenFactory.meta('id'),\n name: tokenFactory.meta('name'),\n description: tokenFactory.meta('description'),\n inputSchema: tokenFactory.meta('inputSchema'),\n rawInputSchema: tokenFactory.meta('rawInputSchema'),\n outputSchema: tokenFactory.meta('outputSchema'),\n tags: tokenFactory.meta('tags'),\n annotations: tokenFactory.meta('annotations'),\n hideFromDiscovery: tokenFactory.meta('hideFromDiscovery'),\n metadata: tokenFactory.meta('metadata'), // used in tool({}) construction\n} as const satisfies RawMetadataShape<ToolMetadata, ExtendFrontMcpToolMetadata>;\n\nexport const extendedToolMetadata = tokenFactory.meta('extendedToolMetadata');"]}
@@ -209,8 +209,8 @@ export declare const authorizationSchema: z.ZodObject<{
209
209
  }, "strip", z.ZodTypeAny, {
210
210
  token: string;
211
211
  user: {
212
- sub: string;
213
212
  iss: string;
213
+ sub: string;
214
214
  name?: string | undefined;
215
215
  sid?: string | undefined;
216
216
  exp?: number | undefined;
@@ -236,8 +236,8 @@ export declare const authorizationSchema: z.ZodObject<{
236
236
  }, {
237
237
  token: string;
238
238
  user: {
239
- sub: string;
240
239
  iss: string;
240
+ sub: string;
241
241
  name?: string | undefined;
242
242
  sid?: string | undefined;
243
243
  exp?: number | undefined;
@@ -418,6 +418,7 @@ export declare const appAuthOptionsSchema: z.ZodDiscriminatedUnion<"type", [z.Zo
418
418
  type: "remote";
419
419
  baseUrl: string;
420
420
  id?: string | undefined;
421
+ standalone?: boolean | undefined;
421
422
  dcrEnabled?: boolean | undefined;
422
423
  clientId?: string | ((args_0: {
423
424
  clientId: string;
@@ -435,13 +436,13 @@ export declare const appAuthOptionsSchema: z.ZodDiscriminatedUnion<"type", [z.Zo
435
436
  keys: JWK[];
436
437
  } | undefined;
437
438
  jwksUri?: string | undefined;
438
- standalone?: boolean | undefined;
439
439
  excludeFromParent?: boolean | undefined;
440
440
  }, {
441
441
  name: string;
442
442
  type: "remote";
443
443
  baseUrl: string;
444
444
  id?: string | undefined;
445
+ standalone?: boolean | undefined;
445
446
  dcrEnabled?: boolean | undefined;
446
447
  clientId?: string | ((args_0: {
447
448
  clientId: string;
@@ -459,7 +460,6 @@ export declare const appAuthOptionsSchema: z.ZodDiscriminatedUnion<"type", [z.Zo
459
460
  keys: JWK[];
460
461
  } | undefined;
461
462
  jwksUri?: string | undefined;
462
- standalone?: boolean | undefined;
463
463
  excludeFromParent?: boolean | undefined;
464
464
  }>, z.ZodObject<{
465
465
  type: z.ZodLiteral<"local">;
@@ -484,6 +484,7 @@ export declare const appAuthOptionsSchema: z.ZodDiscriminatedUnion<"type", [z.Zo
484
484
  name: string;
485
485
  id: string;
486
486
  type: "local";
487
+ standalone?: boolean | undefined;
487
488
  allowAnonymous?: boolean | undefined;
488
489
  consent?: boolean | undefined;
489
490
  scopes?: string[] | undefined;
@@ -492,12 +493,12 @@ export declare const appAuthOptionsSchema: z.ZodDiscriminatedUnion<"type", [z.Zo
492
493
  keys: JWK[];
493
494
  } | undefined;
494
495
  signKey?: JWK | Uint8Array<ArrayBuffer> | undefined;
495
- standalone?: boolean | undefined;
496
496
  excludeFromParent?: boolean | undefined;
497
497
  }, {
498
498
  name: string;
499
499
  id: string;
500
500
  type: "local";
501
+ standalone?: boolean | undefined;
501
502
  allowAnonymous?: boolean | undefined;
502
503
  consent?: boolean | undefined;
503
504
  scopes?: string[] | undefined;
@@ -506,7 +507,6 @@ export declare const appAuthOptionsSchema: z.ZodDiscriminatedUnion<"type", [z.Zo
506
507
  keys: JWK[];
507
508
  } | undefined;
508
509
  signKey?: JWK | Uint8Array<ArrayBuffer> | undefined;
509
- standalone?: boolean | undefined;
510
510
  excludeFromParent?: boolean | undefined;
511
511
  }>]>;
512
512
  export type AppAuthOptions = (RemoteAuthOptions | LocalAuthOptions) & StandaloneOption;
@@ -30,27 +30,27 @@ export declare const decisionSchema: z.ZodObject<{
30
30
  }, "strip", z.ZodTypeAny, {
31
31
  intent: "unknown" | "legacy-sse" | "sse" | "streamable-http" | "stateful-http" | "stateless-http";
32
32
  reasons: string[];
33
+ recommendation?: {
34
+ message: string;
35
+ httpStatus: number;
36
+ } | undefined;
33
37
  debug?: {
34
38
  key: number;
35
39
  channel: number;
36
40
  flags: number;
37
41
  } | undefined;
42
+ }, {
43
+ intent: "unknown" | "legacy-sse" | "sse" | "streamable-http" | "stateful-http" | "stateless-http";
44
+ reasons: string[];
38
45
  recommendation?: {
39
46
  message: string;
40
47
  httpStatus: number;
41
48
  } | undefined;
42
- }, {
43
- intent: "unknown" | "legacy-sse" | "sse" | "streamable-http" | "stateful-http" | "stateless-http";
44
- reasons: string[];
45
49
  debug?: {
46
50
  key: number;
47
51
  channel: number;
48
52
  flags: number;
49
53
  } | undefined;
50
- recommendation?: {
51
- message: string;
52
- httpStatus: number;
53
- } | undefined;
54
54
  }>;
55
55
  export type HttpRequestIntent = 'legacy-sse' | 'sse' | 'streamable-http' | 'stateful-http' | 'stateless-http';
56
56
  export type Intent = HttpRequestIntent | 'unknown';
@@ -1,12 +0,0 @@
1
- import { FlowHookOptions, FlowName } from '../metadata';
2
- /** NEW: typed variants */
3
- export declare function StageHookOf<Name extends FlowName>(name: Name): (stage: ExtendFlows[Name]["stage"], opts?: FlowHookOptions<ExtendFlows[Name]["ctx"]>) => MethodDecorator;
4
- export declare function WillHookOf<Name extends FlowName>(name: Name): (stage: ExtendFlows[Name]["stage"], opts?: FlowHookOptions<ExtendFlows[Name]["ctx"]>) => MethodDecorator;
5
- export declare function DidHookOf<Name extends FlowName>(name: Name): (stage: ExtendFlows[Name]["stage"], opts?: FlowHookOptions<ExtendFlows[Name]["ctx"]>) => MethodDecorator;
6
- export declare function AroundHookOf<Name extends FlowName>(name: Name): (stage: ExtendFlows[Name]["stage"], opts?: FlowHookOptions<ExtendFlows[Name]["ctx"]>) => MethodDecorator;
7
- export declare function FlowHooksOf<Name extends FlowName>(name: Name): {
8
- Stage: (stage: ExtendFlows[Name]["stage"], opts?: FlowHookOptions<ExtendFlows[Name]["ctx"]>) => MethodDecorator;
9
- Will: (stage: ExtendFlows[Name]["stage"], opts?: FlowHookOptions<ExtendFlows[Name]["ctx"]>) => MethodDecorator;
10
- Did: (stage: ExtendFlows[Name]["stage"], opts?: FlowHookOptions<ExtendFlows[Name]["ctx"]>) => MethodDecorator;
11
- Around: (stage: ExtendFlows[Name]["stage"], opts?: FlowHookOptions<ExtendFlows[Name]["ctx"]>) => MethodDecorator;
12
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"flow-hooks.decorator.js","sourceRoot":"","sources":["../../../src/decorators/flow-hooks.decorator.ts"],"names":[],"mappings":";;AA4BA,kCAOC;AAED,gCAOC;AAED,8BAOC;AAED,oCAOC;AAED,kCAOC;AAtED,sCAAmD;AAGnD,SAAS,gBAAgB,CAAC,MAAW,EAAE,IAAkB;IACvD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;IAChC,MAAM,GAAG,GAAmB,OAAO,CAAC,WAAW,CAAC,+BAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1F,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,OAAO,CAAC,cAAc,CAAC,+BAAsB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAClE,CAAC;AAED,mCAAmC;AACnC,SAAS,IAAI,CAAC,IAAkB;IAC9B,OAAO,UAAoD,KAAQ,EAAE,OAA6B,EAAE;QAClG,OAAO,CAAC,MAAW,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;YACjC,gBAAgB,CAAC,MAAM,EAAE;gBACvB,IAAI;gBACJ,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;gBACpB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC;gBAC5B,MAAM,EAAE,IAAI,CAAC,MAAa;gBAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;aACzC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,0BAA0B;AAC1B,SAAgB,WAAW,CAAwB,IAAU;IAG3D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,UAAS,KAAQ,EAAE,OAA6B,EAAE;QACvD,OAAO,IAAI,CAAS,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,UAAU,CAAwB,IAAU;IAG1D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,OAAO,UAAS,KAAQ,EAAE,OAA6B,EAAE;QACvD,OAAO,IAAI,CAAS,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,SAAS,CAAwB,IAAU;IAGzD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,OAAO,UAAS,KAAQ,EAAE,OAA6B,EAAE;QACvD,OAAO,IAAI,CAAS,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY,CAAwB,IAAU;IAG5D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,OAAO,UAAS,KAAQ,EAAE,OAA6B,EAAE;QACvD,OAAO,IAAI,CAAS,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,WAAW,CAAwB,IAAU;IAC3D,OAAO;QACL,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC;QACxB,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC;QACtB,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC;QACpB,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC;KAC3B,CAAC;AACJ,CAAC","sourcesContent":["import { FlowHookKind, FlowHookOptions, FlowHookMeta, FlowName } from '../metadata';\nimport { FrontMcpFlowHookTokens } from '../tokens';\n\n\nfunction registerFlowHook(target: any, meta: FlowHookMeta) {\n const ctor = target.constructor;\n const arr: FlowHookMeta[] = Reflect.getMetadata(FrontMcpFlowHookTokens.hooks, ctor) ?? [];\n arr.push(meta);\n Reflect.defineMetadata(FrontMcpFlowHookTokens.hooks, arr, ctor);\n}\n\n/** Base factory (kept internal) */\nfunction make(kind: FlowHookKind) {\n return function <Ctx = unknown, T extends string = string>(stage: T, opts: FlowHookOptions<Ctx> = {}): MethodDecorator {\n return (target: any, key, _desc) => {\n registerFlowHook(target, {\n kind,\n stage: String(stage),\n method: String(key),\n priority: opts.priority ?? 0,\n filter: opts.filter as any,\n static: Boolean(target.constructor[key]),\n });\n };\n };\n}\n\n/** NEW: typed variants */\nexport function StageHookOf<Name extends FlowName>(name: Name) {\n type T = ExtendFlows[Name]['stage']\n type Ctx = ExtendFlows[Name]['ctx']\n const base = make('stage');\n return function(stage: T, opts: FlowHookOptions<Ctx> = {}) {\n return base<Ctx, T>(stage, opts);\n };\n}\n\nexport function WillHookOf<Name extends FlowName>(name: Name) {\n type T = ExtendFlows[Name]['stage']\n type Ctx = ExtendFlows[Name]['ctx']\n const base = make('will');\n return function(stage: T, opts: FlowHookOptions<Ctx> = {}) {\n return base<Ctx, T>(stage, opts);\n };\n}\n\nexport function DidHookOf<Name extends FlowName>(name: Name) {\n type T = ExtendFlows[Name]['stage']\n type Ctx = ExtendFlows[Name]['ctx']\n const base = make('did');\n return function(stage: T, opts: FlowHookOptions<Ctx> = {}) {\n return base<Ctx, T>(stage, opts);\n };\n}\n\nexport function AroundHookOf<Name extends FlowName>(name: Name) {\n type T = ExtendFlows[Name]['stage']\n type Ctx = ExtendFlows[Name]['ctx']\n const base = make('around');\n return function(stage: T, opts: FlowHookOptions<Ctx> = {}) {\n return base<Ctx, T>(stage, opts);\n };\n}\n\nexport function FlowHooksOf<Name extends FlowName>(name: Name) {\n return {\n Stage: StageHookOf(name),\n Will: WillHookOf(name),\n Did: DidHookOf(name),\n Around: AroundHookOf(name),\n };\n}\n\n"]}
@@ -1,20 +0,0 @@
1
- export type FlowHookKind = 'stage' | 'will' | 'did' | 'around';
2
- export type FlowHookMetadata<Ctx = any> = {
3
- type: 'flow';
4
- hooks: FlowHookMeta<Ctx>[];
5
- };
6
- export type FlowHookMeta<Ctx = any> = {
7
- kind: FlowHookKind;
8
- stage: string;
9
- method: string;
10
- priority?: number;
11
- filter?: (ctx: Ctx) => boolean | Promise<boolean>;
12
- static?: boolean;
13
- };
14
- export type HookKind = 'stage' | 'will' | 'did' | 'around';
15
- export type Priority = number;
16
- export interface FlowHookOptions<Ctx> {
17
- priority?: Priority;
18
- filter?: (ctx: Ctx) => boolean | Promise<boolean>;
19
- name?: string;
20
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"flow-hooks.metadata.js","sourceRoot":"","sources":["../../../src/metadata/flow-hooks.metadata.ts"],"names":[],"mappings":"","sourcesContent":["export type FlowHookKind = 'stage' | 'will' | 'did' | 'around';\n\nexport type FlowHookMetadata<Ctx = any> = {\n type: 'flow';\n hooks: FlowHookMeta<Ctx>[];\n};\n\nexport type FlowHookMeta<Ctx = any> = {\n kind: FlowHookKind;\n stage: string;\n method: string;\n priority?: number;\n filter?: (ctx: Ctx) => boolean | Promise<boolean>;\n static?: boolean;\n};\n\n\nexport type HookKind = 'stage' | 'will' | 'did' | 'around';\nexport type Priority = number;\n\nexport interface FlowHookOptions<Ctx> {\n priority?: Priority;\n filter?: (ctx: Ctx) => boolean | Promise<boolean>;\n name?: string;\n}"]}