@powerhousedao/switchboard 5.1.0-dev.15 → 5.1.0-dev.18
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 +41 -0
- package/dist/src/connect-crypto.d.ts +41 -0
- package/dist/src/connect-crypto.d.ts.map +1 -0
- package/dist/src/connect-crypto.js +127 -0
- package/dist/src/connect-crypto.js.map +1 -0
- package/dist/src/server.d.ts +1 -0
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +27 -8
- package/dist/src/server.js.map +1 -1
- package/dist/src/types.d.ts +18 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils.d.ts +4 -2
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +31 -5
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -6
- package/tsconfig.json +3 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,44 @@
|
|
|
1
|
+
## 5.1.0-dev.18 (2025-12-11)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **codegen:** add versioned document model generation ([#2130](https://github.com/powerhouse-inc/powerhouse/pull/2130))
|
|
6
|
+
|
|
7
|
+
### ❤️ Thank You
|
|
8
|
+
|
|
9
|
+
- Ryan Wolhuter @ryanwolhuter
|
|
10
|
+
|
|
11
|
+
## 5.1.0-dev.17 (2025-12-11)
|
|
12
|
+
|
|
13
|
+
### 🩹 Fixes
|
|
14
|
+
|
|
15
|
+
- **ph-cli:** auth with access-token ([df48be6e9](https://github.com/powerhouse-inc/powerhouse/commit/df48be6e9))
|
|
16
|
+
|
|
17
|
+
### ❤️ Thank You
|
|
18
|
+
|
|
19
|
+
- Frank
|
|
20
|
+
|
|
21
|
+
## 5.1.0-dev.16 (2025-12-11)
|
|
22
|
+
|
|
23
|
+
### 🚀 Features
|
|
24
|
+
|
|
25
|
+
- **ph-cli:** added access-token command ([e48181df6](https://github.com/powerhouse-inc/powerhouse/commit/e48181df6))
|
|
26
|
+
- **switchboard:** use identity ([1be03ddb7](https://github.com/powerhouse-inc/powerhouse/commit/1be03ddb7))
|
|
27
|
+
- **codegen:** update zod schema generation library ([#2129](https://github.com/powerhouse-inc/powerhouse/pull/2129))
|
|
28
|
+
- integrate visibility tools for remotes and pglite instance ([#2122](https://github.com/powerhouse-inc/powerhouse/pull/2122))
|
|
29
|
+
|
|
30
|
+
### 🩹 Fixes
|
|
31
|
+
|
|
32
|
+
- backfill tests + create default via new reactor to get create/update ([889d890a3](https://github.com/powerhouse-inc/powerhouse/commit/889d890a3))
|
|
33
|
+
- syncenvelope shape was incorrect ([cc6226be9](https://github.com/powerhouse-inc/powerhouse/commit/cc6226be9))
|
|
34
|
+
|
|
35
|
+
### ❤️ Thank You
|
|
36
|
+
|
|
37
|
+
- Benjamin Jordan (@thegoldenmule)
|
|
38
|
+
- Frank
|
|
39
|
+
- Guillermo Puente Sandoval @gpuente
|
|
40
|
+
- Ryan Wolhuter @ryanwolhuter
|
|
41
|
+
|
|
1
42
|
## 5.1.0-dev.15 (2025-12-09)
|
|
2
43
|
|
|
3
44
|
### 🩹 Fixes
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type IConnectCrypto, type JsonWebKeyPairStorage, type JwkKeyPair } from "@renown/sdk";
|
|
2
|
+
/**
|
|
3
|
+
* Key storage that supports:
|
|
4
|
+
* 1. PH_RENOWN_PRIVATE_KEY environment variable (JSON-encoded JwkKeyPair)
|
|
5
|
+
* 2. Custom file path passed via options
|
|
6
|
+
* 3. Falls back to file storage at .keypair.json in current working directory
|
|
7
|
+
*/
|
|
8
|
+
export declare class SwitchboardKeyStorage implements JsonWebKeyPairStorage {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(filePath?: string);
|
|
11
|
+
loadKeyPair(): Promise<JwkKeyPair | undefined>;
|
|
12
|
+
saveKeyPair(keyPair: JwkKeyPair): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export interface ConnectCryptoOptions {
|
|
15
|
+
/** Path to the keypair file. Defaults to .keypair.json in cwd */
|
|
16
|
+
keypairPath?: string;
|
|
17
|
+
/** If true, won't generate a new keypair if none exists */
|
|
18
|
+
requireExisting?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Initialize ConnectCrypto for the switchboard.
|
|
22
|
+
* This allows the switchboard to authenticate with remote services
|
|
23
|
+
* using the same identity established during `ph login`.
|
|
24
|
+
*/
|
|
25
|
+
export declare function initConnectCrypto(options?: ConnectCryptoOptions): Promise<IConnectCrypto | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Get the current ConnectCrypto instance.
|
|
28
|
+
* Returns null if not initialized.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getConnectCrypto(): IConnectCrypto | null;
|
|
31
|
+
/**
|
|
32
|
+
* Get the DID of the current ConnectCrypto instance.
|
|
33
|
+
* Returns null if not initialized.
|
|
34
|
+
*/
|
|
35
|
+
export declare function getConnectDid(): Promise<string | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Get a bearer token for authenticating with remote services.
|
|
38
|
+
* Returns null if ConnectCrypto is not initialized.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getBearerToken(driveUrl: string, address?: string, refresh?: boolean): Promise<string | null>;
|
|
41
|
+
//# sourceMappingURL=connect-crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-crypto.d.ts","sourceRoot":"","sources":["../../src/connect-crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AAUrB;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,qBAAqB;;gBAGrD,QAAQ,CAAC,EAAE,MAAM;IAUvB,WAAW,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAuB9C,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAgCtD;AAKD,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA0BhC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,GAAG,IAAI,CAExD;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAK5D;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,UAAQ,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKxB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { ConnectCrypto, } from "@renown/sdk";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { childLogger } from "document-drive";
|
|
5
|
+
const logger = childLogger(["switchboard", "connect-crypto"]);
|
|
6
|
+
const ENV_KEY_NAME = "PH_RENOWN_PRIVATE_KEY";
|
|
7
|
+
const DEFAULT_KEYPAIR_PATH = join(process.cwd(), ".keypair.json");
|
|
8
|
+
/**
|
|
9
|
+
* Key storage that supports:
|
|
10
|
+
* 1. PH_RENOWN_PRIVATE_KEY environment variable (JSON-encoded JwkKeyPair)
|
|
11
|
+
* 2. Custom file path passed via options
|
|
12
|
+
* 3. Falls back to file storage at .keypair.json in current working directory
|
|
13
|
+
*/
|
|
14
|
+
export class SwitchboardKeyStorage {
|
|
15
|
+
#filePath;
|
|
16
|
+
constructor(filePath) {
|
|
17
|
+
this.#filePath = filePath || DEFAULT_KEYPAIR_PATH;
|
|
18
|
+
// Ensure directory exists
|
|
19
|
+
const dir = dirname(this.#filePath);
|
|
20
|
+
if (!existsSync(dir)) {
|
|
21
|
+
mkdirSync(dir, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
async loadKeyPair() {
|
|
25
|
+
// First check environment variable
|
|
26
|
+
const envKey = process.env[ENV_KEY_NAME];
|
|
27
|
+
if (envKey) {
|
|
28
|
+
try {
|
|
29
|
+
const keyPair = JSON.parse(envKey);
|
|
30
|
+
// Validate it has the required structure
|
|
31
|
+
if (keyPair.publicKey && keyPair.privateKey) {
|
|
32
|
+
logger.debug("Loaded keypair from environment variable");
|
|
33
|
+
return keyPair;
|
|
34
|
+
}
|
|
35
|
+
logger.warn(`${ENV_KEY_NAME} is set but doesn't contain valid publicKey and privateKey`);
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
logger.warn(`Failed to parse ${ENV_KEY_NAME} as JSON:`, e);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Fall back to file storage
|
|
42
|
+
return this.#loadFromFile();
|
|
43
|
+
}
|
|
44
|
+
async saveKeyPair(keyPair) {
|
|
45
|
+
// Don't save if using env var
|
|
46
|
+
if (process.env[ENV_KEY_NAME]) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// Save to file
|
|
50
|
+
this.#saveToFile(keyPair);
|
|
51
|
+
}
|
|
52
|
+
#loadFromFile() {
|
|
53
|
+
try {
|
|
54
|
+
if (!existsSync(this.#filePath)) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
const data = readFileSync(this.#filePath, "utf-8");
|
|
58
|
+
const parsed = JSON.parse(data);
|
|
59
|
+
const keyPair = parsed.keyPair;
|
|
60
|
+
if (keyPair) {
|
|
61
|
+
logger.debug(`Loaded keypair from ${this.#filePath}`);
|
|
62
|
+
}
|
|
63
|
+
return keyPair;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
#saveToFile(keyPair) {
|
|
70
|
+
const data = { keyPair };
|
|
71
|
+
writeFileSync(this.#filePath, JSON.stringify(data, null, 2), "utf-8");
|
|
72
|
+
logger.debug(`Saved keypair to ${this.#filePath}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Singleton instance of ConnectCrypto for the switchboard
|
|
76
|
+
let connectCryptoInstance = null;
|
|
77
|
+
/**
|
|
78
|
+
* Initialize ConnectCrypto for the switchboard.
|
|
79
|
+
* This allows the switchboard to authenticate with remote services
|
|
80
|
+
* using the same identity established during `ph login`.
|
|
81
|
+
*/
|
|
82
|
+
export async function initConnectCrypto(options = {}) {
|
|
83
|
+
const { keypairPath, requireExisting = false } = options;
|
|
84
|
+
const keyStorage = new SwitchboardKeyStorage(keypairPath);
|
|
85
|
+
// Check if we have an existing keypair
|
|
86
|
+
const existingKeyPair = await keyStorage.loadKeyPair();
|
|
87
|
+
if (!existingKeyPair && requireExisting) {
|
|
88
|
+
logger.warn("No existing keypair found and requireExisting is true. " +
|
|
89
|
+
'Run "ph login" to create one.');
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
if (!existingKeyPair) {
|
|
93
|
+
logger.info("No existing keypair found. A new one will be generated.");
|
|
94
|
+
}
|
|
95
|
+
connectCryptoInstance = new ConnectCrypto(keyStorage);
|
|
96
|
+
const did = await connectCryptoInstance.did();
|
|
97
|
+
logger.info(`Switchboard identity initialized: ${did}`);
|
|
98
|
+
return connectCryptoInstance;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get the current ConnectCrypto instance.
|
|
102
|
+
* Returns null if not initialized.
|
|
103
|
+
*/
|
|
104
|
+
export function getConnectCrypto() {
|
|
105
|
+
return connectCryptoInstance;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get the DID of the current ConnectCrypto instance.
|
|
109
|
+
* Returns null if not initialized.
|
|
110
|
+
*/
|
|
111
|
+
export async function getConnectDid() {
|
|
112
|
+
if (!connectCryptoInstance) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
return connectCryptoInstance.did();
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get a bearer token for authenticating with remote services.
|
|
119
|
+
* Returns null if ConnectCrypto is not initialized.
|
|
120
|
+
*/
|
|
121
|
+
export async function getBearerToken(driveUrl, address, refresh = false) {
|
|
122
|
+
if (!connectCryptoInstance) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
return connectCryptoInstance.getBearerToken(driveUrl, address, refresh);
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=connect-crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-crypto.js","sourceRoot":"","sources":["../../src/connect-crypto.ts"],"names":[],"mappings":"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"}
|
package/dist/src/server.d.ts
CHANGED
|
@@ -2,4 +2,5 @@
|
|
|
2
2
|
import type { StartServerOptions, SwitchboardReactor } from "./types.js";
|
|
3
3
|
export declare const startSwitchboard: (options?: StartServerOptions) => Promise<SwitchboardReactor>;
|
|
4
4
|
export * from "./types.js";
|
|
5
|
+
export { getConnectCrypto, getConnectDid, getBearerToken, } from "./connect-crypto.js";
|
|
5
6
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/src/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":";AA0CA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiQzE,eAAO,MAAM,gBAAgB,GAC3B,UAAS,kBAAuB,KAC/B,OAAO,CAAC,kBAAkB,CAuC5B,CAAC;AAEF,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,cAAc,GACf,MAAM,qBAAqB,CAAC"}
|
package/dist/src/server.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { PGlite } from "@electric-sql/pglite";
|
|
3
|
-
import { EventBus, ReactorBuilder, ReactorClientBuilder, } from "@powerhousedao/reactor";
|
|
3
|
+
import { CompositeChannelFactory, EventBus, ReactorBuilder, ReactorClientBuilder, SyncBuilder, } from "@powerhousedao/reactor";
|
|
4
4
|
import { VitePackageLoader, getUniqueDocumentModels, initializeAndStartAPI, startViteServer, } from "@powerhousedao/reactor-api";
|
|
5
5
|
import * as Sentry from "@sentry/node";
|
|
6
6
|
import { DocumentAlreadyExistsError, InMemoryCache, ReactorBuilder as LegacyReactorBuilder, RedisCache, childLogger, driveDocumentModelModule, } from "document-drive";
|
|
@@ -14,6 +14,7 @@ import { PGliteDialect } from "kysely-pglite-dialect";
|
|
|
14
14
|
import path from "path";
|
|
15
15
|
import { Pool } from "pg";
|
|
16
16
|
import { initRedis } from "./clients/redis.js";
|
|
17
|
+
import { initConnectCrypto } from "./connect-crypto.js";
|
|
17
18
|
import { initFeatureFlags } from "./feature-flags.js";
|
|
18
19
|
import { initProfilerFromEnv } from "./profiler.js";
|
|
19
20
|
import { addDefaultDrive, addRemoteDrive, isPostgresUrl } from "./utils.js";
|
|
@@ -70,7 +71,7 @@ async function initReactorStorage(cache, dbPath = "./.ph/drive-storage") {
|
|
|
70
71
|
storagePath: filesystemPath,
|
|
71
72
|
};
|
|
72
73
|
}
|
|
73
|
-
async function initServer(serverPort, options) {
|
|
74
|
+
async function initServer(serverPort, options, connectCrypto) {
|
|
74
75
|
const { dev, packages = [], remoteDrives = [] } = options;
|
|
75
76
|
const dbPath = options.dbPath ?? process.env.DATABASE_URL;
|
|
76
77
|
// start redis if configured
|
|
@@ -119,6 +120,7 @@ async function initServer(serverPort, options) {
|
|
|
119
120
|
...documentModels,
|
|
120
121
|
]))
|
|
121
122
|
.withLegacyStorage(storage)
|
|
123
|
+
.withSync(new SyncBuilder().withChannelFactory(new CompositeChannelFactory()))
|
|
122
124
|
.withFeatures({
|
|
123
125
|
legacyStorageEnabled: true,
|
|
124
126
|
});
|
|
@@ -140,10 +142,14 @@ async function initServer(serverPort, options) {
|
|
|
140
142
|
});
|
|
141
143
|
builder.withKysely(kysely);
|
|
142
144
|
}
|
|
143
|
-
const
|
|
145
|
+
const module = await new ReactorClientBuilder()
|
|
144
146
|
.withReactorBuilder(builder)
|
|
145
|
-
.
|
|
146
|
-
|
|
147
|
+
.buildModule();
|
|
148
|
+
const syncManager = module.reactorModule?.syncModule?.syncManager;
|
|
149
|
+
if (!syncManager) {
|
|
150
|
+
throw new Error("SyncManager not available from ReactorClientBuilder");
|
|
151
|
+
}
|
|
152
|
+
return { client: module.client, syncManager };
|
|
147
153
|
};
|
|
148
154
|
let defaultDriveUrl = undefined;
|
|
149
155
|
// TODO get path from powerhouse config
|
|
@@ -169,10 +175,10 @@ async function initServer(serverPort, options) {
|
|
|
169
175
|
path.join(process.cwd(), "powerhouse.config.json"),
|
|
170
176
|
mcp: options.mcp ?? true,
|
|
171
177
|
});
|
|
172
|
-
const { driveServer } = api;
|
|
178
|
+
const { client, driveServer } = api;
|
|
173
179
|
// Create default drive if provided
|
|
174
180
|
if (options.drive) {
|
|
175
|
-
defaultDriveUrl = await addDefaultDrive(
|
|
181
|
+
defaultDriveUrl = await addDefaultDrive(client, options.drive, serverPort);
|
|
176
182
|
}
|
|
177
183
|
// add vite middleware after express app is initialized if applicable
|
|
178
184
|
if (vite) {
|
|
@@ -209,6 +215,7 @@ async function initServer(serverPort, options) {
|
|
|
209
215
|
defaultDriveUrl,
|
|
210
216
|
api,
|
|
211
217
|
reactor: driveServer,
|
|
218
|
+
connectCrypto,
|
|
212
219
|
};
|
|
213
220
|
}
|
|
214
221
|
export const startSwitchboard = async (options = {}) => {
|
|
@@ -227,8 +234,19 @@ export const startSwitchboard = async (options = {}) => {
|
|
|
227
234
|
logger.error("Error starting profiler", e);
|
|
228
235
|
}
|
|
229
236
|
}
|
|
237
|
+
// Initialize ConnectCrypto if identity options are provided or keypair exists
|
|
238
|
+
let connectCrypto = null;
|
|
239
|
+
try {
|
|
240
|
+
connectCrypto = await initConnectCrypto(options.identity);
|
|
241
|
+
}
|
|
242
|
+
catch (e) {
|
|
243
|
+
logger.warn("Failed to initialize ConnectCrypto:", e);
|
|
244
|
+
if (options.identity?.requireExisting) {
|
|
245
|
+
throw new Error('Identity required but failed to initialize. Run "ph login" first.');
|
|
246
|
+
}
|
|
247
|
+
}
|
|
230
248
|
try {
|
|
231
|
-
return await initServer(serverPort, options);
|
|
249
|
+
return await initServer(serverPort, options, connectCrypto);
|
|
232
250
|
}
|
|
233
251
|
catch (e) {
|
|
234
252
|
Sentry.captureException(e);
|
|
@@ -237,4 +255,5 @@ export const startSwitchboard = async (options = {}) => {
|
|
|
237
255
|
}
|
|
238
256
|
};
|
|
239
257
|
export * from "./types.js";
|
|
258
|
+
export { getConnectCrypto, getConnectDid, getBearerToken, } from "./connect-crypto.js";
|
|
240
259
|
//# 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":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,
|
|
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,9 +1,19 @@
|
|
|
1
|
+
import type { IConnectCrypto } from "@renown/sdk";
|
|
1
2
|
import type { DriveInput, IDocumentDriveServer } from "document-drive";
|
|
2
3
|
export type StorageOptions = {
|
|
3
4
|
type: "filesystem" | "memory" | "postgres" | "browser";
|
|
4
5
|
filesystemPath?: string;
|
|
5
6
|
postgresUrl?: string;
|
|
6
7
|
};
|
|
8
|
+
export type IdentityOptions = {
|
|
9
|
+
/** Path to the keypair file. Defaults to ~/.ph/keypair.json */
|
|
10
|
+
keypairPath?: string;
|
|
11
|
+
/**
|
|
12
|
+
* If true, won't start without an existing keypair.
|
|
13
|
+
* Use this to ensure the switchboard only runs with an authenticated identity.
|
|
14
|
+
*/
|
|
15
|
+
requireExisting?: boolean;
|
|
16
|
+
};
|
|
7
17
|
export type StartServerOptions = {
|
|
8
18
|
configFile?: string;
|
|
9
19
|
port?: number;
|
|
@@ -22,6 +32,12 @@ export type StartServerOptions = {
|
|
|
22
32
|
users: string[];
|
|
23
33
|
admins: string[];
|
|
24
34
|
};
|
|
35
|
+
/**
|
|
36
|
+
* Identity options for ConnectCrypto.
|
|
37
|
+
* When configured, the switchboard will load the keypair from `ph login`
|
|
38
|
+
* and can authenticate with remote services on behalf of the user.
|
|
39
|
+
*/
|
|
40
|
+
identity?: IdentityOptions;
|
|
25
41
|
mcp?: boolean;
|
|
26
42
|
processorConfig?: Map<string, unknown>;
|
|
27
43
|
disableLocalPackages?: boolean;
|
|
@@ -32,5 +48,7 @@ export type StartServerOptions = {
|
|
|
32
48
|
export type SwitchboardReactor = {
|
|
33
49
|
defaultDriveUrl: string | undefined;
|
|
34
50
|
reactor: IDocumentDriveServer;
|
|
51
|
+
/** The ConnectCrypto instance if identity was initialized */
|
|
52
|
+
connectCrypto: IConnectCrypto | null;
|
|
35
53
|
};
|
|
36
54
|
//# 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,UAAU,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEvE,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,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,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,sBAAsB,CAAC,EAAE,OAAO,CAAC;KAClC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,OAAO,EAAE,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEvE,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;CAC3B,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,sBAAsB,CAAC,EAAE,OAAO,CAAC;KAClC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,6DAA6D;IAC7D,aAAa,EAAE,cAAc,GAAG,IAAI,CAAC;CACtC,CAAC"}
|
package/dist/src/utils.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
1
|
+
import type { IReactorClient } from "@powerhousedao/reactor";
|
|
2
|
+
import type { DocumentDriveDocument, DriveInput } from "document-drive";
|
|
3
|
+
import type { IDocumentDriveServer } from "document-drive";
|
|
4
|
+
export declare function addDefaultDrive(client: IReactorClient, drive: DriveInput, serverPort: number): Promise<string>;
|
|
3
5
|
export declare function isPostgresUrl(url: string): boolean;
|
|
4
6
|
export declare function addRemoteDrive(driveServer: IDocumentDriveServer, remoteDriveUrl: string): Promise<DocumentDriveDocument>;
|
|
5
7
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/src/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
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,qBAAqB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG3D,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,mBAiDnB;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,WAExC;AAED,wBAAsB,cAAc,CAClC,WAAW,EAAE,oBAAoB,EACjC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,qBAAqB,CAAC,CAyBhC"}
|
package/dist/src/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { driveCreateDocument, driveCreateState } from "document-drive";
|
|
2
2
|
import { generateId } from "document-model/core";
|
|
3
|
-
export async function addDefaultDrive(
|
|
3
|
+
export async function addDefaultDrive(client, drive, serverPort) {
|
|
4
4
|
let driveId = drive.id;
|
|
5
5
|
if (!driveId || driveId.length === 0) {
|
|
6
6
|
driveId = drive.slug;
|
|
@@ -8,12 +8,38 @@ export async function addDefaultDrive(driveServer, drive, serverPort) {
|
|
|
8
8
|
if (!driveId || driveId.length === 0) {
|
|
9
9
|
throw new Error("Invalid Drive Id");
|
|
10
10
|
}
|
|
11
|
+
const { global } = driveCreateState();
|
|
12
|
+
const document = driveCreateDocument({
|
|
13
|
+
global: {
|
|
14
|
+
...global,
|
|
15
|
+
name: drive.global.name,
|
|
16
|
+
icon: drive.global.icon ?? global.icon,
|
|
17
|
+
},
|
|
18
|
+
local: {
|
|
19
|
+
availableOffline: drive.local?.availableOffline ?? false,
|
|
20
|
+
sharingType: drive.local?.sharingType ?? "public",
|
|
21
|
+
listeners: drive.local?.listeners ?? [],
|
|
22
|
+
triggers: drive.local?.triggers ?? [],
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
if (drive.id && drive.id.length > 0) {
|
|
26
|
+
document.header.id = drive.id;
|
|
27
|
+
}
|
|
28
|
+
if (drive.slug && drive.slug.length > 0) {
|
|
29
|
+
document.header.slug = drive.slug;
|
|
30
|
+
}
|
|
31
|
+
if (drive.global.name) {
|
|
32
|
+
document.header.name = drive.global.name;
|
|
33
|
+
}
|
|
34
|
+
if (drive.preferredEditor) {
|
|
35
|
+
document.header.meta = { preferredEditor: drive.preferredEditor };
|
|
36
|
+
}
|
|
11
37
|
try {
|
|
12
|
-
|
|
13
|
-
await driveServer.addDrive(drive);
|
|
38
|
+
await client.create(document);
|
|
14
39
|
}
|
|
15
40
|
catch (e) {
|
|
16
|
-
|
|
41
|
+
const errorMessage = e instanceof Error ? e.message : String(e);
|
|
42
|
+
if (!errorMessage.includes("already exists")) {
|
|
17
43
|
throw e;
|
|
18
44
|
}
|
|
19
45
|
}
|
package/dist/src/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|