@hooklink/cli 0.1.54 → 0.1.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/commands/config.d.ts.map +1 -1
  2. package/dist/commands/config.js +4 -2
  3. package/dist/commands/config.js.map +1 -1
  4. package/dist/commands/connect.d.ts.map +1 -1
  5. package/dist/commands/connect.js +124 -105
  6. package/dist/commands/connect.js.map +1 -1
  7. package/dist/commands/login.d.ts.map +1 -1
  8. package/dist/commands/login.js +7 -3
  9. package/dist/commands/login.js.map +1 -1
  10. package/dist/commands/logout.d.ts.map +1 -1
  11. package/dist/commands/logout.js +6 -1
  12. package/dist/commands/logout.js.map +1 -1
  13. package/dist/commands/tunnel.d.ts.map +1 -1
  14. package/dist/commands/tunnel.js +9 -7
  15. package/dist/commands/tunnel.js.map +1 -1
  16. package/dist/core/http-forwarder.d.ts +13 -3
  17. package/dist/core/http-forwarder.d.ts.map +1 -1
  18. package/dist/core/http-forwarder.js +95 -54
  19. package/dist/core/http-forwarder.js.map +1 -1
  20. package/dist/core/websocket-client.d.ts +7 -2
  21. package/dist/core/websocket-client.d.ts.map +1 -1
  22. package/dist/core/websocket-client.js +58 -1
  23. package/dist/core/websocket-client.js.map +1 -1
  24. package/dist/core/websocket-pool.d.ts +40 -0
  25. package/dist/core/websocket-pool.d.ts.map +1 -0
  26. package/dist/core/websocket-pool.js +129 -0
  27. package/dist/core/websocket-pool.js.map +1 -0
  28. package/dist/index.js +44 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/types/index.d.ts +17 -0
  31. package/dist/types/index.d.ts.map +1 -1
  32. package/dist/utils/api.d.ts +6 -4
  33. package/dist/utils/api.d.ts.map +1 -1
  34. package/dist/utils/api.js +30 -24
  35. package/dist/utils/api.js.map +1 -1
  36. package/dist/utils/config.d.ts +10 -1
  37. package/dist/utils/config.d.ts.map +1 -1
  38. package/dist/utils/config.js +82 -7
  39. package/dist/utils/config.js.map +1 -1
  40. package/package.json +1 -1
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WebSocketPool = void 0;
7
+ const events_1 = require("events");
8
+ const crypto_1 = __importDefault(require("crypto"));
9
+ const websocket_client_1 = require("./websocket-client");
10
+ const logger_1 = require("../utils/logger");
11
+ /**
12
+ * Pool of WebSocket connections to the same server.
13
+ *
14
+ * The server dispatches incoming requests round-robin across all
15
+ * connections in the pool, so parallel HTTP requests (JS, CSS, images)
16
+ * travel over separate TCP streams and no longer block each other.
17
+ *
18
+ * All connections share the same poolId so the server counts them
19
+ * as a single logical connection for plan-limit purposes.
20
+ */
21
+ class WebSocketPool extends events_1.EventEmitter {
22
+ constructor(options) {
23
+ super();
24
+ this.clients = [];
25
+ this.connectedCount = 0;
26
+ this.hasEmittedConnected = false;
27
+ this.hasEmittedReconnected = false;
28
+ this.options = options;
29
+ this.poolSize = options.poolSize ?? 4;
30
+ this.poolId = crypto_1.default.randomUUID();
31
+ }
32
+ async connect() {
33
+ const promises = [];
34
+ for (let i = 0; i < this.poolSize; i++) {
35
+ const clientOpts = {
36
+ wsUrl: this.options.wsUrl,
37
+ apiKey: this.options.apiKey,
38
+ endpointId: this.options.endpointId,
39
+ endpointIds: this.options.endpointIds,
40
+ trialToken: this.options.trialToken,
41
+ sessionId: this.options.sessionId,
42
+ maxReconnectAttempts: this.options.maxReconnectAttempts,
43
+ poolId: this.poolId,
44
+ onRequest: this.options.onRequest,
45
+ };
46
+ const client = new websocket_client_1.WebSocketClient(clientOpts);
47
+ // Forward events from individual clients to pool-level events.
48
+ // Only emit pool-level 'connected' once (when first client connects).
49
+ client.on('connected', () => {
50
+ this.connectedCount++;
51
+ if (!this.hasEmittedConnected) {
52
+ this.hasEmittedConnected = true;
53
+ this.emit('connected');
54
+ }
55
+ logger_1.Logger.debug(`Pool connection ${i + 1}/${this.poolSize} established`);
56
+ });
57
+ client.on('reconnected', () => {
58
+ // If the pool previously had zero connections, treat as pool reconnected
59
+ if (this.connectedCount === 0) {
60
+ this.connectedCount++;
61
+ if (!this.hasEmittedReconnected) {
62
+ this.hasEmittedReconnected = true;
63
+ this.emit('reconnected');
64
+ }
65
+ }
66
+ else {
67
+ this.connectedCount++;
68
+ }
69
+ logger_1.Logger.debug(`Pool connection ${i + 1}/${this.poolSize} reconnected`);
70
+ });
71
+ client.on('disconnected', () => {
72
+ this.connectedCount = Math.max(0, this.connectedCount - 1);
73
+ // Only emit pool-level disconnected when ALL connections are down
74
+ if (this.connectedCount === 0) {
75
+ this.emit('disconnected');
76
+ }
77
+ logger_1.Logger.debug(`Pool connection ${i + 1}/${this.poolSize} disconnected (${this.connectedCount} remaining)`);
78
+ });
79
+ client.on('error', (error) => {
80
+ this.emit('error', error);
81
+ });
82
+ client.on('reconnect_exhausted', () => {
83
+ // Only emit pool-level exhaustion when ALL clients have exhausted
84
+ const allExhausted = this.clients.every((c) => !c.isConnected());
85
+ if (allExhausted) {
86
+ this.emit('reconnect_exhausted');
87
+ }
88
+ });
89
+ client.on('fatal_close', (code, reason) => {
90
+ // Fatal close affects the whole pool (auth failure, limit reached, etc.)
91
+ this.emit('fatal_close', code, reason);
92
+ // Disconnect all other pool members
93
+ this.disconnect();
94
+ });
95
+ this.clients.push(client);
96
+ // Stagger connections slightly to avoid thundering herd on the server
97
+ const connectPromise = i === 0
98
+ ? client.connect()
99
+ : new Promise((resolve) => {
100
+ setTimeout(() => {
101
+ client.connect().then(resolve).catch(resolve);
102
+ }, i * 100);
103
+ });
104
+ promises.push(connectPromise);
105
+ }
106
+ // Wait for at least the first connection to succeed
107
+ await promises[0];
108
+ // Let remaining connections establish in the background
109
+ Promise.allSettled(promises.slice(1)).catch(() => { });
110
+ }
111
+ disconnect() {
112
+ for (const client of this.clients) {
113
+ client.disconnect();
114
+ }
115
+ this.clients = [];
116
+ this.connectedCount = 0;
117
+ }
118
+ isConnected() {
119
+ return this.clients.some((c) => c.isConnected());
120
+ }
121
+ getActiveCount() {
122
+ return this.connectedCount;
123
+ }
124
+ getPoolSize() {
125
+ return this.poolSize;
126
+ }
127
+ }
128
+ exports.WebSocketPool = WebSocketPool;
129
+ //# sourceMappingURL=websocket-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-pool.js","sourceRoot":"","sources":["../../src/core/websocket-pool.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,38 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
3
36
  var __importDefault = (this && this.__importDefault) || function (mod) {
4
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
38
  };
