@powerhousedao/switchboard 6.0.2-staging.2 → 6.0.2-staging.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/Auth.md +45 -27
  2. package/CHANGELOG.md +1417 -101
  3. package/README.md +13 -12
  4. package/dist/index.d.mts +1 -0
  5. package/dist/index.mjs +129 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/dist/install-packages.d.mts +1 -0
  8. package/dist/install-packages.mjs +31 -0
  9. package/dist/install-packages.mjs.map +1 -0
  10. package/dist/migrate.d.mts +1 -0
  11. package/dist/migrate.mjs +55 -0
  12. package/dist/migrate.mjs.map +1 -0
  13. package/dist/server-BMtyzhoR.mjs +291 -0
  14. package/dist/server-BMtyzhoR.mjs.map +1 -0
  15. package/dist/server.d.mts +93 -0
  16. package/dist/server.d.mts.map +1 -0
  17. package/dist/server.mjs +4 -0
  18. package/dist/utils-DFl0ezBT.mjs +44 -0
  19. package/dist/utils-DFl0ezBT.mjs.map +1 -0
  20. package/dist/utils.d.mts +9 -0
  21. package/dist/utils.d.mts.map +1 -0
  22. package/dist/utils.mjs +2 -0
  23. package/package.json +33 -27
  24. package/tsconfig.json +6 -3
  25. package/tsdown.config.ts +16 -0
  26. package/vitest.config.ts +2 -6
  27. package/Dockerfile +0 -86
  28. package/dist/src/clients/redis.d.ts +0 -5
  29. package/dist/src/clients/redis.d.ts.map +0 -1
  30. package/dist/src/clients/redis.js +0 -48
  31. package/dist/src/clients/redis.js.map +0 -1
  32. package/dist/src/config.d.ts +0 -12
  33. package/dist/src/config.d.ts.map +0 -1
  34. package/dist/src/config.js +0 -33
  35. package/dist/src/config.js.map +0 -1
  36. package/dist/src/feature-flags.d.ts +0 -2
  37. package/dist/src/feature-flags.d.ts.map +0 -1
  38. package/dist/src/feature-flags.js +0 -9
  39. package/dist/src/feature-flags.js.map +0 -1
  40. package/dist/src/index.d.ts +0 -3
  41. package/dist/src/index.d.ts.map +0 -1
  42. package/dist/src/index.js +0 -49
  43. package/dist/src/index.js.map +0 -1
  44. package/dist/src/install-packages.d.ts +0 -2
  45. package/dist/src/install-packages.d.ts.map +0 -1
  46. package/dist/src/install-packages.js +0 -36
  47. package/dist/src/install-packages.js.map +0 -1
  48. package/dist/src/metrics.d.ts +0 -7
  49. package/dist/src/metrics.d.ts.map +0 -1
  50. package/dist/src/metrics.js +0 -34
  51. package/dist/src/metrics.js.map +0 -1
  52. package/dist/src/migrate.d.ts +0 -3
  53. package/dist/src/migrate.d.ts.map +0 -1
  54. package/dist/src/migrate.js +0 -65
  55. package/dist/src/migrate.js.map +0 -1
  56. package/dist/src/profiler.d.ts +0 -9
  57. package/dist/src/profiler.d.ts.map +0 -1
  58. package/dist/src/profiler.js +0 -43
  59. package/dist/src/profiler.js.map +0 -1
  60. package/dist/src/renown.d.ts +0 -24
  61. package/dist/src/renown.d.ts.map +0 -1
  62. package/dist/src/renown.js +0 -45
  63. package/dist/src/renown.js.map +0 -1
  64. package/dist/src/server.d.ts +0 -5
  65. package/dist/src/server.d.ts.map +0 -1
  66. package/dist/src/server.js +0 -282
  67. package/dist/src/server.js.map +0 -1
  68. package/dist/src/types.d.ts +0 -66
  69. package/dist/src/types.d.ts.map +0 -1
  70. package/dist/src/types.js +0 -2
  71. package/dist/src/types.js.map +0 -1
  72. package/dist/src/utils.d.ts +0 -5
  73. package/dist/src/utils.d.ts.map +0 -1
  74. package/dist/src/utils.js +0 -62
  75. package/dist/src/utils.js.map +0 -1
  76. package/dist/test/metrics.test.d.ts +0 -2
  77. package/dist/test/metrics.test.d.ts.map +0 -1
  78. package/dist/test/metrics.test.js +0 -121
  79. package/dist/test/metrics.test.js.map +0 -1
  80. package/dist/tsconfig.tsbuildinfo +0 -1
  81. package/dist/vitest.config.d.ts +0 -3
  82. package/dist/vitest.config.d.ts.map +0 -1
  83. package/dist/vitest.config.js +0 -15
  84. package/dist/vitest.config.js.map +0 -1
  85. package/entrypoint.sh +0 -17
