@powerhousedao/switchboard 4.1.0-dev.8 → 4.1.0-dev.81

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/README.md CHANGED
@@ -56,15 +56,16 @@ pnpm add -g @powerhousedao/switchboard
56
56
 
57
57
  ### Environment Variables
58
58
 
59
- | Variable | Description | Default |
60
- |----------|-------------|---------|
61
- | `PORT` | Server port | `4001` |
62
- | `DATABASE_URL` | Database connection string | `./.ph/drive-storage` |
63
- | `REDIS_URL` | Redis connection URL | - |
64
- | `REDIS_TLS_URL` | Redis TLS connection URL | - |
65
- | `SENTRY_DSN` | Sentry DSN for error tracking | - |
66
- | `SENTRY_ENV` | Sentry environment | - |
67
- | `PYROSCOPE_SERVER_ADDRESS` | Pyroscope server address | - |
59
+ | Variable | Description | Default |
60
+ | ---------------------------- | ---------------------------------- | --------------------- |
61
+ | `PORT` | Server port | `4001` |
62
+ | `DATABASE_URL` | Database connection string | `./.ph/drive-storage` |
63
+ | `REDIS_URL` | Redis connection URL | - |
64
+ | `REDIS_TLS_URL` | Redis TLS connection URL | - |
65
+ | `SENTRY_DSN` | Sentry DSN for error tracking | - |
66
+ | `SENTRY_ENV` | Sentry environment | - |
67
+ | `PYROSCOPE_SERVER_ADDRESS` | Pyroscope server address | - |
68
+ | `FEATURE_REACTORV2_ENABLED` | Enable Reactor v2 subgraph feature | `false` |
68
69
 
69
70
  ### Authentication Configuration
70
71
 
@@ -72,10 +73,10 @@ pnpm add -g @powerhousedao/switchboard
72
73
  const options = {
73
74
  auth: {
74
75
  enabled: true,
75
- guests: ['0x123', '0x456'],
76
- users: ['0x789', '0xabc'],
77
- admins: ['0xdef', '0xghi']
78
- }
76
+ guests: ["0x123", "0x456"],
77
+ users: ["0x789", "0xabc"],
78
+ admins: ["0xdef", "0xghi"],
79
+ },
79
80
  };
80
81
  ```
81
82
 
@@ -92,7 +93,7 @@ Switchboard supports multiple storage backends:
92
93
  ### Using Docker Compose
93
94
 
94
95
  ```yaml
95
- version: '3.8'
96
+ version: "3.8"
96
97
  services:
97
98
  switchboard:
98
99
  image: powerhouse/switchboard:latest
@@ -1,4 +1,4 @@
1
- import { type RedisClientType } from "redis";
1
+ import type { RedisClientType } from "redis";
2
2
  export declare let redisClient: RedisClientType | undefined;
3
3
  export declare const initRedis: (url: string) => Promise<RedisClientType | undefined>;
