every-plugin 0.1.2 → 0.1.4

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 (73) hide show
  1. package/dist/client/index.d.ts +18 -0
  2. package/dist/client/index.d.ts.map +1 -0
  3. package/dist/client/index.js +33 -0
  4. package/dist/effect.d.ts +2 -0
  5. package/dist/effect.d.ts.map +1 -0
  6. package/dist/effect.js +1 -0
  7. package/dist/errors.d.ts.map +1 -1
  8. package/dist/errors.js +1 -0
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -0
  12. package/dist/orpc.d.ts +3 -0
  13. package/dist/orpc.d.ts.map +1 -0
  14. package/dist/orpc.js +2 -0
  15. package/dist/plugin.d.ts +56 -85
  16. package/dist/plugin.d.ts.map +1 -1
  17. package/dist/plugin.js +33 -103
  18. package/dist/runtime/errors.d.ts +0 -14
  19. package/dist/runtime/errors.d.ts.map +1 -1
  20. package/dist/runtime/errors.js +0 -2
  21. package/dist/runtime/index.d.ts +40 -18
  22. package/dist/runtime/index.d.ts.map +1 -1
  23. package/dist/runtime/index.js +127 -24
  24. package/dist/runtime/services/module-federation.service.d.ts +3 -2
  25. package/dist/runtime/services/module-federation.service.d.ts.map +1 -1
  26. package/dist/runtime/services/module-federation.service.js +21 -23
  27. package/dist/runtime/services/normalize.d.ts +18 -0
  28. package/dist/runtime/services/normalize.d.ts.map +1 -0
  29. package/dist/runtime/services/normalize.js +17 -0
  30. package/dist/runtime/services/plugin-lifecycle.service.d.ts +17 -0
  31. package/dist/runtime/services/plugin-lifecycle.service.d.ts.map +1 -0
  32. package/dist/runtime/services/plugin-lifecycle.service.js +35 -0
  33. package/dist/runtime/services/plugin-loader.service.d.ts +21 -0
  34. package/dist/runtime/services/plugin-loader.service.d.ts.map +1 -0
  35. package/dist/runtime/services/plugin-loader.service.js +83 -0
  36. package/dist/runtime/services/plugin.service.d.ts +12 -20
  37. package/dist/runtime/services/plugin.service.d.ts.map +1 -1
  38. package/dist/runtime/services/plugin.service.js +18 -268
  39. package/dist/runtime/services/secrets.service.d.ts +2 -3
  40. package/dist/runtime/services/secrets.service.d.ts.map +1 -1
  41. package/dist/runtime/services/secrets.service.js +7 -5
  42. package/dist/runtime/services.d.ts +1 -1
  43. package/dist/runtime/services.d.ts.map +1 -1
  44. package/dist/runtime/services.js +1 -1
  45. package/dist/testing/index.d.ts +11 -16
  46. package/dist/testing/index.d.ts.map +1 -1
  47. package/dist/testing/index.js +25 -27
  48. package/dist/testing/mocks/module-federation.service.d.ts +1 -1
  49. package/dist/testing/mocks/module-federation.service.d.ts.map +1 -1
  50. package/dist/types.d.ts +177 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/zod.d.ts +2 -0
  53. package/dist/zod.d.ts.map +1 -0
  54. package/dist/zod.js +1 -0
  55. package/package.json +99 -57
  56. package/dist/runtime/streaming/index.d.ts +0 -4
  57. package/dist/runtime/streaming/index.d.ts.map +0 -1
  58. package/dist/runtime/streaming/index.js +0 -2
  59. package/dist/runtime/streaming/state-effects.d.ts +0 -28
  60. package/dist/runtime/streaming/state-effects.d.ts.map +0 -1
  61. package/dist/runtime/streaming/state-effects.js +0 -30
  62. package/dist/runtime/streaming/streaming.d.ts +0 -8
  63. package/dist/runtime/streaming/streaming.d.ts.map +0 -1
  64. package/dist/runtime/streaming/streaming.js +0 -113
  65. package/dist/runtime/streaming/types.d.ts +0 -19
  66. package/dist/runtime/streaming/types.d.ts.map +0 -1
  67. package/dist/runtime/test-utils.d.ts +0 -3
  68. package/dist/runtime/test-utils.d.ts.map +0 -1
  69. package/dist/runtime/test-utils.js +0 -7
  70. package/dist/runtime/types.d.ts +0 -40
  71. package/dist/runtime/types.d.ts.map +0 -1
  72. package/dist/runtime/types.js +0 -1
  73. /package/dist/{runtime/streaming/types.js → types.js} +0 -0
