every-plugin 0.4.3 → 0.4.5

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 (123) hide show
  1. package/dist/build/rspack/index.cjs +267 -0
  2. package/dist/build/rspack/index.d.cts +20 -0
  3. package/dist/build/rspack/index.d.mts +20 -0
  4. package/dist/build/rspack/index.mjs +265 -0
  5. package/dist/chunk-QQAxy9l9.mjs +31 -0
  6. package/dist/chunk-zltIcp7o.cjs +46 -0
  7. package/dist/effect.cjs +9 -0
  8. package/dist/effect.d.cts +1 -0
  9. package/dist/effect.d.mts +1 -0
  10. package/dist/effect.mjs +3 -0
  11. package/dist/errors-CVnoPl9v.cjs +68 -0
  12. package/dist/errors-Car4tFVP.d.mts +75 -0
  13. package/dist/errors-D7keKf7a.mjs +63 -0
  14. package/dist/errors-DKPPPYYT.d.cts +75 -0
  15. package/dist/errors.cjs +4 -0
  16. package/dist/errors.d.cts +3 -0
  17. package/dist/errors.d.mts +3 -0
  18. package/dist/errors.mjs +4 -0
  19. package/dist/fetch-Cc95-7kM.cjs +336 -0
  20. package/dist/fetch-KLktuWuM.mjs +335 -0
  21. package/dist/index-bwAhA9ca.d.mts +383 -0
  22. package/dist/index-matrPV4m.d.cts +382 -0
  23. package/dist/index.cjs +57 -0
  24. package/dist/index.d.cts +5 -0
  25. package/dist/index.d.mts +5 -0
  26. package/dist/index.mjs +52 -0
  27. package/dist/{runtime/services/normalize.d.ts → normalize-BLTyqFww.d.mts} +5 -2
  28. package/dist/{runtime/services/normalize.js → normalize-BW7kk8Lk.d.cts} +5 -1
  29. package/dist/normalize-D4Qh0wVk.cjs +28 -0
  30. package/dist/normalize-D7nae0Hn.mjs +22 -0
  31. package/dist/openapi.DrTcell5-C6kyDyUK.mjs +669 -0
  32. package/dist/openapi.DrTcell5-DDf4D5V3.cjs +687 -0
  33. package/dist/orpc.cjs +46 -0
  34. package/dist/orpc.d.cts +7 -0
  35. package/dist/orpc.d.mts +7 -0
  36. package/dist/orpc.mjs +11 -0
  37. package/dist/package-Ba1JsQFb.mjs +149 -0
  38. package/dist/package-C09aaCqd.cjs +154 -0
  39. package/dist/plugins-C-7lh5gK.cjs +128 -0
  40. package/dist/plugins-Ps5Xxpk2.mjs +128 -0
  41. package/dist/runtime/index.cjs +6 -0
  42. package/dist/runtime/index.d.cts +5 -0
  43. package/dist/runtime/index.d.mts +5 -0
  44. package/dist/runtime/index.mjs +5 -0
  45. package/dist/runtime/services/normalize.cjs +3 -0
  46. package/dist/runtime/services/normalize.d.cts +2 -0
  47. package/dist/runtime/services/normalize.d.mts +2 -0
  48. package/dist/runtime/services/normalize.mjs +3 -0
  49. package/dist/runtime-CdAK1Q5M.cjs +523 -0
  50. package/dist/runtime-I62RA1Vo.mjs +458 -0
  51. package/dist/standard-DaxKTFui.mjs +595 -0
  52. package/dist/standard-eUgUkWaf.cjs +702 -0
  53. package/dist/testing/index.cjs +78 -0
  54. package/dist/testing/index.d.cts +60 -0
  55. package/dist/testing/index.d.mts +60 -0
  56. package/dist/testing/index.mjs +75 -0
  57. package/dist/zod-A7Pti5IV.d.cts +4 -0
  58. package/dist/zod-BVo51kgJ.mjs +10 -0
  59. package/dist/zod-D4CFw8d9.d.mts +4 -0
  60. package/dist/zod-DYghWCz1.cjs +14 -0
  61. package/dist/zod.cjs +10 -0
  62. package/dist/zod.d.cts +2 -0
  63. package/dist/zod.d.mts +2 -0
  64. package/dist/zod.mjs +5 -0
  65. package/dist/zod4-BXTBR1od.cjs +318 -0
  66. package/dist/zod4-VpXuwRO7.mjs +317 -0
  67. package/package.json +64 -27
  68. package/dist/effect.d.ts +0 -2
  69. package/dist/effect.d.ts.map +0 -1
  70. package/dist/effect.js +0 -1
  71. package/dist/errors.d.ts +0 -70
  72. package/dist/errors.d.ts.map +0 -1
  73. package/dist/errors.js +0 -61
  74. package/dist/index.d.ts +0 -6
  75. package/dist/index.d.ts.map +0 -1
  76. package/dist/index.js +0 -5
  77. package/dist/orpc.d.ts +0 -10
  78. package/dist/orpc.d.ts.map +0 -1
  79. package/dist/orpc.js +0 -6
  80. package/dist/plugin.d.ts +0 -57
  81. package/dist/plugin.d.ts.map +0 -1
  82. package/dist/plugin.js +0 -43
  83. package/dist/runtime/errors.d.ts +0 -36
  84. package/dist/runtime/errors.d.ts.map +0 -1
  85. package/dist/runtime/errors.js +0 -47
  86. package/dist/runtime/index.d.ts +0 -20
  87. package/dist/runtime/index.d.ts.map +0 -1
  88. package/dist/runtime/index.js +0 -131
  89. package/dist/runtime/services/module-federation.service.d.ts +0 -13
  90. package/dist/runtime/services/module-federation.service.d.ts.map +0 -1
  91. package/dist/runtime/services/module-federation.service.js +0 -155
  92. package/dist/runtime/services/normalize.d.ts.map +0 -1
  93. package/dist/runtime/services/plugin-lifecycle.service.d.ts +0 -14
  94. package/dist/runtime/services/plugin-lifecycle.service.d.ts.map +0 -1
  95. package/dist/runtime/services/plugin-lifecycle.service.js +0 -34
  96. package/dist/runtime/services/plugin-loader.service.d.ts +0 -45
  97. package/dist/runtime/services/plugin-loader.service.d.ts.map +0 -1
  98. package/dist/runtime/services/plugin-loader.service.js +0 -93
  99. package/dist/runtime/services/plugin.service.d.ts +0 -36
  100. package/dist/runtime/services/plugin.service.d.ts.map +0 -1
  101. package/dist/runtime/services/plugin.service.js +0 -31
  102. package/dist/runtime/services/secrets.service.d.ts +0 -15
  103. package/dist/runtime/services/secrets.service.d.ts.map +0 -1
  104. package/dist/runtime/services/secrets.service.js +0 -35
  105. package/dist/runtime/services.d.ts +0 -6
  106. package/dist/runtime/services.d.ts.map +0 -1
  107. package/dist/runtime/services.js +0 -5
  108. package/dist/runtime/validation.d.ts +0 -5
  109. package/dist/runtime/validation.d.ts.map +0 -1
  110. package/dist/runtime/validation.js +0 -13
  111. package/dist/testing/index.d.ts +0 -59
  112. package/dist/testing/index.d.ts.map +0 -1
  113. package/dist/testing/index.js +0 -45
  114. package/dist/testing/mocks/module-federation.service.d.ts +0 -6
  115. package/dist/testing/mocks/module-federation.service.d.ts.map +0 -1
  116. package/dist/testing/mocks/module-federation.service.js +0 -29
  117. package/dist/tsconfig.tsbuildinfo +0 -1
  118. package/dist/types.d.ts +0 -187
  119. package/dist/types.d.ts.map +0 -1
  120. package/dist/types.js +0 -1
  121. package/dist/zod.d.ts +0 -2
  122. package/dist/zod.d.ts.map +0 -1
  123. package/dist/zod.js +0 -1