4
4
  export declare const closeRedis: () => Promise<void> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/clients/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,OAAO,CAAC;AAE3D,eAAO,IAAI,WAAW,EAAE,eAAe,GAAG,SAAS,CAAC;AACpD,eAAO,MAAM,SAAS,GACpB,KAAK,MAAM,KACV,OAAO,CAAC,eAAe,GAAG,SAAS,CAiCrC,CAAC;AAeF,eAAO,MAAM,UAAU,iCAItB,CAAC"}
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/clients/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAG7C,eAAO,IAAI,WAAW,EAAE,eAAe,GAAG,SAAS,CAAC;AACpD,eAAO,MAAM,SAAS,GACpB,KAAK,MAAM,KACV,OAAO,CAAC,eAAe,GAAG,SAAS,CAiCrC,CAAC;AAeF,eAAO,MAAM,UAAU,iCAItB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/clients/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAwB,MAAM,OAAO,CAAC;AAE3D,MAAM,CAAC,IAAI,WAAwC,CAAC;AACpD,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,GAAW,EAC2B,EAAE;IACxC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACnC,CAAC,CAAC;gBACE,GAAG,EAAE,IAAI;gBACT,kBAAkB,EAAE,KAAK;aAC1B;YACH,CAAC,CAAC,SAAS,CAAC;QACd,WAAW,GAAG,YAAY,CAAC;YACzB,GAAG;YACH,MAAM;SACP,CAAC,CAAC;QAEH,WAAW;aACR,OAAO,EAAE;aACT,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,WAAW,GAAG,MAAM,CAAC;YAErB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACzB,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;aACD,KAAK,CAAC,KAAK,EAAE,CAAU,EAAE,EAAE;YAC1B,MAAM,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,kCAAkC;YAClC,yCAAyC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,WAAW,CACvB,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC,EACD,IAAI,GAAG,EAAE,GAAG,CAAC,CACd,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,aAAa,CAAC,KAAK,CAAC,CAAC;IAErB,OAAO,WAAW,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC,CAAC"}
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/clients/redis.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAErC,MAAM,CAAC,IAAI,WAAwC,CAAC;AACpD,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,GAAW,EAC2B,EAAE;IACxC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACnC,CAAC,CAAC;gBACE,GAAG,EAAE,IAAI;gBACT,kBAAkB,EAAE,KAAK;aAC1B;YACH,CAAC,CAAC,SAAS,CAAC;QACd,WAAW,GAAG,YAAY,CAAC;YACzB,GAAG;YACH,MAAM;SACP,CAAC,CAAC;QAEH,WAAW;aACR,OAAO,EAAE;aACT,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,WAAW,GAAG,MAAM,CAAC;YAErB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACzB,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;aACD,KAAK,CAAC,KAAK,EAAE,CAAU,EAAE,EAAE;YAC1B,MAAM,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,kCAAkC;YAClC,yCAAyC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,WAAW,CACvB,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC,EACD,IAAI,GAAG,EAAE,GAAG,CAAC,CACd,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,aAAa,CAAC,KAAK,CAAC,CAAC;IAErB,OAAO,WAAW,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC,CAAC"}
@@ -3,6 +3,7 @@ interface Config {
3
3
  url: string;
4
4
  };
5
5
  port: number;
6
+ mcp: boolean;
6
7
  }
7
8
  export declare const config: Config;
8
9
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAMA,UAAU,MAAM;IACd,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;CACd;AACD,eAAO,MAAM,MAAM,EAAE,MAapB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAMA,UAAU,MAAM;IACd,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;CACd;AACD,eAAO,MAAM,MAAM,EAAE,MAcpB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import dotenv from "dotenv";
2
2
  dotenv.config();
3
- import { getConfig } from "@powerhousedao/config/utils";
3
+ import { getConfig } from "@powerhousedao/config/node";
4
4
  const phConfig = getConfig();
5
5
  const { switchboard } = phConfig;
