@grest-ts/discovery-local 0.0.37 → 0.0.38

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 (31) hide show
  1. package/README.md +8 -0
  2. package/dist/src/_dedupCheck.js +1 -1
  3. package/dist/src/bin/discovery-local.d.ts +3 -0
  4. package/dist/src/bin/discovery-local.d.ts.map +1 -0
  5. package/dist/src/bin/discovery-local.js +58 -0
  6. package/dist/src/bin/discovery-local.js.map +1 -0
  7. package/dist/src/local/GGDiscoveryIPC.d.ts +8 -0
  8. package/dist/src/local/GGDiscoveryIPC.d.ts.map +1 -1
  9. package/dist/src/local/GGDiscoveryIPC.js +7 -0
  10. package/dist/src/local/GGDiscoveryIPC.js.map +1 -1
  11. package/dist/src/local/GGLocalDiscoveryClient.d.ts +3 -0
  12. package/dist/src/local/GGLocalDiscoveryClient.d.ts.map +1 -1
  13. package/dist/src/local/GGLocalDiscoveryClient.js +38 -2
  14. package/dist/src/local/GGLocalDiscoveryClient.js.map +1 -1
  15. package/dist/src/local/GGLocalDiscoveryResilientClient.d.ts +3 -0
  16. package/dist/src/local/GGLocalDiscoveryResilientClient.d.ts.map +1 -1
  17. package/dist/src/local/GGLocalDiscoveryResilientClient.js +20 -4
  18. package/dist/src/local/GGLocalDiscoveryResilientClient.js.map +1 -1
  19. package/dist/src/local/GGLocalDiscoveryServer.d.ts +4 -1
  20. package/dist/src/local/GGLocalDiscoveryServer.d.ts.map +1 -1
  21. package/dist/src/local/GGLocalDiscoveryServer.js +14 -2
  22. package/dist/src/local/GGLocalDiscoveryServer.js.map +1 -1
  23. package/dist/tsconfig.publish.tsbuildinfo +1 -1
  24. package/package.json +11 -7
  25. package/src/_dedupCheck.ts +1 -1
  26. package/src/bin/discovery-local.ts +58 -0
  27. package/src/local/GGDiscoveryIPC.ts +7 -0
  28. package/src/local/GGLocalDiscoveryClient.ts +36 -2
  29. package/src/local/GGLocalDiscoveryResilientClient.ts +19 -4
  30. package/src/local/GGLocalDiscoveryServer.ts +15 -3
  31. package/src/local/yield.test.ts +70 -0
