@usherlabs/cex-broker 0.2.25 → 0.2.27

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.
@@ -315929,6 +315929,7 @@ var DEFAULT_MAX_QUEUE_SIZE = 1e4;
315929
315929
  var DEFAULT_BATCH_SIZE = 10;
315930
315930
  var DEFAULT_FLUSH_INTERVAL_MS = 1000;
315931
315931
  var DEFAULT_FORWARDER_TIMEOUT_MS = 3000;
315932
+ var SHED_WARN_INTERVAL_MS = 60000;
315932
315933
  var DEFAULT_ARCHIVE_FORWARDER_PATH = "/archive";
315933
315934
  var DEFAULT_ARCHIVE_FORWARDER_PORT = 8090;
315934
315935
  function isArchiveOtelLogsEnabled() {
@@ -315968,6 +315969,7 @@ class BrokerExecutionArchiver {
315968
315969
  };
315969
315970
  flushTimer = null;
315970
315971
  flushInFlight = null;
315972
+ lastShedWarnAtMs = 0;
315971
315973
  closed = false;
315972
315974
  loggedMissingMarketForwarder = false;
315973
315975
  enabled;
@@ -316032,6 +316034,15 @@ class BrokerExecutionArchiver {
316032
316034
  this.recordArchiveMetric("cex_archive_rows_shed_total", {
316033
316035
  table: row.table
316034
316036
  });
316037
+ const now3 = Date.now();
316038
+ if (now3 - this.lastShedWarnAtMs >= SHED_WARN_INTERVAL_MS) {
316039
+ log.warn("Archive queue full: shedding oldest rows", {
316040
+ shed_total: this.stats.shed,
316041
+ queue_max: this.maxQueueSize,
316042
+ table: row.table
316043
+ });
316044
+ this.lastShedWarnAtMs = now3;
316045
+ }
316035
316046
  }
316036
316047
  this.queue.push(row);
316037
316048
  this.stats.enqueued += 1;
@@ -332420,6 +332431,59 @@ function createExecuteActionHandler(deps) {
332420
332431
  }
332421
332432
  };
332422
332433
  }
