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
@@ -0,0 +1,265 @@
1
+ import { r as __require } from "../../chunk-QQAxy9l9.mjs";
2
+ import { t as getNormalizedRemoteName } from "../../normalize-D7nae0Hn.mjs";
3
+ import { t as require_package } from "../../package-Ba1JsQFb.mjs";
4
+ import { rspack } from "@rspack/core";
5
+ import path from "node:path";
6
+ import fs from "node:fs";
7
+
8
+ //#region src/build/rspack/utils.ts
9
+ function getPluginInfo(context) {
10
+ const pkgPath = path.join(context, "package.json");
11
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
12
+ return {
13
+ name: pkg.name,
14
+ version: pkg.version,
15
+ normalizedName: getNormalizedRemoteName(pkg.name),
16
+ dependencies: pkg.dependencies || {},
17
+ peerDependencies: pkg.peerDependencies || {}
18
+ };
19
+ }
20
+ function loadDevConfig(devConfigPath) {
21
+ try {
22
+ const fullPath = path.resolve(devConfigPath);
23
+ delete __require.cache[fullPath];
24
+ return __require(fullPath).default;
25
+ } catch (error) {
26
+ console.warn(`Could not load dev config from ${devConfigPath}:`, error.message);
27
+ return null;
28
+ }
29
+ }
30
+
31
+ //#endregion
32
+ //#region src/build/rspack/module-federation.ts
33
+ function buildSharedDependencies(pluginInfo) {
34
+ const everyPluginPkg = require_package();
35
+ return {
36
+ "every-plugin": {
37
+ version: everyPluginPkg.version,
38
+ singleton: true,
39
+ requiredVersion: `${everyPluginPkg.version}`,
40
+ strictVersion: false,
41
+ eager: false
42
+ },
43
+ effect: {
44
+ version: everyPluginPkg.dependencies.effect,
45
+ singleton: true,
46
+ requiredVersion: `${everyPluginPkg.dependencies.effect}`,
47
+ strictVersion: false,
48
+ eager: false
49
+ },
50
+ zod: {
51
+ version: everyPluginPkg.dependencies.zod,
52
+ singleton: true,
53
+ requiredVersion: `${everyPluginPkg.dependencies.zod}`,
54
+ strictVersion: false,
55
+ eager: false
56
+ },
57
+ "@orpc/contract": {
58
+ version: everyPluginPkg.dependencies["@orpc/contract"],
59
+ singleton: true,
60
+ requiredVersion: `${everyPluginPkg.dependencies["@orpc/contract"]}`,
61
+ strictVersion: false,
62
+ eager: false
63
+ },
64
+ "@orpc/server": {
65
+ version: everyPluginPkg.dependencies["@orpc/server"],
66
+ singleton: true,
67
+ requiredVersion: `${everyPluginPkg.dependencies["@orpc/server"]}`,
68
+ strictVersion: false,
69
+ eager: false
70
+ }
71
+ };
72
+ }
73
+
74
+ //#endregion
75
+ //#region src/build/rspack/dev-server-middleware.ts
76
+ function setupPluginMiddleware(devServer, pluginInfo, devConfig, port) {
77
+ let handlers = {
78
+ rpc: null,
79
+ api: null
80
+ };
81
+ (async () => {
82
+ try {
83
+ const { createPluginRuntime } = await import("../../index.mjs");
84
+ const { RPCHandler } = await import("@orpc/server/fetch");
85
+ const { onError } = await import("@orpc/server");
86
+ const { OpenAPIHandler } = await import("../../fetch-KLktuWuM.mjs");
87
+ const { OpenAPIReferencePlugin } = await import("../../plugins-Ps5Xxpk2.mjs");
88
+ const { ZodToJsonSchemaConverter } = await import("../../zod4-VpXuwRO7.mjs");
89
+ const pluginId = devConfig?.pluginId || pluginInfo.normalizedName;
90
+ const loaded = await createPluginRuntime({ registry: { [pluginId]: { remoteUrl: `http://localhost:${port}/remoteEntry.js` } } }).usePlugin(pluginId, devConfig?.config);
91
+ handlers.rpc = new RPCHandler(loaded.router, { interceptors: [onError((error) => {
92
+ console.error("🔴 RPC Error:", error);
93
+ })] });
94
+ handlers.api = new OpenAPIHandler(loaded.router, {
95
+ plugins: [new OpenAPIReferencePlugin({ schemaConverters: [new ZodToJsonSchemaConverter()] })],
96
+ interceptors: [onError((error) => {
97
+ console.error("🔴 OpenAPI Error:", error);
98
+ })]
99
+ });
100
+ console.log(`╭─────────────────────────────────────────────`);
101
+ console.log(`│ ✅ Plugin dev server ready: `);
102
+ console.log(`├─────────────────────────────────────────────`);
103
+ console.log(`│ 📡 RPC: http://localhost:${port}/api/rpc`);
104
+ console.log(`│ 📖 Docs: http://localhost:${port}/api`);
105
+ console.log(`│ 💚 Health: http://localhost:${port}/`);
106
+ console.log(`╰─────────────────────────────────────────────`);
107
+ devServer.app.locals.handlers = handlers;
108
+ } catch (error) {
109
+ console.error("❌ Failed to load plugin:", error);
110
+ }
111
+ })();
112
+ devServer.app.get("/", (req, res) => {
113
+ res.json({
114
+ ok: true,
115
+ plugin: pluginInfo.normalizedName,
116
+ version: pluginInfo.version,
117
+ status: devServer.app.locals.handlers?.rpc ? "ready" : "loading",
118
+ endpoints: {
119
+ health: "/",
120
+ docs: "/api",
121
+ rpc: "/api/rpc"
122
+ }
123
+ });
124
+ });
125
+ const handleApiRequest = async (req, res) => {
126
+ const apiHandler = devServer.app.locals.handlers?.api;
127
+ if (!apiHandler) return res.status(503).json({ error: "Plugin still loading..." });
128
+ try {
129
+ const url = `http://${req.headers.host}${req.url}`;
130
+ const webRequest = new Request(url, {
131
+ method: req.method,
132
+ headers: req.headers,
133
+ body: req.method !== "GET" && req.method !== "HEAD" ? req : void 0
134
+ });
135
+ const result = await apiHandler.handle(webRequest, {
136
+ prefix: "/api",
137
+ context: {}
138
+ });
139
+ if (result.response) {
140
+ res.status(result.response.status);
141
+ result.response.headers.forEach((value, key) => {
142
+ res.setHeader(key, value);
143
+ });
144
+ const text = await result.response.text();
145
+ res.send(text);
146
+ } else res.status(404).send("Not Found");
147
+ } catch (error) {
148
+ console.error("OpenAPI error:", error);
149
+ res.status(500).json({ error: error.message });
150
+ }
151
+ };
152
+ devServer.app.all("/api", handleApiRequest);
153
+ devServer.app.all("/api/*", handleApiRequest);
154
+ devServer.app.all("/api/rpc/*", async (req, res) => {
155
+ const rpcHandler = devServer.app.locals.handlers?.rpc;
156
+ if (!rpcHandler) return res.status(503).json({ error: "Plugin still loading..." });
157
+ try {
158
+ const url = `http://${req.headers.host}${req.url}`;
159
+ const webRequest = new Request(url, {
160
+ method: req.method,
161
+ headers: req.headers,
162
+ body: req.method !== "GET" && req.method !== "HEAD" ? req : void 0
163
+ });
164
+ const result = await rpcHandler.handle(webRequest, {
165
+ prefix: "/api/rpc",
166
+ context: {}
167
+ });
168
+ if (result.response) {
169
+ res.status(result.response.status);
170
+ result.response.headers.forEach((value, key) => {
171
+ res.setHeader(key, value);
172
+ });
173
+ const text = await result.response.text();
174
+ res.send(text);
175
+ } else res.status(404).send("Not Found");
176
+ } catch (error) {
177
+ console.error("RPC error:", error);
178
+ res.status(500).json({ error: error.message });
179
+ }
180
+ });
181
+ }
182
+
183
+ //#endregion
184
+ //#region src/build/rspack/plugin.ts
185
+ var EveryPluginDevServer = class {
186
+ name = "EveryPluginDevServer";
187
+ constructor(options = {}) {
188
+ this.options = options;
189
+ }
190
+ apply(compiler) {
191
+ const pluginInfo = getPluginInfo(compiler.options.context || process.cwd());
192
+ const devConfig = loadDevConfig(this.options.devConfigPath || "./plugin.dev.ts");
193
+ const port = this.options.port || devConfig?.port || 3999;
194
+ this.configureDefaults(compiler, pluginInfo);
195
+ if (!compiler.options.devServer) compiler.options.devServer = {};
196
+ this.configureDevServer(compiler, pluginInfo, devConfig, port);
197
+ new rspack.container.ModuleFederationPlugin({
198
+ name: pluginInfo.normalizedName,
199
+ filename: "remoteEntry.js",
200
+ runtimePlugins: [__require.resolve("@module-federation/node/runtimePlugin")],
201
+ library: { type: "commonjs-module" },
202
+ exposes: { "./plugin": "./src/index.ts" },
203
+ shared: buildSharedDependencies(pluginInfo)
204
+ }).apply(compiler);
205
+ }
206
+ configureDefaults(compiler, pluginInfo) {
207
+ const context = compiler.options.context || process.cwd();
208
+ if (!compiler.options.output) compiler.options.output = {};
209
+ compiler.options.output.uniqueName = pluginInfo.normalizedName;
210
+ compiler.options.output.publicPath = "auto";
211
+ compiler.options.output.path = path.resolve(context, "dist");
212
+ compiler.options.output.clean = true;
213
+ compiler.options.output.library = { type: "commonjs-module" };
214
+ if (!compiler.options.entry) compiler.options.entry = { main: { import: ["./src/index"] } };
215
+ if (!compiler.options.target) compiler.options.target = "async-node";
216
+ if (!compiler.options.mode) compiler.options.mode = process.env.NODE_ENV === "development" ? "development" : "production";
217
+ if (!compiler.options.devtool) compiler.options.devtool = "source-map";
218
+ if (!compiler.options.infrastructureLogging) compiler.options.infrastructureLogging = { level: "warn" };
219
+ this.ensureTypeScriptLoader(compiler);
220
+ if (!compiler.options.resolve) compiler.options.resolve = {};
221
+ compiler.options.resolve.extensions = [
222
+ "...",
223
+ ".tsx",
224
+ ".ts"
225
+ ];
226
+ }
227
+ ensureTypeScriptLoader(compiler) {
228
+ if (!compiler.options.module) compiler.options.module = { rules: [] };
229
+ if (!compiler.options.module.rules) compiler.options.module.rules = [];
230
+ if (!compiler.options.module.rules.some((rule) => typeof rule === "object" && rule !== null && "test" in rule && rule.test instanceof RegExp && rule.test.test(".ts"))) compiler.options.module.rules.push({
231
+ test: /\.tsx?$/,
232
+ use: "builtin:swc-loader",
233
+ exclude: /node_modules/
234
+ });
235
+ }
236
+ configureDevServer(compiler, pluginInfo, devConfig, port) {
237
+ if (!compiler.options.devServer) return;
238
+ const context = compiler.options.context || process.cwd();
239
+ const originalSetup = compiler.options.devServer.setupMiddlewares;
240
+ compiler.options.devServer.port = port;
241
+ compiler.options.devServer.static = path.join(context, "dist");
242
+ compiler.options.devServer.hot = true;
243
+ compiler.options.devServer.devMiddleware = { writeToDisk: true };
244
+ compiler.options.devServer.headers = {
245
+ "Access-Control-Allow-Origin": "*",
246
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
247
+ "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
248
+ };
249
+ compiler.options.devServer.client = {
250
+ logging: "warn",
251
+ overlay: {
252
+ warnings: false,
253
+ errors: true
254
+ }
255
+ };
256
+ compiler.options.devServer.setupMiddlewares = (middlewares, devServer) => {
257
+ setupPluginMiddleware(devServer, pluginInfo, devConfig, port);
258
+ return originalSetup ? originalSetup(middlewares, devServer) : middlewares;
259
+ };
260
+ }
261
+ };
262
+
263
+ //#endregion
264
+ export { EveryPluginDevServer };
265
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwibmFtZXMiOlsiaGFuZGxlcnM6IHsgcnBjOiBhbnksIGFwaTogYW55IH0iLCJvcHRpb25zOiBFdmVyeVBsdWdpbk9wdGlvbnMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbGQvcnNwYWNrL3V0aWxzLnRzIiwiLi4vLi4vLi4vc3JjL2J1aWxkL3JzcGFjay9tb2R1bGUtZmVkZXJhdGlvbi50cyIsIi4uLy4uLy4uL3NyYy9idWlsZC9yc3BhY2svZGV2LXNlcnZlci1taWRkbGV3YXJlLnRzIiwiLi4vLi4vLi4vc3JjL2J1aWxkL3JzcGFjay9wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGdldE5vcm1hbGl6ZWRSZW1vdGVOYW1lIH0gZnJvbSAnZXZlcnktcGx1Z2luL25vcm1hbGl6ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luSW5mbyB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBub3JtYWxpemVkTmFtZTogc3RyaW5nO1xuICBkZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHBlZXJEZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbHVnaW5JbmZvKGNvbnRleHQ6IHN0cmluZyk6IFBsdWdpbkluZm8ge1xuICBjb25zdCBwa2dQYXRoID0gcGF0aC5qb2luKGNvbnRleHQsICdwYWNrYWdlLmpzb24nKTtcbiAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGtnUGF0aCwgJ3V0Zi04JykpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogcGtnLm5hbWUsXG4gICAgdmVyc2lvbjogcGtnLnZlcnNpb24sXG4gICAgbm9ybWFsaXplZE5hbWU6IGdldE5vcm1hbGl6ZWRSZW1vdGVOYW1lKHBrZy5uYW1lKSxcbiAgICBkZXBlbmRlbmNpZXM6IHBrZy5kZXBlbmRlbmNpZXMgfHwge30sXG4gICAgcGVlckRlcGVuZGVuY2llczogcGtnLnBlZXJEZXBlbmRlbmNpZXMgfHwge30sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRGV2Q29uZmlnKGRldkNvbmZpZ1BhdGg6IHN0cmluZykge1xuICB0cnkge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKGRldkNvbmZpZ1BhdGgpO1xuICAgIC8vIENsZWFyIHJlcXVpcmUgY2FjaGUgdG8gYWxsb3cgaG90IHJlbG9hZGluZ1xuICAgIGRlbGV0ZSByZXF1aXJlLmNhY2hlW2Z1bGxQYXRoXTtcbiAgICByZXR1cm4gcmVxdWlyZShmdWxsUGF0aCkuZGVmYXVsdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oYENvdWxkIG5vdCBsb2FkIGRldiBjb25maWcgZnJvbSAke2RldkNvbmZpZ1BhdGh9OmAsIChlcnJvciBhcyBFcnJvcikubWVzc2FnZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgUGx1Z2luSW5mbyB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTaGFyZWREZXBlbmRlbmNpZXMocGx1Z2luSW5mbzogUGx1Z2luSW5mbykge1xuICAvLyBHZXQgZXZlcnktcGx1Z2luIHBhY2thZ2UgaW5mbyBmb3IgdmVyc2lvbiBjb25zdHJhaW50c1xuICBjb25zdCBldmVyeVBsdWdpblBrZyA9IHJlcXVpcmUoJ2V2ZXJ5LXBsdWdpbi9wYWNrYWdlLmpzb24nKTtcblxuICByZXR1cm4ge1xuICAgICdldmVyeS1wbHVnaW4nOiB7XG4gICAgICB2ZXJzaW9uOiBldmVyeVBsdWdpblBrZy52ZXJzaW9uLFxuICAgICAgc2luZ2xldG9uOiB0cnVlLFxuICAgICAgcmVxdWlyZWRWZXJzaW9uOiBgJHtldmVyeVBsdWdpblBrZy52ZXJzaW9ufWAsXG4gICAgICBzdHJpY3RWZXJzaW9uOiBmYWxzZSxcbiAgICAgIGVhZ2VyOiBmYWxzZSxcbiAgICB9LFxuICAgIGVmZmVjdDoge1xuICAgICAgdmVyc2lvbjogZXZlcnlQbHVnaW5Qa2cuZGVwZW5kZW5jaWVzLmVmZmVjdCxcbiAgICAgIHNpbmdsZXRvbjogdHJ1ZSxcbiAgICAgIHJlcXVpcmVkVmVyc2lvbjogYCR7ZXZlcnlQbHVnaW5Qa2cuZGVwZW5kZW5jaWVzLmVmZmVjdH1gLFxuICAgICAgc3RyaWN0VmVyc2lvbjogZmFsc2UsXG4gICAgICBlYWdlcjogZmFsc2UsXG4gICAgfSxcbiAgICB6b2Q6IHtcbiAgICAgIHZlcnNpb246IGV2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llcy56b2QsXG4gICAgICBzaW5nbGV0b246IHRydWUsXG4gICAgICByZXF1aXJlZFZlcnNpb246IGAke2V2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llcy56b2R9YCxcbiAgICAgIHN0cmljdFZlcnNpb246IGZhbHNlLFxuICAgICAgZWFnZXI6IGZhbHNlLFxuICAgIH0sXG4gICAgJ0BvcnBjL2NvbnRyYWN0Jzoge1xuICAgICAgdmVyc2lvbjogZXZlcnlQbHVnaW5Qa2cuZGVwZW5kZW5jaWVzWydAb3JwYy9jb250cmFjdCddLFxuICAgICAgc2luZ2xldG9uOiB0cnVlLFxuICAgICAgcmVxdWlyZWRWZXJzaW9uOiBgJHtldmVyeVBsdWdpblBrZy5kZXBlbmRlbmNpZXNbJ0BvcnBjL2NvbnRyYWN0J119YCxcbiAgICAgIHN0cmljdFZlcnNpb246IGZhbHNlLFxuICAgICAgZWFnZXI6IGZhbHNlLFxuICAgIH0sXG4gICAgJ0BvcnBjL3NlcnZlcic6IHtcbiAgICAgIHZlcnNpb246IGV2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llc1snQG9ycGMvc2VydmVyJ10sXG4gICAgICBzaW5nbGV0b246IHRydWUsXG4gICAgICByZXF1aXJlZFZlcnNpb246IGAke2V2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llc1snQG9ycGMvc2VydmVyJ119YCxcbiAgICAgIHN0cmljdFZlcnNpb246IGZhbHNlLFxuICAgICAgZWFnZXI6IGZhbHNlLFxuICAgIH0sXG4gIH07XG59XG4iLCJpbXBvcnQgdHlwZSB7IFBsdWdpbkluZm8gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUGx1Z2luTWlkZGxld2FyZShkZXZTZXJ2ZXI6IGFueSwgcGx1Z2luSW5mbzogUGx1Z2luSW5mbywgZGV2Q29uZmlnOiBhbnksIHBvcnQ6IG51bWJlcikge1xuICBsZXQgaGFuZGxlcnM6IHsgcnBjOiBhbnksIGFwaTogYW55IH0gPSB7IHJwYzogbnVsbCwgYXBpOiBudWxsIH07XG5cbiAgKGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBjcmVhdGVQbHVnaW5SdW50aW1lIH0gPSBhd2FpdCBpbXBvcnQoJ2V2ZXJ5LXBsdWdpbicpO1xuICAgICAgY29uc3QgeyBSUENIYW5kbGVyIH0gPSBhd2FpdCBpbXBvcnQoJ0BvcnBjL3NlcnZlci9mZXRjaCcpO1xuICAgICAgY29uc3QgeyBvbkVycm9yIH0gPSBhd2FpdCBpbXBvcnQoJ0BvcnBjL3NlcnZlcicpO1xuICAgICAgY29uc3QgeyBPcGVuQVBJSGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCdAb3JwYy9vcGVuYXBpL2ZldGNoJyk7XG4gICAgICBjb25zdCB7IE9wZW5BUElSZWZlcmVuY2VQbHVnaW4gfSA9IGF3YWl0IGltcG9ydCgnQG9ycGMvb3BlbmFwaS9wbHVnaW5zJyk7XG4gICAgICBjb25zdCB7IFpvZFRvSnNvblNjaGVtYUNvbnZlcnRlciB9ID0gYXdhaXQgaW1wb3J0KCdAb3JwYy96b2Qvem9kNCcpO1xuXG4gICAgICBjb25zdCBwbHVnaW5JZCA9IGRldkNvbmZpZz8ucGx1Z2luSWQgfHwgcGx1Z2luSW5mby5ub3JtYWxpemVkTmFtZTtcblxuICAgICAgY29uc3QgcnVudGltZSA9IGNyZWF0ZVBsdWdpblJ1bnRpbWUoe1xuICAgICAgICByZWdpc3RyeToge1xuICAgICAgICAgIFtwbHVnaW5JZF06IHtcbiAgICAgICAgICAgIHJlbW90ZVVybDogYGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS9yZW1vdGVFbnRyeS5qc2BcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBsb2FkZWQgPSBhd2FpdCBydW50aW1lLnVzZVBsdWdpbihwbHVnaW5JZCwgZGV2Q29uZmlnPy5jb25maWcpO1xuXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vIHR5cGVcbiAgICAgIGhhbmRsZXJzLnJwYyA9IG5ldyBSUENIYW5kbGVyKGxvYWRlZC5yb3V0ZXIsIHtcbiAgICAgICAgaW50ZXJjZXB0b3JzOiBbXG4gICAgICAgICAgb25FcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcign8J+UtCBSUEMgRXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgIH0pLFxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgLy8gQ3JlYXRlIE9wZW5BUEkgaGFuZGxlciBmb3IgZG9jdW1lbnRhdGlvblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBubyB0eXBlXG4gICAgICBoYW5kbGVycy5hcGkgPSBuZXcgT3BlbkFQSUhhbmRsZXIobG9hZGVkLnJvdXRlciwge1xuICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgbmV3IE9wZW5BUElSZWZlcmVuY2VQbHVnaW4oe1xuICAgICAgICAgICAgc2NoZW1hQ29udmVydGVyczogW25ldyBab2RUb0pzb25TY2hlbWFDb252ZXJ0ZXIoKV0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIGludGVyY2VwdG9yczogW1xuICAgICAgICAgIG9uRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ/CflLQgT3BlbkFQSSBFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgfSksXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhg4pWt4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAYCk7XG4gICAgICBjb25zb2xlLmxvZyhg4pSCICDinIUgUGx1Z2luIGRldiBzZXJ2ZXIgcmVhZHk6IGApO1xuICAgICAgY29uc29sZS5sb2coYOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgGApO1xuICAgICAgY29uc29sZS5sb2coYOKUgiAg8J+ToSBSUEM6ICAgIGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS9hcGkvcnBjYCk7XG4gICAgICBjb25zb2xlLmxvZyhg4pSCICDwn5OWIERvY3M6ICAgaHR0cDovL2xvY2FsaG9zdDoke3BvcnR9L2FwaWApO1xuICAgICAgY29uc29sZS5sb2coYOKUgiAg8J+SmiBIZWFsdGg6IGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS9gKTtcbiAgICAgIGNvbnNvbGUubG9nKGDilbDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBgKTtcblxuICAgICAgLy8gU3RvcmUgaGFuZGxlcnMgZm9yIHJvdXRpbmdcbiAgICAgIGRldlNlcnZlci5hcHAubG9jYWxzLmhhbmRsZXJzID0gaGFuZGxlcnM7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBGYWlsZWQgdG8gbG9hZCBwbHVnaW46JywgZXJyb3IpO1xuICAgIH1cbiAgfSkoKTtcblxuICAvLyBSb290IGhlYWx0aCBjaGVja1xuICBkZXZTZXJ2ZXIuYXBwLmdldCgnLycsIChyZXE6IGFueSwgcmVzOiBhbnkpID0+IHtcbiAgICByZXMuanNvbih7XG4gICAgICBvazogdHJ1ZSxcbiAgICAgIHBsdWdpbjogcGx1Z2luSW5mby5ub3JtYWxpemVkTmFtZSxcbiAgICAgIHZlcnNpb246IHBsdWdpbkluZm8udmVyc2lvbixcbiAgICAgIHN0YXR1czogZGV2U2VydmVyLmFwcC5sb2NhbHMuaGFuZGxlcnM/LnJwYyA/ICdyZWFkeScgOiAnbG9hZGluZycsXG4gICAgICBlbmRwb2ludHM6IHtcbiAgICAgICAgaGVhbHRoOiAnLycsXG4gICAgICAgIGRvY3M6ICcvYXBpJyxcbiAgICAgICAgcnBjOiAnL2FwaS9ycGMnXG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIE9wZW5BUEkgZG9jdW1lbnRhdGlvbiBhbmQgUkVTVCBlbmRwb2ludHMgYXQgL2FwaSBhbmQgL2FwaS8qXG4gIGNvbnN0IGhhbmRsZUFwaVJlcXVlc3QgPSBhc3luYyAocmVxOiBhbnksIHJlczogYW55KSA9PiB7XG4gICAgY29uc3QgYXBpSGFuZGxlciA9IGRldlNlcnZlci5hcHAubG9jYWxzLmhhbmRsZXJzPy5hcGk7XG4gICAgaWYgKCFhcGlIYW5kbGVyKSB7XG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDMpLmpzb24oeyBlcnJvcjogJ1BsdWdpbiBzdGlsbCBsb2FkaW5nLi4uJyB9KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gYGh0dHA6Ly8ke3JlcS5oZWFkZXJzLmhvc3R9JHtyZXEudXJsfWA7XG4gICAgICBjb25zdCB3ZWJSZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICAgIGJvZHk6IHJlcS5tZXRob2QgIT09ICdHRVQnICYmIHJlcS5tZXRob2QgIT09ICdIRUFEJyA/IHJlcSA6IHVuZGVmaW5lZFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwaUhhbmRsZXIuaGFuZGxlKHdlYlJlcXVlc3QsIHtcbiAgICAgICAgcHJlZml4OiAnL2FwaScsXG4gICAgICAgIGNvbnRleHQ6IHt9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSkge1xuICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5yZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICByZXN1bHQucmVzcG9uc2UuaGVhZGVycy5mb3JFYWNoKCh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzdWx0LnJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgcmVzLnNlbmQodGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuc3RhdHVzKDQwNCkuc2VuZCgnTm90IEZvdW5kJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ09wZW5BUEkgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfTtcblxuICBkZXZTZXJ2ZXIuYXBwLmFsbCgnL2FwaScsIGhhbmRsZUFwaVJlcXVlc3QpO1xuICBkZXZTZXJ2ZXIuYXBwLmFsbCgnL2FwaS8qJywgaGFuZGxlQXBpUmVxdWVzdCk7XG5cbiAgLy8gUlBDIGNhbGxzIGF0IC9hcGkvcnBjLypcbiAgZGV2U2VydmVyLmFwcC5hbGwoJy9hcGkvcnBjLyonLCBhc3luYyAocmVxOiBhbnksIHJlczogYW55KSA9PiB7XG4gICAgY29uc3QgcnBjSGFuZGxlciA9IGRldlNlcnZlci5hcHAubG9jYWxzLmhhbmRsZXJzPy5ycGM7XG4gICAgaWYgKCFycGNIYW5kbGVyKSB7XG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDMpLmpzb24oeyBlcnJvcjogJ1BsdWdpbiBzdGlsbCBsb2FkaW5nLi4uJyB9KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gYGh0dHA6Ly8ke3JlcS5oZWFkZXJzLmhvc3R9JHtyZXEudXJsfWA7XG4gICAgICBjb25zdCB3ZWJSZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICAgIGJvZHk6IHJlcS5tZXRob2QgIT09ICdHRVQnICYmIHJlcS5tZXRob2QgIT09ICdIRUFEJyA/IHJlcSA6IHVuZGVmaW5lZFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJwY0hhbmRsZXIuaGFuZGxlKHdlYlJlcXVlc3QsIHtcbiAgICAgICAgcHJlZml4OiAnL2FwaS9ycGMnLFxuICAgICAgICBjb250ZXh0OiB7fVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXN1bHQucmVzcG9uc2UpIHtcbiAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQucmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgcmVzdWx0LnJlc3BvbnNlLmhlYWRlcnMuZm9yRWFjaCgodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICByZXMuc2V0SGVhZGVyKGtleSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3VsdC5yZXNwb25zZS50ZXh0KCk7XG4gICAgICAgIHJlcy5zZW5kKHRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpLnNlbmQoJ05vdCBGb3VuZCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdSUEMgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfSk7XG59XG4iLCJpbXBvcnQgdHlwZSB7IENvbXBpbGVyLCBSc3BhY2tQbHVnaW5JbnN0YW5jZSB9IGZyb20gJ0Byc3BhY2svY29yZSc7XG5pbXBvcnQgeyByc3BhY2sgfSBmcm9tICdAcnNwYWNrL2NvcmUnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGdldFBsdWdpbkluZm8gfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGxvYWREZXZDb25maWcgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGJ1aWxkU2hhcmVkRGVwZW5kZW5jaWVzIH0gZnJvbSAnLi9tb2R1bGUtZmVkZXJhdGlvbic7XG5pbXBvcnQgeyBzZXR1cFBsdWdpbk1pZGRsZXdhcmUgfSBmcm9tICcuL2Rldi1zZXJ2ZXItbWlkZGxld2FyZSc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBFdmVyeVBsdWdpbk9wdGlvbnMge1xuICBkZXZDb25maWdQYXRoPzogc3RyaW5nOyAgLy8gZGVmYXVsdHMgdG8gJy4vcGx1Z2luLmRldi50cydcbiAgcG9ydD86IG51bWJlcjsgICAgICAgICAgIC8vIG92ZXJyaWRlIHBsdWdpbi5kZXYudHMgcG9ydFxuICBwbHVnaW5JZD86IHN0cmluZzsgICAgICAgLy8gb3ZlcnJpZGUgYXV0by1kZXRlY3RlZFxufVxuXG5leHBvcnQgY2xhc3MgRXZlcnlQbHVnaW5EZXZTZXJ2ZXIgaW1wbGVtZW50cyBSc3BhY2tQbHVnaW5JbnN0YW5jZSB7XG4gIG5hbWUgPSAnRXZlcnlQbHVnaW5EZXZTZXJ2ZXInO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb3B0aW9uczogRXZlcnlQbHVnaW5PcHRpb25zID0ge30pIHt9XG5cbiAgYXBwbHkoY29tcGlsZXI6IENvbXBpbGVyKSB7XG4gICAgLy8gTG9hZCBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgcGx1Z2luSW5mbyA9IGdldFBsdWdpbkluZm8oY29tcGlsZXIub3B0aW9ucy5jb250ZXh0IHx8IHByb2Nlc3MuY3dkKCkpO1xuICAgIGNvbnN0IGRldkNvbmZpZyA9IGxvYWREZXZDb25maWcodGhpcy5vcHRpb25zLmRldkNvbmZpZ1BhdGggfHwgJy4vcGx1Z2luLmRldi50cycpO1xuICAgIGNvbnN0IHBvcnQgPSB0aGlzLm9wdGlvbnMucG9ydCB8fCBkZXZDb25maWc/LnBvcnQgfHwgMzk5OTtcblxuICAgIC8vIENvbmZpZ3VyZSBkZWZhdWx0cyBpbW1lZGlhdGVseSAobm8gaG9va3MgbmVlZGVkKVxuICAgIHRoaXMuY29uZmlndXJlRGVmYXVsdHMoY29tcGlsZXIsIHBsdWdpbkluZm8pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBkZXZTZXJ2ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgIGlmICghY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMuZGV2U2VydmVyID0ge307XG4gICAgfVxuXG4gICAgLy8gQ29uZmlndXJlIGRldiBzZXJ2ZXJcbiAgICB0aGlzLmNvbmZpZ3VyZURldlNlcnZlcihjb21waWxlciwgcGx1Z2luSW5mbywgZGV2Q29uZmlnLCBwb3J0KTtcblxuICAgIC8vIEFwcGx5IE1vZHVsZSBGZWRlcmF0aW9uIHBsdWdpblxuICAgIG5ldyByc3BhY2suY29udGFpbmVyLk1vZHVsZUZlZGVyYXRpb25QbHVnaW4oe1xuICAgICAgbmFtZTogcGx1Z2luSW5mby5ub3JtYWxpemVkTmFtZSxcbiAgICAgIGZpbGVuYW1lOiAncmVtb3RlRW50cnkuanMnLFxuICAgICAgcnVudGltZVBsdWdpbnM6IFtcbiAgICAgICAgcmVxdWlyZS5yZXNvbHZlKCdAbW9kdWxlLWZlZGVyYXRpb24vbm9kZS9ydW50aW1lUGx1Z2luJyksXG4gICAgICBdLFxuICAgICAgbGlicmFyeTogeyB0eXBlOiAnY29tbW9uanMtbW9kdWxlJyB9LFxuICAgICAgZXhwb3Nlczoge1xuICAgICAgICAnLi9wbHVnaW4nOiAnLi9zcmMvaW5kZXgudHMnLFxuICAgICAgfSxcbiAgICAgIHNoYXJlZDogYnVpbGRTaGFyZWREZXBlbmRlbmNpZXMocGx1Z2luSW5mbyksXG4gICAgfSkuYXBwbHkoY29tcGlsZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maWd1cmVEZWZhdWx0cyhjb21waWxlcjogQ29tcGlsZXIsIHBsdWdpbkluZm86IGFueSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBjb21waWxlci5vcHRpb25zLmNvbnRleHQgfHwgcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIENvbmZpZ3VyZSBvdXRwdXQgZGVmYXVsdHNcbiAgICBpZiAoIWNvbXBpbGVyLm9wdGlvbnMub3V0cHV0KSB7XG4gICAgICBjb21waWxlci5vcHRpb25zLm91dHB1dCA9IHt9O1xuICAgIH1cbiAgICBjb21waWxlci5vcHRpb25zLm91dHB1dC51bmlxdWVOYW1lID0gcGx1Z2luSW5mby5ub3JtYWxpemVkTmFtZTtcbiAgICBjb21waWxlci5vcHRpb25zLm91dHB1dC5wdWJsaWNQYXRoID0gJ2F1dG8nO1xuICAgIGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0LnBhdGggPSBwYXRoLnJlc29sdmUoY29udGV4dCwgJ2Rpc3QnKTtcbiAgICBjb21waWxlci5vcHRpb25zLm91dHB1dC5jbGVhbiA9IHRydWU7XG4gICAgY29tcGlsZXIub3B0aW9ucy5vdXRwdXQubGlicmFyeSA9IHsgdHlwZTogJ2NvbW1vbmpzLW1vZHVsZScgfTtcblxuICAgIC8vIENvbmZpZ3VyZSBlbnRyeSBpZiBub3Qgc2V0XG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLmVudHJ5KSB7XG4gICAgICBjb21waWxlci5vcHRpb25zLmVudHJ5ID0ge1xuICAgICAgICBtYWluOiB7XG4gICAgICAgICAgaW1wb3J0OiBbJy4vc3JjL2luZGV4J11cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBDb25maWd1cmUgdGFyZ2V0IGFuZCBtb2RlIGRlZmF1bHRzXG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLnRhcmdldCkge1xuICAgICAgY29tcGlsZXIub3B0aW9ucy50YXJnZXQgPSAnYXN5bmMtbm9kZSc7XG4gICAgfVxuXG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLm1vZGUpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMubW9kZSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnID8gJ2RldmVsb3BtZW50JyA6ICdwcm9kdWN0aW9uJztcbiAgICB9XG5cbiAgICAvLyBDb25maWd1cmUgZGV2dG9vbFxuICAgIGlmICghY29tcGlsZXIub3B0aW9ucy5kZXZ0b29sKSB7XG4gICAgICBjb21waWxlci5vcHRpb25zLmRldnRvb2wgPSAnc291cmNlLW1hcCc7XG4gICAgfVxuXG4gICAgLy8gU3VwcHJlc3MgdmVyYm9zZSBpbmZyYXN0cnVjdHVyZSBsb2dnaW5nXG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLmluZnJhc3RydWN0dXJlTG9nZ2luZykge1xuICAgICAgY29tcGlsZXIub3B0aW9ucy5pbmZyYXN0cnVjdHVyZUxvZ2dpbmcgPSB7XG4gICAgICAgIGxldmVsOiAnd2FybicsICAvLyBPbmx5IHNob3cgd2FybmluZ3MgYW5kIGVycm9yc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBDb25maWd1cmUgbW9kdWxlIHJ1bGVzIC0gZW5zdXJlIFR5cGVTY3JpcHQgbG9hZGVyIGlzIHByZXNlbnRcbiAgICB0aGlzLmVuc3VyZVR5cGVTY3JpcHRMb2FkZXIoY29tcGlsZXIpO1xuXG4gICAgLy8gQ29uZmlndXJlIHJlc29sdmUgZXh0ZW5zaW9uc1xuICAgIGlmICghY29tcGlsZXIub3B0aW9ucy5yZXNvbHZlKSB7XG4gICAgICBjb21waWxlci5vcHRpb25zLnJlc29sdmUgPSB7fTtcbiAgICB9XG4gICAgY29tcGlsZXIub3B0aW9ucy5yZXNvbHZlLmV4dGVuc2lvbnMgPSBbJy4uLicsICcudHN4JywgJy50cyddO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVUeXBlU2NyaXB0TG9hZGVyKGNvbXBpbGVyOiBDb21waWxlcikge1xuICAgIGlmICghY29tcGlsZXIub3B0aW9ucy5tb2R1bGUpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMubW9kdWxlID0geyBydWxlczogW10gfSBhcyBhbnk7XG4gICAgfVxuXG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLm1vZHVsZS5ydWxlcykge1xuICAgICAgY29tcGlsZXIub3B0aW9ucy5tb2R1bGUucnVsZXMgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBUeXBlU2NyaXB0IGxvYWRlciBpcyBhbHJlYWR5IGNvbmZpZ3VyZWRcbiAgICBjb25zdCBoYXNUc0xvYWRlciA9IGNvbXBpbGVyLm9wdGlvbnMubW9kdWxlLnJ1bGVzLnNvbWUoKHJ1bGU6IGFueSkgPT5cbiAgICAgIHR5cGVvZiBydWxlID09PSAnb2JqZWN0JyAmJlxuICAgICAgcnVsZSAhPT0gbnVsbCAmJlxuICAgICAgJ3Rlc3QnIGluIHJ1bGUgJiZcbiAgICAgIHJ1bGUudGVzdCBpbnN0YW5jZW9mIFJlZ0V4cCAmJlxuICAgICAgcnVsZS50ZXN0LnRlc3QoJy50cycpXG4gICAgKTtcblxuICAgIC8vIEFkZCBUeXBlU2NyaXB0IGxvYWRlciBpZiBub3QgcHJlc2VudFxuICAgIGlmICghaGFzVHNMb2FkZXIpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMubW9kdWxlLnJ1bGVzLnB1c2goe1xuICAgICAgICB0ZXN0OiAvXFwudHN4PyQvLFxuICAgICAgICB1c2U6ICdidWlsdGluOnN3Yy1sb2FkZXInLFxuICAgICAgICBleGNsdWRlOiAvbm9kZV9tb2R1bGVzLyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uZmlndXJlRGV2U2VydmVyKGNvbXBpbGVyOiBDb21waWxlciwgcGx1Z2luSW5mbzogYW55LCBkZXZDb25maWc6IGFueSwgcG9ydDogbnVtYmVyKSB7XG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLmRldlNlcnZlcikge1xuICAgICAgcmV0dXJuOyAvLyBTaG91bGQgbmV2ZXIgaGFwcGVuIGR1ZSB0byBjaGVjayBpbiBhcHBseSgpXG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dCA9IGNvbXBpbGVyLm9wdGlvbnMuY29udGV4dCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IG9yaWdpbmFsU2V0dXAgPSBjb21waWxlci5vcHRpb25zLmRldlNlcnZlci5zZXR1cE1pZGRsZXdhcmVzO1xuXG4gICAgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIucG9ydCA9IHBvcnQ7XG4gICAgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIuc3RhdGljID0gcGF0aC5qb2luKGNvbnRleHQsICdkaXN0Jyk7XG4gICAgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIuaG90ID0gdHJ1ZTtcbiAgICBjb21waWxlci5vcHRpb25zLmRldlNlcnZlci5kZXZNaWRkbGV3YXJlID0geyB3cml0ZVRvRGlzazogdHJ1ZSB9O1xuICAgIGNvbXBpbGVyLm9wdGlvbnMuZGV2U2VydmVyLmhlYWRlcnMgPSB7XG4gICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonLFxuICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnOiAnR0VULCBQT1NULCBQVVQsIERFTEVURSwgUEFUQ0gsIE9QVElPTlMnLFxuICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnOiAnWC1SZXF1ZXN0ZWQtV2l0aCwgY29udGVudC10eXBlLCBBdXRob3JpemF0aW9uJyxcbiAgICB9O1xuXG4gICAgLy8gU3VwcHJlc3MgdmVyYm9zZSBsb2dnaW5nXG4gICAgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIuY2xpZW50ID0ge1xuICAgICAgbG9nZ2luZzogJ3dhcm4nLCAgLy8gT25seSBzaG93IHdhcm5pbmdzIGFuZCBlcnJvcnNcbiAgICAgIG92ZXJsYXk6IHtcbiAgICAgICAgd2FybmluZ3M6IGZhbHNlLCAgLy8gRG9uJ3Qgc2hvdyB3YXJuaW5nIG92ZXJsYXlcbiAgICAgICAgZXJyb3JzOiB0cnVlLCAgICAgLy8gU3RpbGwgc2hvdyBlcnJvcnNcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbXBpbGVyLm9wdGlvbnMuZGV2U2VydmVyLnNldHVwTWlkZGxld2FyZXMgPSAobWlkZGxld2FyZXMsIGRldlNlcnZlcikgPT4ge1xuICAgICAgc2V0dXBQbHVnaW5NaWRkbGV3YXJlKGRldlNlcnZlciwgcGx1Z2luSW5mbywgZGV2Q29uZmlnLCBwb3J0KTtcbiAgICAgIHJldHVybiBvcmlnaW5hbFNldHVwID8gb3JpZ2luYWxTZXR1cChtaWRkbGV3YXJlcywgZGV2U2VydmVyKSA6IG1pZGRsZXdhcmVzO1xuICAgIH07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFZQSxTQUFnQixjQUFjLFNBQTZCO0NBQ3pELE1BQU0sVUFBVSxLQUFLLEtBQUssU0FBUyxlQUFlO0NBQ2xELE1BQU0sTUFBTSxLQUFLLE1BQU0sR0FBRyxhQUFhLFNBQVMsUUFBUSxDQUFDO0FBRXpELFFBQU87RUFDTCxNQUFNLElBQUk7RUFDVixTQUFTLElBQUk7RUFDYixnQkFBZ0Isd0JBQXdCLElBQUksS0FBSztFQUNqRCxjQUFjLElBQUksZ0JBQWdCLEVBQUU7RUFDcEMsa0JBQWtCLElBQUksb0JBQW9CLEVBQUU7RUFDN0M7O0FBR0gsU0FBZ0IsY0FBYyxlQUF1QjtBQUNuRCxLQUFJO0VBQ0YsTUFBTSxXQUFXLEtBQUssUUFBUSxjQUFjO0FBRTVDLG1CQUFlLE1BQU07QUFDckIsbUJBQWUsU0FBUyxDQUFDO1VBQ2xCLE9BQU87QUFDZCxVQUFRLEtBQUssa0NBQWtDLGNBQWMsSUFBSyxNQUFnQixRQUFRO0FBQzFGLFNBQU87Ozs7OztBQy9CWCxTQUFnQix3QkFBd0IsWUFBd0I7Q0FF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
@@ -0,0 +1,31 @@
1
+ import { createRequire } from "node:module";
2
+
3
+ //#region rolldown:runtime
4
+ var __create = Object.create;
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __commonJS = (cb, mod) => function() {
11
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
15
+ key = keys[i];
16
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
17
+ get: ((k) => from[k]).bind(null, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
21
+ return to;
22
+ };
23
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
25
+ value: mod,
26
+ enumerable: true
27
+ }) : target, mod));
28
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
29
+
30
+ //#endregion
31
+ export { __toESM as i, __reExport as n, __require as r, __commonJS as t };
@@ -0,0 +1,46 @@
1
+ //#region rolldown:runtime
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __commonJS = (cb, mod) => function() {
9
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
13
+ key = keys[i];
14
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
15
+ get: ((k) => from[k]).bind(null, key),
16
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
17
+ });
18
+ }
19
+ return to;
20
+ };
21
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
25
+ }) : target, mod));
26
+
27
+ //#endregion
28
+
29
+ Object.defineProperty(exports, '__commonJS', {
30
+ enumerable: true,
31
+ get: function () {
32
+ return __commonJS;
33
+ }
34
+ });
35
+ Object.defineProperty(exports, '__reExport', {
36
+ enumerable: true,
37
+ get: function () {
38
+ return __reExport;
39
+ }
40
+ });
41
+ Object.defineProperty(exports, '__toESM', {
42
+ enumerable: true,
43
+ get: function () {
44
+ return __toESM;
45
+ }
46
+ });
@@ -0,0 +1,9 @@
1
+
2
+
3
+ var effect = require("effect");
4
+ Object.keys(effect).forEach(function (k) {
5
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
6
+ enumerable: true,
7
+ get: function () { return effect[k]; }
8
+ });
9
+ });
@@ -0,0 +1 @@
1
+ export * from "effect";
@@ -0,0 +1 @@
1
+ export * from "effect";
@@ -0,0 +1,3 @@
1
+ export * from "effect"
2
+
3
+ export { };
@@ -0,0 +1,68 @@
1
+ const require_zod = require('./zod-DYghWCz1.cjs');
2
+
3
+ //#region src/errors.ts
4
+ /**
5
+ * Common error schemas for plugin contracts.
6
+ * Import these to ensure consistent error handling across plugins.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { CommonPluginErrors } from "every-plugin/errors";
11
+ *
12
+ * export const contract = oc.router({
13
+ * getData: oc.route(...)
14
+ * .errors(CommonPluginErrors)
15
+ * });
16
+ * ```
17
+ */
18
+ const CommonPluginErrors = {
19
+ UNAUTHORIZED: { data: require_zod.zod_exports.z.object({
20
+ apiKeyProvided: require_zod.zod_exports.z.boolean(),
21
+ provider: require_zod.zod_exports.z.string().optional(),
22
+ authType: require_zod.zod_exports.z.enum([
23
+ "apiKey",
24
+ "oauth",
25
+ "token"
26
+ ]).optional()
27
+ }) },
28
+ RATE_LIMITED: { data: require_zod.zod_exports.z.object({
29
+ retryAfter: require_zod.zod_exports.z.number().int().min(1),
30
+ remainingRequests: require_zod.zod_exports.z.number().int().min(0).optional(),
31
+ resetTime: require_zod.zod_exports.z.string().datetime().optional(),
32
+ limitType: require_zod.zod_exports.z.enum([
33
+ "requests",
34
+ "tokens",
35
+ "bandwidth"
36
+ ]).optional()
37
+ }) },
38
+ SERVICE_UNAVAILABLE: { data: require_zod.zod_exports.z.object({
39
+ retryAfter: require_zod.zod_exports.z.number().int().optional(),
40
+ maintenanceWindow: require_zod.zod_exports.z.boolean().default(false),
41
+ estimatedUptime: require_zod.zod_exports.z.string().datetime().optional()
42
+ }) },
43
+ BAD_REQUEST: { data: require_zod.zod_exports.z.object({
44
+ invalidFields: require_zod.zod_exports.z.array(require_zod.zod_exports.z.string()).optional(),
45
+ validationErrors: require_zod.zod_exports.z.array(require_zod.zod_exports.z.object({
46
+ field: require_zod.zod_exports.z.string(),
47
+ message: require_zod.zod_exports.z.string(),
48
+ code: require_zod.zod_exports.z.string().optional()
49
+ })).optional()
50
+ }) },
51
+ NOT_FOUND: { data: require_zod.zod_exports.z.object({
52
+ resource: require_zod.zod_exports.z.string().optional(),
53
+ resourceId: require_zod.zod_exports.z.string().optional()
54
+ }) },
55
+ FORBIDDEN: { data: require_zod.zod_exports.z.object({
56
+ requiredPermissions: require_zod.zod_exports.z.array(require_zod.zod_exports.z.string()).optional(),
57
+ action: require_zod.zod_exports.z.string().optional()
58
+ }) }
59
+ };
60
+
61
+ //#endregion
62
+ Object.defineProperty(exports, 'CommonPluginErrors', {
63
+ enumerable: true,
64
+ get: function () {
65
+ return CommonPluginErrors;
66
+ }
67
+ });
68
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLUNWbm9QbDl2LmNqcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi9zcmMvZXJyb3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiLi96b2RcIjtcblxuLyoqXG4gKiBDb21tb24gZXJyb3Igc2NoZW1hcyBmb3IgcGx1Z2luIGNvbnRyYWN0cy5cbiAqIEltcG9ydCB0aGVzZSB0byBlbnN1cmUgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZyBhY3Jvc3MgcGx1Z2lucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQ29tbW9uUGx1Z2luRXJyb3JzIH0gZnJvbSBcImV2ZXJ5LXBsdWdpbi9lcnJvcnNcIjtcbiAqXG4gKiBleHBvcnQgY29uc3QgY29udHJhY3QgPSBvYy5yb3V0ZXIoe1xuICogICBnZXREYXRhOiBvYy5yb3V0ZSguLi4pXG4gKiAgICAgLmVycm9ycyhDb21tb25QbHVnaW5FcnJvcnMpXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgQ29tbW9uUGx1Z2luRXJyb3JzID0ge1xuXHRVTkFVVEhPUklaRUQ6IHtcblx0XHRkYXRhOiB6Lm9iamVjdCh7XG5cdFx0XHRhcGlLZXlQcm92aWRlZDogei5ib29sZWFuKCksXG5cdFx0XHRwcm92aWRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuXHRcdFx0YXV0aFR5cGU6IHouZW51bShbJ2FwaUtleScsICdvYXV0aCcsICd0b2tlbiddKS5vcHRpb25hbCgpLFxuXHRcdH0pXG5cdH0sXG5cdFJBVEVfTElNSVRFRDoge1xuXHRcdGRhdGE6IHoub2JqZWN0KHtcblx0XHRcdHJldHJ5QWZ0ZXI6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuXHRcdFx0cmVtYWluaW5nUmVxdWVzdHM6IHoubnVtYmVyKCkuaW50KCkubWluKDApLm9wdGlvbmFsKCksXG5cdFx0XHRyZXNldFRpbWU6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5vcHRpb25hbCgpLFxuXHRcdFx0bGltaXRUeXBlOiB6LmVudW0oWydyZXF1ZXN0cycsICd0b2tlbnMnLCAnYmFuZHdpZHRoJ10pLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fSxcblx0U0VSVklDRV9VTkFWQUlMQUJMRToge1xuXHRcdGRhdGE6IHoub2JqZWN0KHtcblx0XHRcdHJldHJ5QWZ0ZXI6IHoubnVtYmVyKCkuaW50KCkub3B0aW9uYWwoKSxcblx0XHRcdG1haW50ZW5hbmNlV2luZG93OiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcblx0XHRcdGVzdGltYXRlZFVwdGltZTogei5zdHJpbmcoKS5kYXRldGltZSgpLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fSxcblx0QkFEX1JFUVVFU1Q6IHtcblx0XHRkYXRhOiB6Lm9iamVjdCh7XG5cdFx0XHRpbnZhbGlkRmllbGRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG5cdFx0XHR2YWxpZGF0aW9uRXJyb3JzOiB6LmFycmF5KHoub2JqZWN0KHtcblx0XHRcdFx0ZmllbGQ6IHouc3RyaW5nKCksXG5cdFx0XHRcdG1lc3NhZ2U6IHouc3RyaW5nKCksXG5cdFx0XHRcdGNvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblx0XHRcdH0pKS5vcHRpb25hbCgpLFxuXHRcdH0pXG5cdH0sXG5cdE5PVF9GT1VORDoge1xuXHRcdGRhdGE6IHoub2JqZWN0KHtcblx0XHRcdHJlc291cmNlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cdFx0XHRyZXNvdXJjZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fSxcblx0Rk9SQklEREVOOiB7XG5cdFx0ZGF0YTogei5vYmplY3Qoe1xuXHRcdFx0cmVxdWlyZWRQZXJtaXNzaW9uczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuXHRcdFx0YWN0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fVxufSBhcyBjb25zdDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsTUFBYSxxQkFBcUI7Q0FDakMsY0FBYyxFQUNiLDhCQUFNLEVBQUUsT0FBTztFQUNkLHdDQUFnQixFQUFFLFNBQVM7RUFDM0Isa0NBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtFQUMvQixrQ0FBVSxFQUFFLEtBQUs7R0FBQztHQUFVO0dBQVM7R0FBUSxDQUFDLENBQUMsVUFBVTtFQUN6RCxDQUFDLEVBQ0Y7Q0FDRCxjQUFjLEVBQ2IsOEJBQU0sRUFBRSxPQUFPO0VBQ2Qsb0NBQVksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtFQUNuQywyQ0FBbUIsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVU7RUFDckQsbUNBQVcsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVU7RUFDM0MsbUNBQVcsRUFBRSxLQUFLO0dBQUM7R0FBWTtHQUFVO0dBQVksQ0FBQyxDQUFDLFVBQVU7RUFDakUsQ0FBQyxFQUNGO0NBQ0QscUJBQXFCLEVBQ3BCLDhCQUFNLEVBQUUsT0FBTztFQUNkLG9DQUFZLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVO0VBQ3ZDLDJDQUFtQixFQUFFLFNBQVMsQ0FBQyxRQUFRLE1BQU07RUFDN0MseUNBQWlCLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVO0VBQ2pELENBQUMsRUFDRjtDQUNELGFBQWEsRUFDWiw4QkFBTSxFQUFFLE9BQU87RUFDZCx1Q0FBZSxFQUFFLDhCQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsVUFBVTtFQUM3QywwQ0FBa0IsRUFBRSw4QkFBTSxFQUFFLE9BQU87R0FDbEMsK0JBQU8sRUFBRSxRQUFRO0dBQ2pCLGlDQUFTLEVBQUUsUUFBUTtHQUNuQiw4QkFBTSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0dBQzNCLENBQUMsQ0FBQyxDQUFDLFVBQVU7RUFDZCxDQUFDLEVBQ0Y7Q0FDRCxXQUFXLEVBQ1YsOEJBQU0sRUFBRSxPQUFPO0VBQ2Qsa0NBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtFQUMvQixvQ0FBWSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0VBQ2pDLENBQUMsRUFDRjtDQUNELFdBQVcsRUFDViw4QkFBTSxFQUFFLE9BQU87RUFDZCw2Q0FBcUIsRUFBRSw4QkFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFVBQVU7RUFDbkQsZ0NBQVEsRUFBRSxRQUFRLENBQUMsVUFBVTtFQUM3QixDQUFDLEVBQ0Y7Q0FDRCJ9
@@ -0,0 +1,75 @@
1
+ import { t as zod_d_exports } from "./zod-D4CFw8d9.mjs";
2
+
3
+ //#region src/errors.d.ts
4
+
5
+ /**
6
+ * Common error schemas for plugin contracts.
7
+ * Import these to ensure consistent error handling across plugins.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { CommonPluginErrors } from "every-plugin/errors";
12
+ *
13
+ * export const contract = oc.router({
14
+ * getData: oc.route(...)
15
+ * .errors(CommonPluginErrors)
16
+ * });
17
+ * ```
18
+ */
19
+ declare const CommonPluginErrors: {
20
+ readonly UNAUTHORIZED: {
21
+ readonly data: zod_d_exports.z.ZodObject<{
22
+ apiKeyProvided: zod_d_exports.z.ZodBoolean;
23
+ provider: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
24
+ authType: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodEnum<{
25
+ apiKey: "apiKey";
26
+ oauth: "oauth";
27
+ token: "token";
28
+ }>>;
29
+ }, zod_d_exports.z.core.$strip>;
30
+ };
31
+ readonly RATE_LIMITED: {
32
+ readonly data: zod_d_exports.z.ZodObject<{
33
+ retryAfter: zod_d_exports.z.ZodNumber;
34
+ remainingRequests: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodNumber>;
35
+ resetTime: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
36
+ limitType: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodEnum<{
37
+ requests: "requests";
38
+ tokens: "tokens";
39
+ bandwidth: "bandwidth";
40
+ }>>;
41
+ }, zod_d_exports.z.core.$strip>;
42
+ };
43
+ readonly SERVICE_UNAVAILABLE: {
44
+ readonly data: zod_d_exports.z.ZodObject<{
45
+ retryAfter: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodNumber>;
46
+ maintenanceWindow: zod_d_exports.z.ZodDefault<zod_d_exports.z.ZodBoolean>;
47
+ estimatedUptime: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
48
+ }, zod_d_exports.z.core.$strip>;
49
+ };
50
+ readonly BAD_REQUEST: {
51
+ readonly data: zod_d_exports.z.ZodObject<{
52
+ invalidFields: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodArray<zod_d_exports.z.ZodString>>;
53
+ validationErrors: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodArray<zod_d_exports.z.ZodObject<{
54
+ field: zod_d_exports.z.ZodString;
55
+ message: zod_d_exports.z.ZodString;
56
+ code: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
57
+ }, zod_d_exports.z.core.$strip>>>;
58
+ }, zod_d_exports.z.core.$strip>;
59
+ };
60
+ readonly NOT_FOUND: {
61
+ readonly data: zod_d_exports.z.ZodObject<{
62
+ resource: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
63
+ resourceId: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
64
+ }, zod_d_exports.z.core.$strip>;
65
+ };
66
+ readonly FORBIDDEN: {
67
+ readonly data: zod_d_exports.z.ZodObject<{
68
+ requiredPermissions: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodArray<zod_d_exports.z.ZodString>>;
69
+ action: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
70
+ }, zod_d_exports.z.core.$strip>;
71
+ };
72
+ };
73
+ //#endregion
74
+ export { CommonPluginErrors as t };
75
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLUNhcjR0RlZQLmQubXRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9lcnJvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBZ0JBOzs7Ozs7Ozs7Ozs7Y0FBYSJ9
@@ -0,0 +1,63 @@
1
+ import { t as zod_exports } from "./zod-BVo51kgJ.mjs";
2
+
3
+ //#region src/errors.ts
4
+ /**
5
+ * Common error schemas for plugin contracts.
6
+ * Import these to ensure consistent error handling across plugins.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { CommonPluginErrors } from "every-plugin/errors";
11
+ *
12
+ * export const contract = oc.router({
13
+ * getData: oc.route(...)
14
+ * .errors(CommonPluginErrors)
15
+ * });
16
+ * ```
17
+ */
18
+ const CommonPluginErrors = {
19
+ UNAUTHORIZED: { data: zod_exports.z.object({
20
+ apiKeyProvided: zod_exports.z.boolean(),
21
+ provider: zod_exports.z.string().optional(),
22
+ authType: zod_exports.z.enum([
23
+ "apiKey",
24
+ "oauth",
25
+ "token"
26
+ ]).optional()
27
+ }) },
28
+ RATE_LIMITED: { data: zod_exports.z.object({
29
+ retryAfter: zod_exports.z.number().int().min(1),
30
+ remainingRequests: zod_exports.z.number().int().min(0).optional(),
31
+ resetTime: zod_exports.z.string().datetime().optional(),
32
+ limitType: zod_exports.z.enum([
33
+ "requests",
34
+ "tokens",
35
+ "bandwidth"
36
+ ]).optional()
37
+ }) },
38
+ SERVICE_UNAVAILABLE: { data: zod_exports.z.object({
39
+ retryAfter: zod_exports.z.number().int().optional(),
40
+ maintenanceWindow: zod_exports.z.boolean().default(false),
41
+ estimatedUptime: zod_exports.z.string().datetime().optional()
42
+ }) },
43
+ BAD_REQUEST: { data: zod_exports.z.object({
44
+ invalidFields: zod_exports.z.array(zod_exports.z.string()).optional(),
45
+ validationErrors: zod_exports.z.array(zod_exports.z.object({
46
+ field: zod_exports.z.string(),
47
+ message: zod_exports.z.string(),
48
+ code: zod_exports.z.string().optional()
49
+ })).optional()
50
+ }) },
51
+ NOT_FOUND: { data: zod_exports.z.object({
52
+ resource: zod_exports.z.string().optional(),
53
+ resourceId: zod_exports.z.string().optional()
54
+ }) },
55
+ FORBIDDEN: { data: zod_exports.z.object({
56
+ requiredPermissions: zod_exports.z.array(zod_exports.z.string()).optional(),
57
+ action: zod_exports.z.string().optional()
58
+ }) }
59
+ };
60
+
61
+ //#endregion
62
+ export { CommonPluginErrors as t };
63
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLUQ3a2VLZjdhLm1qcyIsIm5hbWVzIjpbInoiXSwic291cmNlcyI6WyIuLi9zcmMvZXJyb3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiLi96b2RcIjtcblxuLyoqXG4gKiBDb21tb24gZXJyb3Igc2NoZW1hcyBmb3IgcGx1Z2luIGNvbnRyYWN0cy5cbiAqIEltcG9ydCB0aGVzZSB0byBlbnN1cmUgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZyBhY3Jvc3MgcGx1Z2lucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQ29tbW9uUGx1Z2luRXJyb3JzIH0gZnJvbSBcImV2ZXJ5LXBsdWdpbi9lcnJvcnNcIjtcbiAqXG4gKiBleHBvcnQgY29uc3QgY29udHJhY3QgPSBvYy5yb3V0ZXIoe1xuICogICBnZXREYXRhOiBvYy5yb3V0ZSguLi4pXG4gKiAgICAgLmVycm9ycyhDb21tb25QbHVnaW5FcnJvcnMpXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgQ29tbW9uUGx1Z2luRXJyb3JzID0ge1xuXHRVTkFVVEhPUklaRUQ6IHtcblx0XHRkYXRhOiB6Lm9iamVjdCh7XG5cdFx0XHRhcGlLZXlQcm92aWRlZDogei5ib29sZWFuKCksXG5cdFx0XHRwcm92aWRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuXHRcdFx0YXV0aFR5cGU6IHouZW51bShbJ2FwaUtleScsICdvYXV0aCcsICd0b2tlbiddKS5vcHRpb25hbCgpLFxuXHRcdH0pXG5cdH0sXG5cdFJBVEVfTElNSVRFRDoge1xuXHRcdGRhdGE6IHoub2JqZWN0KHtcblx0XHRcdHJldHJ5QWZ0ZXI6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuXHRcdFx0cmVtYWluaW5nUmVxdWVzdHM6IHoubnVtYmVyKCkuaW50KCkubWluKDApLm9wdGlvbmFsKCksXG5cdFx0XHRyZXNldFRpbWU6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5vcHRpb25hbCgpLFxuXHRcdFx0bGltaXRUeXBlOiB6LmVudW0oWydyZXF1ZXN0cycsICd0b2tlbnMnLCAnYmFuZHdpZHRoJ10pLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fSxcblx0U0VSVklDRV9VTkFWQUlMQUJMRToge1xuXHRcdGRhdGE6IHoub2JqZWN0KHtcblx0XHRcdHJldHJ5QWZ0ZXI6IHoubnVtYmVyKCkuaW50KCkub3B0aW9uYWwoKSxcblx0XHRcdG1haW50ZW5hbmNlV2luZG93OiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcblx0XHRcdGVzdGltYXRlZFVwdGltZTogei5zdHJpbmcoKS5kYXRldGltZSgpLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fSxcblx0QkFEX1JFUVVFU1Q6IHtcblx0XHRkYXRhOiB6Lm9iamVjdCh7XG5cdFx0XHRpbnZhbGlkRmllbGRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG5cdFx0XHR2YWxpZGF0aW9uRXJyb3JzOiB6LmFycmF5KHoub2JqZWN0KHtcblx0XHRcdFx0ZmllbGQ6IHouc3RyaW5nKCksXG5cdFx0XHRcdG1lc3NhZ2U6IHouc3RyaW5nKCksXG5cdFx0XHRcdGNvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblx0XHRcdH0pKS5vcHRpb25hbCgpLFxuXHRcdH0pXG5cdH0sXG5cdE5PVF9GT1VORDoge1xuXHRcdGRhdGE6IHoub2JqZWN0KHtcblx0XHRcdHJlc291cmNlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cdFx0XHRyZXNvdXJjZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fSxcblx0Rk9SQklEREVOOiB7XG5cdFx0ZGF0YTogei5vYmplY3Qoe1xuXHRcdFx0cmVxdWlyZWRQZXJtaXNzaW9uczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuXHRcdFx0YWN0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fVxufSBhcyBjb25zdDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsTUFBYSxxQkFBcUI7Q0FDakMsY0FBYyxFQUNiLE1BQU1BLGNBQUUsT0FBTztFQUNkLGdCQUFnQkEsY0FBRSxTQUFTO0VBQzNCLFVBQVVBLGNBQUUsUUFBUSxDQUFDLFVBQVU7RUFDL0IsVUFBVUEsY0FBRSxLQUFLO0dBQUM7R0FBVTtHQUFTO0dBQVEsQ0FBQyxDQUFDLFVBQVU7RUFDekQsQ0FBQyxFQUNGO0NBQ0QsY0FBYyxFQUNiLE1BQU1BLGNBQUUsT0FBTztFQUNkLFlBQVlBLGNBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7RUFDbkMsbUJBQW1CQSxjQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVTtFQUNyRCxXQUFXQSxjQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVTtFQUMzQyxXQUFXQSxjQUFFLEtBQUs7R0FBQztHQUFZO0dBQVU7R0FBWSxDQUFDLENBQUMsVUFBVTtFQUNqRSxDQUFDLEVBQ0Y7Q0FDRCxxQkFBcUIsRUFDcEIsTUFBTUEsY0FBRSxPQUFPO0VBQ2QsWUFBWUEsY0FBRSxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVU7RUFDdkMsbUJBQW1CQSxjQUFFLFNBQVMsQ0FBQyxRQUFRLE1BQU07RUFDN0MsaUJBQWlCQSxjQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVTtFQUNqRCxDQUFDLEVBQ0Y7Q0FDRCxhQUFhLEVBQ1osTUFBTUEsY0FBRSxPQUFPO0VBQ2QsZUFBZUEsY0FBRSxNQUFNQSxjQUFFLFFBQVEsQ0FBQyxDQUFDLFVBQVU7RUFDN0Msa0JBQWtCQSxjQUFFLE1BQU1BLGNBQUUsT0FBTztHQUNsQyxPQUFPQSxjQUFFLFFBQVE7R0FDakIsU0FBU0EsY0FBRSxRQUFRO0dBQ25CLE1BQU1BLGNBQUUsUUFBUSxDQUFDLFVBQVU7R0FDM0IsQ0FBQyxDQUFDLENBQUMsVUFBVTtFQUNkLENBQUMsRUFDRjtDQUNELFdBQVcsRUFDVixNQUFNQSxjQUFFLE9BQU87RUFDZCxVQUFVQSxjQUFFLFFBQVEsQ0FBQyxVQUFVO0VBQy9CLFlBQVlBLGNBQUUsUUFBUSxDQUFDLFVBQVU7RUFDakMsQ0FBQyxFQUNGO0NBQ0QsV0FBVyxFQUNWLE1BQU1BLGNBQUUsT0FBTztFQUNkLHFCQUFxQkEsY0FBRSxNQUFNQSxjQUFFLFFBQVEsQ0FBQyxDQUFDLFVBQVU7RUFDbkQsUUFBUUEsY0FBRSxRQUFRLENBQUMsVUFBVTtFQUM3QixDQUFDLEVBQ0Y7Q0FDRCJ9