@ontahi/runtime-nextjs 0.1.0-alpha.7 → 1.0.0-alpha.11

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/README.md CHANGED
@@ -11,9 +11,49 @@ This package depends on `@ontahi/core` and owns the Next.js / `next-safe-action`
11
11
  2. `@ontahi/runtime-nextjs/actions/server`: server-only `next-safe-action` transport and feature action factory helpers.
12
12
  3. `@ontahi/runtime-nextjs/operation-invocation`: an App Router `Request`/`Response` adapter for the transport-neutral operation invocation protocol from `@ontahi/core`.
13
13
  4. `@ontahi/runtime-nextjs/graph-read`: an App Router adapter for policy-scoped remote data graph reads.
14
+ 5. `@ontahi/runtime-nextjs/runtime-protocol`: an App Router adapter for an injected common Runtime
15
+ Protocol dispatcher and receiver-owned context factory.
14
16
 
15
17
  New generic consumers should import action metadata and result helpers from `@ontahi/core/runtime/actions`. React hooks and operation bridge adapters live in `@ontahi/react/actions` so this package can stay focused on Next.js runtime concerns.
16
18
 
19
+ ## Runtime Protocol
20
+
21
+ Export a `POST` handler from an App Router route such as `app/api/runtime/route.ts`:
22
+
23
+ ```ts
24
+ import { createRuntimeProtocolDispatcher } from '@ontahi/core/runtime/protocol';
25
+ import { createNextRuntimeProtocolRouteHandler } from '@ontahi/runtime-nextjs/runtime-protocol';
26
+
27
+ const dispatcher = createRuntimeProtocolDispatcher({
28
+ handlers: {
29
+ operation: operationDispatcher,
30
+ 'durable.operation': durableObservationHandler,
31
+ 'graph.read': graphReadDispatcher,
32
+ 'graph.command': graphCommandDispatcher,
33
+ },
34
+ });
35
+
36
+ export const POST = createNextRuntimeProtocolRouteHandler({
37
+ dispatcher,
38
+ context: async request => ({
39
+ principal: await resolvePrincipal(request),
40
+ }),
41
+ });
42
+ ```
43
+
44
+ The adapter validates JSON, the common envelope, and the canonical family body before calling the
45
+ context factory. It installs no handlers, policies, authorization, or capabilities; the host owns
46
+ the dispatcher and derives trusted context only from the received server request. All registered
47
+ families pass through the same dispatcher without Next.js-specific routing.
48
+
49
+ Common invalid requests return `400`, a known family without an installed handler returns `501`,
50
+ unavailable dispatch returns `503`, invalid upstream responses return `502`, and complete family
51
+ responses—including semantic rejections and family protocol errors—return `200`. Existing
52
+ `operation-invocation` and `graph-read` adapters remain available while clients migrate from their
53
+ family-specific paths.
54
+
55
+ ## Operation invocation
56
+
17
57
  The operation route can derive an Ontahi invocation context from each web request. Authentication
18
58
  remains a host concern; the adapter receives only the resulting Principal:
19
59
 
@@ -1,4 +1,5 @@
1
1
  import 'server-only';
2
+ import type { PortableOperationConditions } from '@ontahi/core/data-graph';
2
3
  import { createFeatureAllQueryTarget, type ActionInvalidationTarget, type ActionQueryKey, type ActionQuerySpec } from '@ontahi/core/runtime/actions';
3
4
  import { type EffectSuccessPayload, type LayerConcern, type OperationFailure, type OperationInput, type OperationRequirement, type OperationRuntimeError } from '@ontahi/core/runtime/server';
4
5
  import type { Effect } from 'effect';
@@ -41,7 +42,7 @@ type CanonicalDomainOperationForClient<TClient> = {
41
42
  telemetrySpanName?: string;
42
43
  requires?: ReadonlyArray<OperationRequirement<InferClientParsedInput<TClient> & OperationInput>>;
43
44
  concerns?: ReadonlyArray<LayerConcern<InferClientParsedInput<TClient>, unknown>>;
44
- contracts?: unknown;
45
+ conditions?: PortableOperationConditions;
45
46
  };
46
47
  type AnyDomainOperationForClient<TClient, Data> = DomainOperationForClient<TClient, Data> | CanonicalDomainOperationForClient<TClient>;