@@ -0,0 +1,18 @@
1
+ import type { AnyContractRouter } from "@orpc/contract";
2
+ import { type ClientContext, type CreateProcedureClientOptions, type ErrorMap, type InferRouterInitialContext, type Meta, type RouterClient, type Schema } from "@orpc/server";
3
+ import type { AnyPlugin, InitializedPlugin, RouterOf } from "../types";
4
+ /**
5
+ * Extracts the oRPC router from an initialized plugin.
6
+ * The router type is precisely inferred from the plugin's contract.
7
+ * Useful for mounting into HTTP frameworks or direct router usage.
8
+ */
9
+ export declare function getPluginRouter<T extends AnyPlugin>(initialized: InitializedPlugin<T>): RouterOf<T> & AnyContractRouter;
10
+ /**
11
+ * Creates a fully type-safe client for calling plugin procedures as methods.
12
+ * The client type is precisely inferred from the plugin's contract, providing
13
+ * complete autocomplete and type safety for all procedures, inputs, and outputs.
14
+ *
15
+ * Type safety flows: Plugin Contract → Router → RouterClient with full procedure autocomplete
16
+ */
17
+ export declare function createPluginClient<T extends AnyPlugin, TClientContext extends ClientContext = Record<never, never>>(initialized: InitializedPlugin<T>, options?: CreateProcedureClientOptions<InferRouterInitialContext<RouterOf<T>>, Schema<unknown, unknown>, ErrorMap, Meta, TClientContext>): RouterClient<RouterOf<T>, TClientContext>;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,4BAA4B,EAEjC,KAAK,QAAQ,EACb,KAAK,yBAAyB,EAC9B,KAAK,IAAI,EACT,KAAK,YAAY,EACjB,KAAK,MAAM,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEvE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,SAAS,EACjD,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAChC,QAAQ,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAmBjC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,SAAS,SAAS,EACnB,cAAc,SAAS,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAE3D,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,EACjC,OAAO,CAAC,EAAE,4BAA4B,CACpC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EACtC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EACxB,QAAQ,EACR,IAAI,EACJ,cAAc,CACf,GACA,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAS3C"}
@@ -0,0 +1,33 @@
1
+ import { createRouterClient } from "@orpc/server";
2
+ /**
3
+ * Extracts the oRPC router from an initialized plugin.
4
+ * The router type is precisely inferred from the plugin's contract.
5
+ * Useful for mounting into HTTP frameworks or direct router usage.
6
+ */
7
+ export function getPluginRouter(initialized) {
8
+ if (!initialized) {
9
+ throw new Error("InitializedPlugin is undefined - plugin initialization failed");
10
+ }
11
+ if (!initialized.plugin) {
12
+ throw new Error("Plugin instance is undefined - check service layer dependencies (ModuleFederationService, SecretsService)");
13
+ }
14
+ if (typeof initialized.plugin.createRouter !== "function") {
15
+ throw new Error(`Plugin ${initialized.metadata?.pluginId || 'unknown'} does not have a createRouter method`);
16
+ }
17
+ if (!initialized.context) {
18
+ throw new Error("Plugin context is undefined - plugin initialization incomplete");
19
+ }
20
+ const router = initialized.plugin.createRouter(initialized.context);
21
+ return router;
22
+ }
23
+ /**
24
+ * Creates a fully type-safe client for calling plugin procedures as methods.
25
+ * The client type is precisely inferred from the plugin's contract, providing
26
+ * complete autocomplete and type safety for all procedures, inputs, and outputs.
27
+ *
28
+ * Type safety flows: Plugin Contract → Router → RouterClient with full procedure autocomplete
29
+ */
30
+ export function createPluginClient(initialized, options) {
31
+ const router = getPluginRouter(initialized);
32
+ return createRouterClient(router, options);
33
+ }
@@ -0,0 +1,2 @@
1
+ export * from "effect";
2
+ //# sourceMappingURL=effect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../src/effect.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
package/dist/effect.js ADDED
@@ -0,0 +1 @@
1
+ export * from "effect";
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAEA,qBAAa,wBAAyB,SAAQ,8BAA6C;IAC1F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACvB,CAAC;IACD,IAAa,IAAI,WAAyC;CAC1D"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAIA,qBAAa,wBAAyB,SAAQ,8BAA6C;IAC1F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACvB,CAAC;IACD,IAAa,IAAI,WAAyC;CAC1D"}
package/dist/errors.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { Data } from "effect";
2
+ // TODO: We still need this?
2
3
  export class PluginConfigurationError extends Data.TaggedError("PluginConfigurationError") {
3
4
  get name() { return "PluginConfigurationError"; }
4
5
  }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export * from "./errors";
