every-plugin 0.2.0 → 0.3.0
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/dist/client/index.d.ts +3 -4
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/plugin.d.ts +7 -12
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +5 -1
- package/dist/runtime/index.d.ts +11 -5
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +4 -3
- package/dist/runtime/services/plugin-loader.service.d.ts +7 -23
- package/dist/runtime/services/plugin-loader.service.d.ts.map +1 -1
- package/dist/runtime/services/plugin-loader.service.js +10 -13
- package/dist/runtime/services/plugin.service.d.ts +4 -16
- package/dist/runtime/services/plugin.service.d.ts.map +1 -1
- package/dist/testing/mocks/module-federation.service.d.ts +2 -2
- package/dist/testing/mocks/module-federation.service.d.ts.map +1 -1
- package/dist/types.d.ts +26 -71
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/client/index.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import type { AnyContractRouter } from "@orpc/contract";
|
|
2
1
|
import { type ClientContext, type CreateProcedureClientOptions, type ErrorMap, type InferRouterInitialContext, type Meta, type RouterClient, type Schema } from "@orpc/server";
|
|
3
|
-
import type { AnyPlugin, InitializedPlugin,
|
|
2
|
+
import type { AnyPlugin, InitializedPlugin, PluginRouter } from "../types";
|
|
4
3
|
/**
|
|
5
4
|
* Extracts the oRPC router from an initialized plugin.
|
|
6
5
|
* The router type is precisely inferred from the plugin's contract.
|
|
7
6
|
* Useful for mounting into HTTP frameworks or direct router usage.
|
|
8
7
|
*/
|
|
9
|
-
export declare function getPluginRouter<T extends AnyPlugin>(initialized: InitializedPlugin<T>):
|
|
8
|
+
export declare function getPluginRouter<T extends AnyPlugin>(initialized: InitializedPlugin<T>): PluginRouter<T>;
|
|
10
9
|
/**
|
|
11
10
|
* Creates a fully type-safe client for calling plugin procedures as methods.
|
|
12
11
|
* The client type is precisely inferred from the plugin's contract, providing
|
|
@@ -14,5 +13,5 @@ export declare function getPluginRouter<T extends AnyPlugin>(initialized: Initia
|
|
|
14
13
|
*
|
|
15
14
|
* Type safety flows: Plugin Contract → Router → RouterClient with full procedure autocomplete
|
|
16
15
|
*/
|
|
17
|
-
export declare function createPluginClient<T extends AnyPlugin, TClientContext extends ClientContext = Record<never, never>>(initialized: InitializedPlugin<T>, options?: CreateProcedureClientOptions<InferRouterInitialContext<
|
|
16
|
+
export declare function createPluginClient<T extends AnyPlugin, TClientContext extends ClientContext = Record<never, never>>(initialized: InitializedPlugin<T>, options?: CreateProcedureClientOptions<InferRouterInitialContext<PluginRouter<T>>, Schema<unknown, unknown>, ErrorMap, Meta, TClientContext>): RouterClient<PluginRouter<T>, TClientContext>;
|
|
18
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,4BAA4B,EAEjC,KAAK,QAAQ,EACb,KAAK,yBAAyB,EAC9B,KAAK,IAAI,EAET,KAAK,YAAY,EACjB,KAAK,MAAM,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,SAAS,EAAa,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEtF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,SAAS,EACjD,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAChC,YAAY,CAAC,CAAC,CAAC,CAmBjB;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,YAAY,CAAC,CAAC,CAAC,CAAC,EAC1C,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EACxB,QAAQ,EACR,IAAI,EACJ,cAAc,CACf,GACA,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAS/C"}
|
package/dist/client/index.js
CHANGED
|
@@ -12,7 +12,7 @@ export function getPluginRouter(initialized) {
|
|
|
12
12
|
throw new Error("Plugin instance is undefined - check service layer dependencies (ModuleFederationService, SecretsService)");
|
|
13
13
|
}
|
|
14
14
|
if (typeof initialized.plugin.createRouter !== "function") {
|
|
15
|
-
throw new Error(`Plugin ${initialized.
|
|
15
|
+
throw new Error(`Plugin ${initialized.plugin.id || 'unknown'} does not have a createRouter method`);
|
|
16
16
|
}
|
|
17
17
|
if (!initialized.context) {
|
|
18
18
|
throw new Error("Plugin context is undefined - plugin initialization incomplete");
|
package/dist/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ export * from "./errors";
|
|
|
2
2
|
export * from "./plugin";
|
|
3
3
|
export * from "./runtime";
|
|
4
4
|
export { getNormalizedRemoteName } from "./runtime/services/normalize";
|
|
5
|
-
export type { AnyPlugin, ConfigOf,
|
|
5
|
+
export type { AnyPlugin, ConfigOf, EveryPlugin, InitializedPlugin, LoadedPlugin, PluginInstance, PluginOf, PluginRegistry, PluginRuntimeConfig, RegistryBindings, SecretsConfig } from "./types";
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;AAG1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,YAAY,EACX,SAAS,EACT,QAAQ,EACR,
|
|
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,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,MAAM,SAAS,CAAC"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import type { AnyContractRouter } from "@orpc/contract";
|
|
2
|
-
import type { Context, Router } from "@orpc/server";
|
|
2
|
+
import type { Context, Router, Implementer } from "@orpc/server";
|
|
3
3
|
import { Effect, type Scope } from "effect";
|
|
4
4
|
import { z } from "zod";
|
|
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
5
|
/**
|
|
10
6
|
* Helper type that correctly constructs the config schema type
|
|
11
7
|
*/
|
|
@@ -14,9 +10,9 @@ export type PluginConfigFor<V extends z.ZodTypeAny, S extends z.ZodTypeAny> = z.
|
|
|
14
10
|
secrets: S;
|
|
15
11
|
}>;
|
|
16
12
|
/**
|
|
17
|
-
*
|
|
13
|
+
* Loaded plugin with static binding property
|
|
18
14
|
*/
|
|
19
|
-
export interface
|
|
15
|
+
export interface LoadedPluginWithBinding<TContract extends AnyContractRouter, TVariables extends z.ZodTypeAny, TSecrets extends z.ZodTypeAny, TContext extends Context = Record<never, never>> {
|
|
20
16
|
new (): Plugin<TContract, TVariables, TSecrets, TContext>;
|
|
21
17
|
binding: {
|
|
22
18
|
contract: TContract;
|
|
@@ -103,9 +99,9 @@ export interface Plugin<TContract extends AnyContractRouter, TVariables extends
|
|
|
103
99
|
* Creates the strongly-typed oRPC router for this plugin.
|
|
104
100
|
* The router's procedure types are inferred directly from the contract.
|
|
105
101
|
* @param context The initialized plugin context
|
|
106
|
-
* @returns A router with procedures matching the plugin's contract
|
|
102
|
+
* @returns A router with procedures matching the plugin's contract and composed context
|
|
107
103
|
*/
|
|
108
|
-
createRouter(context?: TContext):
|
|
104
|
+
createRouter<THostContext extends Context = Record<never, never>>(context?: TContext): Router<TContract, TContext & THostContext>;
|
|
109
105
|
}
|
|
110
106
|
/**
|
|
111
107
|
* Factory function to create plugins
|
|
@@ -119,8 +115,7 @@ export declare function createPlugin<V extends z.ZodTypeAny, S extends z.ZodType
|
|
|
119
115
|
variables: z.infer<V>;
|
|
120
116
|
secrets: z.infer<S>;
|
|
121
117
|
}) => Effect.Effect<TContext, Error, Scope.Scope>;
|
|
122
|
-
createRouter: (
|
|
118
|
+
createRouter: (context: TContext, builder: Implementer<TContract, TContext & Record<never, never>, TContext & Record<never, never>>) => Router<TContract, TContext & Record<never, never>>;
|
|
123
119
|
shutdown?: (ctx: TContext) => Effect.Effect<void, Error, never>;
|
|
124
|
-
}):
|
|
125
|
-
export {};
|
|
120
|
+
}): LoadedPluginWithBinding<TContract, V, S, TContext>;
|
|
126
121
|
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,UAAU,IACzE,CAAC,CAAC,SAAS,CAAC;IAAE,SAAS,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,uBAAuB,CACvC,SAAS,SAAS,iBAAiB,EACnC,UAAU,SAAS,CAAC,CAAC,UAAU,EAC/B,QAAQ,SAAS,CAAC,CAAC,UAAU,EAC7B,QAAQ,SAAS,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;IAE/C,QAAO,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzD,OAAO,EAAE;QACR,QAAQ,EAAE,SAAS,CAAC;QACpB,MAAM,EAAE,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;KAC9C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6C9B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,MAAM,CACtB,SAAS,SAAS,iBAAiB,EACnC,UAAU,SAAS,CAAC,CAAC,UAAU,EAC/B,QAAQ,SAAS,CAAC,CAAC,UAAU,EAC7B,QAAQ,SAAS,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;IAE/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAG7D,UAAU,CACT,MAAM,EAAE;QAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;KAAE,GACpE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAEjD,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEvC;;;;;OAKG;IACH,YAAY,CAAC,YAAY,SAAS,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAC/D,OAAO,CAAC,EAAE,QAAQ,GAChB,MAAM,CAAC,SAAS,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC3B,CAAC,SAAS,CAAC,CAAC,UAAU,EACtB,CAAC,SAAS,CAAC,CAAC,UAAU,EACtB,SAAS,SAAS,iBAAiB,EACnC,QAAQ,SAAS,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAC9C,MAAM,EAAE;IACT,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,CAAC,CAAC;IACb,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,CACZ,MAAM,EAAE;QAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KAAE,KAClD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACjD,YAAY,EAAE,CACb,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,WAAW,CAAC,SAAS,EAAE,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,KAC7F,MAAM,CAAC,SAAS,EAAE,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;CAChE,GA2D4B,uBAAuB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAC9E"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { implement } from "@orpc/server";
|
|
1
2
|
import { Effect } from "effect";
|
|
2
3
|
import { z } from "zod";
|
|
3
4
|
/**
|
|
@@ -76,7 +77,10 @@ export function createPlugin(config) {
|
|
|
76
77
|
});
|
|
77
78
|
}
|
|
78
79
|
createRouter(context) {
|
|
79
|
-
|
|
80
|
+
const builder = implement(config.contract).$context();
|
|
81
|
+
const router = config.createRouter(context, builder);
|
|
82
|
+
return router;
|
|
83
|
+
// return router as Router<TContract, TContext & THostContext>;
|
|
80
84
|
}
|
|
81
85
|
}
|
|
82
86
|
const PluginConstructor = CreatedPlugin;
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ManagedRuntime } from "effect";
|
|
2
2
|
import type { z } from "zod";
|
|
3
|
-
import type { EveryPlugin, InitializedPlugin,
|
|
3
|
+
import type { ConfigOf, EveryPlugin, InitializedPlugin, LoadedPlugin, PluginInstance, PluginOf, PluginRegistry, RegistryBindings, RuntimeOptions, SecretsConfig } from "../types";
|
|
4
4
|
import { PluginService } from "./services/plugin.service";
|
|
5
5
|
export declare class PluginRuntime<R extends RegistryBindings = RegistryBindings> {
|
|
6
6
|
private runtime;
|
|
@@ -10,10 +10,16 @@ export declare class PluginRuntime<R extends RegistryBindings = RegistryBindings
|
|
|
10
10
|
private generateCacheKey;
|
|
11
11
|
private validatePluginId;
|
|
12
12
|
private runPromise;
|
|
13
|
-
loadPlugin<K extends keyof R>(pluginId: K): Promise<
|
|
14
|
-
instantiatePlugin<K extends keyof R>(
|
|
15
|
-
initializePlugin<K extends keyof R>(instance: PluginInstance<PluginOf<R[K]>>, config: z.infer<PluginOf<R[K]>["configSchema"]>): Promise<InitializedPlugin<PluginOf<R[K]
|
|
16
|
-
|
|
13
|
+
loadPlugin<K extends keyof R>(pluginId: K): Promise<LoadedPlugin<PluginOf<R[K]>>>;
|
|
14
|
+
instantiatePlugin<K extends keyof R>(pluginId: K, loadedPlugin: LoadedPlugin<PluginOf<R[K]>>): Promise<PluginInstance<PluginOf<R[K]>>>;
|
|
15
|
+
initializePlugin<K extends keyof R>(instance: PluginInstance<PluginOf<R[K]>>, config: z.infer<PluginOf<R[K]>["configSchema"]>): Promise<InitializedPlugin<PluginOf<R[K]>> & {
|
|
16
|
+
config: ConfigOf<R[K]>;
|
|
17
|
+
}>;
|
|
18
|
+
usePlugin<K extends keyof R>(pluginId: K, config: z.infer<PluginOf<R[K]>["configSchema"]>): Promise<EveryPlugin<PluginOf<R[K]>> & {
|
|
19
|
+
initialized: InitializedPlugin<PluginOf<R[K]>> & {
|
|
20
|
+
config: ConfigOf<R[K]>;
|
|
21
|
+
};
|
|
22
|
+
}>;
|
|
17
23
|
shutdown(): Promise<void>;
|
|
18
24
|
evictPlugin<K extends keyof R>(pluginId: K, config: z.infer<PluginOf<R[K]>["configSchema"]>): Promise<void>;
|
|
19
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/index.js
CHANGED
|
@@ -46,10 +46,11 @@ export class PluginRuntime {
|
|
|
46
46
|
});
|
|
47
47
|
return this.runPromise(effect);
|
|
48
48
|
}
|
|
49
|
-
instantiatePlugin(
|
|
49
|
+
instantiatePlugin(pluginId, loadedPlugin) {
|
|
50
50
|
const effect = Effect.gen(this, function* () {
|
|
51
51
|
const pluginService = yield* PluginService;
|
|
52
|
-
const
|
|
52
|
+
const pluginIdStr = pluginId;
|
|
53
|
+
const result = yield* pluginService.instantiatePlugin(pluginIdStr, loadedPlugin);
|
|
53
54
|
return result;
|
|
54
55
|
});
|
|
55
56
|
return this.runPromise(effect);
|
|
@@ -71,7 +72,7 @@ export class PluginRuntime {
|
|
|
71
72
|
const validatedId = yield* this.validatePluginId(pluginId);
|
|
72
73
|
// Load → Instantiate → Initialize
|
|
73
74
|
const ctor = yield* pluginService.loadPlugin(validatedId);
|
|
74
|
-
const instance = yield* pluginService.instantiatePlugin(ctor);
|
|
75
|
+
const instance = yield* pluginService.instantiatePlugin(String(pluginId), ctor);
|
|
75
76
|
const _initialized = yield* pluginService.initializePlugin(instance, config);
|
|
76
77
|
const initialized = _initialized;
|
|
77
78
|
const client = createPluginClient(initialized);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Context, Effect, Scope } from "effect";
|
|
2
2
|
import type { z } from "zod";
|
|
3
|
-
import type { AnyPlugin,
|
|
3
|
+
import type { AnyPlugin, LoadedPlugin, PluginInstance, PluginRegistry } from "../../types";
|
|
4
4
|
import { PluginRuntimeError } from "../errors";
|
|
5
5
|
import { ModuleFederationService } from "./module-federation.service";
|
|
6
6
|
import { SecretsService } from "./secrets.service";
|
|
@@ -9,11 +9,7 @@ export declare class PluginRegistryTag extends PluginRegistryTag_base {
|
|
|
9
9
|
}
|
|
10
10
|
declare const RegistryService_base: Effect.Service.Class<RegistryService, "RegistryService", {
|
|
11
11
|
readonly effect: Effect.Effect<{
|
|
12
|
-
get: (pluginId: string) => Effect.Effect<
|
|
13
|
-
remoteUrl: string;
|
|
14
|
-
version?: string;
|
|
15
|
-
description?: string;
|
|
16
|
-
}, PluginRuntimeError, never>;
|
|
12
|
+
get: (pluginId: string) => Effect.Effect<import("../../types").PluginMetadata, PluginRuntimeError, never>;
|
|
17
13
|
}, never, PluginRegistryTag>;
|
|
18
14
|
}>;
|
|
19
15
|
export declare class RegistryService extends RegistryService_base {
|
|
@@ -22,35 +18,23 @@ declare const PluginLoaderService_base: Effect.Service.Class<PluginLoaderService
|
|
|
22
18
|
readonly effect: Effect.Effect<{
|
|
23
19
|
loadPlugin: (pluginId: string) => Effect.Effect<{
|
|
24
20
|
ctor: new () => AnyPlugin;
|
|
25
|
-
metadata:
|
|
26
|
-
pluginId: string;
|
|
27
|
-
version: string | undefined;
|
|
28
|
-
};
|
|
21
|
+
metadata: import("../../types").PluginMetadata;
|
|
29
22
|
}, PluginRuntimeError, never>;
|
|
30
|
-
instantiatePlugin: <T extends AnyPlugin>(
|
|
23
|
+
instantiatePlugin: <T extends AnyPlugin>(pluginId: string, loadedPlugin: LoadedPlugin<T>) => Effect.Effect<{
|
|
31
24
|
plugin: T;
|
|
32
|
-
metadata:
|
|
33
|
-
readonly pluginId: string;
|
|
34
|
-
readonly version?: string;
|
|
35
|
-
readonly description?: string;
|
|
36
|
-
readonly type?: string;
|
|
37
|
-
};
|
|
25
|
+
metadata: import("../../types").PluginMetadata;
|
|
38
26
|
}, PluginRuntimeError, never>;
|
|
39
27
|
initializePlugin: <T extends AnyPlugin>(pluginInstance: PluginInstance<T>, config: {
|
|
40
28
|
variables: unknown;
|
|
41
29
|
secrets: unknown;
|
|
42
30
|
}) => Effect.Effect<{
|
|
43
31
|
plugin: T;
|
|
44
|
-
metadata:
|
|
45
|
-
readonly pluginId: string;
|
|
46
|
-
readonly version?: string;
|
|
47
|
-
readonly description?: string;
|
|
48
|
-
};
|
|
32
|
+
metadata: import("../../types").PluginMetadata;
|
|
49
33
|
config: z.infer<T["configSchema"]>;
|
|
50
34
|
context: any;
|
|
51
35
|
scope: Scope.CloseableScope;
|
|
52
36
|
}, PluginRuntimeError, never>;
|
|
53
|
-
}, never,
|
|
37
|
+
}, never, ModuleFederationService | SecretsService | RegistryService>;
|
|
54
38
|
}>;
|
|
55
39
|
export declare class PluginLoaderService extends PluginLoaderService_base {
|
|
56
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-loader.service.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/plugin-loader.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EACX,SAAS,EAET,
|
|
1
|
+
{"version":3,"file":"plugin-loader.service.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/plugin-loader.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EACX,SAAS,EAET,YAAY,EACZ,cAAc,EACd,cAAc,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAwB,MAAM,WAAW,CAAC;AAErE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;;AAEnD,qBAAa,iBAAkB,SAAQ,sBAGpC;CAAI;;;wBAOY,MAAM;;;AALzB,qBAAa,eAAgB,SAAQ,oBAkBnC;CAAI;;;+BAgBoB,MAAM;;;;4BAyBT,CAAC,SAAS,SAAS,YAC5B,MAAM,gBACF,YAAY,CAAC,CAAC,CAAC;;;;2BAmCX,CAAC,SAAS,SAAS,kBACrB,cAAc,CAAC,CAAC,CAAC,UACzB;YAAE,SAAS,EAAE,OAAO,CAAC;YAAC,OAAO,EAAE,OAAO,CAAA;SAAE;;;oBAwD3B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;;;;;;AAtInD,qBAAa,mBAAoB,SAAQ,wBA6IvC;CACD"}
|
|
@@ -37,26 +37,23 @@ export class PluginLoaderService extends Effect.Service()("PluginLoaderService",
|
|
|
37
37
|
const ctor = yield* moduleFederationService.loadRemoteConstructor(pluginId, url).pipe(Effect.mapError((error) => toPluginRuntimeError(error.cause, pluginId, undefined, "load-remote", false)));
|
|
38
38
|
return {
|
|
39
39
|
ctor,
|
|
40
|
-
metadata:
|
|
41
|
-
pluginId,
|
|
42
|
-
version: metadata.version
|
|
43
|
-
},
|
|
40
|
+
metadata: metadata,
|
|
44
41
|
};
|
|
45
42
|
}),
|
|
46
|
-
instantiatePlugin: (
|
|
47
|
-
const instance = yield* Effect.try(() => new
|
|
43
|
+
instantiatePlugin: (pluginId, loadedPlugin) => Effect.gen(function* () {
|
|
44
|
+
const instance = yield* Effect.try(() => new loadedPlugin.ctor()).pipe(Effect.mapError((error) => toPluginRuntimeError(error, pluginId, undefined, "instantiate-plugin", false)));
|
|
48
45
|
// Validate plugin ID matches
|
|
49
|
-
if (instance.id !==
|
|
46
|
+
if (instance.id !== pluginId) {
|
|
50
47
|
return yield* Effect.fail(new PluginRuntimeError({
|
|
51
|
-
pluginId
|
|
48
|
+
pluginId,
|
|
52
49
|
operation: "validate-plugin-id",
|
|
53
|
-
cause: new Error(`Plugin ID mismatch: expected ${
|
|
50
|
+
cause: new Error(`Plugin ID mismatch: expected ${pluginId}, got ${instance.id}`),
|
|
54
51
|
retryable: false,
|
|
55
52
|
}));
|
|
56
53
|
}
|
|
57
54
|
return {
|
|
58
55
|
plugin: instance,
|
|
59
|
-
metadata:
|
|
56
|
+
metadata: loadedPlugin.metadata,
|
|
60
57
|
};
|
|
61
58
|
}),
|
|
62
59
|
initializePlugin: (pluginInstance, config) => Effect.gen(function* () {
|
|
@@ -69,7 +66,7 @@ export class PluginLoaderService extends Effect.Service()("PluginLoaderService",
|
|
|
69
66
|
retryable: false,
|
|
70
67
|
})));
|
|
71
68
|
const hydratedConfig = yield* secretsService.hydrateSecrets(validatedConfig);
|
|
72
|
-
const
|
|
69
|
+
const _config = yield* validate(plugin.configSchema, hydratedConfig, plugin.id, "config").pipe(Effect.mapError((validationError) => new PluginRuntimeError({
|
|
73
70
|
pluginId: plugin.id,
|
|
74
71
|
operation: "validate-hydrated-config",
|
|
75
72
|
cause: validationError.zodError,
|
|
@@ -78,11 +75,11 @@ export class PluginLoaderService extends Effect.Service()("PluginLoaderService",
|
|
|
78
75
|
// Create a long-lived scope for this plugin instance
|
|
79
76
|
const scope = yield* Scope.make();
|
|
80
77
|
// Initialize plugin within the scope
|
|
81
|
-
const context = yield* plugin.initialize(
|
|
78
|
+
const context = yield* plugin.initialize(_config).pipe(Effect.provideService(Scope.Scope, scope), Effect.mapError((error) => toPluginRuntimeError(error, plugin.id, undefined, "initialize-plugin", false)));
|
|
82
79
|
return {
|
|
83
80
|
plugin,
|
|
84
81
|
metadata: pluginInstance.metadata,
|
|
85
|
-
config:
|
|
82
|
+
config: _config,
|
|
86
83
|
context,
|
|
87
84
|
scope,
|
|
88
85
|
};
|
|
@@ -6,30 +6,18 @@ declare const PluginService_base: Effect.Service.Class<PluginService, "PluginSer
|
|
|
6
6
|
readonly scoped: Effect.Effect<{
|
|
7
7
|
loadPlugin: (pluginId: string) => Effect.Effect<{
|
|
8
8
|
ctor: new () => AnyPlugin;
|
|
9
|
-
metadata:
|
|
10
|
-
pluginId: string;
|
|
11
|
-
version: string | undefined;
|
|
12
|
-
};
|
|
9
|
+
metadata: import("../../types").PluginMetadata;
|
|
13
10
|
}, import("../errors").PluginRuntimeError, never>;
|
|
14
|
-
instantiatePlugin: <T extends AnyPlugin>(
|
|
11
|
+
instantiatePlugin: <T extends AnyPlugin>(pluginId: string, loadedPlugin: import("../..").LoadedPlugin<T>) => Effect.Effect<{
|
|
15
12
|
plugin: T;
|
|
16
|
-
metadata:
|
|
17
|
-
readonly pluginId: string;
|
|
18
|
-
readonly version?: string;
|
|
19
|
-
readonly description?: string;
|
|
20
|
-
readonly type?: string;
|
|
21
|
-
};
|
|
13
|
+
metadata: import("../../types").PluginMetadata;
|
|
22
14
|
}, import("../errors").PluginRuntimeError, never>;
|
|
23
15
|
initializePlugin: <T extends AnyPlugin>(pluginInstance: import("../..").PluginInstance<T>, config: {
|
|
24
16
|
variables: unknown;
|
|
25
17
|
secrets: unknown;
|
|
26
18
|
}) => Effect.Effect<{
|
|
27
19
|
plugin: T;
|
|
28
|
-
metadata:
|
|
29
|
-
readonly pluginId: string;
|
|
30
|
-
readonly version?: string;
|
|
31
|
-
readonly description?: string;
|
|
32
|
-
};
|
|
20
|
+
metadata: import("../../types").PluginMetadata;
|
|
33
21
|
config: import("zod").infer<T["configSchema"]>;
|
|
34
22
|
context: any;
|
|
35
23
|
scope: Scope.CloseableScope;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.service.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/plugin.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAQ,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,KAAK,EACX,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAsC,MAAM,yBAAyB,CAAC
|
|
1
|
+
{"version":3,"file":"plugin.service.d.ts","sourceRoot":"","sources":["../../../src/runtime/services/plugin.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAQ,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,KAAK,EACX,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAsC,MAAM,yBAAyB,CAAC;;;;;;;;;;;;;;;;;;;;;iCAYtE,iBAAiB,CAAC,SAAS,CAAC;;;;AATxD,qBAAa,aAAc,SAAQ,kBAyBjC;IACD,MAAM,CAAC,IAAI,GAAI,UAAU,cAAc,EAAE,SAAS,aAAa,8CAmB9D;CACD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Layer } from "effect";
|
|
2
|
-
import type {
|
|
2
|
+
import type { LoadedPluginWithBinding } from "../../plugin";
|
|
3
3
|
import { ModuleFederationService } from "../../runtime/services/module-federation.service";
|
|
4
|
-
export type PluginMap = Record<string,
|
|
4
|
+
export type PluginMap = Record<string, LoadedPluginWithBinding<any, any, any, any>>;
|
|
5
5
|
export declare const createMockModuleFederationServiceLayer: (pluginMap: PluginMap) => Layer.Layer<ModuleFederationService, never, never>;
|
|
6
6
|
//# sourceMappingURL=module-federation.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-federation.service.d.ts","sourceRoot":"","sources":["../../../src/testing/mocks/module-federation.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"module-federation.service.d.ts","sourceRoot":"","sources":["../../../src/testing/mocks/module-federation.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAE3F,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAEpF,eAAO,MAAM,sCAAsC,GAAI,WAAW,SAAS,uDAoCxE,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { AnyContractRouter } from "@orpc/contract";
|
|
2
|
-
import type { Context, Router } from "@orpc/server";
|
|
2
|
+
import type { Context, Router, RouterClient } from "@orpc/server";
|
|
3
3
|
import type { Scope } from "effect";
|
|
4
4
|
import type { z } from "zod";
|
|
5
|
-
import type { Plugin, PluginConfigFor
|
|
5
|
+
import type { Plugin, PluginConfigFor } from "./plugin";
|
|
6
6
|
import type { PluginRuntime } from "./runtime";
|
|
7
|
-
export type AnyContract = Router<AnyContractRouter, any>;
|
|
8
7
|
/**
|
|
9
8
|
* Base type for any plugin instance.
|
|
10
9
|
* This is the foundation that enables type inference across the entire plugin system.
|
|
@@ -34,55 +33,20 @@ export type PluginOf<B> = B extends {
|
|
|
34
33
|
*/
|
|
35
34
|
export type ConfigOf<B> = z.infer<PluginOf<B>["configSchema"]>;
|
|
36
35
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
36
|
+
* The actual router type returned by plugins (with procedures implemented)
|
|
37
|
+
* Supports host context composition via THostContext type parameter
|
|
39
38
|
*/
|
|
40
|
-
export type
|
|
39
|
+
export type PluginRouter<T extends AnyPlugin, THostContext extends Context = Record<never, never>> = Router<T["contract"], ContextOf<T> & THostContext>;
|
|
41
40
|
/**
|
|
42
41
|
* Extracts the context type from a plugin.
|
|
43
42
|
* This is used for typing the router client context parameter.
|
|
44
43
|
*/
|
|
45
44
|
export type ContextOf<T extends AnyPlugin> = T extends Plugin<AnyContractRouter, z.ZodTypeAny, z.ZodTypeAny, infer TContext> ? TContext : never;
|
|
46
|
-
/**
|
|
47
|
-
* Infers binding definitions from plugin constructor objects.
|
|
48
|
-
* Used to derive RegistryBindings from a collection of plugin constructors.
|
|
49
|
-
*/
|
|
50
|
-
export type InferBindingsFromPlugins<T> = {
|
|
51
|
-
[K in keyof T]: T[K] extends PluginConstructorWithBinding<infer C, infer V, infer S, infer Ctx> ? {
|
|
52
|
-
contract: C;
|
|
53
|
-
config: PluginConfigFor<V, S>;
|
|
54
|
-
} : never;
|
|
55
|
-
};
|
|
56
|
-
/**
|
|
57
|
-
* Converts registry bindings to plugin constructor types.
|
|
58
|
-
* This is used internally by the runtime to maintain type safety.
|
|
59
|
-
*/
|
|
60
|
-
export type PluginBindingsFor<R extends RegistryBindings> = {
|
|
61
|
-
[K in keyof R]: R[K] extends {
|
|
62
|
-
contract: infer C;
|
|
63
|
-
config: infer Conf;
|
|
64
|
-
} ? Conf extends PluginConfigFor<infer V, infer S> ? C extends AnyContractRouter ? PluginConstructorWithBinding<C, V, S, Context> : never : never : never;
|
|
65
|
-
};
|
|
66
45
|
/**
|
|
67
46
|
* Runtime registry configuration.
|
|
68
47
|
* Maps plugin IDs to their remote URLs and metadata.
|
|
69
48
|
*/
|
|
70
|
-
export type PluginRegistry = Record<string,
|
|
71
|
-
remoteUrl: string;
|
|
72
|
-
version?: string;
|
|
73
|
-
description?: string;
|
|
74
|
-
}>;
|
|
75
|
-
/**
|
|
76
|
-
* Type-safe registry that enforces key alignment with bindings.
|
|
77
|
-
* When used with RegistryBindings, ensures plugin IDs match between registry and type definitions.
|
|
78
|
-
*/
|
|
79
|
-
export type PluginRegistryFor<R extends RegistryBindings> = {
|
|
80
|
-
[K in keyof R]: {
|
|
81
|
-
remoteUrl: string;
|
|
82
|
-
version?: string;
|
|
83
|
-
description?: string;
|
|
84
|
-
};
|
|
85
|
-
};
|
|
49
|
+
export type PluginRegistry = Record<string, PluginMetadata>;
|
|
86
50
|
/**
|
|
87
51
|
* Configuration for secrets injection.
|
|
88
52
|
* Secrets are hydrated into plugin configs using template replacement.
|
|
@@ -91,42 +55,35 @@ export interface SecretsConfig {
|
|
|
91
55
|
[key: string]: string;
|
|
92
56
|
}
|
|
93
57
|
/**
|
|
94
|
-
*
|
|
95
|
-
*
|
|
58
|
+
* Shared metadata for plugin lifecycle stages.
|
|
59
|
+
* Contains information about the plugin that persists across different stages.
|
|
60
|
+
*/
|
|
61
|
+
export type PluginMetadata = {
|
|
62
|
+
readonly remoteUrl: string;
|
|
63
|
+
readonly version?: string;
|
|
64
|
+
readonly description?: string;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Loaded plugin with metadata.
|
|
96
68
|
*/
|
|
97
|
-
export interface
|
|
69
|
+
export interface LoadedPlugin<T extends AnyPlugin = AnyPlugin> {
|
|
98
70
|
readonly ctor: new () => T;
|
|
99
|
-
readonly metadata:
|
|
100
|
-
readonly pluginId: string;
|
|
101
|
-
readonly version?: string;
|
|
102
|
-
readonly description?: string;
|
|
103
|
-
readonly type?: string;
|
|
104
|
-
};
|
|
71
|
+
readonly metadata: PluginMetadata;
|
|
105
72
|
}
|
|
106
73
|
/**
|
|
107
74
|
* Instantiated plugin with metadata.
|
|
108
|
-
* Represents a plugin instance ready for initialization.
|
|
109
75
|
*/
|
|
110
76
|
export interface PluginInstance<T extends AnyPlugin = AnyPlugin> {
|
|
111
77
|
readonly plugin: T;
|
|
112
|
-
readonly metadata:
|
|
113
|
-
readonly pluginId: string;
|
|
114
|
-
readonly version?: string;
|
|
115
|
-
readonly description?: string;
|
|
116
|
-
};
|
|
78
|
+
readonly metadata: PluginMetadata;
|
|
117
79
|
}
|
|
118
80
|
/**
|
|
119
81
|
* Fully initialized plugin ready for use.
|
|
120
82
|
* Contains the plugin instance, validated config, execution context, and scope.
|
|
121
|
-
* This is what gets passed to createPluginClient for type-safe procedure calls.
|
|
122
83
|
*/
|
|
123
84
|
export interface InitializedPlugin<T extends AnyPlugin = AnyPlugin> {
|
|
124
85
|
readonly plugin: T;
|
|
125
|
-
readonly metadata:
|
|
126
|
-
readonly pluginId: string;
|
|
127
|
-
readonly version?: string;
|
|
128
|
-
readonly description?: string;
|
|
129
|
-
};
|
|
86
|
+
readonly metadata: PluginMetadata;
|
|
130
87
|
readonly config: z.infer<T["configSchema"]>;
|
|
131
88
|
readonly context: ContextOf<T>;
|
|
132
89
|
readonly scope: Scope.CloseableScope;
|
|
@@ -150,15 +107,13 @@ export interface RuntimeOptions {
|
|
|
150
107
|
}
|
|
151
108
|
/**
|
|
152
109
|
* Enhanced plugin result containing client, router, and metadata.
|
|
110
|
+
* Router is typed as ContractRouter for encapsulation, but runtime compatible with oRPC routers.
|
|
111
|
+
* Supports host context composition through THostContext type parameter.
|
|
153
112
|
*/
|
|
154
|
-
export interface EveryPlugin<T extends AnyPlugin = AnyPlugin
|
|
155
|
-
readonly client:
|
|
156
|
-
readonly router:
|
|
157
|
-
readonly metadata:
|
|
158
|
-
readonly pluginId: string;
|
|
159
|
-
readonly version?: string;
|
|
160
|
-
readonly description?: string;
|
|
161
|
-
};
|
|
113
|
+
export interface EveryPlugin<T extends AnyPlugin = AnyPlugin, THostContext extends Context = Record<never, never>> {
|
|
114
|
+
readonly client: RouterClient<PluginRouter<T, THostContext>, THostContext>;
|
|
115
|
+
readonly router: PluginRouter<T, THostContext>;
|
|
116
|
+
readonly metadata: PluginMetadata;
|
|
162
117
|
readonly initialized: InitializedPlugin<T>;
|
|
163
118
|
}
|
|
164
119
|
/**
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|