package/README.md CHANGED
@@ -13,6 +13,14 @@ For a full overview of how discovery works, see the [Discovery guide](@guide/dis
13
13
 
14
14
  Runs a local discovery server that acts as a central router. Service instances connect over IPC, register their routes, and discover each other through the router. The router also acts as a reverse proxy, forwarding requests to the correct backend based on path prefix matching.
15
15
 
16
+ ## Standalone bin
17
+
18
+ ```
19
+ npx @grest-ts/discovery-local --port 9000
20
+ ```
21
+
22
+ Runs `GGLocalDiscoveryServer` as its own process (default port `9000`). Use this when you want the router up before any runtime, with clean ownership and its own logs. Without it, runtimes default to `GGLocalDiscoveryResilientClient` and leader-elect for the router port; with it running, point runtimes at it as plain `GGLocalDiscoveryClient`s.
23
+
16
24
  ## Exported classes
17
25
 
18
26
  | Class | Purpose |
@@ -11,7 +11,7 @@
11
11
  const __KEY = Symbol.for("grest-ts:dedup:@grest-ts/discovery-local");
12
12
  const __slot = globalThis;
13
13
  const __existing = __slot[__KEY];
14
- const __here = { path: import.meta.url, version: "0.0.37" };
14
+ const __here = { path: import.meta.url, version: "0.0.38" };
15
15
  // Same path + same version means the same physical package is being
16
16
  // re-evaluated by a different ESM runner (e.g. vitest projects share one
17
17
  // process but each project has its own module cache). That isn't a true
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env -S npx tsx
2
+ export {};
3
+ //# sourceMappingURL=discovery-local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-local.d.ts","sourceRoot":"","sources":["../../../src/bin/discovery-local.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env -S npx tsx
2
+ /**
3
+ * Standalone launcher for the local discovery router. The bin is
4
+ * authoritative: on EADDRINUSE it sends `requestYield` to the holder
5
+ * and retries the bind. Resilient clients that ever connect to a bin
6
+ * lock out their own leader bids for the rest of their lifetime.
7
+ *
8
+ * npx @grest-ts/discovery-local
9
+ */
10
+ import { GGLog } from "@grest-ts/logger";
11
+ import { GGLocatorScope } from "@grest-ts/locator";
12
+ import { IPCServer, IPCClient } from "@grest-ts/ipc";
13
+ import { GGLocalDiscoveryServer } from "../local/GGLocalDiscoveryServer.js";
14
+ import { GGDiscoveryIPC, DiscoveryServerKind } from "../local/GGDiscoveryIPC.js";
15
+ import { getLocalDiscoveryPort } from "../local/GGLocalDiscoveryClient.js";
16
+ async function main() {
17
+ const port = getLocalDiscoveryPort();
18
+ let router;
19
+ for (let i = 0; i < 100; i++) {
20
+ const candidate = new GGLocalDiscoveryServer(new IPCServer(port), DiscoveryServerKind.Bin);
21
+ if (await candidate.start()) {
22
+ router = candidate;
23
+ break;
24
+ }
25
+ else {
26
+ const c = new IPCClient(port);
27
+ try {
28
+ await c.connect();
29
+ await c.sendFrameworkRequest(GGDiscoveryIPC.discoveryServer.requestYield, undefined);
30
+ }
31
+ catch {
32
+ /* holder may have already gone */
33
+ }
34
+ try {
35
+ c.disconnect();
36
+ }
37
+ catch {
38
+ /* tolerated */
39
+ }
40
+ GGLog.info("discovery-local", `Trying to take over discovery port ${port}`);
41
+ await new Promise(r => setTimeout(r, 50));
42
+ }
43
+ }
44
+ if (!router) {
45
+ GGLog.error("discovery-local", `Could not bind port ${port} after 100 attempts`);
46
+ process.exit(1);
47
+ }
48
+ GGLog.info("discovery-local", `Discovery router listening on port ${port}`);
49
+ const shutdown = () => { router.teardown().finally(() => process.exit(0)); };
50
+ process.on("SIGINT", shutdown);
51
+ process.on("SIGTERM", shutdown);
52
+ }
53
+ const scope = new GGLocatorScope("discovery-local", undefined, "discovery-local");
54
+ scope.run(main).catch((err) => {
55
+ GGLog.error("discovery-local", err);
56
+ process.exit(1);
57
+ });
58
+ //# sourceMappingURL=discovery-local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-local.js","sourceRoot":"","sources":["../../../src/bin/discovery-local.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AACH,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAC,SAAS,EAAE,SAAS,EAAC,MAAM,eAAe,CAAC;AACnD,OAAO,EAAC,sBAAsB,EAAC,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAC,qBAAqB,EAAC,MAAM,iCAAiC,CAAC;AAEtE,KAAK,UAAU,IAAI;IACf,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;IAErC,IAAI,MAA0C,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC3F,IAAI,MAAM,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;YAC1B,MAAM,GAAG,SAAS,CAAC;YACnB,MAAM;QACV,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC;gBACD,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,CAAC,CAAC,oBAAoB,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YACzF,CAAC;YAAC,MAAM,CAAC;gBACD,kCAAkC;YAC1C,CAAC;YACD,IAAI,CAAC;gBACD,CAAC,CAAC,UAAU,EAAE,CAAC;YACnB,CAAC;YAAC,MAAM,CAAC;gBACL,eAAe;YACnB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,sCAAsC,IAAI,EAAE,CAAC,CAAC;YAC5E,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,uBAAuB,IAAI,qBAAqB,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,sCAAsC,IAAI,EAAE,CAAC,CAAC;IAE5E,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,MAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAClF,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC1B,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -4,11 +4,19 @@ export interface DiscoverApiResult {
4
4
  url?: string;
5
5
  error?: string;
6
6
  }