package/dist/errors.d.ts DELETED
@@ -1,70 +0,0 @@
1
- import { z } from "./zod";
2
- /**
3
- * Common error schemas for plugin contracts.
4
- * Import these to ensure consistent error handling across plugins.
5
- *
6
- * @example
7
- * ```typescript
8
- * import { CommonPluginErrors } from "every-plugin/errors";
9
- *
10
- * export const contract = oc.router({
11
- * getData: oc.route(...)
12
- * .errors(CommonPluginErrors)
13
- * });
14
- * ```
15
- */
16
- export declare const CommonPluginErrors: {
17
- readonly UNAUTHORIZED: {
18
- readonly data: z.ZodObject<{
19
- apiKeyProvided: z.ZodBoolean;
20
- provider: z.ZodOptional<z.ZodString>;
21
- authType: z.ZodOptional<z.ZodEnum<{
22
- apiKey: "apiKey";
23
- oauth: "oauth";
24
- token: "token";
25
- }>>;
26
- }, z.core.$strip>;
27
- };
28
- readonly RATE_LIMITED: {
29
- readonly data: z.ZodObject<{
30
- retryAfter: z.ZodNumber;
31
- remainingRequests: z.ZodOptional<z.ZodNumber>;
32
- resetTime: z.ZodOptional<z.ZodString>;
33
- limitType: z.ZodOptional<z.ZodEnum<{
34
- requests: "requests";
35
- tokens: "tokens";
36
- bandwidth: "bandwidth";
37
- }>>;
38
- }, z.core.$strip>;
39
- };
40
- readonly SERVICE_UNAVAILABLE: {
41
- readonly data: z.ZodObject<{
42
- retryAfter: z.ZodOptional<z.ZodNumber>;
43
- maintenanceWindow: z.ZodDefault<z.ZodBoolean>;
44
- estimatedUptime: z.ZodOptional<z.ZodString>;
45
- }, z.core.$strip>;
46
- };
47
- readonly BAD_REQUEST: {
48
- readonly data: z.ZodObject<{
49
- invalidFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
50
- validationErrors: z.ZodOptional<z.ZodArray<z.ZodObject<{
51
- field: z.ZodString;
52
- message: z.ZodString;
53
- code: z.ZodOptional<z.ZodString>;
54
- }, z.core.$strip>>>;
55
- }, z.core.$strip>;
56
- };
57
- readonly NOT_FOUND: {
58
- readonly data: z.ZodObject<{
59
- resource: z.ZodOptional<z.ZodString>;
60
- resourceId: z.ZodOptional<z.ZodString>;
61
- }, z.core.$strip>;
62
- };
63
- readonly FORBIDDEN: {
64
- readonly data: z.ZodObject<{
65
- requiredPermissions: z.ZodOptional<z.ZodArray<z.ZodString>>;
66
- action: z.ZodOptional<z.ZodString>;
67
- }, z.core.$strip>;
68
- };
69
- };
70
- //# sourceMappingURL=errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6CrB,CAAC"}
package/dist/errors.js DELETED
@@ -1,61 +0,0 @@
1
- import { z } from "./zod";
2
- /**
3
- * Common error schemas for plugin contracts.
4
- * Import these to ensure consistent error handling across plugins.
5
- *
6
- * @example
7
- * ```typescript
8
- * import { CommonPluginErrors } from "every-plugin/errors";
9
- *
10
- * export const contract = oc.router({
11
- * getData: oc.route(...)
12
- * .errors(CommonPluginErrors)
13
- * });
14
- * ```
15
- */
16
- export const CommonPluginErrors = {
17
- UNAUTHORIZED: {
18
- data: z.object({
19
- apiKeyProvided: z.boolean(),
20
- provider: z.string().optional(),
21
- authType: z.enum(['apiKey', 'oauth', 'token']).optional(),
22
- })
23
- },
24
- RATE_LIMITED: {
25
- data: z.object({
26
- retryAfter: z.number().int().min(1),
27
- remainingRequests: z.number().int().min(0).optional(),
28
- resetTime: z.string().datetime().optional(),
29
- limitType: z.enum(['requests', 'tokens', 'bandwidth']).optional(),
30
- })
31
- },
32
- SERVICE_UNAVAILABLE: {
33
- data: z.object({
34
- retryAfter: z.number().int().optional(),
35
- maintenanceWindow: z.boolean().default(false),
36
- estimatedUptime: z.string().datetime().optional(),
37
- })
38
- },
39
- BAD_REQUEST: {
40
- data: z.object({
41
- invalidFields: z.array(z.string()).optional(),
42
- validationErrors: z.array(z.object({
43
- field: z.string(),
44
- message: z.string(),
45
- code: z.string().optional(),
46
- })).optional(),
47
- })
48
- },
49
- NOT_FOUND: {
50
- data: z.object({
51
- resource: z.string().optional(),
52
- resourceId: z.string().optional(),
53
- })
54
- },
55
- FORBIDDEN: {
56
- data: z.object({
57
- requiredPermissions: z.array(z.string()).optional(),
58
- action: z.string().optional(),
59
- })
60
- }
61
- };
package/dist/index.d.ts DELETED
@@ -1,6 +0,0 @@
1
- export * from "./errors";
2
- export * from "./plugin";
3
- export * from "./runtime";
4
- export { getNormalizedRemoteName } from "./runtime/services/normalize";
5
- export type { AnyPlugin, EveryPlugin, InitializedPlugin, LoadedPlugin, PluginClientType, PluginConfigInput, PluginContext, PluginContract, PluginInstance, PluginMetadata, PluginRegistry, PluginRouterType, PluginRuntimeConfig, PluginSecrets, PluginVariables, RegisteredPlugins, SecretsConfig } from "./types";
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAClF,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EACtE,aAAa,EACb,MAAM,SAAS,CAAC"}
package/dist/index.js DELETED
@@ -1,5 +0,0 @@
1
- export * from "./errors";
2
- export * from "./plugin";
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 DELETED
@@ -1,10 +0,0 @@
1
- export * from "@orpc/contract";
2
- export * from "@orpc/server";
3
- export * from "@orpc/experimental-publisher";
4
- export type { IORedisPublisherOptions } from "@orpc/experimental-publisher/ioredis";
5
- export { IORedisPublisher } from "@orpc/experimental-publisher/ioredis";
6
- export type { MemoryPublisherOptions } from "@orpc/experimental-publisher/memory";
7
- export { MemoryPublisher } from "@orpc/experimental-publisher/memory";
8
- export type { UpstashRedisPublisherOptions } from "@orpc/experimental-publisher/upstash-redis";
9
- export { UpstashRedisPublisher } from "@orpc/experimental-publisher/upstash-redis";
10
- //# sourceMappingURL=orpc.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orpc.d.ts","sourceRoot":"","sources":["../src/orpc.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAE7B,cAAc,8BAA8B,CAAC;AAC7C,YAAY,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,YAAY,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,YAAY,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC"}
package/dist/orpc.js DELETED
@@ -1,6 +0,0 @@
1
- export * from "@orpc/contract";
2
- export * from "@orpc/server";
3
- export * from "@orpc/experimental-publisher";
4
- export { IORedisPublisher } from "@orpc/experimental-publisher/ioredis";
5
- export { MemoryPublisher } from "@orpc/experimental-publisher/memory";
6
- export { UpstashRedisPublisher } from "@orpc/experimental-publisher/upstash-redis";
package/dist/plugin.d.ts DELETED
@@ -1,57 +0,0 @@
1
- import type { AnyContractRouter, AnySchema, InferSchemaOutput } from "@orpc/contract";
2
- import type { Context, Implementer, Router } from "@orpc/server";
3
- import { Effect, type Scope } from "effect";
4
- /**
5
- * Helper type that correctly constructs the config schema type
6
- */
7
- export type PluginConfigFor<V extends AnySchema, S extends AnySchema> = {
8
- variables: V;
9
- secrets: S;
10
- };
11
- /**
12
- * Loaded plugin with static binding property
13
- */
14
- export interface LoadedPluginWithBinding<TContract extends AnyContractRouter, TVariables extends AnySchema, TSecrets extends AnySchema, TContext extends Context = Record<never, never>> {
15
- new (): Plugin<TContract, TVariables, TSecrets, TContext>;
16
- binding: {
17
- contract: TContract;
18
- variables: TVariables;
19
- secrets: TSecrets;
20
- context: TContext;
21
- };
22
- }
23
- /**
24
- * Plugin interface
25
- */
26
- export interface Plugin<TContract extends AnyContractRouter, TVariables extends AnySchema, TSecrets extends AnySchema, TContext extends Context = Record<never, never>> {
27
- readonly id: string;
28
- readonly contract: TContract;
29
- readonly configSchema: PluginConfigFor<TVariables, TSecrets>;
30
- initialize(config: {
31
- variables: InferSchemaOutput<TVariables>;
32
- secrets: InferSchemaOutput<TSecrets>;
33
- }): Effect.Effect<TContext, unknown, Scope.Scope>;
34
- shutdown(): Effect.Effect<void, never>;
35
- /**
36
- * Creates the strongly-typed oRPC router for this plugin.
37
- * The router's procedure types are inferred directly from the contract.
38
- * @param context The initialized plugin context
39
- * @returns A router with procedures matching the plugin's contract
40
- */
41
- createRouter(context: TContext): Router<TContract, any>;
42
- }
43
- /**
44
- * Factory function to create plugins
45
- */
46
- export declare function createPlugin<V extends AnySchema, S extends AnySchema, TContract extends AnyContractRouter, TContext extends Context = Record<never, never>>(config: {
47
- variables: V;
48
- secrets: S;
49
- contract: TContract;
50
- initialize?: (config: {
51
- variables: InferSchemaOutput<V>;
52
- secrets: InferSchemaOutput<S>;
53
- }) => Effect.Effect<TContext, Error, Scope.Scope>;
54
- createRouter: (context: TContext, builder: Implementer<TContract, TContext, TContext>) => Router<TContract, any>;
55
- shutdown?: (ctx: TContext) => Effect.Effect<void, Error, never>;
56
- }): LoadedPluginWithBinding<TContract, V, S, TContext>;
57
- //# sourceMappingURL=plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
package/dist/plugin.js DELETED
@@ -1,43 +0,0 @@
1
- import { implement } from "@orpc/server";
2
- import { Effect } from "effect";
3
- /**
4
- * Factory function to create plugins
5
- */
6
- export function createPlugin(config) {
7
- const configSchema = {
8
- variables: config.variables,
9
- secrets: config.secrets
10
- };
11
- class CreatedPlugin {
12
- /** set during instantiation - registry key */
13
- id;
14
- contract = config.contract;
15
- configSchema = configSchema;
16
- _context = null;
17
- initialize(pluginConfig) {
18
- const init = config.initialize ?? (() => Effect.succeed({}));
19
- return init(pluginConfig).pipe(Effect.tap((ctx) => Effect.sync(() => { this._context = ctx; })), Effect.map(() => this._context), Effect.mapError((error) => error));
20
- }
21
- shutdown() {
22
- const self = this;
23
- return Effect.gen(function* () {
24
- if (config.shutdown && self._context) {
25
- yield* config.shutdown(self._context).pipe(Effect.catchAll(() => Effect.void));
26
- }
27
- });
28
- }
29
- createRouter(context) {
30
- const builder = implement(config.contract).$context();
31
- const router = config.createRouter(context, builder);
32
- return router;
33
- }
34
- }
35
- const PluginConstructor = CreatedPlugin;
36
- PluginConstructor.binding = {
37
- contract: config.contract,
38
- variables: config.variables,
39
- secrets: config.secrets,
40
- context: {}
41
- };
42
- return PluginConstructor;
43
- }
@@ -1,36 +0,0 @@
1
- import { ORPCError } from "@orpc/contract";
2
- import type { z } from "zod";
3
- declare const PluginRuntimeError_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 & {
4
- readonly _tag: "PluginRuntimeError";
5
- } & Readonly<A>;
6
- export declare class PluginRuntimeError extends PluginRuntimeError_base<{
7
- readonly pluginId?: string;
8
- readonly operation?: string;
9
- readonly procedureName?: string;
10
- readonly cause?: Error;
11
- readonly retryable: boolean;
12
- }> {
13
- }
14
- declare const ModuleFederationError_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 & {
15
- readonly _tag: "ModuleFederationError";
16
- } & Readonly<A>;
17
- export declare class ModuleFederationError extends ModuleFederationError_base<{
18
- readonly pluginId: string;
19
- readonly remoteUrl: string;
20
- readonly cause?: Error;
21
- }> {
22
- }
23
- declare const ValidationError_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 & {
24
- readonly _tag: "ValidationError";
25
- } & Readonly<A>;
26
- export declare class ValidationError extends ValidationError_base<{
27
- readonly pluginId: string;
28
- readonly stage: "config" | "input" | "output" | "state";
29
- readonly zodError: z.ZodError;
30
- }> {
31
- }
32
- export declare const isRetryableORPCCode: (code: string) => boolean;
33
- export declare const wrapORPCError: (orpcError: ORPCError<string, unknown>, pluginId?: string, procedureName?: string, operation?: string) => PluginRuntimeError;
34
- export declare const toPluginRuntimeError: (error: unknown, pluginId?: string, procedureName?: string, operation?: string, defaultRetryable?: boolean) => PluginRuntimeError;
35
- export {};
36
- //# sourceMappingURL=errors.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,47 +0,0 @@
1
- import { ORPCError } from "@orpc/contract";
2
- import { Data } from "effect";
3
- export class PluginRuntimeError extends Data.TaggedError("PluginRuntimeError") {
4
- }
5
- export class ModuleFederationError extends Data.TaggedError("ModuleFederationError") {
6
- }
7
- export class ValidationError extends Data.TaggedError("ValidationError") {
8
- }
9
- // Helper to determine if an oRPC error code is retryable
10
- export const isRetryableORPCCode = (code) => {
11
- switch (code) {
12
- case 'TOO_MANY_REQUESTS':
13
- case 'SERVICE_UNAVAILABLE':
14
- case 'BAD_GATEWAY':
15
- case 'GATEWAY_TIMEOUT':
16
- case 'TIMEOUT':
17
- return true;
18
- default:
19
- return false;
20
- }
21
- };
22
- // Convert ORPC errors from plugin procedures to PluginRuntimeError
23
- export const wrapORPCError = (orpcError, pluginId, procedureName, operation) => {
24
- return new PluginRuntimeError({
25
- pluginId,
26
- operation,
27
- procedureName,
28
- retryable: isRetryableORPCCode(orpcError.code),
29
- cause: orpcError
30
- });
31
- };
32
- // Universal error converter for the runtime
33
- export const toPluginRuntimeError = (error, pluginId, procedureName, operation, defaultRetryable = false) => {
34
- if (error instanceof ORPCError) {
35
- return wrapORPCError(error, pluginId, procedureName, operation);
36
- }
37
- if (error instanceof PluginRuntimeError) {
38
- return error; // Already converted
39
- }
40
- return new PluginRuntimeError({
41
- pluginId,
42
- operation,
43
- procedureName,
44
- retryable: defaultRetryable,
45
- cause: error instanceof Error ? error : new Error(String(error))
46
- });
47
- };
@@ -1,20 +0,0 @@
1
- import { ManagedRuntime } from "effect";
2
- import type { AnyPlugin, InitializedPlugin, LoadedPlugin, PluginConfigInput, PluginInstance, PluginRegistry, PluginRuntimeConfig, RegisteredPlugin, RegisteredPlugins, UsePluginResult } from "../types";
3
- import { PluginService } from "./services/plugin.service";
4
- export declare class PluginRuntime<R extends RegisteredPlugins = RegisteredPlugins> {
5
- private runtime;
6
- private registry;
7
- private pluginCache;
8
- constructor(runtime: ManagedRuntime.ManagedRuntime<PluginService, never>, registry: PluginRegistry);
9
- private generateCacheKey;
10
- private validatePluginId;
11
- private runPromise;
12
- usePlugin<K extends keyof RegisteredPlugins & string>(pluginId: K, config: PluginConfigInput<R[K]>): Promise<UsePluginResult<K>>;
13
- loadPlugin<K extends keyof RegisteredPlugins & string>(pluginId: K): Promise<LoadedPlugin<RegisteredPlugin<K>>>;
14
- instantiatePlugin<K extends keyof RegisteredPlugins & string>(pluginId: K, loadedPlugin: LoadedPlugin<RegisteredPlugin<K>>): Promise<PluginInstance<RegisteredPlugin<K>>>;
15
- initializePlugin<T extends AnyPlugin>(instance: PluginInstance<T>, config: any): Promise<InitializedPlugin<T>>;
16
- shutdown(): Promise<void>;
17
- evictPlugin<K extends keyof RegisteredPlugins & string>(pluginId: K, config: PluginConfigInput<RegisteredPlugins[K]>): Promise<void>;
18
- }
19
- export declare function createPluginRuntime(config: PluginRuntimeConfig): PluginRuntime;
20
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,cAAc,EAAU,MAAM,QAAQ,CAAC;AAC3E,OAAO,KAAK,EACX,SAAS,EACT,iBAAiB,EACjB,YAAY,EAEZ,iBAAiB,EACjB,cAAc,EACd,cAAc,EAEd,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,qBAAa,aAAa,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB;IAIxE,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAJjB,OAAO,CAAC,WAAW,CAAsF;gBAGhG,OAAO,EAAE,cAAc,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC,EAC5D,QAAQ,EAAE,cAAc;IAGjC,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,gBAAgB;YAcV,UAAU;IAgBlB,SAAS,CAAC,CAAC,SAAS,MAAM,iBAAiB,GAAG,MAAM,EACzD,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAiCxB,UAAU,CAAC,CAAC,SAAS,MAAM,iBAAiB,GAAG,MAAM,EAC1D,QAAQ,EAAE,CAAC,GACT,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IAQvC,iBAAiB,CAAC,CAAC,SAAS,MAAM,iBAAiB,GAAG,MAAM,EACjE,QAAQ,EAAE,CAAC,EACX,YAAY,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAC7C,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IAQzC,gBAAgB,CAAC,CAAC,SAAS,SAAS,EACzC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAC3B,MAAM,EAAE,GAAG,GACT,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAQ1B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQzB,WAAW,CAAC,CAAC,SAAS,MAAM,iBAAiB,GAAG,MAAM,EAC3D,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAC7C,OAAO,CAAC,IAAI,CAAC;CAwBhB;AAWD,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,mBAAmB,GACzB,aAAa,CAkBf"}
@@ -1,131 +0,0 @@
1
- import { createRouterClient } from "@orpc/server";
2
- import { Cause, Effect, Exit, Hash, ManagedRuntime, Option } from "effect";
3
- import { PluginRuntimeError } from "./errors";
4
- import { PluginService } from "./services/plugin.service";
5
- export class PluginRuntime {
6
- runtime;
7
- registry;
8
- pluginCache = new Map();
9
- constructor(runtime, registry) {
10
- this.runtime = runtime;
11
- this.registry = registry;
12
- }
13
- generateCacheKey(pluginId, config) {
14
- const configHash = Hash.structure(config).toString();
15
- return `${pluginId}:${configHash}`;
16
- }
17
- validatePluginId(pluginId) {
18
- if (!(pluginId in this.registry)) {
19
- return Effect.fail(new PluginRuntimeError({
20
- pluginId: String(pluginId),
21
- operation: "validate-plugin-id",
22
- cause: new Error(`Plugin ID '${String(pluginId)}' not found in registry.`),
23
- retryable: false,
24
- }));
25
- }
26
- return Effect.succeed(String(pluginId));
27
- }
28
- async runPromise(effect) {
29
- const exit = await this.runtime.runPromiseExit(effect);
30
- if (Exit.isFailure(exit)) {
31
- const error = Cause.failureOption(exit.cause);
32
- if (Option.isSome(error)) {
33
- throw error.value;
34
- }
35
- throw Cause.squash(exit.cause);
36
- }
37
- return exit.value;
38
- }
39
- async usePlugin(pluginId, config) {
40
- const cacheKey = this.generateCacheKey(pluginId, config);
41
- let cachedPlugin = this.pluginCache.get(cacheKey);
42
- if (!cachedPlugin) {
43
- const operation = Effect.gen(this, function* () {
44
- const pluginService = yield* PluginService;
45
- const validatedId = yield* this.validatePluginId(pluginId);
46
- // Load → Instantiate → Initialize
47
- const ctor = yield* pluginService.loadPlugin(validatedId);
48
- const instance = yield* pluginService.instantiatePlugin(pluginId, ctor);
49
- const initialized = yield* pluginService.initializePlugin(instance, config);
50
- return initialized;
51
- }).pipe(Effect.provide(this.runtime));
52
- cachedPlugin = Effect.cached(operation).pipe(Effect.flatten);
53
- this.pluginCache.set(cacheKey, cachedPlugin);
54
- }
55
- const initialized = await this.runPromise(cachedPlugin);
56
- const router = initialized.plugin.createRouter(initialized.context);
57
- const client = createRouterClient(router);
58
- return {
59
- router: router,
60
- client: client,
61
- metadata: initialized.metadata,
62
- initialized: initialized
63
- };
64
- }
65
- async loadPlugin(pluginId) {
66
- const effect = Effect.gen(function* () {
67
- const pluginService = yield* PluginService;
68
- return yield* pluginService.loadPlugin(pluginId);
69
- });
70
- return this.runPromise(effect);
71
- }
72
- async instantiatePlugin(pluginId, loadedPlugin) {
73
- const effect = Effect.gen(function* () {
74
- const pluginService = yield* PluginService;
75
- return yield* pluginService.instantiatePlugin(pluginId, loadedPlugin);
76
- });
77
- return this.runPromise(effect);
78
- }
79
- async initializePlugin(instance, config) {
80
- const effect = Effect.gen(function* () {
81
- const pluginService = yield* PluginService;
82
- return yield* pluginService.initializePlugin(instance, config);
83
- });
84
- return this.runPromise(effect);
85
- }
86
- async shutdown() {
87
- const effect = Effect.gen(function* () {
88
- const pluginService = yield* PluginService;
89
- yield* pluginService.cleanup();
90
- });
91
- return this.runPromise(effect);
92
- }
93
- async evictPlugin(pluginId, config) {
94
- const cacheKey = this.generateCacheKey(pluginId, config);
95
- const effect = Effect.gen(this, function* () {
96
- const pluginService = yield* PluginService;
97
- const cachedPlugin = this.pluginCache.get(cacheKey);
98
- if (cachedPlugin) {
99
- this.pluginCache.delete(cacheKey);
100
- const pluginResult = yield* cachedPlugin.pipe(Effect.catchAll(() => Effect.succeed(null)));
101
- if (pluginResult) {
102
- yield* pluginService.shutdownPlugin(pluginResult).pipe(Effect.catchAll(() => Effect.void));
103
- }
104
- }
105
- }).pipe(Effect.catchAll(() => Effect.void));
106
- return this.runPromise(effect);
107
- }
108
- }
109
- /**
110
- * Normalizes a remote URL to ensure it points to remoteEntry.js
111
- * If the URL doesn't end with a file extension, appends /remoteEntry.js
112
- */
113
- function normalizeRemoteUrl(url) {
114
- if (url.endsWith('.js'))
115
- return url; // Already a file
116
- return `${url.endsWith('/') ? url.slice(0, -1) : url}/remoteEntry.js`;
117
- }
118
- export function createPluginRuntime(config) {
119
- const secrets = config.secrets || {};
120
- // Normalize all remote URLs in the registry
121
- const normalizedRegistry = Object.fromEntries(Object.entries(config.registry).map(([pluginId, entry]) => [
122
- pluginId,
123
- {
124
- ...entry,
125
- remoteUrl: normalizeRemoteUrl(entry.remoteUrl)
126
- }
127
- ]));
128
- const layer = PluginService.Live(normalizedRegistry, secrets);
129
- const runtime = ManagedRuntime.make(layer);
130
- return new PluginRuntime(runtime, normalizedRegistry);
131
- }
@@ -1,13 +0,0 @@
1
- import { Effect } from "effect";
2
- import type { AnyPlugin } from "../../types";
3
- import { ModuleFederationError } from "../errors";
4
- declare const ModuleFederationService_base: Effect.Service.Class<ModuleFederationService, "ModuleFederationService", {
5
- readonly effect: Effect.Effect<{
6
- registerRemote: (pluginId: string, url: string) => Effect.Effect<undefined, ModuleFederationError, never>;
7
- loadRemoteConstructor: (pluginId: string, url: string) => Effect.Effect<new () => AnyPlugin, ModuleFederationError, never>;
8
- }, never, never>;
9
- }>;
10
- export declare class ModuleFederationService extends ModuleFederationService_base {
11
- }
12
- export {};
13
- //# sourceMappingURL=module-federation.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"module-federation.service.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/module-federation.service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;;;mCAkFpB,MAAM,OAAO,MAAM;0CA2CZ,MAAM,OAAO,MAAM,6BAxH/B,SAAS;;;AAwElC,qBAAa,uBAAwB,SAAQ,4BAkH3C;CAAG"}