@cotal-ai/connector-claude-code 0.7.0 → 0.8.1

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/dist/mcp.cjs CHANGED
@@ -10096,6 +10096,126 @@ var require_mod = __commonJS({
10096
10096
  }
10097
10097
  });
10098
10098
 
10099
+ // ../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/types.js
10100
+ var require_types2 = __commonJS({
10101
+ "../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/types.js"(exports2) {
10102
+ "use strict";
10103
+ Object.defineProperty(exports2, "__esModule", { value: true });
10104
+ exports2.RepublishHeaders = exports2.DirectMsgHeaders = exports2.JsHeaders = exports2.AdvisoryKind = void 0;
10105
+ exports2.isOrderedPushConsumerOptions = isOrderedPushConsumerOptions;
10106
+ exports2.isPullConsumer = isPullConsumer;
10107
+ exports2.isPushConsumer = isPushConsumer;
10108
+ exports2.isBoundPushConsumerOptions = isBoundPushConsumerOptions;
10109
+ function isOrderedPushConsumerOptions(v) {
10110
+ if (v && typeof v === "object") {
10111
+ return "name_prefix" in v || "deliver_subject_prefix" in v || "filter_subjects" in v || "filter_subject" in v || "deliver_policy" in v || "opt_start_seq" in v || "opt_start_time" in v || "replay_policy" in v || "inactive_threshold" in v || "headers_only" in v || "deliver_prefix" in v;
10112
+ }
10113
+ return false;
10114
+ }
10115
+ function isPullConsumer(v) {
10116
+ return v.isPullConsumer();
10117
+ }
10118
+ function isPushConsumer(v) {
10119
+ return v.isPushConsumer();
10120
+ }
10121
+ function isBoundPushConsumerOptions(v) {
10122
+ if (v && typeof v === "object") {
10123
+ return "deliver_subject" in v || "deliver_group" in v || "idle_heartbeat" in v;
10124
+ }
10125
+ return false;
10126
+ }
10127
+ exports2.AdvisoryKind = {
10128
+ API: "api_audit",
10129
+ StreamAction: "stream_action",
10130
+ ConsumerAction: "consumer_action",
10131
+ SnapshotCreate: "snapshot_create",
10132
+ SnapshotComplete: "snapshot_complete",
10133
+ RestoreCreate: "restore_create",
10134
+ RestoreComplete: "restore_complete",
10135
+ MaxDeliver: "max_deliver",
10136
+ Terminated: "terminated",
10137
+ Ack: "consumer_ack",
10138
+ StreamLeaderElected: "stream_leader_elected",
10139
+ StreamQuorumLost: "stream_quorum_lost",
10140
+ ConsumerLeaderElected: "consumer_leader_elected",
10141
+ ConsumerQuorumLost: "consumer_quorum_lost"
10142
+ };
10143
+ exports2.JsHeaders = {
10144
+ /**
10145
+ * Set if message is from a stream source - format is `stream seq`
10146
+ */
10147
+ StreamSourceHdr: "Nats-Stream-Source",
10148
+ /**
10149
+ * Set for heartbeat messages
10150
+ */
10151
+ LastConsumerSeqHdr: "Nats-Last-Consumer",
10152
+ /**
10153
+ * Set for heartbeat messages
10154
+ */
10155
+ LastStreamSeqHdr: "Nats-Last-Stream",
10156
+ /**
10157
+ * Set for heartbeat messages if the consumer is stalled, reply subject
10158
+ * will unstall the client when the client responds
10159
+ */
10160
+ ConsumerStalledHdr: "Nats-Consumer-Stalled",
10161
+ /**
10162
+ * Set for headers_only consumers indicates the number of bytes in the payload
10163
+ */
10164
+ MessageSizeHdr: "Nats-Msg-Size",
10165
+ // rollup header
10166
+ RollupHdr: "Nats-Rollup",
10167
+ // value for rollup header when rolling up a subject
10168
+ RollupValueSubject: "sub",
10169
+ // value for rollup header when rolling up all subjects
10170
+ RollupValueAll: "all",
10171
+ /**
10172
+ * Set on protocol messages to indicate pull request message count that
10173
+ * was not honored.
10174
+ */
10175
+ PendingMessagesHdr: "Nats-Pending-Messages",
10176
+ /**
10177
+ * Set on protocol messages to indicate pull request byte count that
10178
+ * was not honored
10179
+ */
10180
+ PendingBytesHdr: "Nats-Pending-Bytes",
10181
+ /**
10182
+ * Asserts a minimum JetStream API level on a JS API request (ADR-44).
10183
+ */
10184
+ RequiredApiLevel: "Nats-Required-Api-Level"
10185
+ };
10186
+ exports2.DirectMsgHeaders = {
10187
+ Stream: "Nats-Stream",
10188
+ Sequence: "Nats-Sequence",
10189
+ TimeStamp: "Nats-Time-Stamp",
10190
+ Subject: "Nats-Subject",
10191
+ LastSequence: "Nats-Last-Sequence",
10192
+ NumPending: "Nats-Num-Pending"
10193
+ };
10194
+ exports2.RepublishHeaders = {
10195
+ /**
10196
+ * The source stream of the message
10197
+ */
10198
+ Stream: "Nats-Stream",
10199
+ /**
10200
+ * The original subject of the message
10201
+ */
10202
+ Subject: "Nats-Subject",
10203
+ /**
10204
+ * The sequence of the republished message
10205
+ */
10206
+ Sequence: "Nats-Sequence",
10207
+ /**
10208
+ * The stream sequence id of the last message ingested to the same original subject (or 0 if none or deleted)
10209
+ */
10210
+ LastSequence: "Nats-Last-Sequence",
10211
+ /**
10212
+ * The size in bytes of the message's body - Only if {@link Republish#headers_only} is set.
10213
+ */
10214
+ Size: "Nats-Msg-Size"
10215
+ };
10216
+ }
10217
+ });
10218
+
10099
10219
  // ../../node_modules/.pnpm/@nats-io+nats-core@3.4.0/node_modules/@nats-io/nats-core/lib/encoders.js