7
+ export declare enum DiscoveryServerKind {
8
+ Bin = "bin",
9
+ Embedded = "embedded"
10
+ }
7
11
  export declare const GGDiscoveryIPC: {
8
12
  discoveryServer: {
9
13
  register: import("@grest-ts/ipc").IPCServerRequest<GGServiceDiscoveryEntry[], void>;
10
14
  unregister: import("@grest-ts/ipc").IPCServerRequest<GGServiceDiscoveryEntry[], void>;
11
15
  discoverApi: import("@grest-ts/ipc").IPCServerRequest<string, DiscoverApiResult>;
16
+ getServerInfo: import("@grest-ts/ipc").IPCServerRequest<undefined, {
17
+ kind: DiscoveryServerKind;
18
+ }>;
19
+ requestYield: import("@grest-ts/ipc").IPCServerRequest<undefined, void>;
12
20
  };
13
21
  };
14
22
  //# sourceMappingURL=GGDiscoveryIPC.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GGDiscoveryIPC.d.ts","sourceRoot":"","sources":["../../../src/local/GGDiscoveryIPC.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,uBAAuB,EAAC,MAAM,0BAA0B,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,cAAc;;;;;;CAM1B,CAAA"}
1
+ {"version":3,"file":"GGDiscoveryIPC.d.ts","sourceRoot":"","sources":["../../../src/local/GGDiscoveryIPC.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,uBAAuB,EAAC,MAAM,0BAA0B,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,oBAAY,mBAAmB;IAC3B,GAAG,QAAQ;IACX,QAAQ,aAAa;CACxB;AAED,eAAO,MAAM,cAAc;;;;;;kBAKsC,mBAAmB;;;;CAGnF,CAAA"}
@@ -1,9 +1,16 @@
1
1
  import { IPCServer } from "@grest-ts/ipc";
2
+ export var DiscoveryServerKind;
3
+ (function (DiscoveryServerKind) {
4
+ DiscoveryServerKind["Bin"] = "bin";
5
+ DiscoveryServerKind["Embedded"] = "embedded";
6
+ })(DiscoveryServerKind || (DiscoveryServerKind = {}));
2
7
  export const GGDiscoveryIPC = {
3
8
  discoveryServer: {
4
9
  register: IPCServer.defineRequest("discovery/register"),
5
10
  unregister: IPCServer.defineRequest("discovery/unregister"),
6
11
  discoverApi: IPCServer.defineRequest("discovery/discoverApi"),
12
+ getServerInfo: IPCServer.defineRequest("discovery/getServerInfo"),
13
+ requestYield: IPCServer.defineRequest("discovery/requestYield"),
7
14
  }
8
15
  };
9
16
  //# sourceMappingURL=GGDiscoveryIPC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GGDiscoveryIPC.js","sourceRoot":"","sources":["../../../src/local/GGDiscoveryIPC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AAUxC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,eAAe,EAAE;QACb,QAAQ,EAAE,SAAS,CAAC,aAAa,CAAkC,oBAAoB,CAAC;QACxF,UAAU,EAAE,SAAS,CAAC,aAAa,CAAkC,sBAAsB,CAAC;QAC5F,WAAW,EAAE,SAAS,CAAC,aAAa,CAA4B,uBAAuB,CAAC;KAC3F;CACJ,CAAA"}
1
+ {"version":3,"file":"GGDiscoveryIPC.js","sourceRoot":"","sources":["../../../src/local/GGDiscoveryIPC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AAUxC,MAAM,CAAN,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC3B,kCAAW,CAAA;IACX,4CAAqB,CAAA;AACzB,CAAC,EAHW,mBAAmB,KAAnB,mBAAmB,QAG9B;AAED,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,eAAe,EAAE;QACb,QAAQ,EAAE,SAAS,CAAC,aAAa,CAAkC,oBAAoB,CAAC;QACxF,UAAU,EAAE,SAAS,CAAC,aAAa,CAAkC,sBAAsB,CAAC;QAC5F,WAAW,EAAE,SAAS,CAAC,aAAa,CAA4B,uBAAuB,CAAC;QACxF,aAAa,EAAE,SAAS,CAAC,aAAa,CAAyC,yBAAyB,CAAC;QACzG,YAAY,EAAE,SAAS,CAAC,aAAa,CAAkB,wBAAwB,CAAC;KACnF;CACJ,CAAA"}
@@ -5,6 +5,9 @@ import { IPCClient } from "@grest-ts/ipc";
5
5
  * If running in tests, the test itself also acts as a service discovery of sorts, allowing multiple instances to run in parallel.
6
6
  */
7
7
  export declare const GG_LOCAL_ROUTER_PORT = "GG_LOCAL_ROUTER_PORT";
8
+ /** Default port for the local discovery router. Centralised so a future
9
+ * change (env-var override, per-environment isolation) has one hook. */
10
+ export declare function getLocalDiscoveryPort(): number;
8
11
  export declare class GGLocalDiscoveryClient extends GGDiscoveryClient {
9
12
  readonly isLocal = true;
10
13
  readonly port: number;
@@ -1 +1 @@
1
- {"version":3,"file":"GGLocalDiscoveryClient.d.ts","sourceRoot":"","sources":["../../../src/local/GGLocalDiscoveryClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,iBAAiB,EAAE,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAE3F,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AAKxC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,yBAAyB,CAAA;AAE1D,qBAAa,sBAAuB,SAAQ,iBAAiB;IAEzD,SAAyB,OAAO,QAAQ;IACxC,SAAgB,IAAI,SAAC;IACrB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,EAAE,CAAM;IAC3D,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;gBAEzB,IAAI,CAAC,EAAE,MAAM;IAgBlB,cAAc,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,IAAI;IAUtD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAa7C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;cAWxB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAKnD;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"GGLocalDiscoveryClient.d.ts","sourceRoot":"","sources":["../../../src/local/GGLocalDiscoveryClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,iBAAiB,EAAE,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAE3F,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AAKxC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,yBAAyB,CAAA;AAE1D;yEACyE;AACzE,wBAAgB,qBAAqB,IAAI,MAAM,CAQ9C;AAED,qBAAa,sBAAuB,SAAQ,iBAAiB;IAEzD,SAAyB,OAAO,QAAQ;IACxC,SAAgB,IAAI,SAAC;IACrB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,EAAE,CAAM;IAC3D,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;gBAEzB,IAAI,CAAC,EAAE,MAAM;IAgBlB,cAAc,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,IAAI;IAUtD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAa7C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;cAWxB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAkBnD;AAWD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACtB"}
@@ -9,6 +9,18 @@ import { SERVER_ERROR } from "@grest-ts/schema";
9
9
  * If running in tests, the test itself also acts as a service discovery of sorts, allowing multiple instances to run in parallel.
10
10
  */
11
11
  export const GG_LOCAL_ROUTER_PORT = "GG_LOCAL_ROUTER_PORT";
12
+ /** Default port for the local discovery router. Centralised so a future
13
+ * change (env-var override, per-environment isolation) has one hook. */
14
+ export function getLocalDiscoveryPort() {
15
+ const v = process.env[GG_LOCAL_ROUTER_PORT];
16
+ if (v === undefined)
17
+ return 9000;
18
+ const n = Number(v);
19
+ if (!Number.isInteger(n) || n <= 0) {
20
+ throw new Error(`Invalid ${GG_LOCAL_ROUTER_PORT}=${v}, expected positive integer`);
21
+ }
22
+ return n;
23
+ }
12
24
  export class GGLocalDiscoveryClient extends GGDiscoveryClient {
13
25
  isLocal = true;
14
26
  port;
@@ -69,9 +81,33 @@ export class GGLocalDiscoveryClient extends GGDiscoveryClient {
69
81
  this.client.disconnect();
70
82
  }
71
83
  async ensureConnected() {
72
- if (!this.client.isConnected()) {
73
- await this.client.connect();
84
+ if (this.client.isConnected())
85
+ return;
86
+ // Retry with backoff: when the router runs as its own process
87
+ // (e.g. launched via the `discovery-local` bin), a runtime can
88
+ // come up before the router has bound its port. Tolerate that
89
+ // instead of failing the runtime's startup outright.
90
+ const maxRetries = 20;
91
+ for (let attempt = 0;; attempt++) {
92
+ try {
93
+ await this.client.connect();
94
+ return;
95
+ }
96
+ catch (err) {
97
+ if (attempt >= maxRetries || !isConnectionError(err))
98
+ throw err;
99
+ GGLog.debug(this, "Waiting for discovery router...");
100
+ await new Promise(r => setTimeout(r, Math.min(500 * Math.pow(1.5, attempt), 5000)));
101
+ }
74
102
  }
75
103
  }
76
104
  }
105
+ /** True for the transient socket errors seen while a router process is
106
+ * still coming up — worth retrying, unlike a real protocol failure. */
107
+ function isConnectionError(err) {
108
+ const codes = ["ECONNREFUSED", "ETIMEDOUT", "ECONNRESET", "ENOENT"];
109
+ const has = (code) => code !== undefined && codes.includes(code);
110
+ return has(err?.code) || has(err?.cause?.code)
111
+ || has(err?.originalError?.code) || has(err?.originalError?.cause?.code);
112
+ }
77
113
  //# sourceMappingURL=GGLocalDiscoveryClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GGLocalDiscoveryClient.js","sourceRoot":"","sources":["../../../src/local/GGLocalDiscoveryClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GGLocalDiscoveryClient.js","sourceRoot":"","sources":["../../../src/local/GGLocalDiscoveryClient.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,9 @@ export declare class GGLocalDiscoveryResilientClient extends GGLocalDiscoveryCli
3
3
  private discoveryServer?;
4
4
  private isLeader;
5
5
  private isShuttingDown;
6
+ /** Once any bin has held the port in this runtime's lifetime, never
7
+ * bid for it again. In-memory only. */
8
+ private seenBinBasedMaster;
6
9
  constructor(port?: number);
7
10
  register(): Promise<void>;
8
11
  unregister(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"GGLocalDiscoveryResilientClient.d.ts","sourceRoot":"","sources":["../../../src/local/GGLocalDiscoveryResilientClient.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAEhE,qBAAa,+BAAgC,SAAQ,sBAAsB;IAEvE,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAS;gBAEnB,IAAI,SAAO;IAID,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAOzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAUnC,sBAAsB;YAgBtB,eAAe;cAuBJ,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBzD,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,iBAAiB;CAQ5B"}
1
+ {"version":3,"file":"GGLocalDiscoveryResilientClient.d.ts","sourceRoot":"","sources":["../../../src/local/GGLocalDiscoveryResilientClient.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,sBAAsB,EAAwB,MAAM,0BAA0B,CAAC;AAGvF,qBAAa,+BAAgC,SAAQ,sBAAsB;IAEvE,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAS;IAC/B;4CACwC;IACxC,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,IAAI,SAA0B;IAIpB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAOzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAUnC,sBAAsB;YAsBtB,eAAe;cA4BJ,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBzD,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,iBAAiB;CAQ5B"}
@@ -1,12 +1,16 @@
1
1
  import { GGLog } from "@grest-ts/logger";
2
2
  import { IPCServer } from "@grest-ts/ipc";
3
3
  import { GGLocalDiscoveryServer } from "./GGLocalDiscoveryServer.js";
4
- import { GGLocalDiscoveryClient } from "./GGLocalDiscoveryClient.js";
4
+ import { GGLocalDiscoveryClient, getLocalDiscoveryPort } from "./GGLocalDiscoveryClient.js";
5
+ import { GGDiscoveryIPC, DiscoveryServerKind } from "./GGDiscoveryIPC.js";
5
6
  export class GGLocalDiscoveryResilientClient extends GGLocalDiscoveryClient {
6
7
  discoveryServer;
7
8
  isLeader = false;
8
9
  isShuttingDown = false;
9
- constructor(port = 9000) {
10
+ /** Once any bin has held the port in this runtime's lifetime, never
11
+ * bid for it again. In-memory only. */
12
+ seenBinBasedMaster = false;
13
+ constructor(port = getLocalDiscoveryPort()) {
10
14
  super(port);
11
15
  }
12
16
  async register() {
@@ -26,11 +30,18 @@ export class GGLocalDiscoveryResilientClient extends GGLocalDiscoveryClient {
26
30
  async becomeLeaderOrFollower() {
27
31
  if (this.isShuttingDown)
28
32
  return;
29
- const server = new IPCServer(this.port);
30
- const router = new GGLocalDiscoveryServer(server);
33
+ if (this.seenBinBasedMaster)
34
+ return this.connectToLeader();
35
+ const router = new GGLocalDiscoveryServer(new IPCServer(this.port));
31
36
  if (await router.start()) {
32
37
  this.discoveryServer = router;
33
38
  this.isLeader = true;
39
+ router.onYield = async () => {
40
+ this.seenBinBasedMaster = true;
41
+ this.isLeader = false;
42
+ this.discoveryServer = undefined;
43
+ await this.connectToLeader();
44
+ };
34
45
  GGLog.info(this, "This instance is LEADER");
35
46
  }
36
47
  else {
@@ -44,6 +55,11 @@ export class GGLocalDiscoveryResilientClient extends GGLocalDiscoveryClient {
44
55
  return;
45
56
  try {
46
57
  await this.client.connect();
58
+ if (!this.seenBinBasedMaster) {
59
+ const info = await this.client.sendFrameworkRequest(GGDiscoveryIPC.discoveryServer.getServerInfo, undefined);
60
+ if (info.kind === DiscoveryServerKind.Bin)
61
+ this.seenBinBasedMaster = true;
62
+ }
47
63
  this.client.onClose(async () => {
48
64
  if (this.isShuttingDown)
49
65
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"GGLocalDiscoveryResilientClient.js","sourceRoot":"","sources":["../../../src/local/GGLocalDiscoveryResilientClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GGLocalDiscoveryResilientClient.js","sourceRoot":"","sources":["../../../src/local/GGLocalDiscoveryResilientClient.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { FirstStrategy } from "./routing/strategies/FirstStrategy";
4
4
  import { LastStrategy } from "./routing/strategies/LastStrategy";
5
5
  import { RandomStrategy } from "./routing/strategies/RandomStrategy";
6
6
  import { RoundRobinStrategy } from "./routing/strategies/RoundRobinStrategy";
7
+ import { DiscoveryServerKind } from "./GGDiscoveryIPC";
7
8
  import { GGServiceDiscoveryEntry } from "./GGLocalDiscoveryClient";
8
9
  export declare const ROUTING_STRATEGIES: {
9
10
  readonly first: FirstStrategy;
@@ -13,10 +14,12 @@ export declare const ROUTING_STRATEGIES: {
13
14
  };
14
15
  export type RoutingStrategyName = "first" | "last" | "roundRobin" | "random" | RoutingStrategy;
15
16
  export declare class GGLocalDiscoveryServer {
17
+ readonly kind: DiscoveryServerKind;
16
18
  private readonly server;
17
19
  private readonly routes;
18
20
  private readonly routingStrategies;
19
- constructor(server: IPCServer);
21
+ onYield?: () => Promise<void>;
22
+ constructor(server: IPCServer, kind?: DiscoveryServerKind);
20
23
  start(): Promise<boolean>;
21
24
  teardown(): Promise<void>;
22
25
  setRoutingStrategy(api: string, strategy: RoutingStrategyName | RoutingStrategy): void;
@@ -1 +1 @@
1
- {"version":3,"file":"GGLocalDiscoveryServer.d.ts","sourceRoot":"","sources":["../../../src/local/GGLocalDiscoveryServer.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AACxC,OAAO,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAC,aAAa,EAAC,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAC,YAAY,EAAC,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAC,cAAc,EAAC,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAC,kBAAkB,EAAC,MAAM,yCAAyC,CAAC;AAE3E,OAAO,EAAC,uBAAuB,EAAC,MAAM,0BAA0B,CAAC;AAEjE,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,eAAe,CAAC;AAY/F,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;IACpE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2C;gBAEjE,MAAM,EAAE,SAAS;IAqChB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAQzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/B,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,eAAe,GAAG,IAAI;IAM7F,OAAO,CAAC,kBAAkB;IAInB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS;IAS1D,QAAQ,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI;IAOrD;sEACkE;IAClE,OAAO,CAAC,oBAAoB;IAgBrB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAqBhD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAUzC,OAAO,CAAC,UAAU;CAqBrB"}
1
+ {"version":3,"file":"GGLocalDiscoveryServer.d.ts","sourceRoot":"","sources":["../../../src/local/GGLocalDiscoveryServer.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AACxC,OAAO,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAC,aAAa,EAAC,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAC,YAAY,EAAC,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAC,cAAc,EAAC,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAC,kBAAkB,EAAC,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAiB,mBAAmB,EAAC,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAC,uBAAuB,EAAC,MAAM,0BAA0B,CAAC;AAEjE,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,eAAe,CAAC;AAY/F,qBAAa,sBAAsB;aAOgB,IAAI,EAAE,mBAAmB;IALxE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;IACpE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2C;IACtE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEzB,MAAM,EAAE,SAAS,EAAkB,IAAI,GAAE,mBAAkD;IAgD1F,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAQzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/B,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,eAAe,GAAG,IAAI;IAM7F,OAAO,CAAC,kBAAkB;IAInB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS;IAS1D,QAAQ,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI;IAOrD;sEACkE;IAClE,OAAO,CAAC,oBAAoB;IAgBrB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAqBhD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAUzC,OAAO,CAAC,UAAU;CAqBrB"}
@@ -3,7 +3,7 @@ import { FirstStrategy } from "./routing/strategies/FirstStrategy.js";
3
3
  import { LastStrategy } from "./routing/strategies/LastStrategy.js";
4
4
  import { RandomStrategy } from "./routing/strategies/RandomStrategy.js";
5
5
  import { RoundRobinStrategy } from "./routing/strategies/RoundRobinStrategy.js";
6
- import { GGDiscoveryIPC } from "./GGDiscoveryIPC.js";
6
+ import { GGDiscoveryIPC, DiscoveryServerKind } from "./GGDiscoveryIPC.js";
7
7
  export const ROUTING_STRATEGIES = {
8
8
  first: new FirstStrategy(),
9
9
  last: new LastStrategy(),
@@ -11,10 +11,13 @@ export const ROUTING_STRATEGIES = {
11
11
  roundRobin: new RoundRobinStrategy(),
12
12
  };
13
13
  export class GGLocalDiscoveryServer {
14
+ kind;
14
15
  server;
15
16
  routes = new Map();
16
17
  routingStrategies = new Map();
17
- constructor(server) {
18
+ onYield;
19
+ constructor(server, kind = DiscoveryServerKind.Embedded) {
20
+ this.kind = kind;
18
21
  this.server = server;
19
22
  // Socket handlers for framework communication
20
23
  this.server.onFrameworkMessage(GGDiscoveryIPC.discoveryServer.register, async (routes, msg) => {
@@ -34,6 +37,15 @@ export class GGLocalDiscoveryServer {
34
37
  }
35
38
  return { success: false, error: "Service '" + apiName + "' is not registered! Did you forget to start it?" };
36
39
  });
40
+ this.server.onFrameworkMessage(GGDiscoveryIPC.discoveryServer.getServerInfo, async () => ({ kind: this.kind }));
41
+ // Defer release so the ack flushes before we close the socket.
42
+ // onYield owners (e.g. resilient client) own teardown themselves.
43
+ this.server.onFrameworkMessage(GGDiscoveryIPC.discoveryServer.requestYield, async () => {
44
+ setTimeout(async () => {
45
+ await this.teardown();
46
+ await this.onYield?.();
47
+ }, 10);
48
+ });
37
49
  this.server.setRouteProxyResolver((path) => {
38
50
  return this.matchRoute(path)?.baseUrl || undefined;
39
51
  });
@@ -1 +1 @@
1
- {"version":3,"file":"GGLocalDiscoveryServer.js","sourceRoot":"","sources":["../../../src/local/GGLocalDiscoveryServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GGLocalDiscoveryServer.js","sourceRoot":"","sources":["../../../src/local/GGLocalDiscoveryServer.ts"],"names":[],"mappings":"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"}