2
2
  export * from "./plugin";
3
3
  export * from "./runtime";
4
+ export { getNormalizedRemoteName } from "./runtime/services/normalize";
5
+ export type { AnyPlugin, ConfigOf, InitializedPlugin, PluginConstructor, PluginInstance, PluginOf, PluginRegistry, PluginRegistryFor, PluginRuntimeConfig, RegistryBindings, RouterOf, SecretsConfig } from "./types";
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,YAAY,EACX,SAAS,EACT,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,5 @@
1
1
  export * from "./errors";
2
2
  export * from "./plugin";
3
3
  export * from "./runtime";
4
+ // Re-export the normalize helper for build configs
5
+ export { getNormalizedRemoteName } from "./runtime/services/normalize";
package/dist/orpc.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from "@orpc/contract";
2
+ export * from "@orpc/server";
3
+ //# sourceMappingURL=orpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orpc.d.ts","sourceRoot":"","sources":["../src/orpc.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
package/dist/orpc.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from "@orpc/contract";
2
+ export * from "@orpc/server";
package/dist/plugin.d.ts CHANGED
@@ -1,34 +1,34 @@
1
- import type { ContractRouter, Meta } from "@orpc/server";
2
- import { Context, Effect } from "effect";
1
+ import type { AnyContractRouter } from "@orpc/contract";
2
+ import type { Context, Router } from "@orpc/server";
3
+ import { Effect, type Scope } from "effect";
3
4
  import { z } from "zod";