@@ -48,6 +81,17 @@ async function main() {
48
81
  return;
49
82
  }
50
83
  }
84
+ // Handle --staging flag before Commander parses
85
+ if (args.includes('--staging')) {
86
+ // Activate staging mode on config manager — transparently remaps
87
+ // apiKey/apiUrl/wsUrl to their staging: prefixed counterparts
88
+ const { config: cliConfig } = await Promise.resolve().then(() => __importStar(require('./utils/config')));
89
+ cliConfig.setStaging(true);
90
+ // Remove the flag so Commander doesn't choke on it
91
+ const idx = process.argv.indexOf('--staging');
92
+ if (idx !== -1)
93
+ process.argv.splice(idx, 1);
94
+ }
51
95
  const program = new commander_1.Command();
52
96
  program
53
97
  .name('hooklink')
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,9 @@ export interface Config {
7
7
  defaultEndpoint?: string;
8
8
  defaultPort?: number;
9
9
  telemetry?: boolean;
10
+ 'staging:apiKey'?: string;
11
+ 'staging:apiUrl'?: string;
12
+ 'staging:wsUrl'?: string;
10
13
  }
11
14
  export interface WSAuthMessage {
12
15
  type: 'auth';
@@ -36,6 +39,20 @@ export interface WSResponseMessage {
36
39
  body?: string;
37
40
  bodyEncoding?: 'utf8' | 'base64';
38
41
  }
42
+ /** Returned by forwarder when response was streamed via WS chunks */
43
+ export interface StreamedResult {
44
+ streamed: true;
45
+ statusCode: number;
46
+ }
47
+ /** Callback interface for streaming response chunks over WebSocket */
48
+ export interface StreamContext {
49
+ sendStart: (requestId: string, statusCode: number, headers: Record<string, string | string[]>) => void;
50
+ /** Send a chunk. Returns a promise that resolves when the WS send buffer
51
+ * has drained below the high-water mark (backpressure). */
52
+ sendChunk: (requestId: string, data: Buffer) => Promise<void>;
53
+ sendEnd: (requestId: string) => void;
54
+ }
55
+ export type ForwardResult = WSResponseMessage | StreamedResult;
39
56
  export interface WSErrorMessage {
40
57
  type: 'error';
41
58
  requestId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -21,10 +21,12 @@ interface TrialStatusResponse {
21
21
  remainingSeconds: number;
22
22
  }
23
23
  declare class ApiClient {
24
- private client;
25
- private unauthClient;
26
- constructor();
27
- private getApiKey;
24
+ private _client;
25
+ private _unauthClient;
26
+ /** Lazily create the authenticated client so it picks up the correct
27
+ * apiUrl after staging mode has been activated. */
28
+ private get client();
29
+ private get unauthClient();
28
30
  verifyApiKey(): Promise<boolean>;
29
31
  getEndpoints(): Promise<Endpoint[]>;
30
32
  getEndpoint(id: string): Promise<Endpoint>;
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEhD,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,cAAM,SAAS;IACb,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,YAAY,CAAgB;;IA6BpC,OAAO,CAAC,SAAS;IAIX,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKnC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAK1C,OAAO,CACX,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,UAAU,EAAE,CAAC;IAalB,cAAc,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAKhH,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAQlG,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAK7H,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAKtF,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAK/D,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKhE;AAED,eAAO,MAAM,GAAG,WAAkB,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEhD,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,cAAM,SAAS;IACb,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,aAAa,CAA8B;IAEnD;wDACoD;IACpD,OAAO,KAAK,MAAM,GAgBjB;IAED,OAAO,KAAK,YAAY,GASvB;IAEK,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKnC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAK1C,OAAO,CACX,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,UAAU,EAAE,CAAC;IAalB,cAAc,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAKhH,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAQlG,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAK7H,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAKtF,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAK/D,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKhE;AAED,eAAO,MAAM,GAAG,WAAkB,CAAC"}
package/dist/utils/api.js CHANGED
@@ -8,31 +8,37 @@ const axios_1 = __importDefault(require("axios"));
8
8
  const config_1 = require("./config");
9
9
  class ApiClient {
10
10
  constructor() {
11
- const apiUrl = config_1.config.get('apiUrl');
12
- this.client = axios_1.default.create({
13
- baseURL: `${apiUrl}/api`,
14
- headers: {
15
- 'Content-Type': 'application/json',
16
- },
17
- });
18
- // Unauthenticated client for trial endpoints
19
- this.unauthClient = axios_1.default.create({
20
- baseURL: `${apiUrl}/api`,
21
- headers: {
22
- 'Content-Type': 'application/json',
23
- },
24
- });
25
- // Add auth interceptor
26
- this.client.interceptors.request.use((config) => {
27
- const apiKey = this.getApiKey();
28
- if (apiKey) {
29
- config.headers.Authorization = `Bearer ${apiKey}`;
30
- }
31
- return config;
32
- });
11
+ this._client = null;
12
+ this._unauthClient = null;
33
13
  }
34
- getApiKey() {
35
- return config_1.config.get('apiKey');
14
+ /** Lazily create the authenticated client so it picks up the correct
15
+ * apiUrl after staging mode has been activated. */
16
+ get client() {
17
+ if (!this._client) {
18
+ const apiUrl = config_1.config.get('apiUrl');
19
+ this._client = axios_1.default.create({
20
+ baseURL: `${apiUrl}/api`,
21
+ headers: { 'Content-Type': 'application/json' },
22
+ });
23
+ this._client.interceptors.request.use((reqConfig) => {
24
+ const apiKey = config_1.config.get('apiKey');
25
+ if (apiKey) {
26
+ reqConfig.headers.Authorization = `Bearer ${apiKey}`;
27
+ }
28
+ return reqConfig;
29
+ });
30
+ }
31
+ return this._client;
32
+ }
33
+ get unauthClient() {
34
+ if (!this._unauthClient) {
35
+ const apiUrl = config_1.config.get('apiUrl');
36
+ this._unauthClient = axios_1.default.create({
37
+ baseURL: `${apiUrl}/api`,
38
+ headers: { 'Content-Type': 'application/json' },
39
+ });
40
+ }
41
+ return this._unauthClient;
36
42
  }
37
43
  async verifyApiKey() {
38
44
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,22 @@
1
1
  import { Config } from '../types';
2
2
  declare class ConfigManager {
3
3
  private config;
4
+ private stagingMode;
4
5
  constructor();
6
+ /** Enable staging mode. Remapped keys (apiKey, apiUrl, wsUrl) will
7
+ * transparently read/write their staging: prefixed counterparts. */
8
+ setStaging(enabled: boolean): void;
9
+ isStaging(): boolean;
10
+ /** Resolve the actual storage key, remapping to staging: prefix when active. */
11
+ private resolveKey;
5
12
  get<K extends keyof Config>(key: K): Config[K];
6
13
  set<K extends keyof Config>(key: K, value: Config[K]): void;
7
14
  has(key: keyof Config): boolean;
8
15
  delete(key: keyof Config): void;
9
16
  clear(): void;
10
- getAll(): Config;
17
+ /** Returns config entries for the current environment only.
18
+ * Staging keys are hidden in production mode and vice versa. */
19
+ getAll(): Partial<Config>;
11
20
  getPath(): string;
12
21
  }
13
22
  export declare const config: ConfigManager;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAkClC,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAe;;IAS7B,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAY9C,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAI3D,GAAG,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,OAAO;IAI/B,MAAM,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI;IAI/B,KAAK,IAAI,IAAI;IAIb,MAAM,IAAI,MAAM;IAIhB,OAAO,IAAI,MAAM;CAGlB;AAED,eAAO,MAAM,MAAM,eAAsB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAgDlC,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,WAAW,CAAS;;IAS5B;yEACqE;IACrE,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,SAAS,IAAI,OAAO;IAIpB,gFAAgF;IAChF,OAAO,CAAC,UAAU;IAOlB,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAc9C,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAK3D,GAAG,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,OAAO;IAK/B,MAAM,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,IAAI;IAK/B,KAAK,IAAI,IAAI;IAoBb;qEACiE;IACjE,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IA2BzB,OAAO,IAAI,MAAM;CAGlB;AAED,eAAO,MAAM,MAAM,eAAsB,CAAC"}
@@ -28,7 +28,20 @@ const schema = {
28
28
  type: 'boolean',
29
29
  default: true,
30
30
  },
31
+ 'staging:apiKey': {
32
+ type: 'string',
33
+ },
34
+ 'staging:apiUrl': {
35
+ type: 'string',
36
+ default: 'https://staging-api.hooklink.net',
37
+ },
38
+ 'staging:wsUrl': {
39
+ type: 'string',
40
+ default: 'wss://staging-ws.hooklink.net/ws',
41
+ },
31
42
  };
43
+ // Keys that are remapped when staging mode is active
44
+ const STAGING_REMAPPED_KEYS = new Set(['apiKey', 'apiUrl', 'wsUrl']);
32
45
  // Map config keys to environment variable names
33
46
  const envVarMap = {
34
47
  apiKey: 'HOOKLINK_API_KEY',
@@ -37,13 +50,30 @@ const envVarMap = {
37
50
  };
38
51
  class ConfigManager {
39
52
  constructor() {
53
+ this.stagingMode = false;
40
54
  this.config = new conf_1.default({
41
55
  projectName: 'hooklink',
42
56
  schema: schema,
43
57
  });
44
58
  }
59
+ /** Enable staging mode. Remapped keys (apiKey, apiUrl, wsUrl) will
60
+ * transparently read/write their staging: prefixed counterparts. */
61
+ setStaging(enabled) {
62
+ this.stagingMode = enabled;
63
+ }
64
+ isStaging() {
65
+ return this.stagingMode;
66
+ }
67
+ /** Resolve the actual storage key, remapping to staging: prefix when active. */
68
+ resolveKey(key) {
69
+ if (this.stagingMode && STAGING_REMAPPED_KEYS.has(key)) {
70
+ return `staging:${key}`;
71
+ }
72
+ return key;
73
+ }
45
74
  get(key) {
46
- // Check env var first
75
+ const resolved = this.resolveKey(key);
76
+ // Check env var (env vars always use the original key name)
47
77
  const envName = envVarMap[key];
48
78
  if (envName) {
49
79
  const envVal = process.env[envName];
@@ -51,22 +81,67 @@ class ConfigManager {
51
81
  return envVal;
52
82
  }
53
83
  }
54
- return this.config.get(key);
84
+ return this.config.get(resolved);
55
85
  }
56
86
  set(key, value) {
57
- this.config.set(key, value);
87
+ const resolved = this.resolveKey(key);
88
+ this.config.set(resolved, value);
58
89
  }
59
90
  has(key) {
60
- return this.config.has(key);
91
+ const resolved = this.resolveKey(key);
92
+ return this.config.has(resolved);
61
93
  }
62
94
  delete(key) {
63
- this.config.delete(key);
95
+ const resolved = this.resolveKey(key);
96
+ this.config.delete(resolved);
64
97
  }
65
98
  clear() {
66
- this.config.clear();
99
+ if (this.stagingMode) {
100
+ // Only clear staging keys
101
+ for (const key of STAGING_REMAPPED_KEYS) {
102
+ const stagingKey = `staging:${key}`;
103
+ if (this.config.has(stagingKey)) {
104
+ this.config.delete(stagingKey);
105
+ }
106
+ }
107
+ }
108
+ else {
109
+ // Clear production keys only (preserve staging keys)
110
+ const store = this.config.store;
111
+ for (const key of Object.keys(store)) {
112
+ if (!key.startsWith('staging:')) {
113
+ this.config.delete(key);
114
+ }
115
+ }
116
+ }
67
117
  }
118
+ /** Returns config entries for the current environment only.
119
+ * Staging keys are hidden in production mode and vice versa. */
68
120
  getAll() {
69
- return this.config.store;
121
+ const store = this.config.store;
122
+ const result = {};
123
+ if (this.stagingMode) {
124
+ // Show staging keys under their canonical names
125
+ for (const [key, value] of Object.entries(store)) {
126
+ if (key.startsWith('staging:')) {
127
+ const canonical = key.slice('staging:'.length);
128
+ result[canonical] = value;
129
+ }
130
+ else if (!STAGING_REMAPPED_KEYS.has(key)) {
131
+ // Show non-remapped keys (defaultEndpoint, defaultPort, telemetry)
132
+ result[key] = value;
133
+ }
134
+ }
135
+ }
136
+ else {
137
+ // Show production keys, hide staging: prefixed keys
138
+ for (const [key, value] of Object.entries(store)) {
139
+ if (!key.startsWith('staging:')) {
140
+ result[key] = value;
141
+ }
142
+ }
143
+ }
144
+ return result;
70
145
  }
71
146
  getPath() {
72
147
  return this.config.path;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAIxB,MAAM,MAAM,GAAG;IACb,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;KACf;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,0BAA0B;KACpC;IACD,KAAK,EAAE;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,0BAA0B;KACpC;IACD,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ;KACf;IACD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;KACd;IACD,SAAS,EAAE;QACT,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;KACd;CACO,CAAC;AAEX,gDAAgD;AAChD,MAAM,SAAS,GAA0C;IACvD,MAAM,EAAE,kBAAkB;IAC1B,MAAM,EAAE,kBAAkB;IAC1B,KAAK,EAAE,iBAAiB;CACzB,CAAC;AAEF,MAAM,aAAa;IAGjB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,cAAI,CAAS;YAC7B,WAAW,EAAE,UAAU;YACvB,MAAM,EAAE,MAAmC;SAC5C,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAyB,GAAM;QAChC,sBAAsB;QACtB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;gBAC1C,OAAO,MAAmB,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAyB,GAAM,EAAE,KAAgB;QAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,GAAiB;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,GAAiB;QACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;CACF;AAEY,QAAA,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hooklink/cli",
3
- "version": "0.1.54",
3
+ "version": "0.1.56",
4
4
  "description": "Hooklink CLI - Forward webhooks to your local development machine",
5
5
  "main": "dist/index.js",
6
6
  "bin": {