@powerhousedao/switchboard 6.0.0-dev.1 → 6.0.0-dev.100
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/CHANGELOG.md +905 -0
- package/Dockerfile +63 -37
- package/README.md +92 -0
- package/dist/src/index.js +35 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/metrics.d.ts +7 -0
- package/dist/src/metrics.d.ts.map +1 -0
- package/dist/src/metrics.js +34 -0
- package/dist/src/metrics.js.map +1 -0
- package/dist/src/migrate.d.ts +3 -0
- package/dist/src/migrate.d.ts.map +1 -0
- package/dist/src/migrate.js +65 -0
- package/dist/src/migrate.js.map +1 -0
- package/dist/src/profiler.d.ts +6 -1
- package/dist/src/profiler.d.ts.map +1 -1
- package/dist/src/profiler.js +31 -5
- package/dist/src/profiler.js.map +1 -1
- package/dist/src/renown.d.ts +16 -0
- package/dist/src/renown.d.ts.map +1 -0
- package/dist/src/renown.js +33 -0
- package/dist/src/renown.js.map +1 -0
- package/dist/src/server.d.ts +0 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +163 -78
- package/dist/src/server.js.map +1 -1
- package/dist/src/types.d.ts +19 -6
- package/dist/src/types.d.ts.map +1 -1
- package/dist/test/metrics.test.d.ts +2 -0
- package/dist/test/metrics.test.d.ts.map +1 -0
- package/dist/test/metrics.test.js +121 -0
- package/dist/test/metrics.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +15 -0
- package/dist/vitest.config.js.map +1 -0
- package/entrypoint.sh +11 -16
- package/package.json +35 -23
- package/test/metrics.test.ts +202 -0
- package/tsconfig.json +8 -2
- package/vitest.config.ts +15 -0
- package/dist/src/connect-crypto.d.ts +0 -41
- package/dist/src/connect-crypto.d.ts.map +0 -1
- package/dist/src/connect-crypto.js +0 -127
- package/dist/src/connect-crypto.js.map +0 -1
package/dist/src/server.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
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);
|
|
2
6
|
import { PGlite } from "@electric-sql/pglite";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
7
|
+
import { ReactorInstrumentation } from "@powerhousedao/opentelemetry-instrumentation-reactor";
|
|
8
|
+
import { ChannelScheme, EventBus, ReactorBuilder, ReactorClientBuilder, driveCollectionId, parseDriveUrl, } from "@powerhousedao/reactor";
|
|
9
|
+
import { metrics } from "@opentelemetry/api";
|
|
10
|
+
import { HttpPackageLoader, PackageManagementService, PackagesSubgraph, VitePackageLoader, createViteLogger, getUniqueDocumentModels, initializeAndStartAPI, startViteServer, } from "@powerhousedao/reactor-api";
|
|
11
|
+
import {} from "@renown/sdk";
|
|
6
12
|
import * as Sentry from "@sentry/node";
|
|
7
13
|
import { DocumentAlreadyExistsError, InMemoryCache, ReactorBuilder as LegacyReactorBuilder, childLogger, driveDocumentModelModule, } from "document-drive";
|
|
8
14
|
import { RedisCache } from "document-drive/cache/redis";
|
|
@@ -11,15 +17,15 @@ import { PrismaStorageFactory } from "document-drive/storage/prisma";
|
|
|
11
17
|
import { documentModelDocumentModelModule } from "document-model";
|
|
12
18
|
import dotenv from "dotenv";
|
|
13
19
|
import express from "express";
|
|
14
|
-
import { Kysely } from "kysely";
|
|
20
|
+
import { Kysely, PostgresDialect } from "kysely";
|
|
15
21
|
import { PGliteDialect } from "kysely-pglite-dialect";
|
|
16
22
|
import path from "path";
|
|
23
|
+
import { Pool } from "pg";
|
|
17
24
|
import { initRedis } from "./clients/redis.js";
|
|
18
|
-
import { initConnectCrypto } from "./connect-crypto.js";
|
|
19
25
|
import { initFeatureFlags } from "./feature-flags.js";
|
|
20
|
-
import {
|
|
26
|
+
import { initRenown } from "./renown.js";
|
|
21
27
|
import { addDefaultDrive, addRemoteDrive, isPostgresUrl } from "./utils.js";
|
|
22
|
-
const
|
|
28
|
+
const defaultLogger = childLogger(["switchboard"]);
|
|
23
29
|
dotenv.config();
|
|
24
30
|
// Feature flag constants
|
|
25
31
|
const DOCUMENT_MODEL_SUBGRAPHS_ENABLED = "DOCUMENT_MODEL_SUBGRAPHS_ENABLED";
|
|
@@ -31,7 +37,7 @@ const ENABLE_DUAL_ACTION_CREATE_DEFAULT = true;
|
|
|
31
37
|
// Create a monolith express app for all subgraphs
|
|
32
38
|
const app = express();
|
|
33
39
|
if (process.env.SENTRY_DSN) {
|
|
34
|
-
|
|
40
|
+
defaultLogger.info("Initialized Sentry with env: @env", process.env.SENTRY_ENV);
|
|
35
41
|
Sentry.init({
|
|
36
42
|
dsn: process.env.SENTRY_DSN,
|
|
37
43
|
environment: process.env.SENTRY_ENV,
|
|
@@ -50,10 +56,10 @@ async function initPrismaStorage(connectionString, cache) {
|
|
|
50
56
|
if (e instanceof Error && e.message.includes(prismaConnectError)) {
|
|
51
57
|
const dbUrl = connectionString;
|
|
52
58
|
const safeUrl = `${dbUrl.slice(0, dbUrl.indexOf(":") + 1)}{...}${dbUrl.slice(dbUrl.indexOf("@"), dbUrl.lastIndexOf("?"))}`;
|
|
53
|
-
|
|
59
|
+
defaultLogger.warn("Can't reach database server at '@safeUrl'", safeUrl);
|
|
54
60
|
}
|
|
55
61
|
else {
|
|
56
|
-
|
|
62
|
+
defaultLogger.error("@error", e);
|
|
57
63
|
}
|
|
58
64
|
throw e;
|
|
59
65
|
}
|
|
@@ -70,7 +76,7 @@ async function initReactorStorage(cache, dbPath = "./.ph/drive-storage") {
|
|
|
70
76
|
}
|
|
71
77
|
}
|
|
72
78
|
catch {
|
|
73
|
-
|
|
79
|
+
defaultLogger.warn("Falling back to filesystem storage");
|
|
74
80
|
}
|
|
75
81
|
// if url was postgres and connection failed, fallback to filesystem on default path
|
|
76
82
|
const filesystemPath = isPostgres ? "./.ph/drive-storage" : dbPath;
|
|
@@ -79,8 +85,15 @@ async function initReactorStorage(cache, dbPath = "./.ph/drive-storage") {
|
|
|
79
85
|
storagePath: filesystemPath,
|
|
80
86
|
};
|
|
81
87
|
}
|
|
82
|
-
async function initServer(serverPort, options,
|
|
83
|
-
|
|
88
|
+
async function initServer(serverPort, options, renown) {
|
|
89
|
+
// Register the global MeterProvider before ReactorInstrumentation is
|
|
90
|
+
// constructed. setGlobalMeterProvider is a one-way door — once set it cannot
|
|
91
|
+
// be unset — so this must happen before initializeClient calls
|
|
92
|
+
// instrumentation.start() → createMetrics() → metrics.getMeter().
|
|
93
|
+
if (options.meterProvider) {
|
|
94
|
+
metrics.setGlobalMeterProvider(options.meterProvider);
|
|
95
|
+
}
|
|
96
|
+
const { dev, packages = [], remoteDrives = [], logger = defaultLogger, } = options;
|
|
84
97
|
const dbPath = options.dbPath ?? process.env.DATABASE_URL;
|
|
85
98
|
// start redis if configured
|
|
86
99
|
const redisUrl = process.env.REDIS_TLS_URL ?? process.env.REDIS_URL;
|
|
@@ -90,7 +103,7 @@ async function initServer(serverPort, options, connectCrypto) {
|
|
|
90
103
|
redis = await initRedis(redisUrl);
|
|
91
104
|
}
|
|
92
105
|
catch (e) {
|
|
93
|
-
logger.error(e);
|
|
106
|
+
logger.error("@error", e);
|
|
94
107
|
}
|
|
95
108
|
}
|
|
96
109
|
const cache = redis ? new RedisCache(redis) : new InMemoryCache();
|
|
@@ -100,11 +113,25 @@ async function initServer(serverPort, options, connectCrypto) {
|
|
|
100
113
|
const readModelPath = !dbPath || (isPostgresUrl(dbPath) && dbPath !== storagePath)
|
|
101
114
|
? ".ph/read-storage"
|
|
102
115
|
: dbPath;
|
|
116
|
+
// HTTP registry package loading
|
|
117
|
+
let httpDocumentModels = [];
|
|
118
|
+
const registryUrl = process.env.PH_REGISTRY_URL;
|
|
119
|
+
const registryPackages = process.env.PH_REGISTRY_PACKAGES;
|
|
120
|
+
let httpLoader;
|
|
121
|
+
if (registryUrl) {
|
|
122
|
+
httpLoader = new HttpPackageLoader({ registryUrl });
|
|
123
|
+
}
|
|
124
|
+
if (httpLoader && registryPackages) {
|
|
125
|
+
const packageNames = registryPackages.split(",").map((p) => p.trim());
|
|
126
|
+
httpDocumentModels = await httpLoader.loadPackages(packageNames, logger);
|
|
127
|
+
logger.info(`Loaded ${httpDocumentModels.length} HTTP document models from ${packageNames.length} packages`);
|
|
128
|
+
}
|
|
103
129
|
const initializeDriveServer = async (documentModels) => {
|
|
104
130
|
const driveServer = new LegacyReactorBuilder(getUniqueDocumentModels([
|
|
105
131
|
documentModelDocumentModelModule,
|
|
106
132
|
driveDocumentModelModule,
|
|
107
133
|
...documentModels,
|
|
134
|
+
...httpDocumentModels,
|
|
108
135
|
]))
|
|
109
136
|
.withStorage(storage)
|
|
110
137
|
.withCache(cache)
|
|
@@ -118,6 +145,7 @@ async function initServer(serverPort, options, connectCrypto) {
|
|
|
118
145
|
await driveServer.initialize();
|
|
119
146
|
return driveServer;
|
|
120
147
|
};
|
|
148
|
+
const reactorLogger = logger.child(["reactor"]);
|
|
121
149
|
const initializeClient = async (driveServer, documentModels) => {
|
|
122
150
|
const eventBus = new EventBus();
|
|
123
151
|
const builder = new ReactorBuilder()
|
|
@@ -126,53 +154,71 @@ async function initServer(serverPort, options, connectCrypto) {
|
|
|
126
154
|
documentModelDocumentModelModule,
|
|
127
155
|
driveDocumentModelModule,
|
|
128
156
|
...documentModels,
|
|
157
|
+
...httpDocumentModels,
|
|
129
158
|
]))
|
|
130
|
-
.
|
|
131
|
-
.
|
|
132
|
-
.
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
159
|
+
.withChannelScheme(ChannelScheme.SWITCHBOARD)
|
|
160
|
+
.withSignalHandlers()
|
|
161
|
+
.withLogger(reactorLogger);
|
|
162
|
+
const maxSkipThreshold = parseInt(process.env.MAX_SKIP_THRESHOLD ?? "", 10);
|
|
163
|
+
if (!isNaN(maxSkipThreshold) && maxSkipThreshold > 0) {
|
|
164
|
+
builder.withExecutorConfig({ maxSkipThreshold });
|
|
165
|
+
logger.info(`Reactor maxSkipThreshold set to ${maxSkipThreshold}`);
|
|
166
|
+
}
|
|
167
|
+
const reactorDbUrl = process.env.PH_REACTOR_DATABASE_URL;
|
|
168
|
+
if (reactorDbUrl && isPostgresUrl(reactorDbUrl)) {
|
|
169
|
+
const connectionString = reactorDbUrl.includes("?")
|
|
170
|
+
? reactorDbUrl
|
|
171
|
+
: `${reactorDbUrl}?sslmode=disable`;
|
|
172
|
+
const pool = new Pool({ connectionString });
|
|
173
|
+
const kysely = new Kysely({
|
|
174
|
+
dialect: new PostgresDialect({ pool }),
|
|
175
|
+
});
|
|
176
|
+
builder.withKysely(kysely);
|
|
177
|
+
logger.info("Using PostgreSQL for reactor storage");
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
const pglitePath = "./.ph/reactor-storage";
|
|
181
|
+
const pglite = new PGlite(pglitePath);
|
|
182
|
+
const kysely = new Kysely({
|
|
183
|
+
dialect: new PGliteDialect(pglite),
|
|
184
|
+
});
|
|
185
|
+
builder.withKysely(kysely);
|
|
186
|
+
logger.info("Using PGlite for reactor storage");
|
|
187
|
+
}
|
|
188
|
+
if (httpLoader) {
|
|
189
|
+
builder.withDocumentModelLoader(httpLoader);
|
|
190
|
+
}
|
|
153
191
|
const clientBuilder = new ReactorClientBuilder().withReactorBuilder(builder);
|
|
154
|
-
if (
|
|
155
|
-
clientBuilder.withSigner(
|
|
192
|
+
if (renown) {
|
|
193
|
+
clientBuilder.withSigner(renown.signer);
|
|
156
194
|
}
|
|
157
195
|
const module = await clientBuilder.buildModule();
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
196
|
+
if (module.reactorModule) {
|
|
197
|
+
const instrumentation = new ReactorInstrumentation(module.reactorModule);
|
|
198
|
+
instrumentation.start();
|
|
199
|
+
reactorLogger.info("Reactor metrics instrumentation started");
|
|
161
200
|
}
|
|
162
|
-
return
|
|
201
|
+
return module;
|
|
163
202
|
};
|
|
164
203
|
let defaultDriveUrl = undefined;
|
|
165
204
|
// TODO get path from powerhouse config
|
|
166
205
|
// start vite server if dev mode is enabled
|
|
167
206
|
const basePath = process.cwd();
|
|
168
|
-
const
|
|
207
|
+
const viteLogger = createViteLogger(logger);
|
|
208
|
+
const vite = dev
|
|
209
|
+
? await startViteServer(process.cwd(), viteLogger)
|
|
210
|
+
: undefined;
|
|
169
211
|
// get paths to local document models
|
|
170
212
|
if (!options.disableLocalPackages) {
|
|
171
213
|
packages.push(basePath);
|
|
172
214
|
}
|
|
173
|
-
//
|
|
174
|
-
const
|
|
175
|
-
//
|
|
215
|
+
// storageV2=true means use new reactor (NOT legacy)
|
|
216
|
+
const legacyReactor = !options.reactorOptions?.storageV2;
|
|
217
|
+
// create loader with legacyReactor option
|
|
218
|
+
const packageLoader = vite
|
|
219
|
+
? VitePackageLoader.build(vite, { legacyReactor })
|
|
220
|
+
: undefined;
|
|
221
|
+
const apiLogger = logger.child(["reactor-api"]);
|
|
176
222
|
const api = await initializeAndStartAPI(initializeDriveServer, initializeClient, {
|
|
177
223
|
express: app,
|
|
178
224
|
port: serverPort,
|
|
@@ -184,13 +230,41 @@ async function initServer(serverPort, options, connectCrypto) {
|
|
|
184
230
|
configFile: options.configFile ??
|
|
185
231
|
path.join(process.cwd(), "powerhouse.config.json"),
|
|
186
232
|
mcp: options.mcp ?? true,
|
|
233
|
+
logger: apiLogger,
|
|
187
234
|
enableDocumentModelSubgraphs: options.enableDocumentModelSubgraphs,
|
|
188
|
-
|
|
189
|
-
|
|
235
|
+
legacyReactor,
|
|
236
|
+
}, "switchboard");
|
|
237
|
+
const { client, driveServer, graphqlManager, documentModelRegistry } = api;
|
|
238
|
+
// Wire up dynamic package management if HTTP loader is configured
|
|
239
|
+
if (httpLoader) {
|
|
240
|
+
const packageManagementService = new PackageManagementService({
|
|
241
|
+
defaultRegistryUrl: registryUrl,
|
|
242
|
+
httpLoader,
|
|
243
|
+
documentModelRegistry,
|
|
244
|
+
});
|
|
245
|
+
packageManagementService.setOnModelsChanged(async () => {
|
|
246
|
+
await graphqlManager.regenerateDocumentModelSubgraphs();
|
|
247
|
+
});
|
|
248
|
+
const packagesSubgraph = new PackagesSubgraph({
|
|
249
|
+
relationalDb: undefined,
|
|
250
|
+
analyticsStore: undefined,
|
|
251
|
+
reactorClient: client,
|
|
252
|
+
graphqlManager,
|
|
253
|
+
syncManager: api.syncManager,
|
|
254
|
+
path: graphqlManager.getBasePath(),
|
|
255
|
+
packageManagementService,
|
|
256
|
+
});
|
|
257
|
+
void graphqlManager
|
|
258
|
+
.registerSubgraphInstance(packagesSubgraph, "graphql", false)
|
|
259
|
+
.then(() => graphqlManager.updateRouter())
|
|
260
|
+
.catch((error) => {
|
|
261
|
+
logger.error("Failed to register packages subgraph: @error", error);
|
|
262
|
+
});
|
|
263
|
+
}
|
|
190
264
|
// Create default drive if provided
|
|
191
265
|
if (options.drive) {
|
|
192
|
-
if (!
|
|
193
|
-
throw new Error("Cannot create default drive without
|
|
266
|
+
if (!renown) {
|
|
267
|
+
throw new Error("Cannot create default drive without Renown identity");
|
|
194
268
|
}
|
|
195
269
|
defaultDriveUrl = await addDefaultDrive(driveServer, client, options.drive, serverPort);
|
|
196
270
|
}
|
|
@@ -203,17 +277,31 @@ async function initServer(serverPort, options, connectCrypto) {
|
|
|
203
277
|
for (const remoteDriveUrl of remoteDrives) {
|
|
204
278
|
let driveId;
|
|
205
279
|
try {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
280
|
+
if (legacyReactor) {
|
|
281
|
+
// Use legacy reactor's addRemoteDrive
|
|
282
|
+
const remoteDrive = await addRemoteDrive(driveServer, remoteDriveUrl);
|
|
283
|
+
driveId = remoteDrive.header.id;
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
// Use new reactor's sync manager
|
|
287
|
+
const { syncManager } = api;
|
|
288
|
+
const parsed = parseDriveUrl(remoteDriveUrl);
|
|
289
|
+
driveId = parsed.driveId;
|
|
290
|
+
const remoteName = `remote-drive-${driveId}-${crypto.randomUUID()}`;
|
|
291
|
+
await syncManager.add(remoteName, driveCollectionId("main", driveId), {
|
|
292
|
+
type: "gql",
|
|
293
|
+
parameters: { url: parsed.graphqlEndpoint },
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
logger.debug("Remote drive @remoteDriveUrl synced", remoteDriveUrl);
|
|
209
297
|
}
|
|
210
298
|
catch (error) {
|
|
211
299
|
if (error instanceof DocumentAlreadyExistsError) {
|
|
212
|
-
logger.debug(
|
|
300
|
+
logger.debug("Remote drive already added: @remoteDriveUrl", remoteDriveUrl);
|
|
213
301
|
driveId = remoteDriveUrl.split("/").pop();
|
|
214
302
|
}
|
|
215
303
|
else {
|
|
216
|
-
logger.error(
|
|
304
|
+
logger.error("Failed to connect to remote drive @remoteDriveUrl: @error", remoteDriveUrl, error);
|
|
217
305
|
}
|
|
218
306
|
}
|
|
219
307
|
finally {
|
|
@@ -228,56 +316,53 @@ async function initServer(serverPort, options, connectCrypto) {
|
|
|
228
316
|
return {
|
|
229
317
|
defaultDriveUrl,
|
|
230
318
|
api,
|
|
231
|
-
reactor:
|
|
232
|
-
|
|
319
|
+
reactor: client,
|
|
320
|
+
legacyReactor: driveServer,
|
|
321
|
+
renown,
|
|
233
322
|
};
|
|
234
323
|
}
|
|
235
324
|
export const startSwitchboard = async (options = {}) => {
|
|
236
325
|
const serverPort = options.port ?? DEFAULT_PORT;
|
|
237
326
|
// Initialize feature flags
|
|
238
327
|
const featureFlags = await initFeatureFlags();
|
|
239
|
-
const enableDocumentModelSubgraphs = await featureFlags.getBooleanValue(DOCUMENT_MODEL_SUBGRAPHS_ENABLED, options.enableDocumentModelSubgraphs ??
|
|
328
|
+
const enableDocumentModelSubgraphs = await featureFlags.getBooleanValue(DOCUMENT_MODEL_SUBGRAPHS_ENABLED, options.enableDocumentModelSubgraphs ??
|
|
329
|
+
DOCUMENT_MODEL_SUBGRAPHS_ENABLED_DEFAULT);
|
|
240
330
|
options.enableDocumentModelSubgraphs = enableDocumentModelSubgraphs;
|
|
241
331
|
const storageV2 = await featureFlags.getBooleanValue(REACTOR_STORAGE_V2, options.reactorOptions?.storageV2 ?? REACTOR_STORAGE_V2_DEFAULT);
|
|
242
|
-
const enableDualActionCreate = await featureFlags.getBooleanValue(ENABLE_DUAL_ACTION_CREATE, options.reactorOptions?.enableDualActionCreate ??
|
|
332
|
+
const enableDualActionCreate = await featureFlags.getBooleanValue(ENABLE_DUAL_ACTION_CREATE, options.reactorOptions?.enableDualActionCreate ??
|
|
333
|
+
ENABLE_DUAL_ACTION_CREATE_DEFAULT);
|
|
243
334
|
options.reactorOptions = {
|
|
244
335
|
enableDualActionCreate,
|
|
245
336
|
storageV2,
|
|
246
337
|
};
|
|
247
|
-
logger.
|
|
338
|
+
const logger = options.logger ?? defaultLogger;
|
|
339
|
+
logger.info("Feature flags: @flags", JSON.stringify({
|
|
248
340
|
DOCUMENT_MODEL_SUBGRAPHS_ENABLED: enableDocumentModelSubgraphs,
|
|
249
341
|
REACTOR_STORAGE_V2: storageV2,
|
|
250
342
|
ENABLE_DUAL_ACTION_CREATE: enableDualActionCreate,
|
|
251
|
-
});
|
|
252
|
-
if
|
|
253
|
-
|
|
254
|
-
await initProfilerFromEnv(process.env);
|
|
255
|
-
}
|
|
256
|
-
catch (e) {
|
|
257
|
-
Sentry.captureException(e);
|
|
258
|
-
logger.error("Error starting profiler", e);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
// Initialize ConnectCrypto if identity options are provided or keypair exists
|
|
262
|
-
let connectCrypto = null;
|
|
343
|
+
}, null, 2));
|
|
344
|
+
// Initialize Renown if identity options are provided or keypair exists
|
|
345
|
+
let renown = null;
|
|
263
346
|
try {
|
|
264
|
-
|
|
347
|
+
renown = await initRenown(options.identity);
|
|
265
348
|
}
|
|
266
349
|
catch (e) {
|
|
267
|
-
logger.warn("Failed to initialize ConnectCrypto:", e);
|
|
350
|
+
logger.warn("Failed to initialize ConnectCrypto: @error", e);
|
|
268
351
|
if (options.identity?.requireExisting) {
|
|
269
352
|
throw new Error('Identity required but failed to initialize. Run "ph login" first.');
|
|
270
353
|
}
|
|
271
354
|
}
|
|
272
355
|
try {
|
|
273
|
-
return await initServer(serverPort, options,
|
|
356
|
+
return await initServer(serverPort, options, renown);
|
|
274
357
|
}
|
|
275
358
|
catch (e) {
|
|
276
359
|
Sentry.captureException(e);
|
|
277
|
-
logger.error("App crashed", e);
|
|
360
|
+
logger.error("App crashed: @error", e);
|
|
278
361
|
throw e;
|
|
279
362
|
}
|
|
280
363
|
};
|
|
281
|
-
export { getBearerToken, getConnectCrypto, getConnectDid, } from "./connect-crypto.js";
|
|
282
364
|
export * from "./types.js";
|
|
365
|
+
if (import.meta.main) {
|
|
366
|
+
await startSwitchboard();
|
|
367
|
+
}
|
|
283
368
|
//# sourceMappingURL=server.js.map
|
package/dist/src/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { IReactorClient } from "@powerhousedao/reactor";
|
|
2
|
+
import type { IRenown } from "@renown/sdk";
|
|
3
|
+
import type { DriveInput, IDocumentDriveServer, ILogger } from "document-drive";
|
|
4
|
+
import type { MeterProvider } from "@opentelemetry/api";
|
|
3
5
|
export type StorageOptions = {
|
|
4
6
|
type: "filesystem" | "memory" | "postgres" | "browser";
|
|
5
7
|
filesystemPath?: string;
|
|
@@ -13,6 +15,8 @@ export type IdentityOptions = {
|
|
|
13
15
|
* Use this to ensure the switchboard only runs with an authenticated identity.
|
|
14
16
|
*/
|
|
15
17
|
requireExisting?: boolean;
|
|
18
|
+
/** Base url of the Renown instance to use */
|
|
19
|
+
baseUrl?: string;
|
|
16
20
|
};
|
|
17
21
|
export type StartServerOptions = {
|
|
18
22
|
configFile?: string;
|
|
@@ -33,7 +37,7 @@ export type StartServerOptions = {
|
|
|
33
37
|
admins: string[];
|
|
34
38
|
};
|
|
35
39
|
/**
|
|
36
|
-
* Identity options for
|
|
40
|
+
* Identity options for Renown.
|
|
37
41
|
* When configured, the switchboard will load the keypair from `ph login`
|
|
38
42
|
* and can authenticate with remote services on behalf of the user.
|
|
39
43
|
*/
|
|
@@ -54,11 +58,20 @@ export type StartServerOptions = {
|
|
|
54
58
|
storageV2?: boolean;
|
|
55
59
|
};
|
|
56
60
|
enableDocumentModelSubgraphs?: boolean;
|
|
61
|
+
logger?: ILogger;
|
|
62
|
+
/**
|
|
63
|
+
* OpenTelemetry MeterProvider to register as the global provider before
|
|
64
|
+
* ReactorInstrumentation starts. Must be provided here rather than set
|
|
65
|
+
* externally to guarantee the registration happens before
|
|
66
|
+
* instrumentation.start() reads the global provider via metrics.getMeter().
|
|
67
|
+
*/
|
|
68
|
+
meterProvider?: MeterProvider;
|
|
57
69
|
};
|
|
58
70
|
export type SwitchboardReactor = {
|
|
59
71
|
defaultDriveUrl: string | undefined;
|
|
60
|
-
reactor:
|
|
61
|
-
|
|
62
|
-
|
|
72
|
+
reactor: IReactorClient;
|
|
73
|
+
legacyReactor: IDocumentDriveServer;
|
|
74
|
+
/** The Renown instance if identity was initialized */
|
|
75
|
+
renown: IRenown | null;
|
|
63
76
|
};
|
|
64
77
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/src/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,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,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;CAClB,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,cAAc,CAAC,EAAE;QACf;;;WAGG;QACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;QAEjC;;;WAGG;QACH,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,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,aAAa,EAAE,oBAAoB,CAAC;IACpC,sDAAsD;IACtD,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.test.d.ts","sourceRoot":"","sources":["../../test/metrics.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,121 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.test.js","sourceRoot":"","sources":["../../test/metrics.test.ts"],"names":[],"mappings":"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"}
|