47
48
  type InvalidationResolver<TInput, TData> = (args: {
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/actions/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/actions/builder.ts"],"names":[],"mappings":"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"}
@@ -96,7 +96,7 @@ const createActionBuilder = (client, metadata, config) => {
96
96
  telemetrySpanName: operation.telemetrySpanName,
97
97
  requires: operation.requires,
98
98
  concerns: operation.concerns,
99
- contracts: operation.contracts,
99
+ conditions: operation.conditions,
100
100
  });
101
101
  return runOperation(operationRunner, options);
102
102
  };
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/actions/builder.ts"],"names":[],"mappings":"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","sourcesContent":["import 'server-only';\n\nimport {\n attachActionRuntime,\n createFeatureAllQueryTarget,\n getActionQueryKeyPrefixFromSpec,\n resolveInvalidationTarget,\n type ActionInvalidationTarget,\n type ActionQueryKey,\n type ActionQuerySpec,\n} from '@ontahi/core/runtime/actions';\nimport {\n layer,\n runServerEffect,\n type EffectSuccessPayload,\n type LayerConcern,\n type OperationFailure,\n type OperationInput,\n type OperationRequirement,\n type OperationRuntimeError,\n} from '@ontahi/core/runtime/server';\nimport { isRecord } from '@ontahi/core/value/object';\nimport type { Effect } from 'effect';\nimport type {\n InputSchemaFactoryFn,\n MaybeBrandThrows,\n SafeActionClient,\n SafeActionFn,\n ServerCodeFn,\n} from 'next-safe-action';\n\nimport { type ActionMetadata, withActionMetadata } from './transport.js';\n\nconst toScopeSegment = (value: string) =>\n value.replace(/-([a-z])/g, (_match, letter: string) => letter.toUpperCase());\n\ntype InferClientMetadata<TClient> =\n TClient extends SafeActionClient<\n any,\n any,\n any,\n infer Metadata,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n ? Metadata\n : never;\n\ntype InferClientCtx<TClient> =\n TClient extends SafeActionClient<any, any, any, any, any, infer Ctx, any, any, any, any, any, any>\n ? Ctx\n : object;\n\ntype InferClientInputSchema<TClient> =\n TClient extends SafeActionClient<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n infer InputSchema,\n any,\n any,\n any,\n any\n >\n ? InputSchema\n : undefined;\n\ntype InferClientBindArgsSchemas<TClient> =\n TClient extends SafeActionClient<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n infer BindArgsSchemas,\n any,\n any\n >\n ? BindArgsSchemas\n : readonly [];\n\ntype InferStandardSchemaOutput<Schema> = Schema extends {\n readonly '~standard': {\n readonly types?: {\n readonly output: infer Output;\n };\n };\n}\n ? Output\n : undefined;\n\ntype InferClientParsedInput<TClient> = InferStandardSchemaOutput<InferClientInputSchema<TClient>>;\n\ntype ActionFnForClient<TClient, Data> =\n TClient extends SafeActionClient<\n infer ServerError,\n any,\n any,\n any,\n any,\n any,\n any,\n infer InputSchema,\n any,\n infer BindArgsSchemas,\n infer ShapedErrors,\n infer ThrowsValidationErrors\n >\n ? MaybeBrandThrows<\n SafeActionFn<ServerError, InputSchema, BindArgsSchemas, ShapedErrors, Data>,\n ThrowsValidationErrors\n >\n : never;\n\ntype ActionArgsForClient<TClient> = Parameters<\n ServerCodeFn<\n InferClientMetadata<TClient>,\n InferClientCtx<TClient>,\n InferClientInputSchema<TClient>,\n InferClientBindArgsSchemas<TClient>,\n unknown\n >\n>[0];\n\ntype ActionInputFnForClient<TClient, Data> = (\n parsedInput: InferClientParsedInput<TClient>,\n) => Data | Promise<Data>;\n\ntype MaybePromise<T> = T | Promise<T>;\n\ntype ActionOperationOptions<TClient, Data> = {\n mapInput?: (\n parsedInput: InferClientParsedInput<TClient>,\n actionArgs: ActionArgsForClient<TClient>,\n ) => unknown;\n onSuccess?: (args: {\n parsedInput: InferClientParsedInput<TClient>;\n input: unknown;\n result: Awaited<Data>;\n actionArgs: ActionArgsForClient<TClient>;\n }) => MaybePromise<unknown>;\n};\n\ntype DomainOperationForClient<TClient, Data> = {\n operation: ActionInputFnForClient<TClient, Data>;\n};\n\ntype CanonicalDomainOperationForClient<TClient> = {\n name: string;\n layer: string;\n run: (\n input: InferClientParsedInput<TClient>,\n ) => Effect.Effect<\n Record<string, unknown> | void | EffectSuccessPayload<Record<string, unknown> | void>,\n OperationFailure | OperationRuntimeError\n >;\n defectLogMessage?: string;\n defectPublicMessage?: string;\n extra?: (input: InferClientParsedInput<TClient>) => Record<string, unknown>;\n telemetrySpanName?: string;\n requires?: ReadonlyArray<OperationRequirement<InferClientParsedInput<TClient> & OperationInput>>;\n concerns?: ReadonlyArray<LayerConcern<InferClientParsedInput<TClient>, unknown>>;\n contracts?: unknown;\n};\n\ntype AnyDomainOperationForClient<TClient, Data> =\n | DomainOperationForClient<TClient, Data>\n | CanonicalDomainOperationForClient<TClient>;\n\ntype InvalidationResolver<TInput, TData> = (args: {\n input: TInput;\n data: TData;\n}) => ActionInvalidationTarget[];\n\ntype AnySafeActionClient = SafeActionClient<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>;\n\ntype ResolvedInputSchema<Schema> =\n Schema extends InputSchemaFactoryFn<any, infer NextSchema> ? NextSchema : Schema;\n\ntype NextClientForSchema<\n Client extends AnySafeActionClient,\n Schema extends Parameters<Client['inputSchema']>[0],\n> =\n Client extends SafeActionClient<\n infer ServerError,\n infer ErrorsFormat,\n infer MetadataSchema,\n infer Metadata,\n infer HasMetadata,\n infer Ctx,\n infer InputSchemaFn,\n infer CurrentInputSchema,\n infer OutputSchema,\n infer BindArgsSchemas,\n any,\n infer ThrowsValidationErrors\n >\n ? SafeActionClient<\n ServerError,\n ErrorsFormat,\n MetadataSchema,\n Metadata,\n HasMetadata,\n Ctx,\n InputSchemaFn,\n ResolvedInputSchema<Schema>,\n OutputSchema,\n BindArgsSchemas,\n any,\n ThrowsValidationErrors\n >\n : AnySafeActionClient;\n\ntype MetadataClient<Client extends AnySafeActionClient> = ReturnType<Client['metadata']>;\n\ntype ActionBuilder<Client extends AnySafeActionClient> = {\n input: <Schema extends Parameters<Client['inputSchema']>[0]>(\n schema: Schema,\n ) => ActionBuilder<NextClientForSchema<Client, Schema>>;\n inputType: <Schema extends Parameters<Client['inputSchema']>[0]>(\n schema: Schema,\n ) => ActionBuilder<NextClientForSchema<Client, Schema>>;\n key: {\n (querySpec: ActionQuerySpec<InferClientParsedInput<Client>>): ActionBuilder<Client>;\n (getQueryKey: (input: InferClientParsedInput<Client>) => ActionQueryKey): ActionBuilder<Client>;\n };\n affects: (\n targets:\n | ActionInvalidationTarget[]\n | InvalidationResolver<InferClientParsedInput<Client>, unknown>,\n ) => ActionBuilder<Client>;\n run: <Data>(\n serverCodeFn: ServerCodeFn<\n InferClientMetadata<Client>,\n InferClientCtx<Client>,\n InferClientInputSchema<Client>,\n InferClientBindArgsSchemas<Client>,\n Data\n >,\n ) => ActionFnForClient<Client, Data>;\n runEffect: <Data>(\n effectFn: (\n parsedInput: InferClientParsedInput<Client>,\n ) => Effect.Effect<Data | EffectSuccessPayload<Data>, unknown>,\n options?: {\n scope?: string;\n telemetrySpanName?: string;\n input?: (\n parsedInput: InferClientParsedInput<Client>,\n actionArgs: ActionArgsForClient<Client>,\n ) => Record<string, unknown> | undefined;\n extra?: (\n parsedInput: InferClientParsedInput<Client>,\n actionArgs: ActionArgsForClient<Client>,\n ) => Record<string, unknown> | undefined;\n },\n ) => ActionFnForClient<Client, Data>;\n runOperation: <Data>(\n operationFn: ActionInputFnForClient<Client, Data>,\n options?: ActionOperationOptions<Client, Data>,\n ) => ActionFnForClient<Client, Data>;\n runDomainOperation: <Data>(\n operation: AnyDomainOperationForClient<Client, Data>,\n options?: ActionOperationOptions<Client, Data>,\n ) => ActionFnForClient<Client, Data>;\n};\n\ntype ActionBuilderConfig<Client> = {\n querySpec?: ActionQuerySpec<InferClientParsedInput<Client>>;\n invalidationQueryKeyPrefix?: ActionQueryKey;\n getQueryKey?: (input: InferClientParsedInput<Client>) => ActionQueryKey;\n getAffects?: InvalidationResolver<InferClientParsedInput<Client>, unknown>;\n};\n\nconst createActionBuilder = <Client extends AnySafeActionClient>(\n client: Client,\n metadata: ActionMetadata,\n config?: ActionBuilderConfig<Client>,\n): ActionBuilder<Client> => {\n const resolveKeyConfig = (\n specOrGetQueryKey:\n | ActionQuerySpec<InferClientParsedInput<Client>>\n | ((input: InferClientParsedInput<Client>) => ActionQueryKey),\n ): Pick<\n ActionBuilderConfig<Client>,\n 'querySpec' | 'invalidationQueryKeyPrefix' | 'getQueryKey'\n > => {\n if (typeof specOrGetQueryKey === 'function') {\n const getQueryKey = specOrGetQueryKey as (\n input: InferClientParsedInput<Client>,\n ) => ActionQueryKey;\n\n return {\n getQueryKey,\n querySpec: undefined,\n invalidationQueryKeyPrefix: undefined,\n };\n }\n\n return {\n getQueryKey: undefined,\n querySpec: specOrGetQueryKey,\n invalidationQueryKeyPrefix: getActionQueryKeyPrefixFromSpec(specOrGetQueryKey),\n };\n };\n\n const input = <Schema extends Parameters<Client['inputSchema']>[0]>(schema: Schema) => {\n const nextClient = client.inputSchema(schema);\n return createActionBuilder<typeof nextClient>(nextClient, metadata, config as any);\n };\n\n const inputType = <Schema extends Parameters<Client['inputSchema']>[0]>(schema: Schema) => {\n const nextClient = client.inputSchema(schema);\n return createActionBuilder<typeof nextClient>(nextClient, metadata, config as any);\n };\n\n function key(\n querySpec: ActionQuerySpec<InferClientParsedInput<Client>>,\n ): ReturnType<typeof createActionBuilder<Client>>;\n function key(\n getQueryKey: (input: InferClientParsedInput<Client>) => ActionQueryKey,\n ): ReturnType<typeof createActionBuilder<Client>>;\n function key(\n specOrGetQueryKey:\n | ActionQuerySpec<InferClientParsedInput<Client>>\n | ((input: InferClientParsedInput<Client>) => ActionQueryKey),\n ) {\n const nextKeyConfig = resolveKeyConfig(specOrGetQueryKey);\n\n return createActionBuilder(client, metadata, {\n ...config,\n ...nextKeyConfig,\n });\n }\n\n const affects = (\n targets:\n | ActionInvalidationTarget[]\n | InvalidationResolver<InferClientParsedInput<Client>, unknown>,\n ) =>\n createActionBuilder(client, metadata, {\n ...config,\n getAffects:\n typeof targets === 'function'\n ? (targets as InvalidationResolver<InferClientParsedInput<Client>, unknown>)\n : () => targets,\n });\n\n const run = <Data>(\n serverCodeFn: ServerCodeFn<\n InferClientMetadata<Client>,\n InferClientCtx<Client>,\n InferClientInputSchema<Client>,\n InferClientBindArgsSchemas<Client>,\n Data\n >,\n ): ActionFnForClient<Client, Data> =>\n attachActionRuntime(\n client.action<Data>(async actionArgs =>\n serverCodeFn(actionArgs as unknown as Parameters<typeof serverCodeFn>[0]),\n ) as ActionFnForClient<Client, Data>,\n {\n feature: metadata.feature,\n actionName: metadata.actionName,\n requiresAuth: metadata.requiresAuth ?? false,\n queryKeyPrefix: [metadata.feature, metadata.actionName] as const,\n querySpec: config?.querySpec,\n invalidationQueryKeyPrefix: config?.invalidationQueryKeyPrefix,\n getQueryKey: config?.getQueryKey as\n | ((input: InferClientParsedInput<Client>) => ActionQueryKey)\n | undefined,\n getAffectedQueryKeys: config?.getAffects\n ? args =>\n config\n .getAffects?.(args as { input: InferClientParsedInput<Client>; data: unknown })\n .flatMap(resolveInvalidationTarget) ?? []\n : undefined,\n },\n ) as unknown as ActionFnForClient<Client, Data>;\n\n const runEffect = <Data>(\n effectFn: (\n parsedInput: InferClientParsedInput<Client>,\n ) => Effect.Effect<Data | EffectSuccessPayload<Data>, unknown>,\n options?: {\n scope?: string;\n telemetrySpanName?: string;\n input?: (\n parsedInput: InferClientParsedInput<Client>,\n actionArgs: ActionArgsForClient<Client>,\n ) => Record<string, unknown> | undefined;\n extra?: (\n parsedInput: InferClientParsedInput<Client>,\n actionArgs: ActionArgsForClient<Client>,\n ) => Record<string, unknown> | undefined;\n },\n ) =>\n run<Data>(actionArgs => {\n const typedArgs = actionArgs as ActionArgsForClient<Client>;\n const parsedInput = typedArgs.parsedInput as InferClientParsedInput<Client>;\n const input =\n options?.input?.(parsedInput, typedArgs) ??\n (isRecord(parsedInput) ? parsedInput : undefined);\n const extra = options?.extra?.(parsedInput, typedArgs);\n\n return runServerEffect(effectFn(parsedInput), {\n scope:\n options?.scope ??\n `app.actions.${toScopeSegment(metadata.feature)}.${metadata.actionName}`,\n telemetrySpanName: options?.telemetrySpanName,\n input,\n extra,\n });\n });\n\n const runOperation = <Data>(\n operationFn: ActionInputFnForClient<Client, Data>,\n options?: ActionOperationOptions<Client, Data>,\n ): ActionFnForClient<Client, Data> =>\n run<Data>(async actionArgs => {\n const typedArgs = actionArgs as ActionArgsForClient<Client>;\n const parsedInput = typedArgs.parsedInput as InferClientParsedInput<Client>;\n const input = (options?.mapInput?.(parsedInput, typedArgs) ??\n parsedInput) as InferClientParsedInput<Client>;\n const result = await Promise.resolve(operationFn(input));\n\n if (options?.onSuccess) {\n await options.onSuccess({\n parsedInput,\n input,\n result: result as Awaited<Data>,\n actionArgs: typedArgs,\n });\n }\n\n return result;\n });\n\n const runDomainOperation = <Data>(\n operation: AnyDomainOperationForClient<Client, Data>,\n options?: ActionOperationOptions<Client, Data>,\n ): ActionFnForClient<Client, Data> => {\n if ('operation' in operation) {\n return runOperation(operation.operation, options);\n }\n\n const operationRunner = layer(operation.layer).operation(\n operation.name,\n operation.run as never,\n {\n defectLogMessage: operation.defectLogMessage,\n defectPublicMessage: operation.defectPublicMessage,\n extra: operation.extra,\n telemetrySpanName: operation.telemetrySpanName,\n requires: operation.requires,\n concerns: operation.concerns,\n contracts: operation.contracts,\n } as never,\n ) as ActionInputFnForClient<Client, Data>;\n\n return runOperation(operationRunner, options);\n };\n\n return { input, inputType, key, affects, run, runEffect, runOperation, runDomainOperation };\n};\n\ntype FeatureActionsFactory = <\n PublicClient extends AnySafeActionClient,\n AuthClient extends AnySafeActionClient,\n>(clients: {\n actionClient: PublicClient;\n authActionClient: AuthClient;\n}) => (feature: string) => {\n ALL: ReturnType<typeof createFeatureAllQueryTarget>;\n auth: (actionName: string) => ActionBuilder<MetadataClient<AuthClient>>;\n public: (actionName: string) => ActionBuilder<MetadataClient<PublicClient>>;\n};\n\nexport const createFeatureActionsFactory: FeatureActionsFactory =\n ({ actionClient, authActionClient }) =>\n (feature: string) => ({\n ALL: createFeatureAllQueryTarget(feature),\n auth: (actionName: string) =>\n createActionBuilder(\n withActionMetadata(authActionClient, {\n actionName,\n feature,\n requiresAuth: true,\n }),\n {\n actionName,\n feature,\n requiresAuth: true,\n },\n ),\n public: (actionName: string) =>\n createActionBuilder(\n withActionMetadata(actionClient, {\n actionName,\n feature,\n requiresAuth: false,\n }),\n {\n actionName,\n feature,\n requiresAuth: false,\n },\n ),\n });\n"]}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/actions/builder.ts"],"names":[],"mappings":"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","sourcesContent":["import 'server-only';\n\nimport type { PortableOperationConditions } from '@ontahi/core/data-graph';\nimport {\n attachActionRuntime,\n createFeatureAllQueryTarget,\n getActionQueryKeyPrefixFromSpec,\n resolveInvalidationTarget,\n type ActionInvalidationTarget,\n type ActionQueryKey,\n type ActionQuerySpec,\n} from '@ontahi/core/runtime/actions';\nimport {\n layer,\n runServerEffect,\n type EffectSuccessPayload,\n type LayerConcern,\n type OperationFailure,\n type OperationInput,\n type OperationRequirement,\n type OperationRuntimeError,\n} from '@ontahi/core/runtime/server';\nimport { isRecord } from '@ontahi/core/value/object';\nimport type { Effect } from 'effect';\nimport type {\n InputSchemaFactoryFn,\n MaybeBrandThrows,\n SafeActionClient,\n SafeActionFn,\n ServerCodeFn,\n} from 'next-safe-action';\n\nimport { type ActionMetadata, withActionMetadata } from './transport.js';\n\nconst toScopeSegment = (value: string) =>\n value.replace(/-([a-z])/g, (_match, letter: string) => letter.toUpperCase());\n\ntype InferClientMetadata<TClient> =\n TClient extends SafeActionClient<\n any,\n any,\n any,\n infer Metadata,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n ? Metadata\n : never;\n\ntype InferClientCtx<TClient> =\n TClient extends SafeActionClient<any, any, any, any, any, infer Ctx, any, any, any, any, any, any>\n ? Ctx\n : object;\n\ntype InferClientInputSchema<TClient> =\n TClient extends SafeActionClient<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n infer InputSchema,\n any,\n any,\n any,\n any\n >\n ? InputSchema\n : undefined;\n\ntype InferClientBindArgsSchemas<TClient> =\n TClient extends SafeActionClient<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n infer BindArgsSchemas,\n any,\n any\n >\n ? BindArgsSchemas\n : readonly [];\n\ntype InferStandardSchemaOutput<Schema> = Schema extends {\n readonly '~standard': {\n readonly types?: {\n readonly output: infer Output;\n };\n };\n}\n ? Output\n : undefined;\n\ntype InferClientParsedInput<TClient> = InferStandardSchemaOutput<InferClientInputSchema<TClient>>;\n\ntype ActionFnForClient<TClient, Data> =\n TClient extends SafeActionClient<\n infer ServerError,\n any,\n any,\n any,\n any,\n any,\n any,\n infer InputSchema,\n any,\n infer BindArgsSchemas,\n infer ShapedErrors,\n infer ThrowsValidationErrors\n >\n ? MaybeBrandThrows<\n SafeActionFn<ServerError, InputSchema, BindArgsSchemas, ShapedErrors, Data>,\n ThrowsValidationErrors\n >\n : never;\n\ntype ActionArgsForClient<TClient> = Parameters<\n ServerCodeFn<\n InferClientMetadata<TClient>,\n InferClientCtx<TClient>,\n InferClientInputSchema<TClient>,\n InferClientBindArgsSchemas<TClient>,\n unknown\n >\n>[0];\n\ntype ActionInputFnForClient<TClient, Data> = (\n parsedInput: InferClientParsedInput<TClient>,\n) => Data | Promise<Data>;\n\ntype MaybePromise<T> = T | Promise<T>;\n\ntype ActionOperationOptions<TClient, Data> = {\n mapInput?: (\n parsedInput: InferClientParsedInput<TClient>,\n actionArgs: ActionArgsForClient<TClient>,\n ) => unknown;\n onSuccess?: (args: {\n parsedInput: InferClientParsedInput<TClient>;\n input: unknown;\n result: Awaited<Data>;\n actionArgs: ActionArgsForClient<TClient>;\n }) => MaybePromise<unknown>;\n};\n\ntype DomainOperationForClient<TClient, Data> = {\n operation: ActionInputFnForClient<TClient, Data>;\n};\n\ntype CanonicalDomainOperationForClient<TClient> = {\n name: string;\n layer: string;\n run: (\n input: InferClientParsedInput<TClient>,\n ) => Effect.Effect<\n Record<string, unknown> | void | EffectSuccessPayload<Record<string, unknown> | void>,\n OperationFailure | OperationRuntimeError\n >;\n defectLogMessage?: string;\n defectPublicMessage?: string;\n extra?: (input: InferClientParsedInput<TClient>) => Record<string, unknown>;\n telemetrySpanName?: string;\n requires?: ReadonlyArray<OperationRequirement<InferClientParsedInput<TClient> & OperationInput>>;\n concerns?: ReadonlyArray<LayerConcern<InferClientParsedInput<TClient>, unknown>>;\n conditions?: PortableOperationConditions;\n};\n\ntype AnyDomainOperationForClient<TClient, Data> =\n | DomainOperationForClient<TClient, Data>\n | CanonicalDomainOperationForClient<TClient>;\n\ntype InvalidationResolver<TInput, TData> = (args: {\n input: TInput;\n data: TData;\n}) => ActionInvalidationTarget[];\n\ntype AnySafeActionClient = SafeActionClient<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>;\n\ntype ResolvedInputSchema<Schema> =\n Schema extends InputSchemaFactoryFn<any, infer NextSchema> ? NextSchema : Schema;\n\ntype NextClientForSchema<\n Client extends AnySafeActionClient,\n Schema extends Parameters<Client['inputSchema']>[0],\n> =\n Client extends SafeActionClient<\n infer ServerError,\n infer ErrorsFormat,\n infer MetadataSchema,\n infer Metadata,\n infer HasMetadata,\n infer Ctx,\n infer InputSchemaFn,\n infer CurrentInputSchema,\n infer OutputSchema,\n infer BindArgsSchemas,\n any,\n infer ThrowsValidationErrors\n >\n ? SafeActionClient<\n ServerError,\n ErrorsFormat,\n MetadataSchema,\n Metadata,\n HasMetadata,\n Ctx,\n InputSchemaFn,\n ResolvedInputSchema<Schema>,\n OutputSchema,\n BindArgsSchemas,\n any,\n ThrowsValidationErrors\n >\n : AnySafeActionClient;\n\ntype MetadataClient<Client extends AnySafeActionClient> = ReturnType<Client['metadata']>;\n\ntype ActionBuilder<Client extends AnySafeActionClient> = {\n input: <Schema extends Parameters<Client['inputSchema']>[0]>(\n schema: Schema,\n ) => ActionBuilder<NextClientForSchema<Client, Schema>>;\n inputType: <Schema extends Parameters<Client['inputSchema']>[0]>(\n schema: Schema,\n ) => ActionBuilder<NextClientForSchema<Client, Schema>>;\n key: {\n (querySpec: ActionQuerySpec<InferClientParsedInput<Client>>): ActionBuilder<Client>;\n (getQueryKey: (input: InferClientParsedInput<Client>) => ActionQueryKey): ActionBuilder<Client>;\n };\n affects: (\n targets:\n | ActionInvalidationTarget[]\n | InvalidationResolver<InferClientParsedInput<Client>, unknown>,\n ) => ActionBuilder<Client>;\n run: <Data>(\n serverCodeFn: ServerCodeFn<\n InferClientMetadata<Client>,\n InferClientCtx<Client>,\n InferClientInputSchema<Client>,\n InferClientBindArgsSchemas<Client>,\n Data\n >,\n ) => ActionFnForClient<Client, Data>;\n runEffect: <Data>(\n effectFn: (\n parsedInput: InferClientParsedInput<Client>,\n ) => Effect.Effect<Data | EffectSuccessPayload<Data>, unknown>,\n options?: {\n scope?: string;\n telemetrySpanName?: string;\n input?: (\n parsedInput: InferClientParsedInput<Client>,\n actionArgs: ActionArgsForClient<Client>,\n ) => Record<string, unknown> | undefined;\n extra?: (\n parsedInput: InferClientParsedInput<Client>,\n actionArgs: ActionArgsForClient<Client>,\n ) => Record<string, unknown> | undefined;\n },\n ) => ActionFnForClient<Client, Data>;\n runOperation: <Data>(\n operationFn: ActionInputFnForClient<Client, Data>,\n options?: ActionOperationOptions<Client, Data>,\n ) => ActionFnForClient<Client, Data>;\n runDomainOperation: <Data>(\n operation: AnyDomainOperationForClient<Client, Data>,\n options?: ActionOperationOptions<Client, Data>,\n ) => ActionFnForClient<Client, Data>;\n};\n\ntype ActionBuilderConfig<Client> = {\n querySpec?: ActionQuerySpec<InferClientParsedInput<Client>>;\n invalidationQueryKeyPrefix?: ActionQueryKey;\n getQueryKey?: (input: InferClientParsedInput<Client>) => ActionQueryKey;\n getAffects?: InvalidationResolver<InferClientParsedInput<Client>, unknown>;\n};\n\nconst createActionBuilder = <Client extends AnySafeActionClient>(\n client: Client,\n metadata: ActionMetadata,\n config?: ActionBuilderConfig<Client>,\n): ActionBuilder<Client> => {\n const resolveKeyConfig = (\n specOrGetQueryKey:\n | ActionQuerySpec<InferClientParsedInput<Client>>\n | ((input: InferClientParsedInput<Client>) => ActionQueryKey),\n ): Pick<\n ActionBuilderConfig<Client>,\n 'querySpec' | 'invalidationQueryKeyPrefix' | 'getQueryKey'\n > => {\n if (typeof specOrGetQueryKey === 'function') {\n const getQueryKey = specOrGetQueryKey as (\n input: InferClientParsedInput<Client>,\n ) => ActionQueryKey;\n\n return {\n getQueryKey,\n querySpec: undefined,\n invalidationQueryKeyPrefix: undefined,\n };\n }\n\n return {\n getQueryKey: undefined,\n querySpec: specOrGetQueryKey,\n invalidationQueryKeyPrefix: getActionQueryKeyPrefixFromSpec(specOrGetQueryKey),\n };\n };\n\n const input = <Schema extends Parameters<Client['inputSchema']>[0]>(schema: Schema) => {\n const nextClient = client.inputSchema(schema);\n return createActionBuilder<typeof nextClient>(nextClient, metadata, config as any);\n };\n\n const inputType = <Schema extends Parameters<Client['inputSchema']>[0]>(schema: Schema) => {\n const nextClient = client.inputSchema(schema);\n return createActionBuilder<typeof nextClient>(nextClient, metadata, config as any);\n };\n\n function key(\n querySpec: ActionQuerySpec<InferClientParsedInput<Client>>,\n ): ReturnType<typeof createActionBuilder<Client>>;\n function key(\n getQueryKey: (input: InferClientParsedInput<Client>) => ActionQueryKey,\n ): ReturnType<typeof createActionBuilder<Client>>;\n function key(\n specOrGetQueryKey:\n | ActionQuerySpec<InferClientParsedInput<Client>>\n | ((input: InferClientParsedInput<Client>) => ActionQueryKey),\n ) {\n const nextKeyConfig = resolveKeyConfig(specOrGetQueryKey);\n\n return createActionBuilder(client, metadata, {\n ...config,\n ...nextKeyConfig,\n });\n }\n\n const affects = (\n targets:\n | ActionInvalidationTarget[]\n | InvalidationResolver<InferClientParsedInput<Client>, unknown>,\n ) =>\n createActionBuilder(client, metadata, {\n ...config,\n getAffects:\n typeof targets === 'function'\n ? (targets as InvalidationResolver<InferClientParsedInput<Client>, unknown>)\n : () => targets,\n });\n\n const run = <Data>(\n serverCodeFn: ServerCodeFn<\n InferClientMetadata<Client>,\n InferClientCtx<Client>,\n InferClientInputSchema<Client>,\n InferClientBindArgsSchemas<Client>,\n Data\n >,\n ): ActionFnForClient<Client, Data> =>\n attachActionRuntime(\n client.action<Data>(async actionArgs =>\n serverCodeFn(actionArgs as unknown as Parameters<typeof serverCodeFn>[0]),\n ) as ActionFnForClient<Client, Data>,\n {\n feature: metadata.feature,\n actionName: metadata.actionName,\n requiresAuth: metadata.requiresAuth ?? false,\n queryKeyPrefix: [metadata.feature, metadata.actionName] as const,\n querySpec: config?.querySpec,\n invalidationQueryKeyPrefix: config?.invalidationQueryKeyPrefix,\n getQueryKey: config?.getQueryKey as\n | ((input: InferClientParsedInput<Client>) => ActionQueryKey)\n | undefined,\n getAffectedQueryKeys: config?.getAffects\n ? args =>\n config\n .getAffects?.(args as { input: InferClientParsedInput<Client>; data: unknown })\n .flatMap(resolveInvalidationTarget) ?? []\n : undefined,\n },\n ) as unknown as ActionFnForClient<Client, Data>;\n\n const runEffect = <Data>(\n effectFn: (\n parsedInput: InferClientParsedInput<Client>,\n ) => Effect.Effect<Data | EffectSuccessPayload<Data>, unknown>,\n options?: {\n scope?: string;\n telemetrySpanName?: string;\n input?: (\n parsedInput: InferClientParsedInput<Client>,\n actionArgs: ActionArgsForClient<Client>,\n ) => Record<string, unknown> | undefined;\n extra?: (\n parsedInput: InferClientParsedInput<Client>,\n actionArgs: ActionArgsForClient<Client>,\n ) => Record<string, unknown> | undefined;\n },\n ) =>\n run<Data>(actionArgs => {\n const typedArgs = actionArgs as ActionArgsForClient<Client>;\n const parsedInput = typedArgs.parsedInput as InferClientParsedInput<Client>;\n const input =\n options?.input?.(parsedInput, typedArgs) ??\n (isRecord(parsedInput) ? parsedInput : undefined);\n const extra = options?.extra?.(parsedInput, typedArgs);\n\n return runServerEffect(effectFn(parsedInput), {\n scope:\n options?.scope ??\n `app.actions.${toScopeSegment(metadata.feature)}.${metadata.actionName}`,\n telemetrySpanName: options?.telemetrySpanName,\n input,\n extra,\n });\n });\n\n const runOperation = <Data>(\n operationFn: ActionInputFnForClient<Client, Data>,\n options?: ActionOperationOptions<Client, Data>,\n ): ActionFnForClient<Client, Data> =>\n run<Data>(async actionArgs => {\n const typedArgs = actionArgs as ActionArgsForClient<Client>;\n const parsedInput = typedArgs.parsedInput as InferClientParsedInput<Client>;\n const input = (options?.mapInput?.(parsedInput, typedArgs) ??\n parsedInput) as InferClientParsedInput<Client>;\n const result = await Promise.resolve(operationFn(input));\n\n if (options?.onSuccess) {\n await options.onSuccess({\n parsedInput,\n input,\n result: result as Awaited<Data>,\n actionArgs: typedArgs,\n });\n }\n\n return result;\n });\n\n const runDomainOperation = <Data>(\n operation: AnyDomainOperationForClient<Client, Data>,\n options?: ActionOperationOptions<Client, Data>,\n ): ActionFnForClient<Client, Data> => {\n if ('operation' in operation) {\n return runOperation(operation.operation, options);\n }\n\n const operationRunner = layer(operation.layer).operation(\n operation.name,\n operation.run as never,\n {\n defectLogMessage: operation.defectLogMessage,\n defectPublicMessage: operation.defectPublicMessage,\n extra: operation.extra,\n telemetrySpanName: operation.telemetrySpanName,\n requires: operation.requires,\n concerns: operation.concerns,\n conditions: operation.conditions,\n } as never,\n ) as ActionInputFnForClient<Client, Data>;\n\n return runOperation(operationRunner, options);\n };\n\n return { input, inputType, key, affects, run, runEffect, runOperation, runDomainOperation };\n};\n\ntype FeatureActionsFactory = <\n PublicClient extends AnySafeActionClient,\n AuthClient extends AnySafeActionClient,\n>(clients: {\n actionClient: PublicClient;\n authActionClient: AuthClient;\n}) => (feature: string) => {\n ALL: ReturnType<typeof createFeatureAllQueryTarget>;\n auth: (actionName: string) => ActionBuilder<MetadataClient<AuthClient>>;\n public: (actionName: string) => ActionBuilder<MetadataClient<PublicClient>>;\n};\n\nexport const createFeatureActionsFactory: FeatureActionsFactory =\n ({ actionClient, authActionClient }) =>\n (feature: string) => ({\n ALL: createFeatureAllQueryTarget(feature),\n auth: (actionName: string) =>\n createActionBuilder(\n withActionMetadata(authActionClient, {\n actionName,\n feature,\n requiresAuth: true,\n }),\n {\n actionName,\n feature,\n requiresAuth: true,\n },\n ),\n public: (actionName: string) =>\n createActionBuilder(\n withActionMetadata(actionClient, {\n actionName,\n feature,\n requiresAuth: false,\n }),\n {\n actionName,\n feature,\n requiresAuth: false,\n },\n ),\n });\n"]}
@@ -0,0 +1,2 @@
1
+ export { createNextRuntimeProtocolRouteHandler, type CreateNextRuntimeProtocolRouteHandlerOptions, type NextRuntimeProtocolContextFactory, } from './route.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime-protocol/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qCAAqC,EACrC,KAAK,4CAA4C,EACjD,KAAK,iCAAiC,GACvC,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createNextRuntimeProtocolRouteHandler, } from './route.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime-protocol/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qCAAqC,GAGtC,MAAM,YAAY,CAAC","sourcesContent":["export {\n createNextRuntimeProtocolRouteHandler,\n type CreateNextRuntimeProtocolRouteHandlerOptions,\n type NextRuntimeProtocolContextFactory,\n} from './route.js';\n"]}
@@ -0,0 +1,9 @@
1
+ import { type RuntimeProtocolDispatcher } from '@ontahi/core/runtime/protocol';
2
+ export type NextRuntimeProtocolContextFactory<TContext> = (request: Request) => TContext | Promise<TContext>;
3
+ export type CreateNextRuntimeProtocolRouteHandlerOptions<TContext> = {
4
+ dispatcher: RuntimeProtocolDispatcher<TContext>;
5
+ context: NextRuntimeProtocolContextFactory<TContext>;
6
+ reportError?: (error: unknown, request: Request) => void;
7
+ };
8
+ export declare const createNextRuntimeProtocolRouteHandler: <TContext>({ dispatcher, context, reportError, }: CreateNextRuntimeProtocolRouteHandlerOptions<TContext>) => (request: Request) => Promise<Response>;
9
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/runtime-protocol/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,yBAAyB,EAC/B,MAAM,+BAA+B,CAAC;AAEvC,MAAM,MAAM,iCAAiC,CAAC,QAAQ,IAAI,CACxD,OAAO,EAAE,OAAO,KACb,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAElC,MAAM,MAAM,4CAA4C,CAAC,QAAQ,IAAI;IACnE,UAAU,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,EAAE,iCAAiC,CAAC,QAAQ,CAAC,CAAC;IACrD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1D,CAAC;AAsBF,eAAO,MAAM,qCAAqC,GAC/C,QAAQ,EAAE,uCAIR,4CAA4C,CAAC,QAAQ,CAAC,MAClD,SAAS,OAAO,KAAG,OAAO,CAAC,QAAQ,CAqBzC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { createRuntimeProtocolRegistry, runtimeProtocolError, runtimeProtocolFamilies, } from '@ontahi/core/runtime/protocol';
2
+ const responseStatus = (result) => {
3
+ if (result.kind !== 'protocol-error')
4
+ return 200;
5
+ switch (result.error.code) {
6
+ case 'invalid_envelope':
7
+ case 'unsupported_version':
8
+ case 'unknown_family':
9
+ case 'invalid_family_request':
10
+ return 400;
11
+ case 'family_unavailable':
12
+ return 501;
13
+ case 'dispatch_unavailable':
14
+ return 503;
15
+ case 'invalid_response':
16
+ return 502;
17
+ }
18
+ };
19
+ const registry = createRuntimeProtocolRegistry(runtimeProtocolFamilies);
20
+ export const createNextRuntimeProtocolRouteHandler = ({ dispatcher, context, reportError, }) => async (request) => {
21
+ const parsed = registry.parseRequest(await request.json().catch(() => null));
22
+ if (!parsed.success) {
23
+ return Response.json(parsed.error, { status: responseStatus(parsed.error) });
24
+ }
25
+ try {
26
+ const result = await dispatcher(parsed.request, await context(request));
27
+ return Response.json(result, { status: responseStatus(result) });
28
+ }
29
+ catch (error) {
30
+ reportError?.(error, request);
31
+ return Response.json(runtimeProtocolError('dispatch_unavailable', 'Runtime Protocol dispatch is temporarily unavailable.', { id: parsed.request.id, family: parsed.request.family }), { status: 503 });
32
+ }
33
+ };
34
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/runtime-protocol/route.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,uBAAuB,GAGxB,MAAM,+BAA+B,CAAC;AAYvC,MAAM,cAAc,GAAG,CAAC,MAAqC,EAAE,EAAE;IAC/D,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,GAAG,CAAC;IAEjD,QAAQ,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1B,KAAK,kBAAkB,CAAC;QACxB,KAAK,qBAAqB,CAAC;QAC3B,KAAK,gBAAgB,CAAC;QACtB,KAAK,wBAAwB;YAC3B,OAAO,GAAG,CAAC;QACb,KAAK,oBAAoB;YACvB,OAAO,GAAG,CAAC;QACb,KAAK,sBAAsB;YACzB,OAAO,GAAG,CAAC;QACb,KAAK,kBAAkB;YACrB,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,6BAA6B,CAAC,uBAAuB,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,qCAAqC,GAChD,CAAW,EACT,UAAU,EACV,OAAO,EACP,WAAW,GAC4C,EAAE,EAAE,CAC7D,KAAK,EAAE,OAAgB,EAAqB,EAAE;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7E,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACxE,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAE9B,OAAO,QAAQ,CAAC,IAAI,CAClB,oBAAoB,CAClB,sBAAsB,EACtB,uDAAuD,EACvD,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CACzD,EACD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;AACH,CAAC,CAAC","sourcesContent":["import {\n createRuntimeProtocolRegistry,\n runtimeProtocolError,\n runtimeProtocolFamilies,\n type RuntimeProtocolDispatchResult,\n type RuntimeProtocolDispatcher,\n} from '@ontahi/core/runtime/protocol';\n\nexport type NextRuntimeProtocolContextFactory<TContext> = (\n request: Request,\n) => TContext | Promise<TContext>;\n\nexport type CreateNextRuntimeProtocolRouteHandlerOptions<TContext> = {\n dispatcher: RuntimeProtocolDispatcher<TContext>;\n context: NextRuntimeProtocolContextFactory<TContext>;\n reportError?: (error: unknown, request: Request) => void;\n};\n\nconst responseStatus = (result: RuntimeProtocolDispatchResult) => {\n if (result.kind !== 'protocol-error') return 200;\n\n switch (result.error.code) {\n case 'invalid_envelope':\n case 'unsupported_version':\n case 'unknown_family':\n case 'invalid_family_request':\n return 400;\n case 'family_unavailable':\n return 501;\n case 'dispatch_unavailable':\n return 503;\n case 'invalid_response':\n return 502;\n }\n};\n\nconst registry = createRuntimeProtocolRegistry(runtimeProtocolFamilies);\n\nexport const createNextRuntimeProtocolRouteHandler =\n <TContext>({\n dispatcher,\n context,\n reportError,\n }: CreateNextRuntimeProtocolRouteHandlerOptions<TContext>) =>\n async (request: Request): Promise<Response> => {\n const parsed = registry.parseRequest(await request.json().catch(() => null));\n if (!parsed.success) {\n return Response.json(parsed.error, { status: responseStatus(parsed.error) });\n }\n\n try {\n const result = await dispatcher(parsed.request, await context(request));\n return Response.json(result, { status: responseStatus(result) });\n } catch (error) {\n reportError?.(error, request);\n\n return Response.json(\n runtimeProtocolError(\n 'dispatch_unavailable',\n 'Runtime Protocol dispatch is temporarily unavailable.',\n { id: parsed.request.id, family: parsed.request.family },\n ),\n { status: 503 },\n );\n }\n };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ontahi/runtime-nextjs",
3
- "version": "0.1.0-alpha.7",
3
+ "version": "1.0.0-alpha.11",
4
4
  "description": "Next.js runtime and transport adapters for Ontahi applications",