6
6
  export const config = {
@@ -14,5 +14,6 @@ export const config = {
14
14
  !isNaN(Number(process.env.PH_SWITCHBOARD_PORT))
15
15
  ? Number(process.env.PH_SWITCHBOARD_PORT)
16
16
  : (switchboard?.port ?? 4001),
17
+ mcp: true,
17
18
  };
18
19
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;AAC7B,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC;AAOjC,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,QAAQ,EAAE;QACR,0FAA0F;QAC1F,GAAG,EACD,OAAO,CAAC,GAAG,CAAC,2BAA2B;YACvC,WAAW,EAAE,QAAQ,EAAE,GAAG;YAC1B,QAAQ;KACX;IACD,IAAI,EACF,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAC/B,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC7C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACzC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC;CAClC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;AAC7B,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC;AAQjC,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,QAAQ,EAAE;QACR,0FAA0F;QAC1F,GAAG,EACD,OAAO,CAAC,GAAG,CAAC,2BAA2B;YACvC,WAAW,EAAE,QAAQ,EAAE,GAAG;YAC1B,QAAQ;KACX;IACD,IAAI,EACF,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAC/B,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC7C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACzC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC;IACjC,GAAG,EAAE,IAAI;CACV,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function initFeatureFlags(): Promise<import("@openfeature/server-sdk").Client>;
2
+ export declare function isReactorv2Enabled(): Promise<boolean>;
3
+ export declare function isDualActionCreateEnabled(): Promise<boolean>;
4
+ //# sourceMappingURL=feature-flags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../src/feature-flags.ts"],"names":[],"mappings":"AAGA,wBAAsB,gBAAgB,sDAOrC;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG3D;AAED,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,OAAO,CAAC,CAMlE"}
@@ -0,0 +1,17 @@
1
+ import { EnvVarProvider } from "@openfeature/env-var-provider";
2
+ import { OpenFeature } from "@openfeature/server-sdk";
3
+ export async function initFeatureFlags() {
4
+ // for now, we're only using env vars for feature flags
5
+ const provider = new EnvVarProvider();
6
+ await OpenFeature.setProviderAndWait(provider);
7
+ return OpenFeature.getClient();
8
+ }
9
+ export async function isReactorv2Enabled() {
10
+ const client = OpenFeature.getClient();
11
+ return await client.getBooleanValue("FEATURE_REACTORV2_ENABLED", false);
12
+ }
13
+ export async function isDualActionCreateEnabled() {
14
+ const client = OpenFeature.getClient();
15
+ return await client.getBooleanValue("FEATURE_DUAL_ACTION_CREATE_ENABLED", false);
16
+ }
17
+ //# sourceMappingURL=feature-flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-flags.js","sourceRoot":"","sources":["../../src/feature-flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,uDAAuD;IACvD,MAAM,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;IAEtC,MAAM,WAAW,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAE/C,OAAO,WAAW,CAAC,SAAS,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;IACvC,OAAO,MAAM,MAAM,CAAC,eAAe,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;IACvC,OAAO,MAAM,MAAM,CAAC,eAAe,CACjC,oCAAoC,EACpC,KAAK,CACN,CAAC;AACJ,CAAC"}
package/dist/src/index.js CHANGED
@@ -1,5 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import { config } from "./config.js";
3
3
  import { startSwitchboard } from "./server.js";
4
+ function ensureNodeVersion(minVersion = "22") {
5
+ const version = process.versions.node;
6
+ if (!version) {
7
+ return;
8
+ }
9
+ if (version < minVersion) {
10
+ console.error(`Node version ${minVersion} or higher is required. Current version: ${version}`);
11
+ process.exit(1);
12
+ }
13
+ }
14
+ // Ensure minimum Node.js version
15
+ ensureNodeVersion("22");
4
16
  startSwitchboard(config).catch(console.error);
5
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,SAAS,iBAAiB,CAAC,UAAU,GAAG,IAAI;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAED,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CACX,gBAAgB,UAAU,4CAA4C,OAAO,EAAE,CAChF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AACD,iCAAiC;AACjC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAExB,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { type StartServerOptions, type SwitchboardReactor } from "./types.js";
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
5
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":";AAqBA,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAoB9E,eAAO,MAAM,gBAAgB,GAC3B,UAAS,kBAAuB,KAC/B,OAAO,CAAC,kBAAkB,CAiF5B,CAAC;AAEF,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":";AAsCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAgKzE,eAAO,MAAM,gBAAgB,GAC3B,UAAS,kBAAuB,KAC/B,OAAO,CAAC,kBAAkB,CAgC5B,CAAC;AAEF,cAAc,YAAY,CAAC"}
@@ -1,15 +1,16 @@
1
1
  #!/usr/bin/env node
2
- import { startAPI } from "@powerhousedao/reactor-api";
2
+ import { EventBus, InMemoryJobTracker, InMemoryQueue, Reactor, ReactorClientBuilder, ReadModelCoordinator, } from "@powerhousedao/reactor";
3
+ import { VitePackageLoader, startAPI, startViteServer, } from "@powerhousedao/reactor-api";
3
4
  import * as Sentry from "@sentry/node";
4
- import { InMemoryCache, ReactorBuilder, driveDocumentModelModule, } from "document-drive";
5
- import RedisCache from "document-drive/cache/redis";
5
+ import { DocumentAlreadyExistsError, InMemoryCache, ReactorBuilder, RedisCache, driveDocumentModelModule, } from "document-drive";
6
6
  import { FilesystemStorage } from "document-drive/storage/filesystem";
7
7
  import { PrismaStorageFactory } from "document-drive/storage/prisma";
8
- import { documentModelDocumentModelModule, } from "document-model";
8
+ import { documentModelDocumentModelModule } from "document-model";
9
9
  import dotenv from "dotenv";
10
10
  import express from "express";
11
11
  import path from "path";
12
12
  import { initRedis } from "./clients/redis.js";
13
+ import { initFeatureFlags, isDualActionCreateEnabled, isReactorv2Enabled, } from "./feature-flags.js";
13
14
  import { initProfilerFromEnv } from "./profiler.js";
14
15
  import { addDefaultDrive } from "./utils.js";
15
16
  dotenv.config();
@@ -24,8 +25,129 @@ if (process.env.SENTRY_DSN) {
24
25
  Sentry.setupExpressErrorHandler(app);
25
26
  }
26
27
  const DEFAULT_PORT = process.env.PORT ? Number(process.env.PORT) : 4001;
28
+ async function initServer(serverPort, options) {
29
+ const { dev, packages = [], remoteDrives = [] } = options;
30
+ // start redis if configured
31
+ const redisUrl = process.env.REDIS_TLS_URL ?? process.env.REDIS_URL;
32
+ let redis;
33
+ if (redisUrl) {
34
+ try {
35
+ redis = await initRedis(redisUrl);
36
+ }
37
+ catch (e) {
38
+ console.error(e);
39
+ }
40
+ }
41
+ const connectionString = process.env.DATABASE_URL ?? "./.ph/drive-storage";
42
+ const dbUrl = connectionString.includes("amazonaws") &&
43
+ !connectionString.includes("sslmode=no-verify")
44
+ ? connectionString + "?sslmode=no-verify"
45
+ : connectionString;
46
+ const cache = redis ? new RedisCache(redis) : new InMemoryCache();
47
+ const storageFactory = dbUrl.startsWith("postgresql")
48
+ ? new PrismaStorageFactory(dbUrl, cache)
49
+ : undefined;
50
+ const storage = storageFactory
51
+ ? storageFactory.build()
52
+ : new FilesystemStorage(path.join(process.cwd(), dbUrl));
53
+ const driveServer = new ReactorBuilder([
54
+ documentModelDocumentModelModule,
55
+ driveDocumentModelModule,
56
+ ])
57
+ .withStorage(storage)
58
+ .withCache(cache)
59
+ .withOptions({
60
+ featureFlags: {
61
+ enableDualActionCreate: options.reactorOptions?.enableDualActionCreate ?? false,
62
+ },
63
+ })
64
+ .build();
65
+ // init drive server
66
+ await driveServer.initialize();
67
+ const eventBus = new EventBus();
68
+ const queue = new InMemoryQueue(eventBus);
69
+ const reactor = new Reactor(driveServer, storage, queue, new InMemoryJobTracker(), new ReadModelCoordinator(eventBus, []));
70
+ const client = new ReactorClientBuilder().withReactor(reactor).build();
71
+ const dbPath = dbUrl.startsWith("postgresql") ? dbUrl : ".ph/read-storage";
72
+ let defaultDriveUrl = undefined;
73
+ // Create default drive if provided
74
+ if (options.drive) {
75
+ defaultDriveUrl = await addDefaultDrive(driveServer, options.drive, serverPort);
76
+ }
77
+ // start vite server if dev mode is enabled
78
+ const vite = dev ? await startViteServer() : undefined;
79
+ // get paths to local document models
80
+ if (dev && !options.disableLocalPackages) {
81
+ // TODO get path from powerhouse config
82
+ const basePath = process.cwd();
83
+ packages.push(basePath);
84
+ }
85
+ // create loader
86
+ const packageLoader = vite ? await VitePackageLoader.build(vite) : undefined;
87
+ // Start the API with the reactor and options
88
+ const api = await startAPI(driveServer, client, {
89
+ express: app,
90
+ port: serverPort,
91
+ dbPath: options.dbPath ?? dbPath,
92
+ https: options.https,
93
+ packageLoader,
94
+ packages: packages,
95
+ processorConfig: options.processorConfig,
96
+ configFile: options.configFile ?? path.join(process.cwd(), "powerhouse.config.json"),
97
+ mcp: options.mcp ?? true,
98
+ subgraphs: options.subgraphs,
99
+ });
100
+ // add vite middleware after express app is initialized if applicable
101
+ if (vite) {
102
+ api.app.use(vite.middlewares);
103
+ }
104
+ // Connect to remote drives AFTER packages are loaded
105
+ if (remoteDrives.length > 0) {
106
+ for (const remoteDriveUrl of remoteDrives) {
107
+ try {
108
+ await driveServer.addRemoteDrive(remoteDriveUrl, {
109
+ availableOffline: true,
110
+ sharingType: "public",
111
+ listeners: [],
112
+ triggers: [],
113
+ });
114
+ // Use the first remote drive URL as the default
115
+ if (!defaultDriveUrl) {
116
+ defaultDriveUrl = remoteDriveUrl;
117
+ }
118
+ }
119
+ catch (error) {
120
+ if (error instanceof DocumentAlreadyExistsError) {
121
+ console.info(`Remote drive already added: ${remoteDriveUrl}`);
122
+ // Still use this drive URL as default if not already set
123
+ if (!defaultDriveUrl) {
124
+ defaultDriveUrl = remoteDriveUrl;
125
+ }
126
+ }
127
+ else {
128
+ console.error(`Failed to connect to remote drive ${remoteDriveUrl}:`, error);
129
+ }
130
+ }
131
+ }
132
+ }
133
+ return {
134
+ defaultDriveUrl,
135
+ api,
136
+ reactor: driveServer,
137
+ };
138
+ }
27
139
  export const startSwitchboard = async (options = {}) => {
28
140
  const serverPort = options.port ?? DEFAULT_PORT;
141
+ // Initialize feature flags
142
+ await initFeatureFlags();
143
+ const enabled = await isReactorv2Enabled();
144
+ options.subgraphs = {
145
+ isReactorv2Enabled: enabled,
146
+ };
147
+ const dualActionCreateEnabled = await isDualActionCreateEnabled();
148
+ options.reactorOptions = {
149
+ enableDualActionCreate: dualActionCreateEnabled,
150
+ };
29
151
  if (process.env.PYROSCOPE_SERVER_ADDRESS) {
30
152
  try {
31
153
  await initProfilerFromEnv(process.env);
@@ -36,56 +158,7 @@ export const startSwitchboard = async (options = {}) => {
36
158
  }
37
159
  }
38
160
  try {
39
- const redisUrl = process.env.REDIS_TLS_URL ?? process.env.REDIS_URL;
40
- let redis;
41
- if (redisUrl) {
42
- try {
43
- redis = await initRedis(redisUrl);
44
- }
45
- catch (e) {
46
- console.error(e);
47
- }
48
- }
49
- const connectionString = process.env.DATABASE_URL ?? "./.ph/drive-storage";
50
- const dbUrl = connectionString.includes("amazonaws") &&
51
- !connectionString.includes("sslmode=no-verify")
52
- ? connectionString + "?sslmode=no-verify"
53
- : connectionString;
54
- const cache = redis ? new RedisCache(redis) : new InMemoryCache();
55
- const storageFactory = dbUrl.startsWith("postgresql")
56
- ? new PrismaStorageFactory(dbUrl, cache)
57
- : undefined;
58
- const storage = storageFactory
59
- ? storageFactory.build()
60
- : new FilesystemStorage(path.join(process.cwd(), dbUrl));
61
- const reactor = new ReactorBuilder([
62
- documentModelDocumentModelModule,
63
- driveDocumentModelModule,
64
- ])
65
- .withStorage(storage)
66
- .withCache(cache)
67
- .build();
68
- // init drive server
69
- await reactor.initialize();
70
- const dbPath = dbUrl.startsWith("postgresql") ? dbUrl : ".ph/read-storage";
71
- let defaultDriveUrl = undefined;
72
- if (options.drive) {
73
- defaultDriveUrl = await addDefaultDrive(reactor, options.drive, serverPort);
74
- }
75
- // Start the API with the reactor and options
76
- await startAPI(reactor, {
77
- express: app,
78
- port: serverPort,
79
- dbPath: options.dbPath ?? dbPath,
80
- https: options.https,
81
- packages: options.packages,
82
- configFile: options.configFile ??
83
- path.join(process.cwd(), "powerhouse.config.json"),
84
- });
85
- return {
86
- defaultDriveUrl,
87
- reactor,
88
- };
161
+ return await initServer(serverPort, options);
89
162
  }
90
163
  catch (e) {
91
164
  Sentry.captureException(e);
@@ -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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"}
@@ -1,4 +1,4 @@
1
- import { type DriveInput, type IDocumentDriveServer } from "document-drive";
1
+ import type { DriveInput, IDocumentDriveServer } from "document-drive";
2
2
  export type StorageOptions = {
3
3
  type: "filesystem" | "memory" | "postgres" | "browser";
4
4
  filesystemPath?: string;
@@ -7,9 +7,11 @@ export type StorageOptions = {
7
7
  export type StartServerOptions = {
8
8
  configFile?: string;
9
9
  port?: number;
10
+ dev?: boolean;
10
11
  dbPath?: string;
11
12
  drive?: DriveInput;
12
13
  packages?: string[];
14
+ remoteDrives?: string[];
13
15
  https?: {
14
16
  keyPath: string;
15
17
  certPath: string;
@@ -20,6 +22,15 @@ export type StartServerOptions = {
20
22
  users: string[];
21
23
  admins: string[];
22
24
  };
25
+ mcp?: boolean;
26
+ processorConfig?: Map<string, unknown>;
27
+ disableLocalPackages?: boolean;
28
+ subgraphs?: {
29
+ isReactorv2Enabled?: boolean;
30
+ };
31
+ reactorOptions?: {
32
+ enableDualActionCreate?: boolean;
33
+ };
23
34
  };
24
35
  export type SwitchboardReactor = {
25
36
  defaultDriveUrl: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE5E,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,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,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;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,OAAO,EAAE,oBAAoB,CAAC;CAC/B,CAAC"}
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,SAAS,CAAC,EAAE;QACV,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,CAAC;IACF,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;CAC/B,CAAC"}
@@ -1,3 +1,3 @@
1
- import { type BaseDocumentDriveServer } from "document-drive";
1
+ import type { BaseDocumentDriveServer } from "document-drive";
2
2
  export declare const getDocumentModelTypeDefs: (documentDriveServer: BaseDocumentDriveServer, typeDefs: string) => import("graphql").DocumentNode;
3
3
  //# sourceMappingURL=gen-doc-model-type-defs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gen-doc-model-type-defs.d.ts","sourceRoot":"","sources":["../../../src/utils/gen-doc-model-type-defs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9D,eAAO,MAAM,wBAAwB,GACnC,qBAAqB,uBAAuB,EAC5C,UAAU,MAAM,mCA2DjB,CAAC"}
1
+ {"version":3,"file":"gen-doc-model-type-defs.d.ts","sourceRoot":"","sources":["../../../src/utils/gen-doc-model-type-defs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9D,eAAO,MAAM,wBAAwB,GACnC,qBAAqB,uBAAuB,EAC5C,UAAU,MAAM,mCAkEjB,CAAC"}
@@ -4,20 +4,20 @@ export const getDocumentModelTypeDefs = (documentDriveServer, typeDefs) => {
4
4
  let dmSchema = "";
5
5
  documentModels.forEach(({ documentModel }) => {
6
6
  dmSchema += `
7
- ${documentModel.specifications
7
+ ${documentModel.global.specifications
8
8
  .map((specification) => specification.state.global.schema
9
- .replaceAll(" Account ", ` ${documentModel.name}Account `)
10
- .replaceAll(`: Account`, `: ${documentModel.name}Account`)
11
- .replaceAll(`[Account!]!`, `[${documentModel.name}Account!]!`)
9
+ .replaceAll(" Account ", ` ${documentModel.global.name}Account `)
10
+ .replaceAll(`: Account`, `: ${documentModel.global.name}Account`)
11
+ .replaceAll(`[Account!]!`, `[${documentModel.global.name}Account!]!`)
12
12
  .replaceAll("scalar DateTime", "")
13
13
  .replaceAll(/input (.*?) {[\s\S]*?}/g, ""))
14
14
  .join("\n")};
15
15
 
16
- ${documentModel.specifications
16
+ ${documentModel.global.specifications
17
17
  .map((specification) => specification.state.local.schema
18
- .replaceAll(" Account ", ` ${documentModel.name}Account `)
19
- .replaceAll(`: Account`, `: ${documentModel.name}Account`)
20
- .replaceAll(`[Account!]!`, `[${documentModel.name}Account!]!`)
18
+ .replaceAll(" Account ", ` ${documentModel.global.name}Account `)
19
+ .replaceAll(`: Account`, `: ${documentModel.global.name}Account`)
20
+ .replaceAll(`[Account!]!`, `[${documentModel.global.name}Account!]!`)
21
21
  .replaceAll("scalar DateTime", "")
22
22
  .replaceAll(/input (.*?) {[\s\S]*?}/g, "")
23
23
  .replaceAll("type AccountSnapshotLocalState", "")
@@ -25,14 +25,15 @@ export const getDocumentModelTypeDefs = (documentDriveServer, typeDefs) => {
25
25
  .replaceAll("type ScopeFrameworkLocalState", ""))
26
26
  .join("\n")};
27
27
 
28
- type ${documentModel.name} implements IDocument {
28
+ type ${documentModel.global.name} implements IDocument {
29
29
  id: ID!
30
30
  name: String!
31
31
  documentType: String!
32
32
  revision: Int!
33
33
  created: DateTime!
34
- lastModified: DateTime!
35
- ${documentModel.name !== "DocumentModel" ? `state: ${documentModel.name}State!` : ""}
34
+ createdAtUtcIso: DateTime!
35
+ lastModifiedAtUtcIso: DateTime!
36
+ ${documentModel.global.name !== "DocumentModel" ? `state: ${documentModel.global.name}State!` : ""}
36
37
  }\n`;
37
38
  });
38
39
  // add the mutation and query types
@@ -43,8 +44,8 @@ export const getDocumentModelTypeDefs = (documentDriveServer, typeDefs) => {
43
44
  documentType: String!
44
45
  revision: Int!
45
46
  created: DateTime!
46
- lastModified: DateTime!
47
-
47
+ createdAtUtcIso: DateTime!
48
+ lastModifiedAtUtcIso: DateTime!
48
49
  }
49
50
  ${dmSchema}
50
51
 
@@ -1 +1 @@
1
- {"version":3,"file":"gen-doc-model-type-defs.js","sourceRoot":"","sources":["../../../src/utils/gen-doc-model-type-defs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,mBAA4C,EAC5C,QAAgB,EAChB,EAAE;IACF,MAAM,cAAc,GAAG,mBAAmB,CAAC,uBAAuB,EAAE,CAAC;IACrE,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE;QAC3C,QAAQ,IAAI;UACN,aAAa,CAAC,cAAc;aAC3B,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CACrB,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;aAC9B,UAAU,CAAC,WAAW,EAAE,IAAI,aAAa,CAAC,IAAI,UAAU,CAAC;aACzD,UAAU,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,IAAI,SAAS,CAAC;aACzD,UAAU,CAAC,aAAa,EAAE,IAAI,aAAa,CAAC,IAAI,YAAY,CAAC;aAC7D,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC;aACjC,UAAU,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAC7C;aACA,IAAI,CAAC,IAAI,CAAC;;UAEX,aAAa,CAAC,cAAc;aAC3B,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CACrB,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;aAC7B,UAAU,CAAC,WAAW,EAAE,IAAI,aAAa,CAAC,IAAI,UAAU,CAAC;aACzD,UAAU,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,IAAI,SAAS,CAAC;aACzD,UAAU,CAAC,aAAa,EAAE,IAAI,aAAa,CAAC,IAAI,YAAY,CAAC;aAC7D,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC;aACjC,UAAU,CAAC,yBAAyB,EAAE,EAAE,CAAC;aACzC,UAAU,CAAC,gCAAgC,EAAE,EAAE,CAAC;aAChD,UAAU,CAAC,gCAAgC,EAAE,EAAE,CAAC;aAChD,UAAU,CAAC,+BAA+B,EAAE,EAAE,CAAC,CACnD;aACA,IAAI,CAAC,IAAI,CAAC;;eAEN,aAAa,CAAC,IAAI;;;;;;;cAOnB,aAAa,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,UAAU,aAAa,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;YACpF,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,mCAAmC;IACnC,MAAM,MAAM,GAAG;;;;;;;;;;MAUX,QAAQ;;MAER,QAAQ;KACT,CAAC;IAEJ,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC"}
1
+ {"version":3,"file":"gen-doc-model-type-defs.js","sourceRoot":"","sources":["../../../src/utils/gen-doc-model-type-defs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,mBAA4C,EAC5C,QAAgB,EAChB,EAAE;IACF,MAAM,cAAc,GAAG,mBAAmB,CAAC,uBAAuB,EAAE,CAAC;IACrE,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE;QAC3C,QAAQ,IAAI;UACN,aAAa,CAAC,MAAM,CAAC,cAAc;aAClC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CACrB,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;aAC9B,UAAU,CAAC,WAAW,EAAE,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC;aAChE,UAAU,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;aAChE,UAAU,CACT,aAAa,EACb,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,YAAY,CAC1C;aACA,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC;aACjC,UAAU,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAC7C;aACA,IAAI,CAAC,IAAI,CAAC;;UAEX,aAAa,CAAC,MAAM,CAAC,cAAc;aAClC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CACrB,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;aAC7B,UAAU,CAAC,WAAW,EAAE,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC;aAChE,UAAU,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;aAChE,UAAU,CACT,aAAa,EACb,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,YAAY,CAC1C;aACA,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC;aACjC,UAAU,CAAC,yBAAyB,EAAE,EAAE,CAAC;aACzC,UAAU,CAAC,gCAAgC,EAAE,EAAE,CAAC;aAChD,UAAU,CAAC,gCAAgC,EAAE,EAAE,CAAC;aAChD,UAAU,CAAC,+BAA+B,EAAE,EAAE,CAAC,CACnD;aACA,IAAI,CAAC,IAAI,CAAC;;eAEN,aAAa,CAAC,MAAM,CAAC,IAAI;;;;;;;;cAQ1B,aAAa,CAAC,MAAM,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,UAAU,aAAa,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;YAClG,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,mCAAmC;IACnC,MAAM,MAAM,GAAG;;;;;;;;;;MAUX,QAAQ;;MAER,QAAQ;KACT,CAAC;IAEJ,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC"}
@@ -1,3 +1,3 @@
1
- import { type DriveInput, type IDocumentDriveServer } from "document-drive";
1
+ import type { DriveInput, IDocumentDriveServer } from "document-drive";
2
2
  export declare function addDefaultDrive(driveServer: IDocumentDriveServer, drive: DriveInput, serverPort: number): Promise<string>;
3
3
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AAExB,wBAAsB,eAAe,CACnC,WAAW,EAAE,oBAAoB,EACjC,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,mBAqBnB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGvE,wBAAsB,eAAe,CACnC,WAAW,EAAE,oBAAoB,EACjC,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,mBAqBnB"}
package/dist/src/utils.js CHANGED
@@ -1,4 +1,4 @@
1
- import { DocumentAlreadyExistsError, } from "document-drive";
1
+ import { DocumentAlreadyExistsError } from "document-drive";
2
2
  export async function addDefaultDrive(driveServer, drive, serverPort) {
3
3
  let driveId = drive.id;
4
4
  if (!driveId || driveId.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,GAG3B,MAAM,gBAAgB,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAiC,EACjC,KAAiB,EACjB,UAAkB;IAElB,IAAI,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;IACvB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAC;QACH,oBAAoB;QACpB,MAAM,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,CAAC,CAAC,YAAY,0BAA0B,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAED,OAAO,oBAAoB,UAAU,MAAM,OAAO,EAAE,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAiC,EACjC,KAAiB,EACjB,UAAkB;IAElB,IAAI,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;IACvB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAC;QACH,oBAAoB;QACpB,MAAM,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,CAAC,CAAC,YAAY,0BAA0B,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAED,OAAO,oBAAoB,UAAU,MAAM,OAAO,EAAE,CAAC;AACvD,CAAC"}