4
- import type { PluginConfigurationError } from "./errors";
5
- export type Contract = ContractRouter<Meta>;
6
- export declare function createConfigSchema<V extends z.ZodTypeAny, S extends z.ZodTypeAny>(variablesSchema: V, secretsSchema: S): z.ZodObject<{
5
+ /**
6
+ * Derive router type from contract at the type level
7
+ */
8
+ type RouterFromContract<C extends AnyContractRouter, TContext extends Context = Record<never, never>> = Router<C, TContext>;
9
+ /**
10
+ * Helper type that correctly constructs the config schema type
11
+ */
12
+ export type PluginConfigFor<V extends z.ZodTypeAny, S extends z.ZodTypeAny> = z.ZodObject<{
7
13
  variables: V;
8
14
  secrets: S;
9
- }, z.core.$strip>;
10
- export declare function createStateSchema<T extends z.ZodTypeAny>(pluginStateSchema: T): z.ZodIntersection<z.ZodObject<{
11
- nextPollMs: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
12
- }, z.core.$strip>, T>;
13
- export type PluginType = "transformer" | "distributor" | "source";
14
- export interface PluginMetadata {
15
- remoteUrl: string;
16
- type?: PluginType;
17
- version?: string;
18
- description?: string;
19
- }
20
- export interface PluginRegistry {
21
- [pluginId: string]: PluginMetadata;
22
- }
23
- export interface PluginLogger {
24
- readonly logInfo: (message: string, context?: unknown) => Effect.Effect<void>;
25
- readonly logWarning: (message: string, context?: unknown) => Effect.Effect<void>;
26
- readonly logError: (message: string, error?: unknown, context?: unknown) => Effect.Effect<void>;
27
- readonly logDebug: (message: string, context?: unknown) => Effect.Effect<void>;
28
- }
29
- declare const PluginLoggerTag_base: Context.TagClass<PluginLoggerTag, "PluginLogger", PluginLogger>;
30
- export declare class PluginLoggerTag extends PluginLoggerTag_base {
15
+ }>;
16
+ /**
17
+ * Plugin constructor with static binding property
18
+ */
19
+ export interface PluginConstructorWithBinding<TContract extends AnyContractRouter, TVariables extends z.ZodTypeAny, TSecrets extends z.ZodTypeAny, TContext extends Context = Record<never, never>> {
20
+ new (): Plugin<TContract, TVariables, TSecrets, TContext>;
21
+ binding: {
22
+ contract: TContract;
23
+ config: PluginConfigFor<TVariables, TSecrets>;
24
+ };
31
25
  }
26
+ /**
27
+ * Utility type to extract binding from plugin constructor
28
+ */
29
+ export type PluginBinding<T> = T extends {
30
+ binding: infer B;
31
+ } ? B : never;
32
32
  /**
33
33
  * Common error schemas that all plugins can use
34
34
  * These provide consistent error handling across the plugin ecosystem
@@ -88,70 +88,41 @@ export declare const CommonPluginErrors: {
88
88
  };
89
89
  };
90
90
  /**
91
- * Schema creators for contract-based plugins
91
+ * Plugin interface
92
92
  */
93
- export declare function createPluginInputSchema<TContract extends Contract, TStateSchema extends z.ZodTypeAny>(contract: TContract, stateSchema: TStateSchema): z.ZodDiscriminatedUnion<[z.ZodObject<any, z.core.$strip>, ...z.ZodObject<any, z.core.$strip>[]], "procedure">;
94
- export declare function createPluginOutputSchema<TContract extends Contract, TStateSchema extends z.ZodTypeAny>(contract: TContract, stateSchema: TStateSchema): z.ZodUnion<[z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, ...z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>[]]>;
95
- /**
96
- * Unified Plugin interface for all plugin types
97
- */
98
- export interface Plugin<TContract extends Contract, TConfigSchema extends z.ZodTypeAny = z.ZodTypeAny, TStateSchema extends z.ZodTypeAny = z.ZodNull> {
93
+ export interface Plugin<TContract extends AnyContractRouter, TVariables extends z.ZodTypeAny, TSecrets extends z.ZodTypeAny, TContext extends Context = Record<never, never>> {
99
94
  readonly id: string;
100
- readonly type: PluginType;
95
+ readonly type: string;
101
96
  readonly contract: TContract;
102
- readonly configSchema: TConfigSchema;
103
- readonly stateSchema: TStateSchema;
104
- readonly inputSchema: ReturnType<typeof createPluginInputSchema<TContract, TStateSchema>>;
105
- readonly outputSchema: ReturnType<typeof createPluginOutputSchema<TContract, TStateSchema>>;
106
- initialize(config?: z.infer<TConfigSchema>): Effect.Effect<void, PluginConfigurationError, PluginLoggerTag>;
107
- shutdown(): Effect.Effect<void, never, PluginLoggerTag>;
108
- createRouter(): Contract;
109
- isStreamable(procedureName: string): boolean;
110
- }
111
- /**
112
- * State transition utilities for plugins
113
- * These provide a functional approach to state updates while keeping the API simple
114
- */
115
- export declare const StateTransitions: {
116
- /**
117
- * Transition to a new phase with optional updates
118
- */
119
- to: <T extends {
120
- phase?: string;
121
- }>(phase: string, updates?: Partial<T>) => (state: T) => T;
122
- /**
123
- * Add polling delay to state
124
- */
125
- withPolling: <T>(delayMs: number) => (state: T) => T;
126
- /**
127
- * Set error state with message and stop polling
128
- */
129
- withError: <T>(errorMessage: string) => (state: T) => T;
97
+ readonly configSchema: PluginConfigFor<TVariables, TSecrets>;
98
+ initialize(config: {
99
+ variables: z.infer<TVariables>;
100
+ secrets: z.infer<TSecrets>;
101
+ }): Effect.Effect<TContext, unknown, Scope.Scope>;
102
+ shutdown(): Effect.Effect<void, never>;
130
103
  /**
131
- * Preserve existing state with updates
104
+ * Creates the strongly-typed oRPC router for this plugin.
105
+ * The router's procedure types are inferred directly from the contract.
106
+ * @param context The initialized plugin context
107
+ * @returns A router with procedures matching the plugin's contract
132
108
  */
133
- update: <T>(updates: Partial<T>) => (state: T) => T;
134
- };
135
- /**
136
- * Simple pipe utility for composing state transformations
137
- */
138
- export declare const pipe: <T>(value: T, ...fns: Array<(val: T) => T>) => T;
109
+ createRouter(context?: TContext): RouterFromContract<TContract, TContext>;
110
+ }
139
111
  /**
140
- * Simple plugin base class that uses pure oRPC patterns
141
- * Plugin just needs to define contract, config, and create oRPC router
112
+ * Factory function to create plugins
142
113
  */
143
- export declare abstract class SimplePlugin<TContract extends Contract, TConfigSchema extends z.ZodTypeAny, TStateSchema extends z.ZodTypeAny = z.ZodNull> implements Plugin<TContract, TConfigSchema, TStateSchema> {
144
- abstract readonly id: string;
145
- abstract readonly type: PluginType;
146
- abstract readonly contract: TContract;
147
- abstract readonly configSchema: TConfigSchema;
148
- abstract readonly stateSchema: TStateSchema;
149
- get inputSchema(): z.ZodDiscriminatedUnion<[z.ZodObject<any, z.core.$strip>, ...z.ZodObject<any, z.core.$strip>[]], "procedure">;
150
- get outputSchema(): z.ZodUnion<[z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, ...z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>[]]>;
151
- initialize(config?: z.infer<TConfigSchema>): Effect.Effect<void, PluginConfigurationError, PluginLoggerTag>;
152
- abstract createRouter(): Contract;
153
- shutdown(): Effect.Effect<void, never, PluginLoggerTag>;
154
- isStreamable(procedureName: string): boolean;
155
- }
114
+ export declare function createPlugin<V extends z.ZodTypeAny, S extends z.ZodTypeAny, TContract extends AnyContractRouter, TContext extends Context = Record<never, never>>(config: {
115
+ id: string;
116
+ type?: string;
117
+ variables: V;
118
+ secrets: S;
119
+ contract: TContract;
120
+ initialize?: (config: {
121
+ variables: z.infer<V>;
122
+ secrets: z.infer<S>;
123
+ }) => Effect.Effect<TContext, Error, Scope.Scope>;
124
+ createRouter: (ctx: TContext) => RouterFromContract<TContract, TContext>;
125
+ shutdown?: (ctx: TContext) => Effect.Effect<void, Error, never>;
126
+ }): PluginConstructorWithBinding<TContract, V, S, TContext>;
156
127
  export {};
157
128
  //# sourceMappingURL=plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
package/dist/plugin.js CHANGED
@@ -1,19 +1,5 @@
1
- import { Context, Effect } from "effect";
1
+ import { Effect } from "effect";
2
2
  import { z } from "zod";
3
- export function createConfigSchema(variablesSchema, secretsSchema) {
4
- return z.object({
5
- variables: variablesSchema,
6
- secrets: secretsSchema
7
- });
8
- }
9
- export function createStateSchema(pluginStateSchema) {
10
- const BaseStreamingStateSchema = z.object({
11
- nextPollMs: z.number().nullable().optional(), // null = terminate, undefined/0 = no delay, number = delay ms
12
- });
13
- return BaseStreamingStateSchema.and(pluginStateSchema);
14
- }
15
- export class PluginLoggerTag extends Context.Tag("PluginLogger")() {
16
- }
17
3
  /**
18
4
  * Common error schemas that all plugins can use
19
5
  * These provide consistent error handling across the plugin ecosystem
@@ -65,95 +51,39 @@ export const CommonPluginErrors = {
65
51
  }
66
52
  };
67
53
  /**
68
- * Schema creators for contract-based plugins
54
+ * Factory function to create plugins
69
55
  */
70
- export function createPluginInputSchema(contract, stateSchema) {
71
- const contractEntries = Object.entries(contract);
72
- const procedureSchemas = contractEntries.map(([procedureName, procedureSpec]) => {
73
- // Extract input and output schemas from oRPC contract procedure
74
- const inputSchema = procedureSpec['~orpc']?.inputSchema || z.object({});
75
- const outputSchema = procedureSpec['~orpc']?.outputSchema || z.object({});
76
- // Check if this procedure is streamable (has nextState in output)
77
- const isStreamable = outputSchema._def?.shape?.nextState !== undefined;
78
- const baseSchema = z.object({
79
- procedure: z.literal(procedureName),
80
- input: inputSchema,
81
- });
82
- // Only add state field for streamable procedures
83
- // Allow null state for initial calls to streamable procedures
84
- const stateInputSchema = stateSchema.nullable();
85
- return isStreamable
86
- ? baseSchema.extend({ state: stateInputSchema })
87
- : baseSchema;
56
+ export function createPlugin(config) {
57
+ const configSchema = z.object({
58
+ variables: config.variables,
59
+ secrets: config.secrets
88
60
  });
89
- return z.discriminatedUnion("procedure", procedureSchemas);
90
- }
91
- export function createPluginOutputSchema(contract, stateSchema) {
92
- const contractEntries = Object.entries(contract);
93
- const procedureOutputSchemas = contractEntries.map(([_, procedureSpec]) => {
94
- // Extract output schema from oRPC contract procedure
95
- return procedureSpec['~orpc']?.outputSchema || z.object({});
96
- });
97
- // Return union of all procedure output schemas
98
- return z.union(procedureOutputSchemas);
99
- }
100
- /**
101
- * State transition utilities for plugins
102
- * These provide a functional approach to state updates while keeping the API simple
103
- */
104
- export const StateTransitions = {
105
- /**
106
- * Transition to a new phase with optional updates
107
- */
108
- to: (phase, updates = {}) => (state) => ({ ...state, phase, ...updates }),
109
- /**
110
- * Add polling delay to state
111
- */
112
- withPolling: (delayMs) => (state) => ({ ...state, nextPollMs: delayMs }),
113
- /**
114
- * Set error state with message and stop polling
115
- */
116
- withError: (errorMessage) => (state) => ({
117
- ...state,
118
- phase: 'error',
119
- errorMessage,
120
- nextPollMs: null
121
- }),
122
- /**
123
- * Preserve existing state with updates
124
- */
125
- update: (updates) => (state) => ({ ...state, ...updates }),
126
- };
127
- /**
128
- * Simple pipe utility for composing state transformations
129
- */
130
- export const pipe = (value, ...fns) => fns.reduce((acc, fn) => fn(acc), value);
131
- /**
132
- * Simple plugin base class that uses pure oRPC patterns
133
- * Plugin just needs to define contract, config, and create oRPC router
134
- */
135
- export class SimplePlugin {
136
- // Auto-generated schemas
137
- get inputSchema() {
138
- return createPluginInputSchema(this.contract, this.stateSchema);
139
- }
140
- get outputSchema() {
141
- return createPluginOutputSchema(this.contract, this.stateSchema);
142
- }
143
- // Default implementations - runtime handles validation
144
- initialize(config) {
145
- return Effect.void;
146
- }
147
- shutdown() {
148
- return Effect.void;
149
- }
150
- // Default streamable detection
151
- isStreamable(procedureName) {
152
- const contractEntries = Object.entries(this.contract);
153
- const procedure = contractEntries.find(([name]) => name === procedureName);
154
- if (!procedure)
155
- return false;
156
- const outputSchema = procedure[1]['~orpc']?.outputSchema;
157
- return outputSchema?._def?.shape?.nextState !== undefined;
61
+ class CreatedPlugin {
62
+ id = config.id;
63
+ type = config.type || "source";
64
+ contract = config.contract;
65
+ configSchema = configSchema;
66
+ _context = null;
67
+ initialize(pluginConfig) {
68
+ const init = config.initialize ?? (() => Effect.succeed({}));
69
+ return init(pluginConfig).pipe(Effect.tap((ctx) => Effect.sync(() => { this._context = ctx; })), Effect.map(() => this._context), Effect.mapError((error) => error));
70
+ }
71
+ shutdown() {
72
+ const self = this;
73
+ return Effect.gen(function* () {
74
+ if (config.shutdown && self._context) {
75
+ yield* config.shutdown(self._context).pipe(Effect.catchAll(() => Effect.void));
76
+ }
77
+ });
78
+ }
79
+ createRouter(context) {
80
+ return config.createRouter(context);
81
+ }
158
82
  }
83
+ const PluginConstructor = CreatedPlugin;
84
+ PluginConstructor.binding = {
85
+ contract: config.contract,
86
+ config: configSchema
87
+ };
88
+ return PluginConstructor;
159
89
  }
@@ -29,20 +29,6 @@ export declare class ValidationError extends ValidationError_base<{
29
29
  readonly zodError: z.ZodError;
30
30
  }> {
31
31
  }
32
- declare const StreamError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
33
- readonly _tag: "StreamError";
34
- } & Readonly<A>;
35
- export declare class StreamError extends StreamError_base<{
36
- readonly pluginId: string;
37
- readonly operation: "callback" | "state-extraction" | "item-extraction" | "stream-termination";
38
- readonly cause?: Error;
39
- readonly context?: {
40
- readonly iteration?: number;
41
- readonly itemsProcessed?: number;
42
- readonly procedureName?: string;
43
- };
44
- }> {
45
- }
46
32
  export declare const isRetryableORPCCode: (code: string) => boolean;
47
33
  export declare const wrapORPCError: (orpcError: ORPCError<string, unknown>, pluginId?: string, procedureName?: string, operation?: string) => PluginRuntimeError;
48
34
  export declare const toPluginRuntimeError: (error: unknown, pluginId?: string, procedureName?: string, operation?: string, defaultRetryable?: boolean) => PluginRuntimeError;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;;;;AAE7B,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC5B,CAAC;CAAI;;;;AAEN,qBAAa,qBAAsB,SAAQ,2BAEzC;IACD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACvB,CAAC;CAAI;;;;AAEN,qBAAa,eAAgB,SAAQ,qBAAoC;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC;CAC9B,CAAC;CAAI;;;;AAEN,qBAAa,WAAY,SAAQ,iBAAgC;IAChE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,UAAU,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,oBAAoB,CAAC;IAC/F,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE;QAClB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;CACF,CAAC;CAAI;AAGN,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,OAWlD,CAAC;AAGF,eAAO,MAAM,aAAa,GACzB,WAAW,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,WAAW,MAAM,EACjB,gBAAgB,MAAM,EACtB,YAAY,MAAM,KAChB,kBAQF,CAAC;AAGF,eAAO,MAAM,oBAAoB,GAChC,OAAO,OAAO,EACd,WAAW,MAAM,EACjB,gBAAgB,MAAM,EACtB,YAAY,MAAM,EAClB,0BAAwB,KACtB,kBAgBF,CAAC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;;;;AAE7B,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC5B,CAAC;CAAI;;;;AAEN,qBAAa,qBAAsB,SAAQ,2BAEzC;IACD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACvB,CAAC;CAAI;;;;AAEN,qBAAa,eAAgB,SAAQ,qBAAoC;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC;CAC9B,CAAC;CAAI;AAGN,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,OAWlD,CAAC;AAGF,eAAO,MAAM,aAAa,GACzB,WAAW,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,WAAW,MAAM,EACjB,gBAAgB,MAAM,EACtB,YAAY,MAAM,KAChB,kBAQF,CAAC;AAGF,eAAO,MAAM,oBAAoB,GAChC,OAAO,OAAO,EACd,WAAW,MAAM,EACjB,gBAAgB,MAAM,EACtB,YAAY,MAAM,EAClB,0BAAwB,KACtB,kBAgBF,CAAC"}
@@ -6,8 +6,6 @@ export class ModuleFederationError extends Data.TaggedError("ModuleFederationErr
6
6
  }
7
7
  export class ValidationError extends Data.TaggedError("ValidationError") {
8
8
  }
9
- export class StreamError extends Data.TaggedError("StreamError") {
10
- }
11
9
  // Helper to determine if an oRPC error code is retryable
12
10
  export const isRetryableORPCCode = (code) => {
13
11
  switch (code) {
@@ -1,24 +1,46 @@
1
- import { Effect, Layer, ManagedRuntime, type Stream } from "effect";
1
+ import { Context, Effect, Layer, ManagedRuntime } from "effect";
2
2
  import type { z } from "zod";
3
- import { Contract, type Plugin } from "../plugin";
3
+ import type { InitializedPlugin, PluginConstructor, PluginInstance, PluginOf, PluginRegistry, PluginResult, PluginRuntimeConfig, RegistryBindings, RuntimeOptions, SecretsConfig } from "../types";
4
4
  import { PluginRuntimeError } from "./errors";
5
- import { type StreamingOptions } from "./streaming";
6
- import type { AnyPlugin, InitializedPlugin, PluginConstructor, PluginInstance, PluginRuntimeConfig } from "./types";
7
- export interface IPluginRuntime {
8
- readonly loadPlugin: (pluginId: string) => Effect.Effect<PluginConstructor, PluginRuntimeError>;
9
- readonly instantiatePlugin: <T extends AnyPlugin>(ctor: PluginConstructor) => Effect.Effect<PluginInstance<T>, PluginRuntimeError>;
10
- readonly initializePlugin: <T extends AnyPlugin>(instance: PluginInstance<T>, config: z.infer<T["configSchema"]>) => Effect.Effect<InitializedPlugin<T>, PluginRuntimeError>;
11
- readonly executePlugin: <T extends AnyPlugin>(initializedPlugin: InitializedPlugin<T>, input: z.infer<T["inputSchema"]>) => Effect.Effect<z.infer<T["outputSchema"]>, PluginRuntimeError>;
12
- readonly usePlugin: <T extends AnyPlugin>(pluginId: string, config: z.infer<T["configSchema"]>) => Effect.Effect<InitializedPlugin<T>, PluginRuntimeError>;
13
- readonly streamPlugin: <T extends Plugin<Contract>, TInput extends z.infer<T["inputSchema"]> = z.infer<T["inputSchema"]>, TItem = unknown, TPluginState extends z.infer<T["stateSchema"]> = z.infer<T["stateSchema"]>>(pluginId: string, config: z.infer<T["configSchema"]>, input: TInput, options?: StreamingOptions<TItem, TPluginState>) => Effect.Effect<Stream.Stream<TItem, PluginRuntimeError>, PluginRuntimeError>;
5
+ import { type IPluginService } from "./services/plugin.service";
6
+ export interface IPluginRuntime<R extends RegistryBindings = RegistryBindings> {
7
+ readonly loadPlugin: <K extends keyof R>(pluginId: K) => Effect.Effect<PluginConstructor<PluginOf<R[K]>>, PluginRuntimeError>;
8
+ readonly instantiatePlugin: <K extends keyof R>(ctor: PluginConstructor<PluginOf<R[K]>>) => Effect.Effect<PluginInstance<PluginOf<R[K]>>, PluginRuntimeError>;
9
+ readonly initializePlugin: <K extends keyof R>(instance: PluginInstance<PluginOf<R[K]>>, config: z.infer<PluginOf<R[K]>["configSchema"]>) => Effect.Effect<InitializedPlugin<PluginOf<R[K]>>, PluginRuntimeError>;
10
+ readonly usePlugin: <K extends keyof R>(pluginId: K, config: z.infer<PluginOf<R[K]>["configSchema"]>) => Effect.Effect<PluginResult<PluginOf<R[K]>>, PluginRuntimeError>;
14
11
  readonly shutdown: () => Effect.Effect<void, never, never>;
15
12
  }
16
- declare const PluginRuntime_base: import("effect/Context").TagClass<PluginRuntime, "PluginRuntime", IPluginRuntime> & Effect.Tag.Proxy<PluginRuntime, IPluginRuntime> & {
17
- use: <X>(body: (_: IPluginRuntime) => X) => [X] extends [Effect.Effect<infer A, infer E, infer R>] ? Effect.Effect<A, E, PluginRuntime | R> : [X] extends [PromiseLike<infer A_1>] ? Effect.Effect<A_1, import("effect/Cause").UnknownException, PluginRuntime> : Effect.Effect<X, never, PluginRuntime>;
18
- };
19
- export declare class PluginRuntime extends PluginRuntime_base {
20
- static Live: (config: PluginRuntimeConfig) => Layer.Layer<PluginRuntime, never, never>;
13
+ export declare class PluginRuntimeImpl<R extends RegistryBindings = RegistryBindings> implements IPluginRuntime<R> {
14
+ private pluginService;
15
+ private registry;
16
+ private pluginCache;
17
+ constructor(pluginService: IPluginService, registry: PluginRegistry);
18
+ private generateCacheKey;
19
+ private validatePluginId;
20
+ loadPlugin<K extends keyof R>(pluginId: K): Effect.Effect<PluginConstructor<PluginOf<R[K]>>, PluginRuntimeError>;
21
+ instantiatePlugin<K extends keyof R>(ctor: PluginConstructor<PluginOf<R[K]>>): Effect.Effect<PluginInstance<PluginOf<R[K]>>, PluginRuntimeError>;
22
+ initializePlugin<K extends keyof R>(instance: PluginInstance<PluginOf<R[K]>>, config: z.infer<PluginOf<R[K]>["configSchema"]>): Effect.Effect<InitializedPlugin<PluginOf<R[K]>>, PluginRuntimeError>;
23
+ usePlugin<K extends keyof R>(pluginId: K, config: z.infer<PluginOf<R[K]>["configSchema"]>): Effect.Effect<PluginResult<PluginOf<R[K]>>, PluginRuntimeError>;
24
+ shutdown(): Effect.Effect<void, never, never>;
25
+ /**
26
+ * Evict a plugin from cache and shutdown its instance
27
+ */
28
+ evictPlugin<K extends keyof R>(pluginId: K, config: z.infer<PluginOf<R[K]>["configSchema"]>): Effect.Effect<void, never>;
29
+ }
30
+ declare const PluginRuntimeService_base: Context.TagClass<PluginRuntimeService, "PluginRuntimeService", IPluginService>;
31
+ export declare class PluginRuntimeService extends PluginRuntimeService_base {
32
+ static Live: <R extends RegistryBindings = RegistryBindings>(config: PluginRuntimeConfig<R>) => Layer.Layer<PluginRuntimeService, never, never>;
21
33
  }
22
- export declare const createPluginRuntime: (config: PluginRuntimeConfig) => ManagedRuntime.ManagedRuntime<PluginRuntime, never>;
23
- export {};
34
+ /**
35
+ * Creates a typed plugin runtime with compile-time registry key validation.
36
+ */
37
+ export declare function createPluginRuntime<R extends RegistryBindings = RegistryBindings>(config: {
38
+ registry: PluginRegistry;
39
+ secrets?: SecretsConfig;
40
+ options?: RuntimeOptions;
41
+ }): {
42
+ runtime: ManagedRuntime.ManagedRuntime<PluginRuntimeService, never>;
43
+ PluginRuntime: Effect.Effect<PluginRuntimeImpl<R>, never, never>;
44
+ };
45
+ export type { ConfigOf, InitializedPlugin, PluginOf, PluginResult, RegistryBindings } from "../types";
24
46
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}