5
5
  "homepage": "https://github.com/javifernandes/ontahi/tree/main/packages/runtime-nextjs",
6
6
  "license": "Apache-2.0",
@@ -43,6 +43,11 @@
43
43
  "types": "./dist/graph-read/index.d.ts",
44
44
  "import": "./dist/graph-read/index.js",
45
45
  "require": "./dist/graph-read/index.js"
46
+ },
47
+ "./runtime-protocol": {
48
+ "types": "./dist/runtime-protocol/index.d.ts",
49
+ "import": "./dist/runtime-protocol/index.js",
50
+ "require": "./dist/runtime-protocol/index.js"
46
51
  }
47
52
  },
48
53
  "publishConfig": {
@@ -54,7 +59,7 @@
54
59
  "next-safe-action": "^8.3.0",
55
60
  "server-only": "^0.0.1",
56
61
  "zod": "^4.3.6",
57
- "@ontahi/core": "0.1.0-alpha.7"
62
+ "@ontahi/core": "1.0.0-alpha.11"
58
63
  },
59
64
  "devDependencies": {
60
65
  "@types/node": "^20.0.0",
@@ -92,7 +97,7 @@
92
97
  "test:coverage": "pnpm exec vitest run --coverage",
93
98
  "test:watch": "pnpm exec vitest",
94
99
  "typecheck": "pnpm exec tsc -p tsconfig.json",
95
- "lint": "pnpm exec eslint \"src/**/*.ts\" \"test/**/*.ts\" --max-warnings 0",
96
- "lint:fix": "pnpm exec eslint \"src/**/*.ts\" \"test/**/*.ts\" --fix --max-warnings 0"
100
+ "lint": "pnpm exec eslint \"src/**/*.ts\" --max-warnings 0",
101
+ "lint:fix": "pnpm exec eslint \"src/**/*.ts\" --fix --max-warnings 0"
97
102
  }
98
103
  }