10100
10220
  var require_encoders = __commonJS({
10101
10221
  "../../node_modules/.pnpm/@nats-io+nats-core@3.4.0/node_modules/@nats-io/nats-core/lib/encoders.js"(exports2) {
@@ -14912,7 +15032,7 @@ ${stack}`;
14912
15032
  });
14913
15033
 
14914
15034
  // ../../node_modules/.pnpm/@nats-io+nats-core@3.4.0/node_modules/@nats-io/nats-core/lib/types.js
14915
- var require_types2 = __commonJS({
15035
+ var require_types3 = __commonJS({
14916
15036
  "../../node_modules/.pnpm/@nats-io+nats-core@3.4.0/node_modules/@nats-io/nats-core/lib/types.js"(exports2) {
14917
15037
  "use strict";
14918
15038
  Object.defineProperty(exports2, "__esModule", { value: true });
@@ -14933,7 +15053,7 @@ var require_bench = __commonJS({
14933
15053
  exports2.throughput = throughput;
14934
15054
  exports2.msgThroughput = msgThroughput;
14935
15055
  exports2.humanizeBytes = humanizeBytes;
14936
- var types_1 = require_types2();
15056
+ var types_1 = require_types3();
14937
15057
  var nuid_1 = require_nuid2();
14938
15058
  var util_1 = require_util3();
14939
15059
  var Metric = class {
@@ -15895,7 +16015,7 @@ var require_internal_mod = __commonJS({
15895
16015
  Object.defineProperty(exports2, "parseSemVer", { enumerable: true, get: function() {
15896
16016
  return semver_1.parseSemVer;
15897
16017
  } });
15898
- var types_1 = require_types2();
16018
+ var types_1 = require_types3();
15899
16019
  Object.defineProperty(exports2, "Empty", { enumerable: true, get: function() {
15900
16020
  return types_1.Empty;
15901
16021
  } });
@@ -15987,747 +16107,105 @@ var require_internal_mod = __commonJS({
15987
16107
  }
15988
16108
  });
15989
16109
 
15990
- // ../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/nats-base-client.js
15991
- var require_nats_base_client = __commonJS({
15992
- "../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/nats-base-client.js"(exports2) {
15993
- "use strict";
15994
- var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
15995
- if (k2 === void 0) k2 = k;
15996
- var desc = Object.getOwnPropertyDescriptor(m, k);
15997
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15998
- desc = { enumerable: true, get: function() {
15999
- return m[k];
16000
- } };
16001
- }
16002
- Object.defineProperty(o, k2, desc);
16003
- }) : (function(o, m, k, k2) {
16004
- if (k2 === void 0) k2 = k;
16005
- o[k2] = m[k];
16006
- }));
16007
- var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
16008
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
16009
- };
16010
- Object.defineProperty(exports2, "__esModule", { value: true });
16011
- __exportStar(require_internal_mod(), exports2);
16012
- }
16013
- });
16014
-
16015
- // ../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/version.js
16016
- var require_version3 = __commonJS({
16017
- "../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/version.js"(exports2) {
16110
+ // ../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/jserrors.js
16111
+ var require_jserrors = __commonJS({
16112
+ "../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/jserrors.js"(exports2) {
16018
16113
  "use strict";
16019
16114
  Object.defineProperty(exports2, "__esModule", { value: true });
16020
- exports2.version = void 0;
16021
- exports2.version = "3.4.0";
16022
- }
16023
- });
16024
-
16025
- // ../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/node_transport.js
16026
- var require_node_transport = __commonJS({
16027
- "../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/node_transport.js"(exports2) {
16028
- "use strict";
16029
- var __importDefault = exports2 && exports2.__importDefault || function(mod) {
16030
- return mod && mod.__esModule ? mod : { "default": mod };
16115
+ exports2.jserrors = exports2.StreamNotFoundError = exports2.ConsumerNotFoundError = exports2.JetStreamApiError = exports2.InvalidNameError = exports2.JetStreamApiCodes = exports2.JetStreamStatus = exports2.JetStreamStatusError = exports2.JetStreamError = exports2.JetStreamNotEnabled = void 0;
16116
+ exports2.isMessageNotFound = isMessageNotFound;
16117
+ var types_1 = require_types2();
16118
+ var JetStreamNotEnabled = class extends Error {
16119
+ constructor(message, opts) {
16120
+ super(message, opts);
16121
+ this.name = "JetStreamNotEnabled";
16122
+ }
16031
16123
  };
16032
- Object.defineProperty(exports2, "__esModule", { value: true });
16033
- exports2.NodeTransport = exports2.VERSION = void 0;
16034
- exports2.nodeResolveHost = nodeResolveHost;
16035
- var nats_base_client_1 = require_nats_base_client();
16036
- var node_net_1 = require("node:net");
16037
- var node_tls_1 = require("node:tls");
16038
- var node_path_1 = require("node:path");
16039
- var node_fs_1 = require("node:fs");
16040
- var node_dns_1 = __importDefault(require("node:dns"));
16041
- var version_1 = require_version3();
16042
- exports2.VERSION = version_1.version;
16043
- var LANG = "nats.js";
16044
- var NodeTransport = class {
16045
- socket;
16046
- version;
16047
- lang;
16048
- yields = [];
16049
- signal = (0, nats_base_client_1.deferred)();
16050
- closedNotification = (0, nats_base_client_1.deferred)();
16051
- options;
16052
- connected = false;
16053
- tlsName = "";
16054
- done = false;
16055
- closeError;
16056
- constructor() {
16057
- this.lang = LANG;
16058
- this.version = exports2.VERSION;
16124
+ exports2.JetStreamNotEnabled = JetStreamNotEnabled;
16125
+ var JetStreamError = class extends Error {
16126
+ constructor(message, opts) {
16127
+ super(message, opts);
16128
+ this.name = "JetStreamError";
16059
16129
  }
16060
- async connect(hp, options) {
16061
- this.tlsName = hp.tlsName;
16062
- this.options = options;
16063
- const { tls } = this.options;
16064
- const { handshakeFirst } = tls || {};
16065
- try {
16066
- if (handshakeFirst === true) {
16067
- this.socket = await this.tlsFirst(hp);
16068
- } else {
16069
- this.socket = await this.dial(hp);
16070
- }
16071
- if (this.done) {
16072
- this.socket?.destroy();
16073
- }
16074
- const info = await this.peekInfo();
16075
- (0, nats_base_client_1.checkOptions)(info, options);
16076
- const { tls_required: tlsRequired, tls_available: tlsAvailable } = info;
16077
- const desired = tlsAvailable === true && options.tls !== null;
16078
- if (!handshakeFirst && (tlsRequired || desired)) {
16079
- this.socket = await this.startTLS();
16080
- }
16081
- if (this.done) {
16082
- this.socket?.destroy();
16083
- }
16084
- if (tlsRequired && this.socket.encrypted !== true) {
16085
- throw nats_base_client_1.errors.InvalidArgumentError.format("tls", "is not available on this server");
16086
- }
16087
- this.connected = true;
16088
- this.setupHandlers();
16089
- this.signal.resolve();
16090
- return Promise.resolve();
16091
- } catch (ex) {
16092
- let err2 = ex;
16093
- if (!err2) {
16094
- err2 = new nats_base_client_1.errors.ConnectionError("error connecting - node provided an undefined error");
16095
- }
16096
- const { code } = err2;
16097
- const perr = code === "ECONNREFUSED" ? new nats_base_client_1.errors.ConnectionError("connection refused", { cause: err2 }) : err2;
16098
- this.socket?.destroy();
16099
- throw perr;
16100
- }
16130
+ };
16131
+ exports2.JetStreamError = JetStreamError;
16132
+ var JetStreamStatusError = class extends JetStreamError {
16133
+ code;
16134
+ constructor(message, code, opts) {
16135
+ super(message, opts);
16136
+ this.code = code;
16137
+ this.name = "JetStreamStatusError";
16101
16138
  }
16102
- dial(hp) {
16103
- const d = (0, nats_base_client_1.deferred)();
16104
- let dialError;
16105
- const socket = (0, node_net_1.createConnection)(hp.port, hp.hostname, () => {
16106
- d.resolve(socket);
16107
- socket.removeAllListeners();
16108
- });
16109
- socket.on("error", (err2) => {
16110
- dialError = err2;
16111
- });
16112
- socket.on("close", () => {
16113
- socket.removeAllListeners();
16114
- d.reject(dialError);
16115
- });
16116
- socket.setNoDelay(true);
16117
- return d;
16139
+ };
16140
+ exports2.JetStreamStatusError = JetStreamStatusError;
16141
+ var JetStreamStatus = class _JetStreamStatus {
16142
+ msg;
16143
+ _description;
16144
+ constructor(msg) {
16145
+ this.msg = msg;
16146
+ this._description = "";
16118
16147
  }
16119
- get isClosed() {
16120
- return this.done;
16148
+ static maybeParseStatus(msg) {
16149
+ const status = new _JetStreamStatus(msg);
16150
+ return status.code === 0 ? null : status;
16121
16151
  }
16122
- close(err2) {
16123
- return this._closed(err2, false);
16152
+ toError() {
16153
+ return new JetStreamStatusError(this.description, this.code);
16124
16154
  }
16125
- peekInfo() {
16126
- const d = (0, nats_base_client_1.deferred)();
16127
- let peekError;
16128
- this.socket.on("data", (frame) => {
16129
- this.yields.push(frame);
16130
- const t = nats_base_client_1.DataBuffer.concat(...this.yields);
16131
- const pm = (0, nats_base_client_1.extractProtocolMessage)(t);
16132
- if (pm !== "") {
16133
- try {
16134
- const m = nats_base_client_1.INFO.exec(pm);
16135
- if (!m) {
16136
- throw new Error("unexpected response from server");
16137
- }
16138
- const info = JSON.parse(m[1]);
16139
- d.resolve(info);
16140
- } catch (err2) {
16141
- d.reject(err2);
16142
- } finally {
16143
- this.socket.removeAllListeners();
16144
- }
16145
- }
16146
- });
16147
- this.socket.on("error", (err2) => {
16148
- peekError = err2;
16149
- });
16150
- this.socket.on("close", () => {
16151
- this.socket.removeAllListeners();
16152
- d.reject(peekError);
16155
+ debug() {
16156
+ console.log({
16157
+ subject: this.msg.subject,
16158
+ reply: this.msg.reply,
16159
+ description: this.description,
16160
+ status: this.code,
16161
+ headers: this.msg.headers
16153
16162
  });
16154
- return d;
16155
16163
  }
16156
- loadFile(fn) {
16157
- if (!fn) {
16158
- return Promise.resolve();
16159
- }
16160
- const d = (0, nats_base_client_1.deferred)();
16161
- try {
16162
- fn = (0, node_path_1.resolve)(fn);
16163
- if (!(0, node_fs_1.existsSync)(fn)) {
16164
- d.reject(new Error(`${fn} doesn't exist`));
16165
- }
16166
- (0, node_fs_1.readFile)(fn, (err2, data) => {
16167
- if (err2) {
16168
- return d.reject(err2);
16169
- }
16170
- d.resolve(data);
16171
- });
16172
- } catch (err2) {
16173
- d.reject(err2);
16174
- }
16175
- return d;
16164
+ get code() {
16165
+ return this.msg.headers?.code || 0;
16176
16166
  }
16177
- async loadClientCerts() {
16178
- const tlsOpts = {};
16179
- const { certFile, cert, caFile, ca, keyFile, key } = this.options.tls;
16180
- try {
16181
- if (certFile) {
16182
- const data = await this.loadFile(certFile);
16183
- if (data) {
16184
- tlsOpts.cert = data;
16185
- }
16186
- } else if (cert) {
16187
- tlsOpts.cert = cert;
16188
- }
16189
- if (keyFile) {
16190
- const data = await this.loadFile(keyFile);
16191
- if (data) {
16192
- tlsOpts.key = data;
16193
- }
16194
- } else if (key) {
16195
- tlsOpts.key = key;
16196
- }
16197
- if (caFile) {
16198
- const data = await this.loadFile(caFile);
16199
- if (data) {
16200
- tlsOpts.ca = [data];
16201
- }
16202
- } else if (ca) {
16203
- tlsOpts.ca = ca;
16167
+ get description() {
16168
+ if (this._description === "") {
16169
+ this._description = this.msg.headers?.description?.toLowerCase() || "";
16170
+ if (this._description === "") {
16171
+ this._description = this.code === 503 ? "no responders" : "unknown";
16204
16172
  }
16205
- return Promise.resolve(tlsOpts);
16206
- } catch (err2) {
16207
- return Promise.reject(err2);
16208
16173
  }
16174
+ return this._description;
16209
16175
  }
16210
- async tlsFirst(hp) {
16211
- let tlsError;
16212
- let tlsOpts = {
16213
- servername: this.tlsName,
16214
- rejectUnauthorized: true
16215
- };
16216
- if (this.socket) {
16217
- tlsOpts.socket = this.socket;
16218
- }
16219
- if (typeof this.options.tls === "object") {
16220
- try {
16221
- const certOpts = await this.loadClientCerts() || {};
16222
- tlsOpts = (0, nats_base_client_1.extend)(tlsOpts, this.options.tls, certOpts);
16223
- } catch (err2) {
16224
- return Promise.reject(new nats_base_client_1.errors.ConnectionError(err2.message, { cause: err2 }));
16225
- }
16226
- }
16227
- const d = (0, nats_base_client_1.deferred)();
16228
- try {
16229
- const tlsSocket = (0, node_tls_1.connect)(hp.port, hp.hostname, tlsOpts, () => {
16230
- tlsSocket.removeAllListeners();
16231
- d.resolve(tlsSocket);
16232
- });
16233
- tlsSocket.on("error", (err2) => {
16234
- tlsError = err2;
16235
- });
16236
- tlsSocket.on("secureConnect", () => {
16237
- if (tlsOpts.rejectUnauthorized === false) {
16238
- return;
16239
- }
16240
- if (!tlsSocket.authorized) {
16241
- throw tlsSocket.authorizationError;
16242
- }
16243
- });
16244
- tlsSocket.on("close", () => {
16245
- d.reject(tlsError);
16246
- tlsSocket.removeAllListeners();
16247
- });
16248
- tlsSocket.setNoDelay(true);
16249
- } catch (err2) {
16250
- d.reject(new nats_base_client_1.errors.ConnectionError(err2.message, { cause: err2 }));
16176
+ isIdleHeartbeat() {
16177
+ return this.code === 100 && this.description === "idle heartbeat";
16178
+ }
16179
+ isFlowControlRequest() {
16180
+ return this.code === 100 && this.description === "flowcontrol request";
16181
+ }
16182
+ parseHeartbeat() {
16183
+ if (this.isIdleHeartbeat()) {
16184
+ return {
16185
+ type: "heartbeat",
16186
+ lastConsumerSequence: parseInt(this.msg.headers?.get("Nats-Last-Consumer") || "0"),
16187
+ lastStreamSequence: parseInt(this.msg.headers?.get("Nats-Last-Stream") || "0")
16188
+ };
16251
16189
  }
16252
- return d;
16190
+ return null;
16253
16191
  }
16254
- async startTLS() {
16255
- let tlsError;
16256
- let tlsOpts = {
16257
- socket: this.socket,
16258
- servername: this.tlsName,
16259
- rejectUnauthorized: true
16192
+ isRequestTimeout() {
16193
+ return this.code === 408 && this.description === "request timeout";
16194
+ }
16195
+ parseDiscard() {
16196
+ const discard = {
16197
+ msgsLeft: 0,
16198
+ bytesLeft: 0
16260
16199
  };
16261
- if (typeof this.options.tls === "object") {
16262
- try {
16263
- const certOpts = await this.loadClientCerts() || {};
16264
- tlsOpts = (0, nats_base_client_1.extend)(tlsOpts, this.options.tls, certOpts);
16265
- } catch (err2) {
16266
- return Promise.reject(new nats_base_client_1.errors.ConnectionError(err2.message, {
16267
- cause: err2
16268
- }));
16269
- }
16200
+ const msgsLeft = this.msg.headers?.get(types_1.JsHeaders.PendingMessagesHdr);
16201
+ if (msgsLeft) {
16202
+ discard.msgsLeft = parseInt(msgsLeft);
16270
16203
  }
16271
- const d = (0, nats_base_client_1.deferred)();
16272
- try {
16273
- const tlsSocket = (0, node_tls_1.connect)(tlsOpts, () => {
16274
- tlsSocket.removeAllListeners();
16275
- d.resolve(tlsSocket);
16276
- });
16277
- tlsSocket.on("error", (err2) => {
16278
- tlsError = err2;
16279
- });
16280
- tlsSocket.on("secureConnect", () => {
16281
- if (tlsOpts.rejectUnauthorized === false) {
16282
- return;
16283
- }
16284
- if (!tlsSocket.authorized) {
16285
- throw tlsSocket.authorizationError;
16286
- }
16287
- });
16288
- tlsSocket.on("close", () => {
16289
- d.reject(tlsError);
16290
- tlsSocket.removeAllListeners();
16291
- });
16292
- } catch (err2) {
16293
- d.reject(new nats_base_client_1.errors.ConnectionError(err2.message, { cause: err2 }));
16204
+ const bytesLeft = this.msg.headers?.get(types_1.JsHeaders.PendingBytesHdr);
16205
+ if (bytesLeft) {
16206
+ discard.bytesLeft = parseInt(bytesLeft);
16294
16207
  }
16295
- return d;
16296
- }
16297
- setupHandlers() {
16298
- let connError;
16299
- this.socket.on("data", (frame) => {
16300
- this.yields.push(frame);
16301
- return this.signal.resolve();
16302
- });
16303
- this.socket.on("error", (err2) => {
16304
- connError = err2;
16305
- });
16306
- this.socket.on("end", () => {
16307
- if (this.socket?.destroyed) {
16308
- return;
16309
- }
16310
- this.socket?.write(new Uint8Array(0), () => {
16311
- this.socket?.end();
16312
- });
16313
- });
16314
- this.socket.on("close", () => {
16315
- this._closed(connError, false);
16316
- });
16317
- }
16318
- [Symbol.asyncIterator]() {
16319
- return this.iterate();
16320
- }
16321
- async *iterate() {
16322
- while (true) {
16323
- if (this.yields.length === 0) {
16324
- await this.signal;
16325
- }
16326
- const yields = this.yields;
16327
- this.yields = [];
16328
- for (let i = 0; i < yields.length; i++) {
16329
- if (this.options.debug) {
16330
- console.info(`> ${(0, nats_base_client_1.render)(yields[i])}`);
16331
- }
16332
- yield yields[i];
16333
- }
16334
- if (this.done) {
16335
- break;
16336
- } else if (this.yields.length === 0) {
16337
- yields.length = 0;
16338
- this.yields = yields;
16339
- this.signal = (0, nats_base_client_1.deferred)();
16340
- }
16341
- }
16342
- }
16343
- discard() {
16344
- this.done = true;
16345
- if (this.socket) {
16346
- try {
16347
- this.socket.removeAllListeners();
16348
- this.socket.destroy();
16349
- } catch {
16350
- }
16351
- }
16352
- }
16353
- disconnect() {
16354
- this._closed(void 0, true).then().catch();
16355
- }
16356
- isEncrypted() {
16357
- return this.socket instanceof node_tls_1.TLSSocket;
16358
- }
16359
- _send(frame) {
16360
- if (this.isClosed || this.socket === void 0) {
16361
- return Promise.resolve();
16362
- }
16363
- if (this.options.debug) {
16364
- console.info(`< ${(0, nats_base_client_1.render)(frame)}`);
16365
- }
16366
- const d = (0, nats_base_client_1.deferred)();
16367
- try {
16368
- this.socket.write(frame, (err2) => {
16369
- if (err2) {
16370
- if (this.options.debug) {
16371
- console.error(`!!! ${(0, nats_base_client_1.render)(frame)}: ${err2}`);
16372
- }
16373
- return d.reject(err2);
16374
- }
16375
- return d.resolve();
16376
- });
16377
- } catch (err2) {
16378
- if (this.options.debug) {
16379
- console.error(`!!! ${(0, nats_base_client_1.render)(frame)}: ${err2}`);
16380
- }
16381
- d.reject(err2);
16382
- }
16383
- return d;
16384
- }
16385
- send(frame) {
16386
- const p = this._send(frame);
16387
- p.catch((_err) => {
16388
- });
16389
- }
16390
- async _closed(err2, internal = true) {
16391
- if (!this.connected)
16392
- return;
16393
- if (this.done) {
16394
- this.socket?.destroy();
16395
- return;
16396
- }
16397
- this.closeError = err2;
16398
- if (!err2 && this.socket && internal) {
16399
- try {
16400
- await this._send(new TextEncoder().encode(""));
16401
- } catch (err3) {
16402
- if (this.options.debug) {
16403
- console.log("transport close terminated with an error", err3);
16404
- }
16405
- }
16406
- }
16407
- try {
16408
- if (this.socket) {
16409
- this.socket.removeAllListeners();
16410
- this.socket?.destroy();
16411
- this.socket = void 0;
16412
- }
16413
- } catch (err3) {
16414
- console.log(err3);
16415
- }
16416
- this.done = true;
16417
- this.closedNotification.resolve(this.closeError);
16418
- }
16419
- closed() {
16420
- return this.closedNotification;
16421
- }
16422
- };
16423
- exports2.NodeTransport = NodeTransport;
16424
- function nodeResolveHost(s) {
16425
- const ips = (0, nats_base_client_1.deferred)();
16426
- node_dns_1.default.lookup(
16427
- s,
16428
- { all: true },
16429
- //@ts-ignore: callback changes shape when all is true
16430
- (err2, address) => {
16431
- if (err2) {
16432
- ips.reject(err2);
16433
- return;
16434
- }
16435
- const buf = [];
16436
- for (const r of address) {
16437
- buf.push(r.address);
16438
- }
16439
- if (buf.length === 0) {
16440
- buf.push(s);
16441
- }
16442
- ips.resolve(buf);
16443
- }
16444
- );
16445
- return ips;
16446
- }
16447
- }
16448
- });
16449
-
16450
- // ../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/connect.js
16451
- var require_connect = __commonJS({
16452
- "../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/connect.js"(exports2) {
16453
- "use strict";
16454
- Object.defineProperty(exports2, "__esModule", { value: true });
16455
- exports2.connect = connect7;
16456
- var node_transport_1 = require_node_transport();
16457
- var nats_base_client_1 = require_nats_base_client();
16458
- var nats_base_client_2 = require_nats_base_client();
16459
- function connect7(opts = {}) {
16460
- if ((0, nats_base_client_2.hasWsProtocol)(opts)) {
16461
- return Promise.reject(nats_base_client_2.errors.InvalidArgumentError.format(`servers`, `node client doesn't support websockets, use the 'wsconnect' function instead`));
16462
- }
16463
- (0, nats_base_client_1.setTransportFactory)({
16464
- factory: () => {
16465
- return new node_transport_1.NodeTransport();
16466
- },
16467
- dnsResolveFn: node_transport_1.nodeResolveHost
16468
- });
16469
- return nats_base_client_1.NatsConnectionImpl.connect(opts);
16470
- }
16471
- }
16472
- });
16473
-
16474
- // ../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/mod.js
16475
- var require_mod3 = __commonJS({
16476
- "../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/mod.js"(exports2) {
16477
- "use strict";
16478
- var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
16479
- if (k2 === void 0) k2 = k;
16480
- var desc = Object.getOwnPropertyDescriptor(m, k);
16481
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16482
- desc = { enumerable: true, get: function() {
16483
- return m[k];
16484
- } };
16485
- }
16486
- Object.defineProperty(o, k2, desc);
16487
- }) : (function(o, m, k, k2) {
16488
- if (k2 === void 0) k2 = k;
16489
- o[k2] = m[k];
16490
- }));
16491
- var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
16492
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
16493
- };
16494
- Object.defineProperty(exports2, "__esModule", { value: true });
16495
- exports2.connect = void 0;
16496
- var connect_1 = require_connect();
16497
- Object.defineProperty(exports2, "connect", { enumerable: true, get: function() {
16498
- return connect_1.connect;
16499
- } });
16500
- __exportStar(require_nats_base_client(), exports2);
16501
- }
16502
- });
16503
-
16504
- // ../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/index.js
16505
- var require_transport_node = __commonJS({
16506
- "../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/index.js"(exports2, module2) {
16507
- "use strict";
16508
- module2.exports = require_mod3();
16509
- }
16510
- });
16511
-
16512
- // ../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/types.js
16513
- var require_types3 = __commonJS({
16514
- "../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/types.js"(exports2) {
16515
- "use strict";
16516
- Object.defineProperty(exports2, "__esModule", { value: true });
16517
- exports2.RepublishHeaders = exports2.DirectMsgHeaders = exports2.JsHeaders = exports2.AdvisoryKind = void 0;
16518
- exports2.isOrderedPushConsumerOptions = isOrderedPushConsumerOptions;
16519
- exports2.isPullConsumer = isPullConsumer;
16520
- exports2.isPushConsumer = isPushConsumer;
16521
- exports2.isBoundPushConsumerOptions = isBoundPushConsumerOptions;
16522
- function isOrderedPushConsumerOptions(v) {
16523
- if (v && typeof v === "object") {
16524
- return "name_prefix" in v || "deliver_subject_prefix" in v || "filter_subjects" in v || "filter_subject" in v || "deliver_policy" in v || "opt_start_seq" in v || "opt_start_time" in v || "replay_policy" in v || "inactive_threshold" in v || "headers_only" in v || "deliver_prefix" in v;
16525
- }
16526
- return false;
16527
- }
16528
- function isPullConsumer(v) {
16529
- return v.isPullConsumer();
16530
- }
16531
- function isPushConsumer(v) {
16532
- return v.isPushConsumer();
16533
- }
16534
- function isBoundPushConsumerOptions(v) {
16535
- if (v && typeof v === "object") {
16536
- return "deliver_subject" in v || "deliver_group" in v || "idle_heartbeat" in v;
16537
- }
16538
- return false;
16539
- }
16540
- exports2.AdvisoryKind = {
16541
- API: "api_audit",
16542
- StreamAction: "stream_action",
16543
- ConsumerAction: "consumer_action",
16544
- SnapshotCreate: "snapshot_create",
16545
- SnapshotComplete: "snapshot_complete",
16546
- RestoreCreate: "restore_create",
16547
- RestoreComplete: "restore_complete",
16548
- MaxDeliver: "max_deliver",
16549
- Terminated: "terminated",
16550
- Ack: "consumer_ack",
16551
- StreamLeaderElected: "stream_leader_elected",
16552
- StreamQuorumLost: "stream_quorum_lost",
16553
- ConsumerLeaderElected: "consumer_leader_elected",
16554
- ConsumerQuorumLost: "consumer_quorum_lost"
16555
- };
16556
- exports2.JsHeaders = {
16557
- /**
16558
- * Set if message is from a stream source - format is `stream seq`
16559
- */
16560
- StreamSourceHdr: "Nats-Stream-Source",
16561
- /**
16562
- * Set for heartbeat messages
16563
- */
16564
- LastConsumerSeqHdr: "Nats-Last-Consumer",
16565
- /**
16566
- * Set for heartbeat messages
16567
- */
16568
- LastStreamSeqHdr: "Nats-Last-Stream",
16569
- /**
16570
- * Set for heartbeat messages if the consumer is stalled, reply subject
16571
- * will unstall the client when the client responds
16572
- */
16573
- ConsumerStalledHdr: "Nats-Consumer-Stalled",
16574
- /**
16575
- * Set for headers_only consumers indicates the number of bytes in the payload
16576
- */
16577
- MessageSizeHdr: "Nats-Msg-Size",
16578
- // rollup header
16579
- RollupHdr: "Nats-Rollup",
16580
- // value for rollup header when rolling up a subject
16581
- RollupValueSubject: "sub",
16582
- // value for rollup header when rolling up all subjects
16583
- RollupValueAll: "all",
16584
- /**
16585
- * Set on protocol messages to indicate pull request message count that
16586
- * was not honored.
16587
- */
16588
- PendingMessagesHdr: "Nats-Pending-Messages",
16589
- /**
16590
- * Set on protocol messages to indicate pull request byte count that
16591
- * was not honored
16592
- */
16593
- PendingBytesHdr: "Nats-Pending-Bytes",
16594
- /**
16595
- * Asserts a minimum JetStream API level on a JS API request (ADR-44).
16596
- */
16597
- RequiredApiLevel: "Nats-Required-Api-Level"
16598
- };
16599
- exports2.DirectMsgHeaders = {
16600
- Stream: "Nats-Stream",
16601
- Sequence: "Nats-Sequence",
16602
- TimeStamp: "Nats-Time-Stamp",
16603
- Subject: "Nats-Subject",
16604
- LastSequence: "Nats-Last-Sequence",
16605
- NumPending: "Nats-Num-Pending"
16606
- };
16607
- exports2.RepublishHeaders = {
16608
- /**
16609
- * The source stream of the message
16610
- */
16611
- Stream: "Nats-Stream",
16612
- /**
16613
- * The original subject of the message
16614
- */
16615
- Subject: "Nats-Subject",
16616
- /**
16617
- * The sequence of the republished message
16618
- */
16619
- Sequence: "Nats-Sequence",
16620
- /**
16621
- * The stream sequence id of the last message ingested to the same original subject (or 0 if none or deleted)
16622
- */
16623
- LastSequence: "Nats-Last-Sequence",
16624
- /**
16625
- * The size in bytes of the message's body - Only if {@link Republish#headers_only} is set.
16626
- */
16627
- Size: "Nats-Msg-Size"
16628
- };
16629
- }
16630
- });
16631
-
16632
- // ../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/jserrors.js
16633
- var require_jserrors = __commonJS({
16634
- "../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/jserrors.js"(exports2) {
16635
- "use strict";
16636
- Object.defineProperty(exports2, "__esModule", { value: true });
16637
- exports2.jserrors = exports2.StreamNotFoundError = exports2.ConsumerNotFoundError = exports2.JetStreamApiError = exports2.InvalidNameError = exports2.JetStreamApiCodes = exports2.JetStreamStatus = exports2.JetStreamStatusError = exports2.JetStreamError = exports2.JetStreamNotEnabled = void 0;
16638
- exports2.isMessageNotFound = isMessageNotFound;
16639
- var types_1 = require_types3();
16640
- var JetStreamNotEnabled = class extends Error {
16641
- constructor(message, opts) {
16642
- super(message, opts);
16643
- this.name = "JetStreamNotEnabled";
16644
- }
16645
- };
16646
- exports2.JetStreamNotEnabled = JetStreamNotEnabled;
16647
- var JetStreamError = class extends Error {
16648
- constructor(message, opts) {
16649
- super(message, opts);
16650
- this.name = "JetStreamError";
16651
- }
16652
- };
16653
- exports2.JetStreamError = JetStreamError;
16654
- var JetStreamStatusError = class extends JetStreamError {
16655
- code;
16656
- constructor(message, code, opts) {
16657
- super(message, opts);
16658
- this.code = code;
16659
- this.name = "JetStreamStatusError";
16660
- }
16661
- };
16662
- exports2.JetStreamStatusError = JetStreamStatusError;
16663
- var JetStreamStatus = class _JetStreamStatus {
16664
- msg;
16665
- _description;
16666
- constructor(msg) {
16667
- this.msg = msg;
16668
- this._description = "";
16669
- }
16670
- static maybeParseStatus(msg) {
16671
- const status = new _JetStreamStatus(msg);
16672
- return status.code === 0 ? null : status;
16673
- }
16674
- toError() {
16675
- return new JetStreamStatusError(this.description, this.code);
16676
- }
16677
- debug() {
16678
- console.log({
16679
- subject: this.msg.subject,
16680
- reply: this.msg.reply,
16681
- description: this.description,
16682
- status: this.code,
16683
- headers: this.msg.headers
16684
- });
16685
- }
16686
- get code() {
16687
- return this.msg.headers?.code || 0;
16688
- }
16689
- get description() {
16690
- if (this._description === "") {
16691
- this._description = this.msg.headers?.description?.toLowerCase() || "";
16692
- if (this._description === "") {
16693
- this._description = this.code === 503 ? "no responders" : "unknown";
16694
- }
16695
- }
16696
- return this._description;
16697
- }
16698
- isIdleHeartbeat() {
16699
- return this.code === 100 && this.description === "idle heartbeat";
16700
- }
16701
- isFlowControlRequest() {
16702
- return this.code === 100 && this.description === "flowcontrol request";
16703
- }
16704
- parseHeartbeat() {
16705
- if (this.isIdleHeartbeat()) {
16706
- return {
16707
- type: "heartbeat",
16708
- lastConsumerSequence: parseInt(this.msg.headers?.get("Nats-Last-Consumer") || "0"),
16709
- lastStreamSequence: parseInt(this.msg.headers?.get("Nats-Last-Stream") || "0")
16710
- };
16711
- }
16712
- return null;
16713
- }
16714
- isRequestTimeout() {
16715
- return this.code === 408 && this.description === "request timeout";
16716
- }
16717
- parseDiscard() {
16718
- const discard = {
16719
- msgsLeft: 0,
16720
- bytesLeft: 0
16721
- };
16722
- const msgsLeft = this.msg.headers?.get(types_1.JsHeaders.PendingMessagesHdr);
16723
- if (msgsLeft) {
16724
- discard.msgsLeft = parseInt(msgsLeft);
16725
- }
16726
- const bytesLeft = this.msg.headers?.get(types_1.JsHeaders.PendingBytesHdr);
16727
- if (bytesLeft) {
16728
- discard.bytesLeft = parseInt(bytesLeft);
16729
- }
16730
- return discard;
16208
+ return discard;
16731
16209
  }
16732
16210
  isBadRequest() {
16733
16211
  return this.code === 400;
@@ -16850,7 +16328,7 @@ var require_jsbaseclient_api = __commonJS({
16850
16328
  exports2.parseJsResponse = parseJsResponse;
16851
16329
  exports2.defaultJsOptions = defaultJsOptions;
16852
16330
  var internal_1 = require_internal_mod();
16853
- var types_1 = require_types3();
16331
+ var types_1 = require_types2();
16854
16332
  var jserrors_1 = require_jserrors();
16855
16333
  var defaultPrefix = "$JS.API";
16856
16334
  var defaultTimeout = 5e3;
@@ -17111,7 +16589,7 @@ var require_jsutil = __commonJS({
17111
16589
  });
17112
16590
 
17113
16591
  // ../../node_modules/.pnpm/@nats-io+nats-core@3.4.0/node_modules/@nats-io/nats-core/lib/mod.js
17114
- var require_mod4 = __commonJS({
16592
+ var require_mod3 = __commonJS({
17115
16593
  "../../node_modules/.pnpm/@nats-io+nats-core@3.4.0/node_modules/@nats-io/nats-core/lib/mod.js"(exports2) {
17116
16594
  "use strict";
17117
16595
  Object.defineProperty(exports2, "__esModule", { value: true });
@@ -17247,7 +16725,7 @@ var require_jsapi_types = __commonJS({
17247
16725
  Object.defineProperty(exports2, "__esModule", { value: true });
17248
16726
  exports2.PubHeaders = exports2.PriorityPolicy = exports2.ConsumerApiAction = exports2.PersistMode = exports2.StoreCompression = exports2.ReplayPolicy = exports2.AckPolicy = exports2.DeliverPolicy = exports2.StorageType = exports2.DiscardPolicy = exports2.RetentionPolicy = void 0;
17249
16727
  exports2.defaultConsumer = defaultConsumer;
17250
- var nats_core_1 = require_mod4();
16728
+ var nats_core_1 = require_mod3();
17251
16729
  exports2.RetentionPolicy = {
17252
16730
  /**
17253
16731
  * Retain messages until the limits are reached, then trigger the discard policy.
@@ -18557,7 +18035,7 @@ var require_pushconsumer = __commonJS({
18557
18035
  exports2.PushConsumerImpl = exports2.PushConsumerMessagesImpl = void 0;
18558
18036
  var jsmsg_1 = require_jsmsg();
18559
18037
  var jsapi_types_1 = require_jsapi_types();
18560
- var types_1 = require_types3();
18038
+ var types_1 = require_types2();
18561
18039
  var internal_1 = require_internal_mod();
18562
18040
  var jserrors_1 = require_jserrors();
18563
18041
  var PushConsumerMessagesImpl = class extends internal_1.QueuedIteratorImpl {
@@ -18909,7 +18387,7 @@ var require_jsmstream_api = __commonJS({
18909
18387
  var jsbaseclient_api_1 = require_jsbaseclient_api();
18910
18388
  var jslister_1 = require_jslister();
18911
18389
  var jsutil_1 = require_jsutil();
18912
- var types_1 = require_types3();
18390
+ var types_1 = require_types2();
18913
18391
  var jsapi_types_1 = require_jsapi_types();
18914
18392
  var consumer_1 = require_consumer();
18915
18393
  var jsmconsumer_api_1 = require_jsmconsumer_api();
@@ -19431,7 +18909,7 @@ var require_jsm_direct = __commonJS({
19431
18909
  Object.defineProperty(exports2, "__esModule", { value: true });
19432
18910
  exports2.DirectConsumer = exports2.DirectMsgImpl = exports2.DirectStreamAPIImpl = void 0;
19433
18911
  var jsbaseclient_api_1 = require_jsbaseclient_api();
19434
- var types_1 = require_types3();
18912
+ var types_1 = require_types2();
19435
18913
  var internal_1 = require_internal_mod();
19436
18914
  var jsutil_1 = require_jsutil();
19437
18915
  var jserrors_1 = require_jserrors();
@@ -20194,327 +19672,849 @@ var require_jsclient = __commonJS({
20194
19672
  throw err2;
20195
19673
  });
20196
19674
  }
20197
- route(err2, m) {
20198
- if (err2) {
20199
- this.close(err2);
20200
- return;
20201
- }
20202
- let data;
20203
- try {
20204
- data = (0, jsbaseclient_api_1.parseJsResponse)(m);
20205
- } catch (err3) {
20206
- this.close(err3);
20207
- return;
20208
- }
20209
- if ("batch" in data && typeof data.batch === "string") {
20210
- const ack = data;
20211
- const e = this.pending.get(m.subject);
20212
- if (e && (e.op === FastIngestOp.Final || e.op === FastIngestOp.EOB)) {
20213
- e.deferred.resolve(ack);
20214
- this.pending.delete(m.subject);
19675
+ route(err2, m) {
19676
+ if (err2) {
19677
+ this.close(err2);
19678
+ return;
19679
+ }
19680
+ let data;
19681
+ try {
19682
+ data = (0, jsbaseclient_api_1.parseJsResponse)(m);
19683
+ } catch (err3) {
19684
+ this.close(err3);
19685
+ return;
19686
+ }
19687
+ if ("batch" in data && typeof data.batch === "string") {
19688
+ const ack = data;
19689
+ const e = this.pending.get(m.subject);
19690
+ if (e && (e.op === FastIngestOp.Final || e.op === FastIngestOp.EOB)) {
19691
+ e.deferred.resolve(ack);
19692
+ this.pending.delete(m.subject);
19693
+ }
19694
+ for (const [, entry] of this.pending) {
19695
+ if (entry.op === FastIngestOp.Append || entry.op === FastIngestOp.Ping) {
19696
+ entry.deferred.resolve({ batchSeq: entry.seq, ackSeq: this.acked });
19697
+ } else {
19698
+ entry.deferred.reject(new Error(BATCH_CLOSED));
19699
+ }
19700
+ }
19701
+ this.pending.clear();
19702
+ this.resolveStart();
19703
+ this.closedDeferred.resolve(ack);
19704
+ this.closed = true;
19705
+ this.gapIter?.stop();
19706
+ this.sub.unsubscribe();
19707
+ return;
19708
+ }
19709
+ const typed = data;
19710
+ if (typed.type === "gap") {
19711
+ if (this.gapIter) {
19712
+ const g = data;
19713
+ this.gapIter.push({ lastSeq: g.last_seq, seq: g.seq });
19714
+ }
19715
+ return;
19716
+ }
19717
+ const fa = data;
19718
+ if (typeof fa.msgs === "number")
19719
+ this.ackInterval = fa.msgs;
19720
+ if (typeof fa.seq === "number" && fa.seq > this.acked) {
19721
+ this.acked = fa.seq;
19722
+ }
19723
+ this.resolveStart();
19724
+ const exact = this.pending.get(m.subject);
19725
+ if (exact && (exact.op === FastIngestOp.Append || exact.op === FastIngestOp.Ping)) {
19726
+ exact.deferred.resolve({ batchSeq: exact.seq, ackSeq: this.acked });
19727
+ this.pending.delete(m.subject);
19728
+ }
19729
+ for (const [rs, e] of this.pending) {
19730
+ if (e.op === FastIngestOp.Append && e.seq - this.acked < this.ackInterval * this.maxOutstandingAcks) {
19731
+ e.deferred.resolve({ batchSeq: e.seq, ackSeq: this.acked });
19732
+ this.pending.delete(rs);
19733
+ }
19734
+ }
19735
+ }
19736
+ resolveStart() {
19737
+ this.startDeferred.resolve();
19738
+ }
19739
+ close(err2) {
19740
+ this.closed = true;
19741
+ this.closeErr = err2;
19742
+ for (const [, e] of this.pending)
19743
+ e.deferred.reject(err2);
19744
+ this.pending.clear();
19745
+ this.startDeferred.reject(err2);
19746
+ this.closedDeferred.reject(err2);
19747
+ this.gapIter?.stop();
19748
+ this.sub.unsubscribe();
19749
+ }
19750
+ add(subj, payload, opts) {
19751
+ if (this.closed)
19752
+ return Promise.reject(new Error(BATCH_CLOSED));
19753
+ const mySeq = ++this.seq;
19754
+ const rs = this.replyFor(FastIngestOp.Append, mySeq);
19755
+ const headers = opts ? buildPublishHeaders(opts) : void 0;
19756
+ this.nc.publish(subj, payload, { reply: rs, headers });
19757
+ if (mySeq - this.acked < this.ackInterval * this.maxOutstandingAcks) {
19758
+ return Promise.resolve({ batchSeq: mySeq, ackSeq: this.acked });
19759
+ }
19760
+ const d = (0, internal_1.deferred)();
19761
+ this.pending.set(rs, { seq: mySeq, op: FastIngestOp.Append, deferred: d });
19762
+ return this.deadlineOrClose(d, opts?.timeout ?? this.defaultTimeout);
19763
+ }
19764
+ last(subj, payload, opts) {
19765
+ if (this.closed)
19766
+ return Promise.reject(new Error(BATCH_CLOSED));
19767
+ const mySeq = ++this.seq;
19768
+ const rs = this.replyFor(FastIngestOp.Final, mySeq);
19769
+ const d = (0, internal_1.deferred)();
19770
+ this.pending.set(rs, { seq: mySeq, op: FastIngestOp.Final, deferred: d });
19771
+ const headers = opts ? buildPublishHeaders(opts) : void 0;
19772
+ this.nc.publish(subj, payload, { reply: rs, headers });
19773
+ return this.deadlineOrClose(d, opts?.timeout ?? this.defaultTimeout);
19774
+ }
19775
+ end(opts) {
19776
+ if (this.closed)
19777
+ return Promise.reject(new Error(BATCH_CLOSED));
19778
+ const mySeq = ++this.seq;
19779
+ const rs = this.replyFor(FastIngestOp.EOB, mySeq);
19780
+ const d = (0, internal_1.deferred)();
19781
+ this.pending.set(rs, { seq: mySeq, op: FastIngestOp.EOB, deferred: d });
19782
+ const headers = opts ? buildPublishHeaders(opts) : void 0;
19783
+ this.nc.publish(this.batchSubj, internal_1.Empty, { reply: rs, headers });
19784
+ return this.deadlineOrClose(d, opts?.timeout ?? this.defaultTimeout);
19785
+ }
19786
+ ping(timeout = this.defaultTimeout) {
19787
+ if (this.closed)
19788
+ return Promise.reject(new Error(BATCH_CLOSED));
19789
+ const rs = this.replyFor(FastIngestOp.Ping, this.seq);
19790
+ const existing = this.pending.get(rs);
19791
+ if (existing && existing.op === FastIngestOp.Ping) {
19792
+ return (0, internal_1.deadline)(existing.deferred, timeout);
19793
+ }
19794
+ const d = (0, internal_1.deferred)();
19795
+ this.pending.set(rs, { seq: this.seq, op: FastIngestOp.Ping, deferred: d });
19796
+ this.nc.publish(this.batchSubj, internal_1.Empty, { reply: rs });
19797
+ return this.deadlineOrClose(d, timeout);
19798
+ }
19799
+ done() {
19800
+ return this.closedDeferred;
19801
+ }
19802
+ gaps() {
19803
+ if (!this.gapIter) {
19804
+ this.gapIter = new internal_1.QueuedIteratorImpl();
19805
+ }
19806
+ return this.gapIter;
19807
+ }
19808
+ };
19809
+ }
19810
+ });
19811
+
19812
+ // ../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/internal_mod.js
19813
+ var require_internal_mod2 = __commonJS({
19814
+ "../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/internal_mod.js"(exports2) {
19815
+ "use strict";
19816
+ Object.defineProperty(exports2, "__esModule", { value: true });
19817
+ exports2.validateStreamName = exports2.jserrors = exports2.JetStreamStatusError = exports2.JetStreamStatus = exports2.JetStreamError = exports2.JetStreamApiError = exports2.JetStreamApiCodes = exports2.isMessageNotFound = exports2.ListerImpl = exports2.StoreCompression = exports2.StorageType = exports2.RetentionPolicy = exports2.ReplayPolicy = exports2.PubHeaders = exports2.PersistMode = exports2.DiscardPolicy = exports2.DeliverPolicy = exports2.AckPolicy = exports2.DirectMsgImpl = exports2.BaseApiClientImpl = exports2.toJetStreamClient = exports2.startFastIngest = exports2.jetstreamManager = exports2.JetStreamClientImpl = exports2.jetstream = exports2.RepublishHeaders = exports2.JsHeaders = exports2.isPushConsumer = exports2.isPullConsumer = exports2.isOrderedPushConsumerOptions = exports2.isBoundPushConsumerOptions = exports2.DirectMsgHeaders = exports2.AdvisoryKind = void 0;
19818
+ var types_1 = require_types2();
19819
+ Object.defineProperty(exports2, "AdvisoryKind", { enumerable: true, get: function() {
19820
+ return types_1.AdvisoryKind;
19821
+ } });
19822
+ Object.defineProperty(exports2, "DirectMsgHeaders", { enumerable: true, get: function() {
19823
+ return types_1.DirectMsgHeaders;
19824
+ } });
19825
+ Object.defineProperty(exports2, "isBoundPushConsumerOptions", { enumerable: true, get: function() {
19826
+ return types_1.isBoundPushConsumerOptions;
19827
+ } });
19828
+ Object.defineProperty(exports2, "isOrderedPushConsumerOptions", { enumerable: true, get: function() {
19829
+ return types_1.isOrderedPushConsumerOptions;
19830
+ } });
19831
+ Object.defineProperty(exports2, "isPullConsumer", { enumerable: true, get: function() {
19832
+ return types_1.isPullConsumer;
19833
+ } });
19834
+ Object.defineProperty(exports2, "isPushConsumer", { enumerable: true, get: function() {
19835
+ return types_1.isPushConsumer;
19836
+ } });
19837
+ Object.defineProperty(exports2, "JsHeaders", { enumerable: true, get: function() {
19838
+ return types_1.JsHeaders;
19839
+ } });
19840
+ Object.defineProperty(exports2, "RepublishHeaders", { enumerable: true, get: function() {
19841
+ return types_1.RepublishHeaders;
19842
+ } });
19843
+ var jsclient_1 = require_jsclient();
19844
+ Object.defineProperty(exports2, "jetstream", { enumerable: true, get: function() {
19845
+ return jsclient_1.jetstream;
19846
+ } });
19847
+ Object.defineProperty(exports2, "JetStreamClientImpl", { enumerable: true, get: function() {
19848
+ return jsclient_1.JetStreamClientImpl;
19849
+ } });
19850
+ Object.defineProperty(exports2, "jetstreamManager", { enumerable: true, get: function() {
19851
+ return jsclient_1.jetstreamManager;
19852
+ } });
19853
+ Object.defineProperty(exports2, "startFastIngest", { enumerable: true, get: function() {
19854
+ return jsclient_1.startFastIngest;
19855
+ } });
19856
+ Object.defineProperty(exports2, "toJetStreamClient", { enumerable: true, get: function() {
19857
+ return jsclient_1.toJetStreamClient;
19858
+ } });
19859
+ var jsbaseclient_api_1 = require_jsbaseclient_api();
19860
+ Object.defineProperty(exports2, "BaseApiClientImpl", { enumerable: true, get: function() {
19861
+ return jsbaseclient_api_1.BaseApiClientImpl;
19862
+ } });
19863
+ var jsm_direct_1 = require_jsm_direct();
19864
+ Object.defineProperty(exports2, "DirectMsgImpl", { enumerable: true, get: function() {
19865
+ return jsm_direct_1.DirectMsgImpl;
19866
+ } });
19867
+ var jsapi_types_1 = require_jsapi_types();
19868
+ Object.defineProperty(exports2, "AckPolicy", { enumerable: true, get: function() {
19869
+ return jsapi_types_1.AckPolicy;
19870
+ } });
19871
+ Object.defineProperty(exports2, "DeliverPolicy", { enumerable: true, get: function() {
19872
+ return jsapi_types_1.DeliverPolicy;
19873
+ } });
19874
+ Object.defineProperty(exports2, "DiscardPolicy", { enumerable: true, get: function() {
19875
+ return jsapi_types_1.DiscardPolicy;
19876
+ } });
19877
+ Object.defineProperty(exports2, "PersistMode", { enumerable: true, get: function() {
19878
+ return jsapi_types_1.PersistMode;
19879
+ } });
19880
+ Object.defineProperty(exports2, "PubHeaders", { enumerable: true, get: function() {
19881
+ return jsapi_types_1.PubHeaders;
19882
+ } });
19883
+ Object.defineProperty(exports2, "ReplayPolicy", { enumerable: true, get: function() {
19884
+ return jsapi_types_1.ReplayPolicy;
19885
+ } });
19886
+ Object.defineProperty(exports2, "RetentionPolicy", { enumerable: true, get: function() {
19887
+ return jsapi_types_1.RetentionPolicy;
19888
+ } });
19889
+ Object.defineProperty(exports2, "StorageType", { enumerable: true, get: function() {
19890
+ return jsapi_types_1.StorageType;
19891
+ } });
19892
+ Object.defineProperty(exports2, "StoreCompression", { enumerable: true, get: function() {
19893
+ return jsapi_types_1.StoreCompression;
19894
+ } });
19895
+ var jslister_1 = require_jslister();
19896
+ Object.defineProperty(exports2, "ListerImpl", { enumerable: true, get: function() {
19897
+ return jslister_1.ListerImpl;
19898
+ } });
19899
+ var jserrors_1 = require_jserrors();
19900
+ Object.defineProperty(exports2, "isMessageNotFound", { enumerable: true, get: function() {
19901
+ return jserrors_1.isMessageNotFound;
19902
+ } });
19903
+ Object.defineProperty(exports2, "JetStreamApiCodes", { enumerable: true, get: function() {
19904
+ return jserrors_1.JetStreamApiCodes;
19905
+ } });
19906
+ Object.defineProperty(exports2, "JetStreamApiError", { enumerable: true, get: function() {
19907
+ return jserrors_1.JetStreamApiError;
19908
+ } });
19909
+ Object.defineProperty(exports2, "JetStreamError", { enumerable: true, get: function() {
19910
+ return jserrors_1.JetStreamError;
19911
+ } });
19912
+ Object.defineProperty(exports2, "JetStreamStatus", { enumerable: true, get: function() {
19913
+ return jserrors_1.JetStreamStatus;
19914
+ } });
19915
+ Object.defineProperty(exports2, "JetStreamStatusError", { enumerable: true, get: function() {
19916
+ return jserrors_1.JetStreamStatusError;
19917
+ } });
19918
+ Object.defineProperty(exports2, "jserrors", { enumerable: true, get: function() {
19919
+ return jserrors_1.jserrors;
19920
+ } });
19921
+ var jsutil_1 = require_jsutil();
19922
+ Object.defineProperty(exports2, "validateStreamName", { enumerable: true, get: function() {
19923
+ return jsutil_1.validateStreamName;
19924
+ } });
19925
+ }
19926
+ });
19927
+
19928
+ // ../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/mod.js
19929
+ var require_mod4 = __commonJS({
19930
+ "../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/mod.js"(exports2) {
19931
+ "use strict";
19932
+ Object.defineProperty(exports2, "__esModule", { value: true });
19933
+ exports2.StoreCompression = exports2.StorageType = exports2.RetentionPolicy = exports2.RepublishHeaders = exports2.ReplayPolicy = exports2.PubHeaders = exports2.PersistMode = exports2.JsHeaders = exports2.JetStreamError = exports2.JetStreamApiError = exports2.JetStreamApiCodes = exports2.isPushConsumer = exports2.isPullConsumer = exports2.DiscardPolicy = exports2.DirectMsgHeaders = exports2.DeliverPolicy = exports2.AdvisoryKind = exports2.AckPolicy = exports2.jetstreamManager = exports2.jetstream = void 0;
19934
+ var internal_mod_1 = require_internal_mod2();
19935
+ Object.defineProperty(exports2, "jetstream", { enumerable: true, get: function() {
19936
+ return internal_mod_1.jetstream;
19937
+ } });
19938
+ Object.defineProperty(exports2, "jetstreamManager", { enumerable: true, get: function() {
19939
+ return internal_mod_1.jetstreamManager;
19940
+ } });
19941
+ var internal_mod_2 = require_internal_mod2();
19942
+ Object.defineProperty(exports2, "AckPolicy", { enumerable: true, get: function() {
19943
+ return internal_mod_2.AckPolicy;
19944
+ } });
19945
+ Object.defineProperty(exports2, "AdvisoryKind", { enumerable: true, get: function() {
19946
+ return internal_mod_2.AdvisoryKind;
19947
+ } });
19948
+ Object.defineProperty(exports2, "DeliverPolicy", { enumerable: true, get: function() {
19949
+ return internal_mod_2.DeliverPolicy;
19950
+ } });
19951
+ Object.defineProperty(exports2, "DirectMsgHeaders", { enumerable: true, get: function() {
19952
+ return internal_mod_2.DirectMsgHeaders;
19953
+ } });
19954
+ Object.defineProperty(exports2, "DiscardPolicy", { enumerable: true, get: function() {
19955
+ return internal_mod_2.DiscardPolicy;
19956
+ } });
19957
+ Object.defineProperty(exports2, "isPullConsumer", { enumerable: true, get: function() {
19958
+ return internal_mod_2.isPullConsumer;
19959
+ } });
19960
+ Object.defineProperty(exports2, "isPushConsumer", { enumerable: true, get: function() {
19961
+ return internal_mod_2.isPushConsumer;
19962
+ } });
19963
+ Object.defineProperty(exports2, "JetStreamApiCodes", { enumerable: true, get: function() {
19964
+ return internal_mod_2.JetStreamApiCodes;
19965
+ } });
19966
+ Object.defineProperty(exports2, "JetStreamApiError", { enumerable: true, get: function() {
19967
+ return internal_mod_2.JetStreamApiError;
19968
+ } });
19969
+ Object.defineProperty(exports2, "JetStreamError", { enumerable: true, get: function() {
19970
+ return internal_mod_2.JetStreamError;
19971
+ } });
19972
+ Object.defineProperty(exports2, "JsHeaders", { enumerable: true, get: function() {
19973
+ return internal_mod_2.JsHeaders;
19974
+ } });
19975
+ Object.defineProperty(exports2, "PersistMode", { enumerable: true, get: function() {
19976
+ return internal_mod_2.PersistMode;
19977
+ } });
19978
+ Object.defineProperty(exports2, "PubHeaders", { enumerable: true, get: function() {
19979
+ return internal_mod_2.PubHeaders;
19980
+ } });
19981
+ Object.defineProperty(exports2, "ReplayPolicy", { enumerable: true, get: function() {
19982
+ return internal_mod_2.ReplayPolicy;
19983
+ } });
19984
+ Object.defineProperty(exports2, "RepublishHeaders", { enumerable: true, get: function() {
19985
+ return internal_mod_2.RepublishHeaders;
19986
+ } });
19987
+ Object.defineProperty(exports2, "RetentionPolicy", { enumerable: true, get: function() {
19988
+ return internal_mod_2.RetentionPolicy;
19989
+ } });
19990
+ Object.defineProperty(exports2, "StorageType", { enumerable: true, get: function() {
19991
+ return internal_mod_2.StorageType;
19992
+ } });
19993
+ Object.defineProperty(exports2, "StoreCompression", { enumerable: true, get: function() {
19994
+ return internal_mod_2.StoreCompression;
19995
+ } });
19996
+ }
19997
+ });
19998
+
19999
+ // ../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/nats-base-client.js
20000
+ var require_nats_base_client = __commonJS({
20001
+ "../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/nats-base-client.js"(exports2) {
20002
+ "use strict";
20003
+ var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
20004
+ if (k2 === void 0) k2 = k;
20005
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20006
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20007
+ desc = { enumerable: true, get: function() {
20008
+ return m[k];
20009
+ } };
20010
+ }
20011
+ Object.defineProperty(o, k2, desc);
20012
+ }) : (function(o, m, k, k2) {
20013
+ if (k2 === void 0) k2 = k;
20014
+ o[k2] = m[k];
20015
+ }));
20016
+ var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
20017
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
20018
+ };
20019
+ Object.defineProperty(exports2, "__esModule", { value: true });
20020
+ __exportStar(require_internal_mod(), exports2);
20021
+ }
20022
+ });
20023
+
20024
+ // ../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/version.js
20025
+ var require_version3 = __commonJS({
20026
+ "../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/version.js"(exports2) {
20027
+ "use strict";
20028
+ Object.defineProperty(exports2, "__esModule", { value: true });
20029
+ exports2.version = void 0;
20030
+ exports2.version = "3.4.0";
20031
+ }
20032
+ });
20033
+
20034
+ // ../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/node_transport.js
20035
+ var require_node_transport = __commonJS({
20036
+ "../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/node_transport.js"(exports2) {
20037
+ "use strict";
20038
+ var __importDefault = exports2 && exports2.__importDefault || function(mod) {
20039
+ return mod && mod.__esModule ? mod : { "default": mod };
20040
+ };
20041
+ Object.defineProperty(exports2, "__esModule", { value: true });
20042
+ exports2.NodeTransport = exports2.VERSION = void 0;
20043
+ exports2.nodeResolveHost = nodeResolveHost;
20044
+ var nats_base_client_1 = require_nats_base_client();
20045
+ var node_net_1 = require("node:net");
20046
+ var node_tls_1 = require("node:tls");
20047
+ var node_path_1 = require("node:path");
20048
+ var node_fs_1 = require("node:fs");
20049
+ var node_dns_1 = __importDefault(require("node:dns"));
20050
+ var version_1 = require_version3();
20051
+ exports2.VERSION = version_1.version;
20052
+ var LANG = "nats.js";
20053
+ var NodeTransport = class {
20054
+ socket;
20055
+ version;
20056
+ lang;
20057
+ yields = [];
20058
+ signal = (0, nats_base_client_1.deferred)();
20059
+ closedNotification = (0, nats_base_client_1.deferred)();
20060
+ options;
20061
+ connected = false;
20062
+ tlsName = "";
20063
+ done = false;
20064
+ closeError;
20065
+ constructor() {
20066
+ this.lang = LANG;
20067
+ this.version = exports2.VERSION;
20068
+ }
20069
+ async connect(hp, options) {
20070
+ this.tlsName = hp.tlsName;
20071
+ this.options = options;
20072
+ const { tls } = this.options;
20073
+ const { handshakeFirst } = tls || {};
20074
+ try {
20075
+ if (handshakeFirst === true) {
20076
+ this.socket = await this.tlsFirst(hp);
20077
+ } else {
20078
+ this.socket = await this.dial(hp);
20079
+ }
20080
+ if (this.done) {
20081
+ this.socket?.destroy();
20082
+ }
20083
+ const info = await this.peekInfo();
20084
+ (0, nats_base_client_1.checkOptions)(info, options);
20085
+ const { tls_required: tlsRequired, tls_available: tlsAvailable } = info;
20086
+ const desired = tlsAvailable === true && options.tls !== null;
20087
+ if (!handshakeFirst && (tlsRequired || desired)) {
20088
+ this.socket = await this.startTLS();
20089
+ }
20090
+ if (this.done) {
20091
+ this.socket?.destroy();
20092
+ }
20093
+ if (tlsRequired && this.socket.encrypted !== true) {
20094
+ throw nats_base_client_1.errors.InvalidArgumentError.format("tls", "is not available on this server");
20095
+ }
20096
+ this.connected = true;
20097
+ this.setupHandlers();
20098
+ this.signal.resolve();
20099
+ return Promise.resolve();
20100
+ } catch (ex) {
20101
+ let err2 = ex;
20102
+ if (!err2) {
20103
+ err2 = new nats_base_client_1.errors.ConnectionError("error connecting - node provided an undefined error");
20104
+ }
20105
+ const { code } = err2;
20106
+ const perr = code === "ECONNREFUSED" ? new nats_base_client_1.errors.ConnectionError("connection refused", { cause: err2 }) : err2;
20107
+ this.socket?.destroy();
20108
+ throw perr;
20109
+ }
20110
+ }
20111
+ dial(hp) {
20112
+ const d = (0, nats_base_client_1.deferred)();
20113
+ let dialError;
20114
+ const socket = (0, node_net_1.createConnection)(hp.port, hp.hostname, () => {
20115
+ d.resolve(socket);
20116
+ socket.removeAllListeners();
20117
+ });
20118
+ socket.on("error", (err2) => {
20119
+ dialError = err2;
20120
+ });
20121
+ socket.on("close", () => {
20122
+ socket.removeAllListeners();
20123
+ d.reject(dialError);
20124
+ });
20125
+ socket.setNoDelay(true);
20126
+ return d;
20127
+ }
20128
+ get isClosed() {
20129
+ return this.done;
20130
+ }
20131
+ close(err2) {
20132
+ return this._closed(err2, false);
20133
+ }
20134
+ peekInfo() {
20135
+ const d = (0, nats_base_client_1.deferred)();
20136
+ let peekError;
20137
+ this.socket.on("data", (frame) => {
20138
+ this.yields.push(frame);
20139
+ const t = nats_base_client_1.DataBuffer.concat(...this.yields);
20140
+ const pm = (0, nats_base_client_1.extractProtocolMessage)(t);
20141
+ if (pm !== "") {
20142
+ try {
20143
+ const m = nats_base_client_1.INFO.exec(pm);
20144
+ if (!m) {
20145
+ throw new Error("unexpected response from server");
20146
+ }
20147
+ const info = JSON.parse(m[1]);
20148
+ d.resolve(info);
20149
+ } catch (err2) {
20150
+ d.reject(err2);
20151
+ } finally {
20152
+ this.socket.removeAllListeners();
20153
+ }
20154
+ }
20155
+ });
20156
+ this.socket.on("error", (err2) => {
20157
+ peekError = err2;
20158
+ });
20159
+ this.socket.on("close", () => {
20160
+ this.socket.removeAllListeners();
20161
+ d.reject(peekError);
20162
+ });
20163
+ return d;
20164
+ }
20165
+ loadFile(fn) {
20166
+ if (!fn) {
20167
+ return Promise.resolve();
20168
+ }
20169
+ const d = (0, nats_base_client_1.deferred)();
20170
+ try {
20171
+ fn = (0, node_path_1.resolve)(fn);
20172
+ if (!(0, node_fs_1.existsSync)(fn)) {
20173
+ d.reject(new Error(`${fn} doesn't exist`));
20174
+ }
20175
+ (0, node_fs_1.readFile)(fn, (err2, data) => {
20176
+ if (err2) {
20177
+ return d.reject(err2);
20178
+ }
20179
+ d.resolve(data);
20180
+ });
20181
+ } catch (err2) {
20182
+ d.reject(err2);
20183
+ }
20184
+ return d;
20185
+ }
20186
+ async loadClientCerts() {
20187
+ const tlsOpts = {};
20188
+ const { certFile, cert, caFile, ca, keyFile, key } = this.options.tls;
20189
+ try {
20190
+ if (certFile) {
20191
+ const data = await this.loadFile(certFile);
20192
+ if (data) {
20193
+ tlsOpts.cert = data;
20194
+ }
20195
+ } else if (cert) {
20196
+ tlsOpts.cert = cert;
20197
+ }
20198
+ if (keyFile) {
20199
+ const data = await this.loadFile(keyFile);
20200
+ if (data) {
20201
+ tlsOpts.key = data;
20202
+ }
20203
+ } else if (key) {
20204
+ tlsOpts.key = key;
20205
+ }
20206
+ if (caFile) {
20207
+ const data = await this.loadFile(caFile);
20208
+ if (data) {
20209
+ tlsOpts.ca = [data];
20210
+ }
20211
+ } else if (ca) {
20212
+ tlsOpts.ca = ca;
20213
+ }
20214
+ return Promise.resolve(tlsOpts);
20215
+ } catch (err2) {
20216
+ return Promise.reject(err2);
20217
+ }
20218
+ }
20219
+ async tlsFirst(hp) {
20220
+ let tlsError;
20221
+ let tlsOpts = {
20222
+ servername: this.tlsName,
20223
+ rejectUnauthorized: true
20224
+ };
20225
+ if (this.socket) {
20226
+ tlsOpts.socket = this.socket;
20227
+ }
20228
+ if (typeof this.options.tls === "object") {
20229
+ try {
20230
+ const certOpts = await this.loadClientCerts() || {};
20231
+ tlsOpts = (0, nats_base_client_1.extend)(tlsOpts, this.options.tls, certOpts);
20232
+ } catch (err2) {
20233
+ return Promise.reject(new nats_base_client_1.errors.ConnectionError(err2.message, { cause: err2 }));
20234
+ }
20235
+ }
20236
+ const d = (0, nats_base_client_1.deferred)();
20237
+ try {
20238
+ const tlsSocket = (0, node_tls_1.connect)(hp.port, hp.hostname, tlsOpts, () => {
20239
+ tlsSocket.removeAllListeners();
20240
+ d.resolve(tlsSocket);
20241
+ });
20242
+ tlsSocket.on("error", (err2) => {
20243
+ tlsError = err2;
20244
+ });
20245
+ tlsSocket.on("secureConnect", () => {
20246
+ if (tlsOpts.rejectUnauthorized === false) {
20247
+ return;
20248
+ }
20249
+ if (!tlsSocket.authorized) {
20250
+ throw tlsSocket.authorizationError;
20251
+ }
20252
+ });
20253
+ tlsSocket.on("close", () => {
20254
+ d.reject(tlsError);
20255
+ tlsSocket.removeAllListeners();
20256
+ });
20257
+ tlsSocket.setNoDelay(true);
20258
+ } catch (err2) {
20259
+ d.reject(new nats_base_client_1.errors.ConnectionError(err2.message, { cause: err2 }));
20260
+ }
20261
+ return d;
20262
+ }
20263
+ async startTLS() {
20264
+ let tlsError;
20265
+ let tlsOpts = {
20266
+ socket: this.socket,
20267
+ servername: this.tlsName,
20268
+ rejectUnauthorized: true
20269
+ };
20270
+ if (typeof this.options.tls === "object") {
20271
+ try {
20272
+ const certOpts = await this.loadClientCerts() || {};
20273
+ tlsOpts = (0, nats_base_client_1.extend)(tlsOpts, this.options.tls, certOpts);
20274
+ } catch (err2) {
20275
+ return Promise.reject(new nats_base_client_1.errors.ConnectionError(err2.message, {
20276
+ cause: err2
20277
+ }));
20278
+ }
20279
+ }
20280
+ const d = (0, nats_base_client_1.deferred)();
20281
+ try {
20282
+ const tlsSocket = (0, node_tls_1.connect)(tlsOpts, () => {
20283
+ tlsSocket.removeAllListeners();
20284
+ d.resolve(tlsSocket);
20285
+ });
20286
+ tlsSocket.on("error", (err2) => {
20287
+ tlsError = err2;
20288
+ });
20289
+ tlsSocket.on("secureConnect", () => {
20290
+ if (tlsOpts.rejectUnauthorized === false) {
20291
+ return;
20292
+ }
20293
+ if (!tlsSocket.authorized) {
20294
+ throw tlsSocket.authorizationError;
20295
+ }
20296
+ });
20297
+ tlsSocket.on("close", () => {
20298
+ d.reject(tlsError);
20299
+ tlsSocket.removeAllListeners();
20300
+ });
20301
+ } catch (err2) {
20302
+ d.reject(new nats_base_client_1.errors.ConnectionError(err2.message, { cause: err2 }));
20303
+ }
20304
+ return d;
20305
+ }
20306
+ setupHandlers() {
20307
+ let connError;
20308
+ this.socket.on("data", (frame) => {
20309
+ this.yields.push(frame);
20310
+ return this.signal.resolve();
20311
+ });
20312
+ this.socket.on("error", (err2) => {
20313
+ connError = err2;
20314
+ });
20315
+ this.socket.on("end", () => {
20316
+ if (this.socket?.destroyed) {
20317
+ return;
20318
+ }
20319
+ this.socket?.write(new Uint8Array(0), () => {
20320
+ this.socket?.end();
20321
+ });
20322
+ });
20323
+ this.socket.on("close", () => {
20324
+ this._closed(connError, false);
20325
+ });
20326
+ }
20327
+ [Symbol.asyncIterator]() {
20328
+ return this.iterate();
20329
+ }
20330
+ async *iterate() {
20331
+ while (true) {
20332
+ if (this.yields.length === 0) {
20333
+ await this.signal;
20215
20334
  }
20216
- for (const [, entry] of this.pending) {
20217
- if (entry.op === FastIngestOp.Append || entry.op === FastIngestOp.Ping) {
20218
- entry.deferred.resolve({ batchSeq: entry.seq, ackSeq: this.acked });
20219
- } else {
20220
- entry.deferred.reject(new Error(BATCH_CLOSED));
20335
+ const yields = this.yields;
20336
+ this.yields = [];
20337
+ for (let i = 0; i < yields.length; i++) {
20338
+ if (this.options.debug) {
20339
+ console.info(`> ${(0, nats_base_client_1.render)(yields[i])}`);
20221
20340
  }
20341
+ yield yields[i];
20222
20342
  }
20223
- this.pending.clear();
20224
- this.resolveStart();
20225
- this.closedDeferred.resolve(ack);
20226
- this.closed = true;
20227
- this.gapIter?.stop();
20228
- this.sub.unsubscribe();
20229
- return;
20230
- }
20231
- const typed = data;
20232
- if (typed.type === "gap") {
20233
- if (this.gapIter) {
20234
- const g = data;
20235
- this.gapIter.push({ lastSeq: g.last_seq, seq: g.seq });
20343
+ if (this.done) {
20344
+ break;
20345
+ } else if (this.yields.length === 0) {
20346
+ yields.length = 0;
20347
+ this.yields = yields;
20348
+ this.signal = (0, nats_base_client_1.deferred)();
20236
20349
  }
20237
- return;
20238
- }
20239
- const fa = data;
20240
- if (typeof fa.msgs === "number")
20241
- this.ackInterval = fa.msgs;
20242
- if (typeof fa.seq === "number" && fa.seq > this.acked) {
20243
- this.acked = fa.seq;
20244
- }
20245
- this.resolveStart();
20246
- const exact = this.pending.get(m.subject);
20247
- if (exact && (exact.op === FastIngestOp.Append || exact.op === FastIngestOp.Ping)) {
20248
- exact.deferred.resolve({ batchSeq: exact.seq, ackSeq: this.acked });
20249
- this.pending.delete(m.subject);
20250
20350
  }
20251
- for (const [rs, e] of this.pending) {
20252
- if (e.op === FastIngestOp.Append && e.seq - this.acked < this.ackInterval * this.maxOutstandingAcks) {
20253
- e.deferred.resolve({ batchSeq: e.seq, ackSeq: this.acked });
20254
- this.pending.delete(rs);
20351
+ }
20352
+ discard() {
20353
+ this.done = true;
20354
+ if (this.socket) {
20355
+ try {
20356
+ this.socket.removeAllListeners();
20357
+ this.socket.destroy();
20358
+ } catch {
20255
20359
  }
20256
20360
  }
20257
20361
  }
20258
- resolveStart() {
20259
- this.startDeferred.resolve();
20362
+ disconnect() {
20363
+ this._closed(void 0, true).then().catch();
20260
20364
  }
20261
- close(err2) {
20262
- this.closed = true;
20263
- this.closeErr = err2;
20264
- for (const [, e] of this.pending)
20265
- e.deferred.reject(err2);
20266
- this.pending.clear();
20267
- this.startDeferred.reject(err2);
20268
- this.closedDeferred.reject(err2);
20269
- this.gapIter?.stop();
20270
- this.sub.unsubscribe();
20365
+ isEncrypted() {
20366
+ return this.socket instanceof node_tls_1.TLSSocket;
20271
20367
  }
20272
- add(subj, payload, opts) {
20273
- if (this.closed)
20274
- return Promise.reject(new Error(BATCH_CLOSED));
20275
- const mySeq = ++this.seq;
20276
- const rs = this.replyFor(FastIngestOp.Append, mySeq);
20277
- const headers = opts ? buildPublishHeaders(opts) : void 0;
20278
- this.nc.publish(subj, payload, { reply: rs, headers });
20279
- if (mySeq - this.acked < this.ackInterval * this.maxOutstandingAcks) {
20280
- return Promise.resolve({ batchSeq: mySeq, ackSeq: this.acked });
20368
+ _send(frame) {
20369
+ if (this.isClosed || this.socket === void 0) {
20370
+ return Promise.resolve();
20281
20371
  }
20282
- const d = (0, internal_1.deferred)();
20283
- this.pending.set(rs, { seq: mySeq, op: FastIngestOp.Append, deferred: d });
20284
- return this.deadlineOrClose(d, opts?.timeout ?? this.defaultTimeout);
20285
- }
20286
- last(subj, payload, opts) {
20287
- if (this.closed)
20288
- return Promise.reject(new Error(BATCH_CLOSED));
20289
- const mySeq = ++this.seq;
20290
- const rs = this.replyFor(FastIngestOp.Final, mySeq);
20291
- const d = (0, internal_1.deferred)();
20292
- this.pending.set(rs, { seq: mySeq, op: FastIngestOp.Final, deferred: d });
20293
- const headers = opts ? buildPublishHeaders(opts) : void 0;
20294
- this.nc.publish(subj, payload, { reply: rs, headers });
20295
- return this.deadlineOrClose(d, opts?.timeout ?? this.defaultTimeout);
20296
- }
20297
- end(opts) {
20298
- if (this.closed)
20299
- return Promise.reject(new Error(BATCH_CLOSED));
20300
- const mySeq = ++this.seq;
20301
- const rs = this.replyFor(FastIngestOp.EOB, mySeq);
20302
- const d = (0, internal_1.deferred)();
20303
- this.pending.set(rs, { seq: mySeq, op: FastIngestOp.EOB, deferred: d });
20304
- const headers = opts ? buildPublishHeaders(opts) : void 0;
20305
- this.nc.publish(this.batchSubj, internal_1.Empty, { reply: rs, headers });
20306
- return this.deadlineOrClose(d, opts?.timeout ?? this.defaultTimeout);
20307
- }
20308
- ping(timeout = this.defaultTimeout) {
20309
- if (this.closed)
20310
- return Promise.reject(new Error(BATCH_CLOSED));
20311
- const rs = this.replyFor(FastIngestOp.Ping, this.seq);
20312
- const existing = this.pending.get(rs);
20313
- if (existing && existing.op === FastIngestOp.Ping) {
20314
- return (0, internal_1.deadline)(existing.deferred, timeout);
20372
+ if (this.options.debug) {
20373
+ console.info(`< ${(0, nats_base_client_1.render)(frame)}`);
20315
20374
  }
20316
- const d = (0, internal_1.deferred)();
20317
- this.pending.set(rs, { seq: this.seq, op: FastIngestOp.Ping, deferred: d });
20318
- this.nc.publish(this.batchSubj, internal_1.Empty, { reply: rs });
20319
- return this.deadlineOrClose(d, timeout);
20375
+ const d = (0, nats_base_client_1.deferred)();
20376
+ try {
20377
+ this.socket.write(frame, (err2) => {
20378
+ if (err2) {
20379
+ if (this.options.debug) {
20380
+ console.error(`!!! ${(0, nats_base_client_1.render)(frame)}: ${err2}`);
20381
+ }
20382
+ return d.reject(err2);
20383
+ }
20384
+ return d.resolve();
20385
+ });
20386
+ } catch (err2) {
20387
+ if (this.options.debug) {
20388
+ console.error(`!!! ${(0, nats_base_client_1.render)(frame)}: ${err2}`);
20389
+ }
20390
+ d.reject(err2);
20391
+ }
20392
+ return d;
20320
20393
  }
20321
- done() {
20322
- return this.closedDeferred;
20394
+ send(frame) {
20395
+ const p = this._send(frame);
20396
+ p.catch((_err) => {
20397
+ });
20323
20398
  }
20324
- gaps() {
20325
- if (!this.gapIter) {
20326
- this.gapIter = new internal_1.QueuedIteratorImpl();
20399
+ async _closed(err2, internal = true) {
20400
+ if (!this.connected)
20401
+ return;
20402
+ if (this.done) {
20403
+ this.socket?.destroy();
20404
+ return;
20327
20405
  }
20328
- return this.gapIter;
20406
+ this.closeError = err2;
20407
+ if (!err2 && this.socket && internal) {
20408
+ try {
20409
+ await this._send(new TextEncoder().encode(""));
20410
+ } catch (err3) {
20411
+ if (this.options.debug) {
20412
+ console.log("transport close terminated with an error", err3);
20413
+ }
20414
+ }
20415
+ }
20416
+ try {
20417
+ if (this.socket) {
20418
+ this.socket.removeAllListeners();
20419
+ this.socket?.destroy();
20420
+ this.socket = void 0;
20421
+ }
20422
+ } catch (err3) {
20423
+ console.log(err3);
20424
+ }
20425
+ this.done = true;
20426
+ this.closedNotification.resolve(this.closeError);
20427
+ }
20428
+ closed() {
20429
+ return this.closedNotification;
20329
20430
  }
20330
20431
  };
20432
+ exports2.NodeTransport = NodeTransport;
20433
+ function nodeResolveHost(s) {
20434
+ const ips = (0, nats_base_client_1.deferred)();
20435
+ node_dns_1.default.lookup(
20436
+ s,
20437
+ { all: true },
20438
+ //@ts-ignore: callback changes shape when all is true
20439
+ (err2, address) => {
20440
+ if (err2) {
20441
+ ips.reject(err2);
20442
+ return;
20443
+ }
20444
+ const buf = [];
20445
+ for (const r of address) {
20446
+ buf.push(r.address);
20447
+ }
20448
+ if (buf.length === 0) {
20449
+ buf.push(s);
20450
+ }
20451
+ ips.resolve(buf);
20452
+ }
20453
+ );
20454
+ return ips;
20455
+ }
20331
20456
  }
20332
20457
  });
20333
20458
 
20334
- // ../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/internal_mod.js
20335
- var require_internal_mod2 = __commonJS({
20336
- "../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/internal_mod.js"(exports2) {
20459
+ // ../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/connect.js
20460
+ var require_connect = __commonJS({
20461
+ "../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/connect.js"(exports2) {
20337
20462
  "use strict";
20338
20463
  Object.defineProperty(exports2, "__esModule", { value: true });
20339
- exports2.validateStreamName = exports2.jserrors = exports2.JetStreamStatusError = exports2.JetStreamStatus = exports2.JetStreamError = exports2.JetStreamApiError = exports2.JetStreamApiCodes = exports2.isMessageNotFound = exports2.ListerImpl = exports2.StoreCompression = exports2.StorageType = exports2.RetentionPolicy = exports2.ReplayPolicy = exports2.PubHeaders = exports2.PersistMode = exports2.DiscardPolicy = exports2.DeliverPolicy = exports2.AckPolicy = exports2.DirectMsgImpl = exports2.BaseApiClientImpl = exports2.toJetStreamClient = exports2.startFastIngest = exports2.jetstreamManager = exports2.JetStreamClientImpl = exports2.jetstream = exports2.RepublishHeaders = exports2.JsHeaders = exports2.isPushConsumer = exports2.isPullConsumer = exports2.isOrderedPushConsumerOptions = exports2.isBoundPushConsumerOptions = exports2.DirectMsgHeaders = exports2.AdvisoryKind = void 0;
20340
- var types_1 = require_types3();
20341
- Object.defineProperty(exports2, "AdvisoryKind", { enumerable: true, get: function() {
20342
- return types_1.AdvisoryKind;
20343
- } });
20344
- Object.defineProperty(exports2, "DirectMsgHeaders", { enumerable: true, get: function() {
20345
- return types_1.DirectMsgHeaders;
20346
- } });
20347
- Object.defineProperty(exports2, "isBoundPushConsumerOptions", { enumerable: true, get: function() {
20348
- return types_1.isBoundPushConsumerOptions;
20349
- } });
20350
- Object.defineProperty(exports2, "isOrderedPushConsumerOptions", { enumerable: true, get: function() {
20351
- return types_1.isOrderedPushConsumerOptions;
20352
- } });
20353
- Object.defineProperty(exports2, "isPullConsumer", { enumerable: true, get: function() {
20354
- return types_1.isPullConsumer;
20355
- } });
20356
- Object.defineProperty(exports2, "isPushConsumer", { enumerable: true, get: function() {
20357
- return types_1.isPushConsumer;
20358
- } });
20359
- Object.defineProperty(exports2, "JsHeaders", { enumerable: true, get: function() {
20360
- return types_1.JsHeaders;
20361
- } });
20362
- Object.defineProperty(exports2, "RepublishHeaders", { enumerable: true, get: function() {
20363
- return types_1.RepublishHeaders;
20364
- } });
20365
- var jsclient_1 = require_jsclient();
20366
- Object.defineProperty(exports2, "jetstream", { enumerable: true, get: function() {
20367
- return jsclient_1.jetstream;
20368
- } });
20369
- Object.defineProperty(exports2, "JetStreamClientImpl", { enumerable: true, get: function() {
20370
- return jsclient_1.JetStreamClientImpl;
20371
- } });
20372
- Object.defineProperty(exports2, "jetstreamManager", { enumerable: true, get: function() {
20373
- return jsclient_1.jetstreamManager;
20374
- } });
20375
- Object.defineProperty(exports2, "startFastIngest", { enumerable: true, get: function() {
20376
- return jsclient_1.startFastIngest;
20377
- } });
20378
- Object.defineProperty(exports2, "toJetStreamClient", { enumerable: true, get: function() {
20379
- return jsclient_1.toJetStreamClient;
20380
- } });
20381
- var jsbaseclient_api_1 = require_jsbaseclient_api();
20382
- Object.defineProperty(exports2, "BaseApiClientImpl", { enumerable: true, get: function() {
20383
- return jsbaseclient_api_1.BaseApiClientImpl;
20384
- } });
20385
- var jsm_direct_1 = require_jsm_direct();
20386
- Object.defineProperty(exports2, "DirectMsgImpl", { enumerable: true, get: function() {
20387
- return jsm_direct_1.DirectMsgImpl;
20388
- } });
20389
- var jsapi_types_1 = require_jsapi_types();
20390
- Object.defineProperty(exports2, "AckPolicy", { enumerable: true, get: function() {
20391
- return jsapi_types_1.AckPolicy;
20392
- } });
20393
- Object.defineProperty(exports2, "DeliverPolicy", { enumerable: true, get: function() {
20394
- return jsapi_types_1.DeliverPolicy;
20395
- } });
20396
- Object.defineProperty(exports2, "DiscardPolicy", { enumerable: true, get: function() {
20397
- return jsapi_types_1.DiscardPolicy;
20398
- } });
20399
- Object.defineProperty(exports2, "PersistMode", { enumerable: true, get: function() {
20400
- return jsapi_types_1.PersistMode;
20401
- } });
20402
- Object.defineProperty(exports2, "PubHeaders", { enumerable: true, get: function() {
20403
- return jsapi_types_1.PubHeaders;
20404
- } });
20405
- Object.defineProperty(exports2, "ReplayPolicy", { enumerable: true, get: function() {
20406
- return jsapi_types_1.ReplayPolicy;
20407
- } });
20408
- Object.defineProperty(exports2, "RetentionPolicy", { enumerable: true, get: function() {
20409
- return jsapi_types_1.RetentionPolicy;
20410
- } });
20411
- Object.defineProperty(exports2, "StorageType", { enumerable: true, get: function() {
20412
- return jsapi_types_1.StorageType;
20413
- } });
20414
- Object.defineProperty(exports2, "StoreCompression", { enumerable: true, get: function() {
20415
- return jsapi_types_1.StoreCompression;
20416
- } });
20417
- var jslister_1 = require_jslister();
20418
- Object.defineProperty(exports2, "ListerImpl", { enumerable: true, get: function() {
20419
- return jslister_1.ListerImpl;
20420
- } });
20421
- var jserrors_1 = require_jserrors();
20422
- Object.defineProperty(exports2, "isMessageNotFound", { enumerable: true, get: function() {
20423
- return jserrors_1.isMessageNotFound;
20424
- } });
20425
- Object.defineProperty(exports2, "JetStreamApiCodes", { enumerable: true, get: function() {
20426
- return jserrors_1.JetStreamApiCodes;
20427
- } });
20428
- Object.defineProperty(exports2, "JetStreamApiError", { enumerable: true, get: function() {
20429
- return jserrors_1.JetStreamApiError;
20430
- } });
20431
- Object.defineProperty(exports2, "JetStreamError", { enumerable: true, get: function() {
20432
- return jserrors_1.JetStreamError;
20433
- } });
20434
- Object.defineProperty(exports2, "JetStreamStatus", { enumerable: true, get: function() {
20435
- return jserrors_1.JetStreamStatus;
20436
- } });
20437
- Object.defineProperty(exports2, "JetStreamStatusError", { enumerable: true, get: function() {
20438
- return jserrors_1.JetStreamStatusError;
20439
- } });
20440
- Object.defineProperty(exports2, "jserrors", { enumerable: true, get: function() {
20441
- return jserrors_1.jserrors;
20442
- } });
20443
- var jsutil_1 = require_jsutil();
20444
- Object.defineProperty(exports2, "validateStreamName", { enumerable: true, get: function() {
20445
- return jsutil_1.validateStreamName;
20446
- } });
20464
+ exports2.connect = connect7;
20465
+ var node_transport_1 = require_node_transport();
20466
+ var nats_base_client_1 = require_nats_base_client();
20467
+ var nats_base_client_2 = require_nats_base_client();
20468
+ function connect7(opts = {}) {
20469
+ if ((0, nats_base_client_2.hasWsProtocol)(opts)) {
20470
+ return Promise.reject(nats_base_client_2.errors.InvalidArgumentError.format(`servers`, `node client doesn't support websockets, use the 'wsconnect' function instead`));
20471
+ }
20472
+ (0, nats_base_client_1.setTransportFactory)({
20473
+ factory: () => {
20474
+ return new node_transport_1.NodeTransport();
20475
+ },
20476
+ dnsResolveFn: node_transport_1.nodeResolveHost
20477
+ });
20478
+ return nats_base_client_1.NatsConnectionImpl.connect(opts);
20479
+ }
20447
20480
  }
20448
20481
  });
20449
20482
 
20450
- // ../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/mod.js
20483
+ // ../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/mod.js
20451
20484
  var require_mod5 = __commonJS({
20452
- "../../node_modules/.pnpm/@nats-io+jetstream@3.4.0/node_modules/@nats-io/jetstream/lib/mod.js"(exports2) {
20485
+ "../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/lib/mod.js"(exports2) {
20453
20486
  "use strict";
20487
+ var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
20488
+ if (k2 === void 0) k2 = k;
20489
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20490
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20491
+ desc = { enumerable: true, get: function() {
20492
+ return m[k];
20493
+ } };
20494
+ }
20495
+ Object.defineProperty(o, k2, desc);
20496
+ }) : (function(o, m, k, k2) {
20497
+ if (k2 === void 0) k2 = k;
20498
+ o[k2] = m[k];
20499
+ }));
20500
+ var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
20501
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
20502
+ };
20454
20503
  Object.defineProperty(exports2, "__esModule", { value: true });
20455
- exports2.StoreCompression = exports2.StorageType = exports2.RetentionPolicy = exports2.RepublishHeaders = exports2.ReplayPolicy = exports2.PubHeaders = exports2.PersistMode = exports2.JsHeaders = exports2.JetStreamError = exports2.JetStreamApiError = exports2.JetStreamApiCodes = exports2.isPushConsumer = exports2.isPullConsumer = exports2.DiscardPolicy = exports2.DirectMsgHeaders = exports2.DeliverPolicy = exports2.AdvisoryKind = exports2.AckPolicy = exports2.jetstreamManager = exports2.jetstream = void 0;
20456
- var internal_mod_1 = require_internal_mod2();
20457
- Object.defineProperty(exports2, "jetstream", { enumerable: true, get: function() {
20458
- return internal_mod_1.jetstream;
20459
- } });
20460
- Object.defineProperty(exports2, "jetstreamManager", { enumerable: true, get: function() {
20461
- return internal_mod_1.jetstreamManager;
20462
- } });
20463
- var internal_mod_2 = require_internal_mod2();
20464
- Object.defineProperty(exports2, "AckPolicy", { enumerable: true, get: function() {
20465
- return internal_mod_2.AckPolicy;
20466
- } });
20467
- Object.defineProperty(exports2, "AdvisoryKind", { enumerable: true, get: function() {
20468
- return internal_mod_2.AdvisoryKind;
20469
- } });
20470
- Object.defineProperty(exports2, "DeliverPolicy", { enumerable: true, get: function() {
20471
- return internal_mod_2.DeliverPolicy;
20472
- } });
20473
- Object.defineProperty(exports2, "DirectMsgHeaders", { enumerable: true, get: function() {
20474
- return internal_mod_2.DirectMsgHeaders;
20475
- } });
20476
- Object.defineProperty(exports2, "DiscardPolicy", { enumerable: true, get: function() {
20477
- return internal_mod_2.DiscardPolicy;
20478
- } });
20479
- Object.defineProperty(exports2, "isPullConsumer", { enumerable: true, get: function() {
20480
- return internal_mod_2.isPullConsumer;
20481
- } });
20482
- Object.defineProperty(exports2, "isPushConsumer", { enumerable: true, get: function() {
20483
- return internal_mod_2.isPushConsumer;
20484
- } });
20485
- Object.defineProperty(exports2, "JetStreamApiCodes", { enumerable: true, get: function() {
20486
- return internal_mod_2.JetStreamApiCodes;
20487
- } });
20488
- Object.defineProperty(exports2, "JetStreamApiError", { enumerable: true, get: function() {
20489
- return internal_mod_2.JetStreamApiError;
20490
- } });
20491
- Object.defineProperty(exports2, "JetStreamError", { enumerable: true, get: function() {
20492
- return internal_mod_2.JetStreamError;
20493
- } });
20494
- Object.defineProperty(exports2, "JsHeaders", { enumerable: true, get: function() {
20495
- return internal_mod_2.JsHeaders;
20496
- } });
20497
- Object.defineProperty(exports2, "PersistMode", { enumerable: true, get: function() {
20498
- return internal_mod_2.PersistMode;
20499
- } });
20500
- Object.defineProperty(exports2, "PubHeaders", { enumerable: true, get: function() {
20501
- return internal_mod_2.PubHeaders;
20502
- } });
20503
- Object.defineProperty(exports2, "ReplayPolicy", { enumerable: true, get: function() {
20504
- return internal_mod_2.ReplayPolicy;
20505
- } });
20506
- Object.defineProperty(exports2, "RepublishHeaders", { enumerable: true, get: function() {
20507
- return internal_mod_2.RepublishHeaders;
20508
- } });
20509
- Object.defineProperty(exports2, "RetentionPolicy", { enumerable: true, get: function() {
20510
- return internal_mod_2.RetentionPolicy;
20511
- } });
20512
- Object.defineProperty(exports2, "StorageType", { enumerable: true, get: function() {
20513
- return internal_mod_2.StorageType;
20514
- } });
20515
- Object.defineProperty(exports2, "StoreCompression", { enumerable: true, get: function() {
20516
- return internal_mod_2.StoreCompression;
20504
+ exports2.connect = void 0;
20505
+ var connect_1 = require_connect();
20506
+ Object.defineProperty(exports2, "connect", { enumerable: true, get: function() {
20507
+ return connect_1.connect;
20517
20508
  } });
20509
+ __exportStar(require_nats_base_client(), exports2);
20510
+ }
20511
+ });
20512
+
20513
+ // ../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/index.js
20514
+ var require_transport_node = __commonJS({
20515
+ "../../node_modules/.pnpm/@nats-io+transport-node@3.4.0/node_modules/@nats-io/transport-node/index.js"(exports2, module2) {
20516
+ "use strict";
20517
+ module2.exports = require_mod5();
20518
20518
  }
20519
20519
  });
20520
20520
 
@@ -45774,6 +45774,10 @@ function deliveryBucket(space) {
45774
45774
  function leaseKey(shardIndex) {
45775
45775
  return `lease.${shardIndex}`;
45776
45776
  }
45777
+ function managerBucket(space) {
45778
+ return `cotal_manager_${token(space)}`;
45779
+ }
45780
+ var MANAGER_LEASE_KEY = "lease";
45777
45781
  function chatStream(space) {
45778
45782
  return `CHAT_${token(space)}`;
45779
45783
  }
@@ -47524,18 +47528,14 @@ var BASE_LIMITS = {
47524
47528
  var DATA_LIMITS = { ...BASE_LIMITS, mem_storage: -1, disk_storage: -1 };
47525
47529
  var SYS_LIMITS = { ...BASE_LIMITS, mem_storage: 0, disk_storage: 0 };
47526
47530
 
47527
- // ../../packages/core/dist/endpoint.js
47528
- var import_node_events = require("node:events");
47529
- var import_node_crypto = require("node:crypto");
47530
- var import_transport_node4 = __toESM(require_transport_node(), 1);
47531
-
47532
47531
  // ../../packages/core/dist/streams.js
47533
- var import_jetstream = __toESM(require_mod5(), 1);
47532
+ var import_jetstream = __toESM(require_mod4(), 1);
47534
47533
  var import_transport_node = __toESM(require_transport_node(), 1);
47535
47534
  var import_kv = __toESM(require_mod6(), 1);
47536
47535
  var MAX_MSGS_PER_SUBJECT = 1e3;
47537
47536
  var PLANE3_DEDUP_WINDOW_MS = 2 * 60 * 60 * 1e3;
47538
47537
  var DINBOX_MAX_ACK_PENDING = 1e3;
47538
+ var MANAGER_LEASE_TTL_MS = 1e4;
47539
47539
  var MEMBERSHIP_MAX_BYTES = 64 * 1024 * 1024;
47540
47540
  async function createSpaceStreams(jsm, space) {
47541
47541
  const p = spacePrefix(space);
@@ -47636,12 +47636,50 @@ function fanoutDurableConfig(space, opts = {}) {
47636
47636
  };
47637
47637
  }
47638
47638
 
47639
- // ../../packages/core/dist/endpoint.js
47640
- var import_jetstream2 = __toESM(require_mod5(), 1);
47641
- var import_kv6 = __toESM(require_mod6(), 1);
47639
+ // ../../packages/core/dist/channels.js
47640
+ var import_kv2 = __toESM(require_mod6(), 1);
47641
+ var import_transport_node2 = __toESM(require_transport_node(), 1);
47642
+ function parseDuration(s) {
47643
+ const m = /^(\d+)(s|m|h|d)$/.exec(s.trim());
47644
+ if (!m)
47645
+ throw new Error(`invalid duration "${s}" \u2014 expected <number><s|m|h|d>, e.g. "24h"`);
47646
+ const n = Number(m[1]);
47647
+ const unit = { s: 1e3, m: 6e4, h: 36e5, d: 864e5 }[m[2]];
47648
+ return n * unit;
47649
+ }
47650
+ function effectiveReplay(cfg, defaults) {
47651
+ return cfg?.replay ?? defaults?.replay ?? true;
47652
+ }
47653
+ function effectiveReplayWindowMs(cfg, defaults) {
47654
+ const w = cfg?.replayWindow ?? defaults?.replayWindow;
47655
+ return w === void 0 ? void 0 : parseDuration(w);
47656
+ }
47657
+ function effectiveDeliveryClass(cfg, defaults) {
47658
+ return cfg?.deliveryClass ?? defaults?.deliveryClass ?? "durable";
47659
+ }
47660
+ async function openChannelRegistry(nc, space, opts = {}) {
47661
+ const kvm = new import_kv2.Kvm(nc);
47662
+ return opts.create ? kvm.create(channelBucket(space)) : kvm.open(channelBucket(space));
47663
+ }
47664
+ async function readChannelConfig(kv, channel) {
47665
+ return decode3(kv, channel);
47666
+ }
47667
+ async function readChannelDefaults(kv) {
47668
+ return decode3(kv, CHANNEL_DEFAULTS_KEY);
47669
+ }
47670
+ async function decode3(kv, key) {
47671
+ const e = await kv.get(key);
47672
+ if (!e || e.operation === "DEL" || e.operation === "PURGE")
47673
+ return void 0;
47674
+ try {
47675
+ return e.json();
47676
+ } catch {
47677
+ return void 0;
47678
+ }
47679
+ }
47642
47680
 
47643
47681
  // ../../packages/core/dist/members.js
47644
- var import_kv2 = __toESM(require_mod6(), 1);
47682
+ var import_kv3 = __toESM(require_mod6(), 1);
47645
47683
  var StaleMembershipWrite = class extends Error {
47646
47684
  constructor(channel, owner, attempted, current) {
47647
47685
  super(`stale membership write for ${channel}/${owner}: generation ${attempted} < current ${current}`);
@@ -47649,7 +47687,7 @@ var StaleMembershipWrite = class extends Error {
47649
47687
  }
47650
47688
  };
47651
47689
  async function openMembersRegistry(nc, space, opts = {}) {
47652
- const kvm = new import_kv2.Kvm(nc);
47690
+ const kvm = new import_kv3.Kvm(nc);
47653
47691
  return opts.create ? kvm.create(membersBucket(space)) : kvm.open(membersBucket(space));
47654
47692
  }
47655
47693
  async function readMember(kv, channel, owner) {
@@ -47749,9 +47787,9 @@ function durableEligible(rec, seq) {
47749
47787
  }
47750
47788
 
47751
47789
  // ../../packages/core/dist/acls.js
47752
- var import_kv3 = __toESM(require_mod6(), 1);
47790
+ var import_kv4 = __toESM(require_mod6(), 1);
47753
47791
  async function openAclRegistry(nc, space, opts = {}) {
47754
- const kvm = new import_kv3.Kvm(nc);
47792
+ const kvm = new import_kv4.Kvm(nc);
47755
47793
  return opts.create ? kvm.create(aclBucket(space)) : kvm.open(aclBucket(space));
47756
47794
  }
47757
47795
  async function readAcl(kv, owner) {
@@ -47795,56 +47833,135 @@ async function commitAcl(kv, owner, allowSubscribe) {
47795
47833
  throw new Error(`acl CAS exhausted retries for ${owner}`);
47796
47834
  }
47797
47835
 
47836
+ // ../../packages/core/dist/membership-feed.js
47837
+ var import_transport_node3 = __toESM(require_transport_node(), 1);
47838
+ var import_kv5 = __toESM(require_mod6(), 1);
47839
+
47798
47840
  // ../../packages/core/dist/lease.js
47799
- var import_kv4 = __toESM(require_mod6(), 1);
47800
- var import_transport_node2 = __toESM(require_transport_node(), 1);
47841
+ var import_kv6 = __toESM(require_mod6(), 1);
47842
+ var import_transport_node4 = __toESM(require_transport_node(), 1);
47801
47843
  async function openDeliveryRegistry(nc, space) {
47802
- return new import_kv4.Kvm(nc).open(deliveryBucket(space));
47844
+ return new import_kv6.Kvm(nc).open(deliveryBucket(space));
47803
47845
  }
47804
47846
 
47805
- // ../../packages/core/dist/channels.js
47806
- var import_kv5 = __toESM(require_mod6(), 1);
47807
- var import_transport_node3 = __toESM(require_transport_node(), 1);
47808
- function parseDuration(s) {
47809
- const m = /^(\d+)(s|m|h|d)$/.exec(s.trim());
47810
- if (!m)
47811
- throw new Error(`invalid duration "${s}" \u2014 expected <number><s|m|h|d>, e.g. "24h"`);
47812
- const n = Number(m[1]);
47813
- const unit = { s: 1e3, m: 6e4, h: 36e5, d: 864e5 }[m[2]];
47814
- return n * unit;
47815
- }
47816
- function effectiveReplay(cfg, defaults) {
47817
- return cfg?.replay ?? defaults?.replay ?? true;
47818
- }
47819
- function effectiveReplayWindowMs(cfg, defaults) {
47820
- const w = cfg?.replayWindow ?? defaults?.replayWindow;
47821
- return w === void 0 ? void 0 : parseDuration(w);
47822
- }
47823
- function effectiveDeliveryClass(cfg, defaults) {
47824
- return cfg?.deliveryClass ?? defaults?.deliveryClass ?? "durable";
47825
- }
47826
- async function openChannelRegistry(nc, space, opts = {}) {
47827
- const kvm = new import_kv5.Kvm(nc);
47828
- return opts.create ? kvm.create(channelBucket(space)) : kvm.open(channelBucket(space));
47829
- }
47830
- async function readChannelConfig(kv, channel) {
47831
- return decode3(kv, channel);
47832
- }
47833
- async function readChannelDefaults(kv) {
47834
- return decode3(kv, CHANNEL_DEFAULTS_KEY);
47847
+ // ../../packages/core/dist/agent-file.js
47848
+ var import_node_fs = require("node:fs");
47849
+ function unquote(v) {
47850
+ if (v.startsWith('"') && v.endsWith('"') || v.startsWith("'") && v.endsWith("'"))
47851
+ return v.slice(1, -1);
47852
+ return v;
47835
47853
  }
47836
- async function decode3(kv, key) {
47837
- const e = await kv.get(key);
47838
- if (!e || e.operation === "DEL" || e.operation === "PURGE")
47839
- return void 0;
47840
- try {
47841
- return e.json();
47842
- } catch {
47843
- return void 0;
47854
+ function parseFrontmatter(src) {
47855
+ const out = {};
47856
+ for (const raw of src.split("\n")) {
47857
+ const line = raw.trim();
47858
+ if (!line || line.startsWith("#"))
47859
+ continue;
47860
+ const colon = line.indexOf(":");
47861
+ if (colon < 1)
47862
+ throw new Error(`agent file: unparseable frontmatter line "${raw}"`);
47863
+ const key = line.slice(0, colon).trim();
47864
+ const val = line.slice(colon + 1).trim();
47865
+ if (val.startsWith("[")) {
47866
+ if (!val.endsWith("]"))
47867
+ throw new Error(`agent file: unterminated list for "${key}"`);
47868
+ out[key] = val.slice(1, -1).split(",").map((s) => unquote(s.trim())).filter(Boolean);
47869
+ } else {
47870
+ out[key] = unquote(val);
47871
+ }
47844
47872
  }
47873
+ return out;
47874
+ }
47875
+ function loadAgentFile(path) {
47876
+ const src = (0, import_node_fs.readFileSync)(path, "utf8");
47877
+ const m = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/.exec(src);
47878
+ if (!m)
47879
+ throw new Error(`agent file ${path}: missing "---" frontmatter block`);
47880
+ const fm = parseFrontmatter(m[1]);
47881
+ const persona = m[2].trim();
47882
+ const str = (k) => {
47883
+ const v = fm[k];
47884
+ if (Array.isArray(v))
47885
+ throw new Error(`agent file ${path}: "${k}" must be a scalar`);
47886
+ return v;
47887
+ };
47888
+ const list = (k) => {
47889
+ const v = fm[k];
47890
+ if (v === void 0)
47891
+ return void 0;
47892
+ return Array.isArray(v) ? v : [v];
47893
+ };
47894
+ const name = str("name");
47895
+ if (!name)
47896
+ throw new Error(`agent file ${path}: "name" is required`);
47897
+ assertValidName(name);
47898
+ const kind = str("kind");
47899
+ if (kind && kind !== "agent" && kind !== "endpoint")
47900
+ throw new Error(`agent file ${path}: "kind" must be "agent" or "endpoint"`);
47901
+ for (const old of ["channels", "publish"])
47902
+ if (old in fm)
47903
+ throw new Error(`agent file ${path}: "${old}" was renamed \u2014 use "subscribe"/"allowSubscribe" (read) and "allowPublish" (post)`);
47904
+ const subscribe = list("subscribe");
47905
+ const allowSubscribe = list("allowSubscribe");
47906
+ const allowPublish = list("allowPublish");
47907
+ const quiet = list("quiet");
47908
+ const muted = list("muted");
47909
+ for (const ch of [...subscribe ?? [], ...allowSubscribe ?? [], ...allowPublish ?? []])
47910
+ try {
47911
+ assertValidChannel(ch);
47912
+ } catch (e) {
47913
+ throw new Error(`agent file ${path}: ${e.message}`);
47914
+ }
47915
+ const effSubscribe = subscribe?.length ? subscribe : ["general"];
47916
+ const effAllow = allowSubscribe?.length ? allowSubscribe : effSubscribe;
47917
+ for (const ch of effSubscribe)
47918
+ if (!channelInAllow(effAllow, ch))
47919
+ throw new Error(`agent file ${path}: subscribe channel "${ch}" is not within allowSubscribe [${effAllow.join(", ")}]`);
47920
+ const both = (quiet ?? []).filter((c) => (muted ?? []).includes(c));
47921
+ if (both.length)
47922
+ throw new Error(`agent file ${path}: channel(s) [${both.join(", ")}] are in both quiet and muted \u2014 pick one`);
47923
+ for (const [field, chans] of [["quiet", quiet], ["muted", muted]])
47924
+ for (const ch of chans ?? []) {
47925
+ try {
47926
+ assertValidChannel(ch);
47927
+ } catch (e) {
47928
+ throw new Error(`agent file ${path}: ${e.message}`);
47929
+ }
47930
+ if (!isConcreteChannel(ch))
47931
+ throw new Error(`agent file ${path}: ${field} channel "${ch}" must be a concrete channel (no wildcard)`);
47932
+ if (!channelInAllow(effAllow, ch))
47933
+ throw new Error(`agent file ${path}: ${field} channel "${ch}" is not within your read ACL / allowSubscribe [${effAllow.join(", ")}]`);
47934
+ }
47935
+ const known = /* @__PURE__ */ new Set(["name", "role", "kind", "description", "tags", "subscribe", "allowSubscribe", "allowPublish", "quiet", "muted", "model", "capabilities", "owner"]);
47936
+ const meta3 = {};
47937
+ for (const [k, v] of Object.entries(fm))
47938
+ if (!known.has(k) && typeof v === "string")
47939
+ meta3[k] = v;
47940
+ return {
47941
+ name,
47942
+ role: str("role"),
47943
+ kind,
47944
+ description: str("description"),
47945
+ tags: list("tags"),
47946
+ subscribe,
47947
+ allowSubscribe,
47948
+ allowPublish,
47949
+ quiet,
47950
+ muted,
47951
+ model: str("model"),
47952
+ capabilities: list("capabilities"),
47953
+ owner: str("owner"),
47954
+ meta: Object.keys(meta3).length ? meta3 : void 0,
47955
+ persona: persona || void 0
47956
+ };
47845
47957
  }
47846
47958
 
47847
47959
  // ../../packages/core/dist/endpoint.js
47960
+ var import_node_events = require("node:events");
47961
+ var import_node_crypto = require("node:crypto");
47962
+ var import_transport_node5 = __toESM(require_transport_node(), 1);
47963
+ var import_jetstream2 = __toESM(require_mod4(), 1);
47964
+ var import_kv7 = __toESM(require_mod6(), 1);
47848
47965
  var DEFAULT_SERVER = "nats://127.0.0.1:4222";
47849
47966
  var READER_MAX_REDELIVERIES = 10;
47850
47967
  var CotalEndpoint = class extends import_node_events.EventEmitter {
@@ -47874,6 +47991,7 @@ var CotalEndpoint = class extends import_node_events.EventEmitter {
47874
47991
  membersKv;
47875
47992
  aclKv;
47876
47993
  deliveryKv;
47994
+ managerLeaseKv;
47877
47995
  membershipKv;
47878
47996
  /** The live `ctl.delivery` serve subscription (delivery daemon) — re-created on every (re)connect by
47879
47997
  * {@link armDeliveryControl}; tracked so the stale one is dropped on reconnect. */
@@ -47993,7 +48111,7 @@ var CotalEndpoint = class extends import_node_events.EventEmitter {
47993
48111
  * idempotent (durables bind by name, JetStream dedups by msgID, KV opens are idempotent). */
47994
48112
  async connectAndBind() {
47995
48113
  this.clearConnectionScoped();
47996
- this.nc = await (0, import_transport_node4.connect)({
48114
+ this.nc = await (0, import_transport_node5.connect)({
47997
48115
  servers: this.servers,
47998
48116
  name: `cotal:${this.card.name}`,
47999
48117
  // Per-identity inbox namespace (the "Private Inbox" pattern). nats.js routes ALL
@@ -48007,7 +48125,7 @@ var CotalEndpoint = class extends import_node_events.EventEmitter {
48007
48125
  this.watchStatus();
48008
48126
  this.js = (0, import_jetstream2.jetstream)(this.nc);
48009
48127
  if (this.doWatch || this.doRegister) {
48010
- const kvm = new import_kv6.Kvm(this.nc);
48128
+ const kvm = new import_kv7.Kvm(this.nc);
48011
48129
  this.kv = this.creds ? await kvm.open(presenceBucket(this.space)) : await kvm.create(presenceBucket(this.space), { ttl: this.ttlMs });
48012
48130
  }
48013
48131
  if (this.doWatch) {
@@ -48554,7 +48672,7 @@ var CotalEndpoint = class extends import_node_events.EventEmitter {
48554
48672
  async membershipRegistry() {
48555
48673
  if (!this.nc)
48556
48674
  throw new Error("endpoint not started");
48557
- this.membershipKv ??= await new import_kv6.Kvm(this.nc).open(membershipBucket(this.space));
48675
+ this.membershipKv ??= await new import_kv7.Kvm(this.nc).open(membershipBucket(this.space));
48558
48676
  return this.membershipKv;
48559
48677
  }
48560
48678
  /**
@@ -48650,7 +48768,7 @@ var CotalEndpoint = class extends import_node_events.EventEmitter {
48650
48768
  for await (const s of this.nc.status()) {
48651
48769
  if (s.type !== "error")
48652
48770
  continue;
48653
- if (s.error instanceof import_transport_node4.PermissionViolationError && this.confirmingChatSubs.has(s.error.subject))
48771
+ if (s.error instanceof import_transport_node5.PermissionViolationError && this.confirmingChatSubs.has(s.error.subject))
48654
48772
  continue;
48655
48773
  this.emit("error", describeStatusError(s.error));
48656
48774
  }
@@ -48803,6 +48921,68 @@ var CotalEndpoint = class extends import_node_events.EventEmitter {
48803
48921
  return void 0;
48804
48922
  }
48805
48923
  }
48924
+ /** Ensure + bind the manager singleton-lease bucket. NOTE: `Kvm.open` binds LAZILY — it does NOT
48925
+ * verify the stream exists or throw when it's missing, so it can't "create if absent" (a fresh bucket
48926
+ * then fails 'stream not found' on the first write — unlike the delivery bucket, which is pre-created
48927
+ * at `cotal up`). `create` is the ensure-exists call: it makes the bucket (bucket-level TTL) or, when
48928
+ * another manager already did, throws — and we bind the now-existing one. Either way the per-KEY CAS
48929
+ * create stays the only single-flight gate, so a lost bucket-create race never reads as "lease held".
48930
+ * The manager is allow-all, so it may create. */
48931
+ async managerLeaseRegistry() {
48932
+ if (!this.nc)
48933
+ throw new Error("endpoint not started");
48934
+ if (this.managerLeaseKv)
48935
+ return this.managerLeaseKv;
48936
+ const kvm = new import_kv7.Kvm(this.nc);
48937
+ try {
48938
+ this.managerLeaseKv = await kvm.create(managerBucket(this.space), { ttl: MANAGER_LEASE_TTL_MS });
48939
+ } catch {
48940
+ this.managerLeaseKv = await kvm.open(managerBucket(this.space));
48941
+ }
48942
+ return this.managerLeaseKv;
48943
+ }
48944
+ encodeManagerLease(info) {
48945
+ return new TextEncoder().encode(JSON.stringify(info));
48946
+ }
48947
+ /** Acquire the singleton manager lease via ATOMIC CAS create. THROWS if a live lease exists (a loud
48948
+ * refusal-to-start, never a retry) so two managers never split control. A crashed holder's lease
48949
+ * auto-expires (bucket TTL). Returns the lease revision (for renew). */
48950
+ async acquireManagerLease(info) {
48951
+ return (await this.managerLeaseRegistry()).create(MANAGER_LEASE_KEY, this.encodeManagerLease({ ...info, since: Date.now() }));
48952
+ }
48953
+ /** Renew the held lease (CAS update against `revision`) before the bucket TTL expires it. Throws if the
48954
+ * revision moved (lost the lease). Returns the new revision. */
48955
+ async renewManagerLease(info, revision) {
48956
+ return (await this.managerLeaseRegistry()).update(MANAGER_LEASE_KEY, this.encodeManagerLease({ ...info, since: Date.now() }), revision);
48957
+ }
48958
+ /** Release the held lease on clean shutdown so a replacement manager acquires immediately. CAS-guarded
48959
+ * by `revision`: if we already LOST the lease (renew gap / another manager took over) the stored
48960
+ * revision has moved, the conditional delete no-ops, and we never delete the replacement's live lease. */
48961
+ async releaseManagerLease(revision) {
48962
+ try {
48963
+ const kv = await this.managerLeaseRegistry();
48964
+ if (revision === void 0)
48965
+ await kv.delete(MANAGER_LEASE_KEY);
48966
+ else
48967
+ await kv.delete(MANAGER_LEASE_KEY, { previousSeq: revision });
48968
+ } catch {
48969
+ }
48970
+ }
48971
+ /** Read the live manager lease, or undefined if none (bucket absent / key deleted/expired). Open-only —
48972
+ * never creates the bucket, so a probe that finds no manager leaves none behind. */
48973
+ async readManagerLease() {
48974
+ if (!this.nc)
48975
+ return void 0;
48976
+ try {
48977
+ const kv = await new import_kv7.Kvm(this.nc).open(managerBucket(this.space));
48978
+ const e = await kv.get(MANAGER_LEASE_KEY);
48979
+ if (!e || e.operation === "DEL" || e.operation === "PURGE")
48980
+ return void 0;
48981
+ return e.json();
48982
+ } catch {
48983
+ return void 0;
48984
+ }
48985
+ }
48806
48986
  /** Privileged: one owner's NON-TOMBSTONED durable memberships as `{channel, generation, activated}` —
48807
48987
  * the server-side delivery daemon serves this to a connecting agent (the `listMemberships` op on
48808
48988
  * `ctl.delivery`). The agent seeds its leave mirror from the ACTIVATED ones (the confirmed backstops),
@@ -48923,7 +49103,7 @@ var CotalEndpoint = class extends import_node_events.EventEmitter {
48923
49103
  filter_subject: subject,
48924
49104
  ack_policy: import_jetstream2.AckPolicy.None,
48925
49105
  mem_storage: true,
48926
- inactive_threshold: (0, import_transport_node4.nanos)(3e4),
49106
+ inactive_threshold: (0, import_transport_node5.nanos)(3e4),
48927
49107
  deliver_policy: import_jetstream2.DeliverPolicy.StartSequence,
48928
49108
  opt_start_seq: fromSeqExcl + 1
48929
49109
  });
@@ -49323,7 +49503,7 @@ var CotalEndpoint = class extends import_node_events.EventEmitter {
49323
49503
  * distinct from a responder that errored. nats.js surfaces it as NoRespondersError, or a RequestError
49324
49504
  * whose `isNoResponders()` is true. */
49325
49505
  isNoResponders(e) {
49326
- return e instanceof import_transport_node4.NoRespondersError || e instanceof import_transport_node4.RequestError && e.isNoResponders();
49506
+ return e instanceof import_transport_node5.NoRespondersError || e instanceof import_transport_node5.RequestError && e.isNoResponders();
49327
49507
  }
49328
49508
  /** Agent-side: this session's CURRENT durable memberships (channel + join generation) from the
49329
49509
  * manager — the agent holds no read on the privileged members KV. `undefined` ⇒ NO control responder
@@ -49666,7 +49846,7 @@ var CotalEndpoint = class extends import_node_events.EventEmitter {
49666
49846
  filter_subject: subject,
49667
49847
  ack_policy: import_jetstream2.AckPolicy.None,
49668
49848
  mem_storage: true,
49669
- inactive_threshold: (0, import_transport_node4.nanos)(3e4),
49849
+ inactive_threshold: (0, import_transport_node5.nanos)(3e4),
49670
49850
  ..."time" in start ? { deliver_policy: import_jetstream2.DeliverPolicy.StartTime, opt_start_time: start.time.toISOString() } : { deliver_policy: import_jetstream2.DeliverPolicy.StartSequence, opt_start_seq: start.seq }
49671
49851
  });
49672
49852
  try {
@@ -49956,143 +50136,27 @@ function authOpts(a) {
49956
50136
  if (a.creds) {
49957
50137
  if (a.token || a.user || a.pass)
49958
50138
  throw new Error("creds are mutually exclusive with token/user/pass auth");
49959
- return { authenticator: (0, import_transport_node4.credsAuthenticator)(new TextEncoder().encode(a.creds)), tls };
50139
+ return { authenticator: (0, import_transport_node5.credsAuthenticator)(new TextEncoder().encode(a.creds)), tls };
49960
50140
  }
49961
50141
  return { token: a.token, user: a.user, pass: a.pass, tls };
49962
50142
  }
49963
50143
  function describeStatusError(err2) {
49964
- if (err2 instanceof import_transport_node4.PermissionViolationError) {
50144
+ if (err2 instanceof import_transport_node5.PermissionViolationError) {
49965
50145
  return new Error(`NATS permission denied: cannot ${err2.operation} "${err2.subject}" \u2014 check this endpoint's ACLs (a denied peer looks "absent" rather than blocked)`, { cause: err2 });
49966
50146
  }
49967
50147
  return err2;
49968
50148
  }
49969
50149
  function isPermissionDenied(e) {
49970
- if (e instanceof import_transport_node4.PermissionViolationError)
50150
+ if (e instanceof import_transport_node5.PermissionViolationError)
49971
50151
  return true;
49972
- if (e?.cause instanceof import_transport_node4.PermissionViolationError)
50152
+ if (e?.cause instanceof import_transport_node5.PermissionViolationError)
49973
50153
  return true;
49974
50154
  return /permissions?\s+violation/i.test(String(e?.message ?? ""));
49975
50155
  }
49976
50156
 
49977
- // ../../packages/core/dist/membership-feed.js
49978
- var import_transport_node5 = __toESM(require_transport_node(), 1);
49979
- var import_kv7 = __toESM(require_mod6(), 1);
49980
-
49981
- // ../../packages/core/dist/agent-file.js
49982
- var import_node_fs = require("node:fs");
49983
- function unquote(v) {
49984
- if (v.startsWith('"') && v.endsWith('"') || v.startsWith("'") && v.endsWith("'"))
49985
- return v.slice(1, -1);
49986
- return v;
49987
- }
49988
- function parseFrontmatter(src) {
49989
- const out = {};
49990
- for (const raw of src.split("\n")) {
49991
- const line = raw.trim();
49992
- if (!line || line.startsWith("#"))
49993
- continue;
49994
- const colon = line.indexOf(":");
49995
- if (colon < 1)
49996
- throw new Error(`agent file: unparseable frontmatter line "${raw}"`);
49997
- const key = line.slice(0, colon).trim();
49998
- const val = line.slice(colon + 1).trim();
49999
- if (val.startsWith("[")) {
50000
- if (!val.endsWith("]"))
50001
- throw new Error(`agent file: unterminated list for "${key}"`);
50002
- out[key] = val.slice(1, -1).split(",").map((s) => unquote(s.trim())).filter(Boolean);
50003
- } else {
50004
- out[key] = unquote(val);
50005
- }
50006
- }
50007
- return out;
50008
- }
50009
- function loadAgentFile(path) {
50010
- const src = (0, import_node_fs.readFileSync)(path, "utf8");
50011
- const m = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/.exec(src);
50012
- if (!m)
50013
- throw new Error(`agent file ${path}: missing "---" frontmatter block`);
50014
- const fm = parseFrontmatter(m[1]);
50015
- const persona = m[2].trim();
50016
- const str = (k) => {
50017
- const v = fm[k];
50018
- if (Array.isArray(v))
50019
- throw new Error(`agent file ${path}: "${k}" must be a scalar`);
50020
- return v;
50021
- };
50022
- const list = (k) => {
50023
- const v = fm[k];
50024
- if (v === void 0)
50025
- return void 0;
50026
- return Array.isArray(v) ? v : [v];
50027
- };
50028
- const name = str("name");
50029
- if (!name)
50030
- throw new Error(`agent file ${path}: "name" is required`);
50031
- assertValidName(name);
50032
- const kind = str("kind");
50033
- if (kind && kind !== "agent" && kind !== "endpoint")
50034
- throw new Error(`agent file ${path}: "kind" must be "agent" or "endpoint"`);
50035
- for (const old of ["channels", "publish"])
50036
- if (old in fm)
50037
- throw new Error(`agent file ${path}: "${old}" was renamed \u2014 use "subscribe"/"allowSubscribe" (read) and "allowPublish" (post)`);
50038
- const subscribe = list("subscribe");
50039
- const allowSubscribe = list("allowSubscribe");
50040
- const allowPublish = list("allowPublish");
50041
- const quiet = list("quiet");
50042
- const muted = list("muted");
50043
- for (const ch of [...subscribe ?? [], ...allowSubscribe ?? [], ...allowPublish ?? []])
50044
- try {
50045
- assertValidChannel(ch);
50046
- } catch (e) {
50047
- throw new Error(`agent file ${path}: ${e.message}`);
50048
- }
50049
- const effSubscribe = subscribe?.length ? subscribe : ["general"];
50050
- const effAllow = allowSubscribe?.length ? allowSubscribe : effSubscribe;
50051
- for (const ch of effSubscribe)
50052
- if (!channelInAllow(effAllow, ch))
50053
- throw new Error(`agent file ${path}: subscribe channel "${ch}" is not within allowSubscribe [${effAllow.join(", ")}]`);
50054
- const both = (quiet ?? []).filter((c) => (muted ?? []).includes(c));
50055
- if (both.length)
50056
- throw new Error(`agent file ${path}: channel(s) [${both.join(", ")}] are in both quiet and muted \u2014 pick one`);
50057
- for (const [field, chans] of [["quiet", quiet], ["muted", muted]])
50058
- for (const ch of chans ?? []) {
50059
- try {
50060
- assertValidChannel(ch);
50061
- } catch (e) {
50062
- throw new Error(`agent file ${path}: ${e.message}`);
50063
- }
50064
- if (!isConcreteChannel(ch))
50065
- throw new Error(`agent file ${path}: ${field} channel "${ch}" must be a concrete channel (no wildcard)`);
50066
- if (!channelInAllow(effAllow, ch))
50067
- throw new Error(`agent file ${path}: ${field} channel "${ch}" is not within your read ACL / allowSubscribe [${effAllow.join(", ")}]`);
50068
- }
50069
- const known = /* @__PURE__ */ new Set(["name", "role", "kind", "description", "tags", "subscribe", "allowSubscribe", "allowPublish", "quiet", "muted", "model", "capabilities", "owner"]);
50070
- const meta3 = {};
50071
- for (const [k, v] of Object.entries(fm))
50072
- if (!known.has(k) && typeof v === "string")
50073
- meta3[k] = v;
50074
- return {
50075
- name,
50076
- role: str("role"),
50077
- kind,
50078
- description: str("description"),
50079
- tags: list("tags"),
50080
- subscribe,
50081
- allowSubscribe,
50082
- allowPublish,
50083
- quiet,
50084
- muted,
50085
- model: str("model"),
50086
- capabilities: list("capabilities"),
50087
- owner: str("owner"),
50088
- meta: Object.keys(meta3).length ? meta3 : void 0,
50089
- persona: persona || void 0
50090
- };
50091
- }
50092
-
50093
50157
  // ../../packages/core/dist/spaces.js
50094
50158
  var import_transport_node6 = __toESM(require_transport_node(), 1);
50095
- var import_jetstream3 = __toESM(require_mod5(), 1);
50159
+ var import_jetstream3 = __toESM(require_mod4(), 1);
50096
50160
  var import_kv8 = __toESM(require_mod6(), 1);
50097
50161
 
50098
50162
  // ../../packages/core/dist/registry.js
@@ -50562,14 +50626,15 @@ var MeshAgent = class extends import_node_events2.EventEmitter {
50562
50626
  /** Ask the manager to spawn a new teammate into this space (its `start` op).
50563
50627
  * How it lands — a detached PTY, a tmux window, a cmux tab — is the manager's
50564
50628
  * runtime; from here it just joins the mesh as a lateral peer. `opts.agent` picks
50565
- * the harness (default the manager's `cotal`/Claude) and `opts.model` overrides the
50566
- * persona file's `model:` the same knobs the operator's `cotal start` carries, so
50629
+ * the harness (default the manager's `cotal`/Claude), `opts.model` overrides the
50630
+ * persona file's `model:`, and `opts.cwd` roots the new peer at a different folder/repo
50631
+ * than the manager's workspace — the same knobs the operator's `cotal start` carries, so
50567
50632
  * the agent and operator spawn doors share one control-op contract. */
50568
50633
  async spawn(name, role, opts) {
50569
50634
  this.assertConnected();
50570
50635
  return this.ep.requestControl(CONTROL_PRIVILEGED, {
50571
50636
  op: "start",
50572
- args: { name, role, agent: opts?.agent, model: opts?.model }
50637
+ args: { name, role, agent: opts?.agent, model: opts?.model, cwd: opts?.cwd }
50573
50638
  });
50574
50639
  }
50575
50640
  /** Ask the manager to tear a teammate down (its `stop` op). Graceful by default —
@@ -51158,11 +51223,12 @@ ${info}${caught}`);
51158
51223
  name: external_exports.string().describe("Which persona to spawn \u2014 the persona FILENAME in .cotal/agents (e.g. `review-critic`), without the .md. The new peer joins under the persona's own `name:` (auto-numbered, e.g. socrates-2, if that's taken). Fails if no such persona file exists \u2014 spawn an existing persona, don't invent a name."),
51159
51224
  role: external_exports.string().optional().describe("Optional role for the new peer (e.g. worker, reviewer); overrides the persona file's role."),
51160
51225
  agent: external_exports.string().optional().describe("Optional harness the new peer runs on \u2014 the agent/connector type (claude, opencode, hermes), NOT the persona to spawn (that's `name`). Defaults to the manager's default (Claude)."),
51161
- model: external_exports.string().optional().describe("Optional model override (e.g. opus, sonnet) \u2014 wins over the persona file's model:.")
51226
+ model: external_exports.string().optional().describe("Optional model override (e.g. opus, sonnet) \u2014 wins over the persona file's model:."),
51227
+ cwd: external_exports.string().optional().describe("Optional working directory to root the new peer at (e.g. a different repo). A relative path resolves against the manager's workspace; omitted \u2192 it shares the manager's workspace.")
51162
51228
  },
51163
- async run(agent, _config, { name, role, agent: agentType, model }) {
51229
+ async run(agent, _config, { name, role, agent: agentType, model, cwd }) {
51164
51230
  try {
51165
- const reply = await agent.spawn(name, role, { agent: agentType, model });
51231
+ const reply = await agent.spawn(name, role, { agent: agentType, model, cwd });
51166
51232
  if (!reply.ok)
51167
51233
  return err(`Couldn't spawn ${name}: ${reply.error ?? "manager refused"}`);
51168
51234
  const d = reply.data;