@@ -1,282 +0,0 @@
1
- #!/usr/bin/env node
2
- import { httpsHooksPath } from "@powerhousedao/reactor-api";
3
- import { register } from "node:module";
4
- // Register HTTP/HTTPS module loader hooks for dynamic package imports
5
- register(httpsHooksPath, import.meta.url);
6
- import { PGlite } from "@electric-sql/pglite";
7
- import { metrics } from "@opentelemetry/api";
8
- import { ReactorInstrumentation } from "@powerhousedao/opentelemetry-instrumentation-reactor";
9
- import { ChannelScheme, EventBus, ReactorBuilder, ReactorClientBuilder, driveCollectionId, parseDriveUrl, } from "@powerhousedao/reactor";
10
- import { HttpPackageLoader, PackageManagementService, PackagesSubgraph, VitePackageLoader, createViteLogger, getUniqueDocumentModels, initializeAndStartAPI, startViteServer, } from "@powerhousedao/reactor-api";
11
- import * as Sentry from "@sentry/node";
12
- import { childLogger, driveDocumentModelModule } from "document-drive";
13
- import { documentModelDocumentModelModule } from "document-model";
14
- import dotenv from "dotenv";
15
- import express from "express";
16
- import { Kysely, PostgresDialect } from "kysely";
17
- import { PGliteDialect } from "kysely-pglite-dialect";
18
- import path from "path";
19
- import { Pool } from "pg";
20
- import { initRedis } from "./clients/redis.js";
21
- import { initFeatureFlags } from "./feature-flags.js";
22
- import { getRenownSignerConfig, initRenown } from "./renown.js";
23
- import { addDefaultDrive, isPostgresUrl } from "./utils.js";
24
- const defaultLogger = childLogger(["switchboard"]);
25
- dotenv.config();
26
- // Feature flag constants
27
- const DOCUMENT_MODEL_SUBGRAPHS_ENABLED = "DOCUMENT_MODEL_SUBGRAPHS_ENABLED";
28
- const DOCUMENT_MODEL_SUBGRAPHS_ENABLED_DEFAULT = true;
29
- const REQUIRE_SIGNATURES = "REQUIRE_SIGNATURES";
30
- const REQUIRE_SIGNATURES_DEFAULT = false;
31
- // Create a monolith express app for all subgraphs
32
- const app = express();
33
- if (process.env.SENTRY_DSN) {
34
- defaultLogger.info("Initialized Sentry with env: @env", process.env.SENTRY_ENV);
35
- Sentry.init({
36
- dsn: process.env.SENTRY_DSN,
37
- environment: process.env.SENTRY_ENV,
38
- });
39
- Sentry.setupExpressErrorHandler(app);
40
- }
41
- const DEFAULT_PORT = process.env.PORT ? Number(process.env.PORT) : 4001;
42
- async function initServer(serverPort, options, renown) {
43
- // Register the global MeterProvider before ReactorInstrumentation is
44
- // constructed. setGlobalMeterProvider is a one-way door — once set it cannot
45
- // be unset — so this must happen before initializeClient calls
46
- // instrumentation.start() → createMetrics() → metrics.getMeter().
47
- if (options.meterProvider) {
48
- metrics.setGlobalMeterProvider(options.meterProvider);
49
- }
50
- const { dev, packages = [], remoteDrives = [], logger = defaultLogger, } = options;
51
- const dbPath = options.dbPath ?? process.env.DATABASE_URL;
52
- // start redis if configured
53
- const redisUrl = process.env.REDIS_TLS_URL ?? process.env.REDIS_URL;
54
- let redis;
55
- if (redisUrl) {
56
- try {
57
- redis = await initRedis(redisUrl);
58
- }
59
- catch (e) {
60
- logger.error("@error", e);
61
- }
62
- }
63
- // if dbPath is not configured, or it was a postgres url but the connection failed,
64
- // use default path for read model storage
65
- const readModelPath = !dbPath || isPostgresUrl(dbPath) ? ".ph/read-storage" : dbPath;
66
- // HTTP registry package loading
67
- let httpDocumentModels = [];
68
- const registryUrl = process.env.PH_REGISTRY_URL;
69
- const registryPackages = process.env.PH_REGISTRY_PACKAGES;
70
- let httpLoader;
71
- if (registryUrl) {
72
- httpLoader = new HttpPackageLoader({ registryUrl });
73
- }
74
- if (httpLoader && registryPackages) {
75
- const packageNames = registryPackages.split(",").map((p) => p.trim());
76
- httpDocumentModels = await httpLoader.loadPackages(packageNames, logger);
77
- logger.info(`Loaded ${httpDocumentModels.length} HTTP document models from ${packageNames.length} packages`);
78
- }
79
- const reactorLogger = logger.child(["reactor"]);
80
- const initializeClient = async (documentModels) => {
81
- const eventBus = new EventBus();
82
- const builder = new ReactorBuilder()
83
- .withEventBus(eventBus)
84
- .withDocumentModels(getUniqueDocumentModels([
85
- documentModelDocumentModelModule,
86
- driveDocumentModelModule,
87
- ...documentModels,
88
- ...httpDocumentModels,
89
- ]))
90
- .withChannelScheme(ChannelScheme.SWITCHBOARD)
91
- .withSignalHandlers()
92
- .withLogger(reactorLogger);
93
- const maxSkipThreshold = parseInt(process.env.MAX_SKIP_THRESHOLD ?? "", 10);
94
- if (!isNaN(maxSkipThreshold) && maxSkipThreshold > 0) {
95
- builder.withExecutorConfig({ maxSkipThreshold });
96
- logger.info(`Reactor maxSkipThreshold set to ${maxSkipThreshold}`);
97
- }
98
- const reactorDbUrl = process.env.PH_REACTOR_DATABASE_URL;
99
- if (reactorDbUrl && isPostgresUrl(reactorDbUrl)) {
100
- const connectionString = reactorDbUrl.includes("?")
101
- ? reactorDbUrl
102
- : `${reactorDbUrl}?sslmode=disable`;
103
- const pool = new Pool({ connectionString });
104
- const kysely = new Kysely({
105
- dialect: new PostgresDialect({ pool }),
106
- });
107
- builder.withKysely(kysely);
108
- logger.info("Using PostgreSQL for reactor storage");
109
- }
110
- else {
111
- const pglitePath = "./.ph/reactor-storage";
112
- const pglite = new PGlite(pglitePath);
113
- const kysely = new Kysely({
114
- dialect: new PGliteDialect(pglite),
115
- });
116
- builder.withKysely(kysely);
117
- logger.info("Using PGlite for reactor storage");
118
- }
119
- if (httpLoader) {
120
- builder.withDocumentModelLoader(httpLoader);
121
- }
122
- const clientBuilder = new ReactorClientBuilder().withReactorBuilder(builder);
123
- if (renown) {
124
- const signerConfig = getRenownSignerConfig(renown, options.identity?.requireSignatures);
125
- clientBuilder.withSigner(signerConfig);
126
- }
127
- const module = await clientBuilder.buildModule();
128
- if (module.reactorModule) {
129
- const instrumentation = new ReactorInstrumentation(module.reactorModule);
130
- instrumentation.start();
131
- reactorLogger.info("Reactor metrics instrumentation started");
132
- }
133
- return module;
134
- };
135
- let defaultDriveUrl = undefined;
136
- // TODO get path from powerhouse config
137
- // start vite server if dev mode is enabled
138
- const basePath = process.cwd();
139
- const viteLogger = createViteLogger(logger);
140
- const vite = dev
141
- ? await startViteServer(process.cwd(), viteLogger)
142
- : undefined;
143
- // get paths to local document models
144
- if (!options.disableLocalPackages) {
145
- packages.push(basePath);
146
- }
147
- // create loader
148
- const packageLoader = vite ? VitePackageLoader.build(vite) : undefined;
149
- const apiLogger = logger.child(["reactor-api"]);
150
- const api = await initializeAndStartAPI(initializeClient, {
151
- express: app,
152
- port: serverPort,
153
- dbPath: readModelPath,
154
- https: options.https,
155
- packageLoader,
156
- packages: packages,
157
- processorConfig: options.processorConfig,
158
- configFile: options.configFile ??
159
- path.join(process.cwd(), "powerhouse.config.json"),
160
- mcp: options.mcp ?? true,
161
- logger: apiLogger,
162
- enableDocumentModelSubgraphs: options.enableDocumentModelSubgraphs,
163
- }, "switchboard");
164
- const { client, graphqlManager, documentModelRegistry } = api;
165
- // Wire up dynamic package management if HTTP loader is configured
166
- if (httpLoader) {
167
- const packageManagementService = new PackageManagementService({
168
- defaultRegistryUrl: registryUrl,
169
- httpLoader,
170
- documentModelRegistry,
171
- });
172
- packageManagementService.setOnModelsChanged(async () => {
173
- await graphqlManager.regenerateDocumentModelSubgraphs();
174
- });
175
- const packagesSubgraph = new PackagesSubgraph({
176
- relationalDb: undefined,
177
- analyticsStore: undefined,
178
- reactorClient: client,
179
- graphqlManager,
180
- syncManager: api.syncManager,
181
- path: graphqlManager.getBasePath(),
182
- packageManagementService,
183
- });
184
- void graphqlManager
185
- .registerSubgraphInstance(packagesSubgraph, "graphql", false)
186
- .then(() => graphqlManager.updateRouter())
187
- .catch((error) => {
188
- logger.error("Failed to register packages subgraph: @error", error);
189
- });
190
- }
191
- // Create default drive if provided
192
- if (options.drive) {
193
- if (!renown) {
194
- throw new Error("Cannot create default drive without Renown identity");
195
- }
196
- defaultDriveUrl = await addDefaultDrive(client, options.drive, serverPort);
197
- }
198
- // add vite middleware after express app is initialized if applicable
199
- if (vite) {
200
- api.app.use(vite.middlewares);
201
- }
202
- // Connect to remote drives AFTER packages are loaded
203
- if (remoteDrives.length > 0) {
204
- for (const remoteDriveUrl of remoteDrives) {
205
- let driveId;
206
- try {
207
- const { syncManager } = api;
208
- const parsed = parseDriveUrl(remoteDriveUrl);
209
- driveId = parsed.driveId;
210
- const remoteName = `remote-drive-${driveId}-${crypto.randomUUID()}`;
211
- await syncManager.add(remoteName, driveCollectionId("main", driveId), {
212
- type: "gql",
213
- parameters: { url: parsed.graphqlEndpoint },
214
- });
215
- logger.debug("Remote drive @remoteDriveUrl synced", remoteDriveUrl);
216
- }
217
- catch (error) {
218
- if (error instanceof Error &&
219
- error.message.includes("already exists")) {
220
- logger.debug("Remote drive already added: @remoteDriveUrl", remoteDriveUrl);
221
- driveId = remoteDriveUrl.split("/").pop();
222
- }
223
- else {
224
- logger.error("Failed to connect to remote drive @remoteDriveUrl: @error", remoteDriveUrl, error);
225
- }
226
- }
227
- finally {
228
- // Construct local URL once in finally block
229
- if (!defaultDriveUrl && driveId) {
230
- const protocol = options.https ? "https" : "http";
231
- defaultDriveUrl = `${protocol}://localhost:${serverPort}/d/${driveId}`;
232
- }
233
- }
234
- }
235
- }
236
- return {
237
- defaultDriveUrl,
238
- api,
239
- reactor: client,
240
- renown,
241
- };
242
- }
243
- export const startSwitchboard = async (options = {}) => {
244
- const serverPort = options.port ?? DEFAULT_PORT;
245
- // Initialize feature flags
246
- const featureFlags = await initFeatureFlags();
247
- const enableDocumentModelSubgraphs = await featureFlags.getBooleanValue(DOCUMENT_MODEL_SUBGRAPHS_ENABLED, options.enableDocumentModelSubgraphs ??
248
- DOCUMENT_MODEL_SUBGRAPHS_ENABLED_DEFAULT);
249
- options.enableDocumentModelSubgraphs = enableDocumentModelSubgraphs;
250
- const requireSignatures = options.identity?.requireSignatures ??
251
- (await featureFlags.getBooleanValue(REQUIRE_SIGNATURES, REQUIRE_SIGNATURES_DEFAULT));
252
- options.identity = { ...options.identity, requireSignatures };
253
- const logger = options.logger ?? defaultLogger;
254
- logger.info("Feature flags: @flags", JSON.stringify({
255
- DOCUMENT_MODEL_SUBGRAPHS_ENABLED: enableDocumentModelSubgraphs,
256
- REQUIRE_SIGNATURES: requireSignatures,
257
- }, null, 2));
258
- // Initialize Renown if identity options are provided or keypair exists
259
- let renown = null;
260
- try {
261
- renown = await initRenown(options.identity);
262
- }
263
- catch (e) {
264
- logger.warn("Failed to initialize ConnectCrypto: @error", e);
265
- if (options.identity?.requireExisting) {
266
- throw new Error('Identity required but failed to initialize. Run "ph login" first.');
267
- }
268
- }
269
- try {
270
- return await initServer(serverPort, options, renown);
271
- }
272
- catch (e) {
273
- Sentry.captureException(e);
274
- logger.error("App crashed: @error", e);
275
- throw e;
276
- }
277
- };
278
- export * from "./types.js";
279
- if (import.meta.main) {
280
- await startSwitchboard();
281
- }
282
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
@@ -1,66 +0,0 @@
1
- import type { MeterProvider } from "@opentelemetry/api";
2
- import type { IReactorClient } from "@powerhousedao/reactor";
3
- import type { IRenown } from "@renown/sdk";
4
- import type { DriveInput, ILogger } from "document-drive";
5
- export type StorageOptions = {
6
- type: "filesystem" | "memory" | "postgres" | "browser";
7
- filesystemPath?: string;
8
- postgresUrl?: string;
9
- };
10
- export type IdentityOptions = {
11
- /** Path to the keypair file. Defaults to ~/.ph/keypair.json */
12
- keypairPath?: string;
13
- /**
14
- * If true, won't start without an existing keypair.
15
- * Use this to ensure the switchboard only runs with an authenticated identity.
16
- */
17
- requireExisting?: boolean;
18
- /** Base url of the Renown instance to use */
19
- baseUrl?: string;
20
- /** If true, unsigned actions will be rejected */
21
- requireSignatures?: boolean;
22
- };
23
- export type StartServerOptions = {
24
- configFile?: string;
25
- port?: number;
26
- dev?: boolean;
27
- dbPath?: string;
28
- drive?: DriveInput;
29
- packages?: string[];
30
- remoteDrives?: string[];
31
- https?: {
32
- keyPath: string;
33
- certPath: string;
34
- } | boolean | undefined;
35
- auth?: {
36
- enabled: boolean;
37
- guests: string[];
38
- users: string[];
39
- admins: string[];
40
- };
41
- /**
42
- * Identity options for Renown.
43
- * When configured, the switchboard will load the keypair from `ph login`
44
- * and can authenticate with remote services on behalf of the user.
45
- */
46
- identity?: IdentityOptions;
47
- mcp?: boolean;
48
- processorConfig?: Map<string, unknown>;
49
- disableLocalPackages?: boolean;
50
- enableDocumentModelSubgraphs?: boolean;
51
- logger?: ILogger;
52
- /**
53
- * OpenTelemetry MeterProvider to register as the global provider before
54
- * ReactorInstrumentation starts. Must be provided here rather than set
55
- * externally to guarantee the registration happens before
56
- * instrumentation.start() reads the global provider via metrics.getMeter().
57
- */
58
- meterProvider?: MeterProvider;
59
- };
60
- export type SwitchboardReactor = {
61
- defaultDriveUrl: string | undefined;
62
- reactor: IReactorClient;
63
- /** The Renown instance if identity was initialized */
64
- renown: IRenown | null;
65
- };
66
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,CAAC,EACF;QACE,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,GACD,OAAO,GACP,SAAS,CAAC;IACd,IAAI,CAAC,EAAE;QACL,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,OAAO,EAAE,cAAc,CAAC;IACxB,sDAAsD;IACtD,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACxB,CAAC"}
package/dist/src/types.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -1,5 +0,0 @@
1
- import type { IReactorClient } from "@powerhousedao/reactor";
2
- import type { DriveInput } from "document-drive";
3
- export declare function addDefaultDrive(client: IReactorClient, drive: DriveInput, serverPort: number): Promise<string>;
4
- export declare function isPostgresUrl(url: string): boolean;
5
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,mBA8DnB;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,WAExC"}
package/dist/src/utils.js DELETED
@@ -1,62 +0,0 @@
1
- import { driveCreateDocument, driveCreateState } from "document-drive";
2
- export async function addDefaultDrive(client, drive, serverPort) {
3
- let driveId = drive.id;
4
- if (!driveId || driveId.length === 0) {
5
- driveId = drive.slug;
6
- }
7
- if (!driveId || driveId.length === 0) {
8
- throw new Error("Invalid Drive Id");
9
- }
10
- // check if the drive already exists
11
- let existingDrive;
12
- try {
13
- existingDrive = await client.get(driveId);
14
- }
15
- catch {
16
- //
17
- }
18
- // already exists, return the existing drive url
19
- if (existingDrive) {
20
- return `http://localhost:${serverPort}/d/${driveId}`;
21
- }
22
- const { global } = driveCreateState();
23
- const document = driveCreateDocument({
24
- global: {
25
- ...global,
26
- name: drive.global.name,
27
- icon: drive.global.icon ?? global.icon,
28
- },
29
- local: {
30
- availableOffline: drive.local?.availableOffline ?? false,
31
- sharingType: drive.local?.sharingType ?? "public",
32
- listeners: drive.local?.listeners ?? [],
33
- triggers: drive.local?.triggers ?? [],
34
- },
35
- });
36
- if (drive.id && drive.id.length > 0) {
37
- document.header.id = drive.id;
38
- }
39
- if (drive.slug && drive.slug.length > 0) {
40
- document.header.slug = drive.slug;
41
- }
42
- if (drive.global.name) {
43
- document.header.name = drive.global.name;
44
- }
45
- if (drive.preferredEditor) {
46
- document.header.meta = { preferredEditor: drive.preferredEditor };
47
- }
48
- try {
49
- await client.create(document);
50
- }
51
- catch (e) {
52
- const errorMessage = e instanceof Error ? e.message : String(e);
53
- if (!errorMessage.includes("already exists")) {
54
- throw e;
55
- }
56
- }
57
- return `http://localhost:${serverPort}/d/${driveId}`;
58
- }
59
- export function isPostgresUrl(url) {
60
- return url.startsWith("postgresql") || url.startsWith("postgres");
61
- }
62
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=metrics.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metrics.test.d.ts","sourceRoot":"","sources":["../../test/metrics.test.ts"],"names":[],"mappings":""}
@@ -1,121 +0,0 @@
1
- import { MeterProvider } from "@opentelemetry/sdk-metrics";
2
- import { afterEach, describe, expect, it, vi } from "vitest";
3
- import { createMeterProviderFromEnv } from "../src/metrics.js";
4
- // Stub childLogger so tests don't require the full document-drive runtime
5
- vi.mock("document-drive", () => ({
6
- childLogger: () => ({
7
- info: vi.fn(),
8
- warn: vi.fn(),
9
- error: vi.fn(),
10
- }),
11
- }));
12
- const providers = [];
13
- afterEach(async () => {
14
- vi.restoreAllMocks();
15
- // Await shutdown so PeriodicExportingMetricReader timers are cleared
16
- await Promise.all(providers.map((p) => p.shutdown()));
17
- providers.length = 0;
18
- });
19
- function track(provider) {
20
- if (provider)
21
- providers.push(provider);
22
- return provider;
23
- }
24
- function trackAsserted(provider) {
25
- expect(provider).toBeInstanceOf(MeterProvider);
26
- return track(provider);
27
- }
28
- // These helpers access undocumented internal fields of MeterProvider and
29
- // PeriodicExportingMetricReader. They may break if @opentelemetry/sdk-metrics
30
- // renames its private state between major versions.
31
- function getReader(provider) {
32
- return provider._sharedState.metricCollectors[0]._metricReader;
33
- }
34
- function getExporterUrl(provider) {
35
- return provider._sharedState.metricCollectors[0]._metricReader._exporter._delegate
36
- ._transport._transport._parameters.url;
37
- }
38
- function getResourceAttributes(provider) {
39
- return provider._sharedState.resource.attributes;
40
- }
41
- describe("createMeterProviderFromEnv", () => {
42
- describe("when OTEL_EXPORTER_OTLP_ENDPOINT is not set", () => {
43
- it("returns undefined", () => {
44
- expect(createMeterProviderFromEnv({})).toBeUndefined();
45
- });
46
- });
47
- describe("when OTEL_EXPORTER_OTLP_ENDPOINT is set", () => {
48
- it("returns a MeterProvider", () => {
49
- expect(track(createMeterProviderFromEnv({
50
- OTEL_EXPORTER_OTLP_ENDPOINT: "http://localhost:4318",
51
- }))).toBeInstanceOf(MeterProvider);
52
- });
53
- it("strips trailing slash from endpoint URL without throwing", () => {
54
- expect(() => track(createMeterProviderFromEnv({
55
- OTEL_EXPORTER_OTLP_ENDPOINT: "http://localhost:4318/",
56
- }))).not.toThrow();
57
- });
58
- it("does not double-append /v1/metrics when endpoint already includes it", () => {
59
- const provider = trackAsserted(createMeterProviderFromEnv({
60
- OTEL_EXPORTER_OTLP_ENDPOINT: "http://localhost:4318/v1/metrics",
61
- }));
62
- expect(getExporterUrl(provider)).toBe("http://localhost:4318/v1/metrics");
63
- });
64
- it("uses 5000ms export interval by default", () => {
65
- const provider = trackAsserted(createMeterProviderFromEnv({
66
- OTEL_EXPORTER_OTLP_ENDPOINT: "http://localhost:4318",
67
- }));
68
- expect(getReader(provider)._exportInterval).toBe(5000);
69
- });
70
- it("honours OTEL_METRIC_EXPORT_INTERVAL", () => {
71
- const provider = trackAsserted(createMeterProviderFromEnv({
72
- OTEL_EXPORTER_OTLP_ENDPOINT: "http://localhost:4318",
73
- OTEL_METRIC_EXPORT_INTERVAL: "2000",
74
- }));
75
- expect(getReader(provider)._exportInterval).toBe(2000);
76
- });
77
- it("falls back to 5000ms when OTEL_METRIC_EXPORT_INTERVAL is non-numeric", () => {
78
- const provider = trackAsserted(createMeterProviderFromEnv({
79
- OTEL_EXPORTER_OTLP_ENDPOINT: "http://localhost:4318",
80
- OTEL_METRIC_EXPORT_INTERVAL: "abc",
81
- }));
82
- expect(getReader(provider)._exportInterval).toBe(5000);
83
- });
84
- it("falls back to 5000ms when OTEL_METRIC_EXPORT_INTERVAL is zero", () => {
85
- const provider = trackAsserted(createMeterProviderFromEnv({
86
- OTEL_EXPORTER_OTLP_ENDPOINT: "http://localhost:4318",
87
- OTEL_METRIC_EXPORT_INTERVAL: "0",
88
- }));
89
- expect(getReader(provider)._exportInterval).toBe(5000);
90
- });
91
- it("falls back to 5000ms when OTEL_METRIC_EXPORT_INTERVAL is negative", () => {
92
- const provider = trackAsserted(createMeterProviderFromEnv({
93
- OTEL_EXPORTER_OTLP_ENDPOINT: "http://localhost:4318",
94
- OTEL_METRIC_EXPORT_INTERVAL: "-1000",
95
- }));
96
- expect(getReader(provider)._exportInterval).toBe(5000);
97
- });
98
- it("sets exportTimeoutMillis below exportIntervalMillis", () => {
99
- const provider = trackAsserted(createMeterProviderFromEnv({
100
- OTEL_EXPORTER_OTLP_ENDPOINT: "http://localhost:4318",
101
- OTEL_METRIC_EXPORT_INTERVAL: "1000",
102
- }));
103
- const reader = getReader(provider);
104
- expect(reader._exportTimeout).toBeLessThan(reader._exportInterval);
105
- });
106
- it("uses 'switchboard' as service name by default", () => {
107
- const provider = trackAsserted(createMeterProviderFromEnv({
108
- OTEL_EXPORTER_OTLP_ENDPOINT: "http://localhost:4318",
109
- }));
110
- expect(getResourceAttributes(provider)["service.name"]).toBe("switchboard");
111
- });
112
- it("honours OTEL_SERVICE_NAME", () => {
113
- const provider = trackAsserted(createMeterProviderFromEnv({
114
- OTEL_EXPORTER_OTLP_ENDPOINT: "http://localhost:4318",
115
- OTEL_SERVICE_NAME: "my-switchboard",
116
- }));
117
- expect(getResourceAttributes(provider)["service.name"]).toBe("my-switchboard");
118
- });
119
- });
120
- });
121
- //# sourceMappingURL=metrics.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metrics.test.js","sourceRoot":"","sources":["../../test/metrics.test.ts"],"names":[],"mappings":"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"}