332434
+ // src/handlers/subscribe/broker-lifecycle.ts
332435
+ class SubscribeBrokerLifecycle {
332436
+ #brokers = new Map;
332437
+ #closing = new Map;
332438
+ #shuttingDown = false;
332439
+ register(broker, context2) {
332440
+ this.#brokers.set(broker, context2);
332441
+ if (this.#shuttingDown) {
332442
+ this.close(broker);
332443
+ }
332444
+ }
332445
+ close(broker) {
332446
+ const existing = this.#closing.get(broker);
332447
+ if (existing) {
332448
+ return existing;
332449
+ }
332450
+ const context2 = this.#brokers.get(broker) ?? {
332451
+ cex: "unknown",
332452
+ symbol: "unknown"
332453
+ };
332454
+ this.#brokers.delete(broker);
332455
+ const closing = (async () => {
332456
+ try {
332457
+ await broker.close();
332458
+ log.debug("Request-scoped Subscribe broker closed", context2);
332459
+ return "closed";
332460
+ } catch (error48) {
332461
+ log.warn("Failed to close request-scoped Subscribe broker", {
332462
+ ...context2,
332463
+ error: error48
332464
+ });
332465
+ return "failed";
332466
+ } finally {
332467
+ this.#closing.delete(broker);
332468
+ }
332469
+ })();
332470
+ this.#closing.set(broker, closing);
332471
+ return closing;
332472
+ }
332473
+ async closeAll() {
332474
+ this.#shuttingDown = true;
332475
+ let failed = 0;
332476
+ while (this.#brokers.size > 0 || this.#closing.size > 0) {
332477
+ const inFlight = [...this.#closing.values()];
332478
+ const fresh = [...this.#brokers.keys()].map((broker) => this.close(broker));
332479
+ const outcomes = await Promise.all([...fresh, ...inFlight]);
332480
+ failed += outcomes.filter((outcome) => outcome === "failed").length;
332481
+ }
332482
+ if (failed > 0) {
332483
+ throw new Error(`${failed} request-scoped Subscribe broker(s) failed to close`);
332484
+ }
332485
+ }
332486
+ }
332423
332487
  // src/handlers/subscribe/handler.ts
332424
332488
  var grpc13 = __toESM(require_src3(), 1);
332425
332489
 
@@ -332769,19 +332833,26 @@ class OhlcvBarTracker {
332769
332833
  if (!firstBar || !lastBar) {
332770
332834
  return [];
332771
332835
  }
332772
- if (this.lastOpenTimeMs !== null && lastBar.openTimeMs < this.lastOpenTimeMs) {
332836
+ const lastOpenTimeMs = this.lastOpenTimeMs;
332837
+ if (lastOpenTimeMs !== null && lastBar.openTimeMs < lastOpenTimeMs) {
332838
+ return [];
332839
+ }
332840
+ const barsToProcess = lastOpenTimeMs === null ? bars : bars.filter((bar) => bar.openTimeMs >= lastOpenTimeMs);
332841
+ const firstBarToProcess = barsToProcess[0];
332842
+ const lastBarToProcess = barsToProcess[barsToProcess.length - 1];
332843
+ if (!firstBarToProcess || !lastBarToProcess) {
332773
332844
  return [];
332774
332845
  }
332775
332846
  const candidates = [];
332776
- if (this.lastBar !== null && this.lastOpenTimeMs !== null && !bars.some((bar) => bar.openTimeMs === this.lastOpenTimeMs) && this.lastOpenTimeMs < firstBar.openTimeMs) {
332847
+ if (this.lastBar !== null && lastOpenTimeMs !== null && lastOpenTimeMs < firstBarToProcess.openTimeMs) {
332777
332848
  candidates.push({
332778
332849
  bar: this.lastBar,
332779
332850
  isClosed: true,
332780
332851
  brokerVersion
332781
332852
  });
332782
332853
  }
332783
- for (let index2 = 0;index2 < bars.length - 1; index2 += 1) {
332784
- const bar = bars[index2];
332854
+ for (let index2 = 0;index2 < barsToProcess.length - 1; index2 += 1) {
332855
+ const bar = barsToProcess[index2];
332785
332856
  if (bar) {
332786
332857
  candidates.push({
332787
332858
  bar,
@@ -332791,12 +332862,12 @@ class OhlcvBarTracker {
332791
332862
  }
332792
332863
  }
332793
332864
  candidates.push({
332794
- bar: lastBar,
332865
+ bar: lastBarToProcess,
332795
332866
  isClosed: false,
332796
332867
  brokerVersion
332797
332868
  });
332798
- this.lastOpenTimeMs = lastBar.openTimeMs;
332799
- this.lastBar = lastBar;
332869
+ this.lastOpenTimeMs = lastBarToProcess.openTimeMs;
332870
+ this.lastBar = lastBarToProcess;
332800
332871
  return candidates;
332801
332872
  }
332802
332873
  }
@@ -333496,15 +333567,34 @@ async function runCcxtSubscribeLoop(call, isClosed, symbol2, subscriptionType, w
333496
333567
  }
333497
333568
  function createSubscribeHandler(deps) {
333498
333569
  const { brokers, whitelistIps, otelMetrics, brokerArchiver } = deps;
333570
+ const brokerLifecycle = deps.brokerLifecycle ?? new SubscribeBrokerLifecycle;
333499
333571
  return async (call) => {
333500
333572
  const subscribeStartTime = Date.now();
333501
333573
  let streamClosed = false;
333574
+ let ownedBroker = null;
333575
+ let ownedBrokerClosePromise;
333502
333576
  const markStreamClosed = () => {
333503
333577
  streamClosed = true;
333504
333578
  };
333505
- const isStreamClosed = () => streamClosed || call.destroyed;
333506
- call.once("close", markStreamClosed);
333579
+ const isStreamClosed = () => streamClosed || call.cancelled || call.writableEnded;
333580
+ const closeOwnedBroker = () => {
333581
+ if (ownedBrokerClosePromise) {
333582
+ return ownedBrokerClosePromise;
333583
+ }
333584
+ if (!ownedBroker) {
333585
+ return Promise.resolve();
333586
+ }
333587
+ const broker = ownedBroker;
333588
+ ownedBroker = null;
333589
+ ownedBrokerClosePromise = brokerLifecycle.close(broker);
333590
+ return ownedBrokerClosePromise;
333591
+ };
333592
+ const closeOwnedBrokerOnCallEnd = () => {
333593
+ closeOwnedBroker();
333594
+ };
333507
333595
  call.once("cancelled", markStreamClosed);
333596
+ call.once("cancelled", closeOwnedBrokerOnCallEnd);
333597
+ call.once("error", closeOwnedBrokerOnCallEnd);
333508
333598
  call.once("end", () => {
333509
333599
  markStreamClosed();
333510
333600
  log.info("Subscribe stream ended");
@@ -333576,6 +333666,17 @@ function createSubscribeHandler(deps) {
333576
333666
  });
333577
333667
  return;
333578
333668
  }
333669
+ if (!selectedBrokerAccount) {
333670
+ ownedBroker = broker;
333671
+ brokerLifecycle.register(broker, {
333672
+ cex: normalizedCex,
333673
+ symbol: symbol2
333674
+ });
333675
+ if (isStreamClosed()) {
333676
+ await closeOwnedBroker();
333677
+ return;
333678
+ }
333679
+ }
333579
333680
  const resolvedSymbol = await resolveSubscriptionSymbol(broker, symbol2, options?.marketType);
333580
333681
  const assetType = parseMarketType(options?.marketType);
333581
333682
  const deploymentId = brokerArchiver?.getDeploymentId() ?? "unknown";
@@ -333751,7 +333852,7 @@ function createSubscribeHandler(deps) {
333751
333852
  }
333752
333853
  }
333753
333854
  while (ohlcvStreamActive && !isStreamClosed()) {
333754
- const data = await broker.fetchOHLCVWs(resolvedSymbol, timeframe);
333855
+ const data = await broker.watchOHLCV(resolvedSymbol, timeframe);
333755
333856
  const receivedTimestamp = Date.now();
333756
333857
  if (!await writeSubscribeFrame(call, isStreamClosed, {
333757
333858
  data: JSON.stringify(data),
@@ -333840,6 +333941,10 @@ function createSubscribeHandler(deps) {
333840
333941
  symbol: "",
333841
333942
  type: subscriptionType
333842
333943
  });
333944
+ } finally {
333945
+ call.off("cancelled", closeOwnedBrokerOnCallEnd);
333946
+ call.off("error", closeOwnedBrokerOnCallEnd);
333947
+ await closeOwnedBroker();
333843
333948
  }
333844
333949
  };
333845
333950
  }
@@ -333990,7 +334095,7 @@ var CEX_BROKER_PACKAGE_DEFINITION = protoLoader.fromJSON(node_descriptor_default
333990
334095
  // src/server.ts
333991
334096
  var grpcObj = grpc14.loadPackageDefinition(CEX_BROKER_PACKAGE_DEFINITION);
333992
334097
  var cexNode = grpcObj.cex_broker;
333993
- function getServer(policy, brokers, whitelistIps, useVerity, verityProverUrl, otelMetrics, brokerArchiver, orderActivityTracker, withdrawalObservationTracker) {
334098
+ function getServer(policy, brokers, whitelistIps, useVerity, verityProverUrl, otelMetrics, brokerArchiver, orderActivityTracker, withdrawalObservationTracker, subscribeBrokerLifecycle) {
333994
334099
  const server = new grpc14.Server;
333995
334100
  server.addService(cexNode.cex_service.service, {
333996
334101
  ExecuteAction: createExecuteActionHandler({
@@ -334008,7 +334113,8 @@ function getServer(policy, brokers, whitelistIps, useVerity, verityProverUrl, ot
334008
334113
  brokers,
334009
334114
  whitelistIps,
334010
334115
  otelMetrics,
334011
- brokerArchiver
334116
+ brokerArchiver,
334117
+ brokerLifecycle: subscribeBrokerLifecycle
334012
334118
  })
334013
334119
  });
334014
334120
  return server;
@@ -0,0 +1,13 @@
1
+ import type { Exchange } from "@usherlabs/ccxt";
2
+ type BrokerContext = {
3
+ cex: string;
4
+ symbol: string;
5
+ };
6
+ export type BrokerCloseOutcome = "closed" | "failed";
7
+ export declare class SubscribeBrokerLifecycle {
8
+ #private;
9
+ register(broker: Exchange, context: BrokerContext): void;
10
+ close(broker: Exchange): Promise<BrokerCloseOutcome>;
11
+ closeAll(): Promise<void>;
12
+ }
13
+ export {};
@@ -3,11 +3,13 @@ import { type BrokerPoolEntry } from "../../helpers/broker";
3
3
  import type { BrokerExecutionArchiver } from "../../helpers/broker-execution-archive";
4
4
  import type { OtelMetrics } from "../../helpers/otel";
5
5
  import type { SubscribeRequest, SubscribeResponse } from "../types";
6
+ import { SubscribeBrokerLifecycle } from "./broker-lifecycle";
6
7
  export type SubscribeDeps = {
7
8
  brokers: Record<string, BrokerPoolEntry>;
8
9
  whitelistIps: string[];
9
10
  otelMetrics?: OtelMetrics;
10
11
  brokerArchiver?: BrokerExecutionArchiver;
12
+ brokerLifecycle?: SubscribeBrokerLifecycle;
11
13
  };
12
14
  type SubscribeCall = grpc.ServerWritableStream<SubscribeRequest, SubscribeResponse>;
13
15
  export declare function createSubscribeHandler(deps: SubscribeDeps): (call: SubscribeCall) => Promise<void>;
@@ -1 +1,2 @@
1
+ export { SubscribeBrokerLifecycle } from "./broker-lifecycle";
1
2
  export { createSubscribeHandler, type SubscribeDeps } from "./handler";
@@ -32,6 +32,7 @@ export declare class BrokerExecutionArchiver {
32
32
  private readonly stats;
33
33
  private flushTimer;
34
34
  private flushInFlight;
35
+ private lastShedWarnAtMs;
35
36
  private closed;
36
37
  private loggedMissingMarketForwarder;
37
38
  private readonly enabled;
package/dist/index.js CHANGED
@@ -275309,6 +275309,7 @@ var DEFAULT_MAX_QUEUE_SIZE = 1e4;
275309
275309
  var DEFAULT_BATCH_SIZE = 10;
275310
275310
  var DEFAULT_FLUSH_INTERVAL_MS = 1000;
275311
275311
  var DEFAULT_FORWARDER_TIMEOUT_MS = 3000;
275312
+ var SHED_WARN_INTERVAL_MS = 60000;
275312
275313
  var DEFAULT_ARCHIVE_FORWARDER_PATH = "/archive";
275313
275314
  var DEFAULT_ARCHIVE_FORWARDER_PORT = 8090;
275314
275315
  function isArchiveOtelLogsEnabled() {
@@ -275348,6 +275349,7 @@ class BrokerExecutionArchiver {
275348
275349
  };
275349
275350
  flushTimer = null;
275350
275351
  flushInFlight = null;
275352
+ lastShedWarnAtMs = 0;
275351
275353
  closed = false;
275352
275354
  loggedMissingMarketForwarder = false;
275353
275355
  enabled;
@@ -275412,6 +275414,15 @@ class BrokerExecutionArchiver {
275412
275414
  this.recordArchiveMetric("cex_archive_rows_shed_total", {
275413
275415
  table: row.table
275414
275416
  });
275417
+ const now3 = Date.now();
275418
+ if (now3 - this.lastShedWarnAtMs >= SHED_WARN_INTERVAL_MS) {
275419
+ log.warn("Archive queue full: shedding oldest rows", {
275420
+ shed_total: this.stats.shed,
275421
+ queue_max: this.maxQueueSize,
275422
+ table: row.table
275423
+ });
275424
+ this.lastShedWarnAtMs = now3;
275425
+ }
275415
275426
  }
275416
275427
  this.queue.push(row);
275417
275428
  this.stats.enqueued += 1;
@@ -295372,6 +295383,59 @@ function createExecuteActionHandler(deps) {
295372
295383
  }
295373
295384
  };
295374
295385
  }
295386
+ // src/handlers/subscribe/broker-lifecycle.ts
295387
+ class SubscribeBrokerLifecycle {
295388
+ #brokers = new Map;
295389
+ #closing = new Map;
295390
+ #shuttingDown = false;
295391
+ register(broker, context3) {
295392
+ this.#brokers.set(broker, context3);
295393
+ if (this.#shuttingDown) {
295394
+ this.close(broker);
295395
+ }
295396
+ }
295397
+ close(broker) {
295398
+ const existing = this.#closing.get(broker);
295399
+ if (existing) {
295400
+ return existing;
295401
+ }
295402
+ const context3 = this.#brokers.get(broker) ?? {
295403
+ cex: "unknown",
295404
+ symbol: "unknown"
295405
+ };
295406
+ this.#brokers.delete(broker);
295407
+ const closing = (async () => {
295408
+ try {
295409
+ await broker.close();
295410
+ log.debug("Request-scoped Subscribe broker closed", context3);
295411
+ return "closed";
295412
+ } catch (error48) {
295413
+ log.warn("Failed to close request-scoped Subscribe broker", {
295414
+ ...context3,
295415
+ error: error48
295416
+ });
295417
+ return "failed";
295418
+ } finally {
295419
+ this.#closing.delete(broker);
295420
+ }
295421
+ })();
295422
+ this.#closing.set(broker, closing);
295423
+ return closing;
295424
+ }
295425
+ async closeAll() {
295426
+ this.#shuttingDown = true;
295427
+ let failed = 0;
295428
+ while (this.#brokers.size > 0 || this.#closing.size > 0) {
295429
+ const inFlight = [...this.#closing.values()];
295430
+ const fresh = [...this.#brokers.keys()].map((broker) => this.close(broker));
295431
+ const outcomes = await Promise.all([...fresh, ...inFlight]);
295432
+ failed += outcomes.filter((outcome) => outcome === "failed").length;
295433
+ }
295434
+ if (failed > 0) {
295435
+ throw new Error(`${failed} request-scoped Subscribe broker(s) failed to close`);
295436
+ }
295437
+ }
295438
+ }
295375
295439
  // src/handlers/subscribe/handler.ts
295376
295440
  import * as grpc13 from "@grpc/grpc-js";
295377
295441
 
@@ -295722,19 +295786,26 @@ class OhlcvBarTracker {
295722
295786
  if (!firstBar || !lastBar) {
295723
295787
  return [];
295724
295788
  }
295725
- if (this.lastOpenTimeMs !== null && lastBar.openTimeMs < this.lastOpenTimeMs) {
295789
+ const lastOpenTimeMs = this.lastOpenTimeMs;
295790
+ if (lastOpenTimeMs !== null && lastBar.openTimeMs < lastOpenTimeMs) {
295791
+ return [];
295792
+ }
295793
+ const barsToProcess = lastOpenTimeMs === null ? bars : bars.filter((bar) => bar.openTimeMs >= lastOpenTimeMs);
295794
+ const firstBarToProcess = barsToProcess[0];
295795
+ const lastBarToProcess = barsToProcess[barsToProcess.length - 1];
295796
+ if (!firstBarToProcess || !lastBarToProcess) {
295726
295797
  return [];
295727
295798
  }
295728
295799
  const candidates = [];
295729
- if (this.lastBar !== null && this.lastOpenTimeMs !== null && !bars.some((bar) => bar.openTimeMs === this.lastOpenTimeMs) && this.lastOpenTimeMs < firstBar.openTimeMs) {
295800
+ if (this.lastBar !== null && lastOpenTimeMs !== null && lastOpenTimeMs < firstBarToProcess.openTimeMs) {
295730
295801
  candidates.push({
295731
295802
  bar: this.lastBar,
295732
295803
  isClosed: true,
295733
295804
  brokerVersion
295734
295805
  });
295735
295806
  }
295736
- for (let index2 = 0;index2 < bars.length - 1; index2 += 1) {
295737
- const bar = bars[index2];
295807
+ for (let index2 = 0;index2 < barsToProcess.length - 1; index2 += 1) {
295808
+ const bar = barsToProcess[index2];
295738
295809
  if (bar) {
295739
295810
  candidates.push({
295740
295811
  bar,
@@ -295744,12 +295815,12 @@ class OhlcvBarTracker {
295744
295815
  }
295745
295816
  }
295746
295817
  candidates.push({
295747
- bar: lastBar,
295818
+ bar: lastBarToProcess,
295748
295819
  isClosed: false,
295749
295820
  brokerVersion
295750
295821
  });
295751
- this.lastOpenTimeMs = lastBar.openTimeMs;
295752
- this.lastBar = lastBar;
295822
+ this.lastOpenTimeMs = lastBarToProcess.openTimeMs;
295823
+ this.lastBar = lastBarToProcess;
295753
295824
  return candidates;
295754
295825
  }
295755
295826
  }
@@ -296449,15 +296520,34 @@ async function runCcxtSubscribeLoop(call, isClosed, symbol2, subscriptionType, w
296449
296520
  }
296450
296521
  function createSubscribeHandler(deps) {
296451
296522
  const { brokers, whitelistIps, otelMetrics, brokerArchiver } = deps;
296523
+ const brokerLifecycle = deps.brokerLifecycle ?? new SubscribeBrokerLifecycle;
296452
296524
  return async (call) => {
296453
296525
  const subscribeStartTime = Date.now();
296454
296526
  let streamClosed = false;
296527
+ let ownedBroker = null;
296528
+ let ownedBrokerClosePromise;
296455
296529
  const markStreamClosed = () => {
296456
296530
  streamClosed = true;
296457
296531
  };
296458
- const isStreamClosed = () => streamClosed || call.destroyed;
296459
- call.once("close", markStreamClosed);
296532
+ const isStreamClosed = () => streamClosed || call.cancelled || call.writableEnded;
296533
+ const closeOwnedBroker = () => {
296534
+ if (ownedBrokerClosePromise) {
296535
+ return ownedBrokerClosePromise;
296536
+ }
296537
+ if (!ownedBroker) {
296538
+ return Promise.resolve();
296539
+ }
296540
+ const broker = ownedBroker;
296541
+ ownedBroker = null;
296542
+ ownedBrokerClosePromise = brokerLifecycle.close(broker);
296543
+ return ownedBrokerClosePromise;
296544
+ };
296545
+ const closeOwnedBrokerOnCallEnd = () => {
296546
+ closeOwnedBroker();
296547
+ };
296460
296548
  call.once("cancelled", markStreamClosed);
296549
+ call.once("cancelled", closeOwnedBrokerOnCallEnd);
296550
+ call.once("error", closeOwnedBrokerOnCallEnd);
296461
296551
  call.once("end", () => {
296462
296552
  markStreamClosed();
296463
296553
  log.info("Subscribe stream ended");
@@ -296529,6 +296619,17 @@ function createSubscribeHandler(deps) {
296529
296619
  });
296530
296620
  return;
296531
296621
  }
296622
+ if (!selectedBrokerAccount) {
296623
+ ownedBroker = broker;
296624
+ brokerLifecycle.register(broker, {
296625
+ cex: normalizedCex,
296626
+ symbol: symbol2
296627
+ });
296628
+ if (isStreamClosed()) {
296629
+ await closeOwnedBroker();
296630
+ return;
296631
+ }
296632
+ }
296532
296633
  const resolvedSymbol = await resolveSubscriptionSymbol(broker, symbol2, options?.marketType);
296533
296634
  const assetType = parseMarketType(options?.marketType);
296534
296635
  const deploymentId = brokerArchiver?.getDeploymentId() ?? "unknown";
@@ -296704,7 +296805,7 @@ function createSubscribeHandler(deps) {
296704
296805
  }
296705
296806
  }
296706
296807
  while (ohlcvStreamActive && !isStreamClosed()) {
296707
- const data = await broker.fetchOHLCVWs(resolvedSymbol, timeframe);
296808
+ const data = await broker.watchOHLCV(resolvedSymbol, timeframe);
296708
296809
  const receivedTimestamp = Date.now();
296709
296810
  if (!await writeSubscribeFrame(call, isStreamClosed, {
296710
296811
  data: JSON.stringify(data),
@@ -296793,6 +296894,10 @@ function createSubscribeHandler(deps) {
296793
296894
  symbol: "",
296794
296895
  type: subscriptionType
296795
296896
  });
296897
+ } finally {
296898
+ call.off("cancelled", closeOwnedBrokerOnCallEnd);
296899
+ call.off("error", closeOwnedBrokerOnCallEnd);
296900
+ await closeOwnedBroker();
296796
296901
  }
296797
296902
  };
296798
296903
  }
@@ -296943,7 +297048,7 @@ var CEX_BROKER_PACKAGE_DEFINITION = protoLoader.fromJSON(node_descriptor_default
296943
297048
  // src/server.ts
296944
297049
  var grpcObj = grpc14.loadPackageDefinition(CEX_BROKER_PACKAGE_DEFINITION);
296945
297050
  var cexNode = grpcObj.cex_broker;
296946
- function getServer(policy, brokers, whitelistIps, useVerity, verityProverUrl, otelMetrics, brokerArchiver, orderActivityTracker, withdrawalObservationTracker) {
297051
+ function getServer(policy, brokers, whitelistIps, useVerity, verityProverUrl, otelMetrics, brokerArchiver, orderActivityTracker, withdrawalObservationTracker, subscribeBrokerLifecycle) {
296947
297052
  const server = new grpc14.Server;
296948
297053
  server.addService(cexNode.cex_service.service, {
296949
297054
  ExecuteAction: createExecuteActionHandler({
@@ -296961,7 +297066,8 @@ function getServer(policy, brokers, whitelistIps, useVerity, verityProverUrl, ot
296961
297066
  brokers,
296962
297067
  whitelistIps,
296963
297068
  otelMetrics,
296964
- brokerArchiver
297069
+ brokerArchiver,
297070
+ brokerLifecycle: subscribeBrokerLifecycle
296965
297071
  })
296966
297072
  });
296967
297073
  return server;
@@ -297324,4 +297430,4 @@ export {
297324
297430
  CEXBroker as default
297325
297431
  };
297326
297432
 
297327
- //# debugId=186957481DC5AB2064756E2164756E21
297433
+ //# debugId=1B2709360791D68C64756E2164756E21