@optimizely/ocp-cli 1.3.3 → 1.3.4-beta.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.
@@ -13,11 +13,13 @@ const os = require("os");
13
13
  const path = require("path");
14
14
  const semver = require("semver");
15
15
  const oo_cli_1 = require("oo-cli");
16
+ const AppContext_1 = require("../../lib/AppContext");
16
17
  const die_1 = require("../../lib/die");
17
18
  const formatError_1 = require("../../lib/formatError");
18
19
  const handleInterrupt_1 = require("../../lib/handleInterrupt");
19
20
  const TerminalOutput_1 = require("../../lib/TerminalOutput");
20
21
  const TeminalPassthru_1 = require("../../lib/TeminalPassthru");
22
+ const Tracking_1 = require("../../lib/Tracking");
21
23
  /**
22
24
  * Dev Server command - starts the local development server for OCP apps
23
25
  * This is a top-level command (no namespace decorator), so it runs as `ocp dev-server`
@@ -47,6 +49,19 @@ let DevServerCommand = class DevServerCommand {
47
49
  if (this.path) {
48
50
  process.env.APP_ROOT_DIR = this.path;
49
51
  }
52
+ // Track dev server start (fire-and-forget)
53
+ try {
54
+ const ctx = (0, AppContext_1.appContext)();
55
+ Tracking_1.Tracking.track({
56
+ action: 'dev_server_started',
57
+ appId: ctx.appId || 'unknown',
58
+ command: 'dev-server start',
59
+ version: ctx.version,
60
+ });
61
+ }
62
+ catch (_b) {
63
+ // Ignore - don't let tracking errors affect the command
64
+ }
50
65
  // Import and call startServer from ocp-local-env (installed globally)
51
66
  // Get the global npm modules path and construct the full package path
52
67
  const globalRoot = TerminalOutput_1.TerminalOutput.exec('npm root -g').stdout.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"DevServer.js","sourceRoot":"","sources":["../../../src/commands/dev-server/DevServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DevServer.js","sourceRoot":"","sources":["../../../src/commands/dev-server/DevServer.ts"],"names":[],"mappings":"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"}
@@ -27,8 +27,22 @@ let ListCommand = class ListCommand {
27
27
  async list() {
28
28
  try {
29
29
  const criteria = {
30
- stages: [DeploymentStage.TEST, DeploymentStage.PRODUCTION]
30
+ stages: [DeploymentStage.TEST, DeploymentStage.PRODUCTION],
31
+ states: this.allStatuses ? [] : [AppVersionState.STOPPED, AppVersionState.ABANDONED],
31
32
  };
33
+ if (!this.allStatuses) {
34
+ criteria.states = [
35
+ AppVersionState.NEW,
36
+ AppVersionState.PUBLISHED,
37
+ AppVersionState.BUILD_FAILED,
38
+ AppVersionState.STARTING,
39
+ AppVersionState.START_FAILED,
40
+ AppVersionState.RUNNING,
41
+ AppVersionState.UPGRADING_RUNTIME,
42
+ AppVersionState.STOPPING,
43
+ AppVersionState.STOP_FAILED
44
+ ];
45
+ }
32
46
  if (this.appId) {
33
47
  criteria.appId = this.appId;
34
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"List.js","sourceRoot":"","sources":["../../../src/commands/directory/List.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"List.js","sourceRoot":"","sources":["../../../src/commands/directory/List.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,36 @@ var RivendellApi;
33
33
  return request('DELETE', uri);
34
34
  }
35
35
  RivendellApi.delete_ = delete_;
36
+ const MAX_RETRIES = 2;
37
+ function isSocketError(error) {
38
+ if (error instanceof Error && 'cause' in error) {
39
+ const cause = error.cause;
40
+ return (cause === null || cause === void 0 ? void 0 : cause.code) === 'UND_ERR_SOCKET' || (cause === null || cause === void 0 ? void 0 : cause.code) === 'ECONNRESET' || (cause === null || cause === void 0 ? void 0 : cause.code) === 'EPIPE';
41
+ }
42
+ return false;
43
+ }
44
+ function shouldRetryException(method, error) {
45
+ var _a;
46
+ // Check if error is an ApiError with a status code
47
+ if (error instanceof ApiError && ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status)) {
48
+ const status = error.response.status;
49
+ // Only retry 5xx errors for GET requests, never retry 3xx/4xx
50
+ return method === 'GET' && status >= 500;
51
+ }
52
+ // For non-ApiError exceptions (network failures, etc.)
53
+ if (method === 'GET') {
54
+ // For GET: retry on network exceptions
55
+ return true;
56
+ }
57
+ else {
58
+ // For other methods: only retry on socket errors (idempotent concern)
59
+ return isSocketError(error);
60
+ }
61
+ }
62
+ function shouldRetryResponse(method, status) {
63
+ // Only retry 5xx responses for GET requests
64
+ return method === 'GET' && status >= 500;
65
+ }
36
66
  async function request(method, uri, body) {
37
67
  const url = `${(0, Config_1.runtimeConfig)().rivendell}/${uri}`;
38
68
  const requestPayload = { method };
@@ -45,16 +75,50 @@ var RivendellApi;
45
75
  requestPayload.headers['content-type'] = 'application/json';
46
76
  requestPayload.body = JSON.stringify(body);
47
77
  }
48
- const response = await fetch(url, requestPayload);
49
- const responseText = await response.text();
50
- if (response.status < 200 || response.status >= 300) {
51
- const errorMsg = `Received a ${response.status} from OCP: ${getErrorMessage(response.status)}`;
52
- throw new ApiError(errorMsg, responseText, response);
78
+ let lastError;
79
+ let lastResponseText;
80
+ let lastStatus;
81
+ for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
82
+ try {
83
+ debug(`[RivendellApi] ${method} ${url}${attempt > 0 ? ` (retry ${attempt})` : ''}`);
84
+ const response = await fetch(url, requestPayload);
85
+ debug(`[RivendellApi] Response ${response.status}`);
86
+ const responseText = await response.text();
87
+ // Check for 5xx and retry if applicable
88
+ if (shouldRetryResponse(method, response.status) && attempt < MAX_RETRIES) {
89
+ debug(`[RivendellApi] Server error ${response.status}, retrying...`);
90
+ lastStatus = response.status;
91
+ lastResponseText = responseText;
92
+ continue;
93
+ }
94
+ if (response.status < 200 || response.status >= 300) {
95
+ const errorMsg = `Received a ${response.status} from OCP: ${getErrorMessage(response.status)}`;
96
+ throw new ApiError(errorMsg, responseText, response);
97
+ }
98
+ return {
99
+ response,
100
+ body: responseText ? JSON.parse(responseText) : ''
101
+ };
102
+ }
103
+ catch (error) {
104
+ lastError = error;
105
+ if (shouldRetryException(method, error) && attempt < MAX_RETRIES) {
106
+ debug(`[RivendellApi] ${isSocketError(error) ? 'Socket error' : 'Request failed'}, retrying...`);
107
+ continue;
108
+ }
109
+ throw error;
110
+ }
53
111
  }
54
- return {
55
- response,
56
- body: responseText ? JSON.parse(responseText) : ''
57
- };
112
+ // Exhausted retries - throw appropriate error
113
+ if (lastError) {
114
+ debug(lastError);
115
+ throw lastError;
116
+ }
117
+ if (lastStatus !== undefined) {
118
+ const errorMsg = `Received a ${lastStatus} from OCP after ${MAX_RETRIES} retries: ${getErrorMessage(lastStatus)}`;
119
+ throw new ApiError(errorMsg, lastResponseText || '', undefined);
120
+ }
121
+ throw new Error('Unexpected: no error or response after retries');
58
122
  }
59
123
  RivendellApi.request = request;
60
124
  function loadApiKey() {
@@ -85,5 +149,10 @@ var RivendellApi;
85
149
  return 'Unhandled error.';
86
150
  }
87
151
  }
152
+ function debug(...args) {
153
+ if (process.env.OCP_DEBUG === '1') {
154
+ console.debug(...args);
155
+ }
156
+ }
88
157
  })(RivendellApi = exports.RivendellApi || (exports.RivendellApi = {}));
89
158
  //# sourceMappingURL=RivendellApi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RivendellApi.js","sourceRoot":"","sources":["../../src/lib/RivendellApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RivendellApi.js","sourceRoot":"","sources":["../../src/lib/RivendellApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export declare namespace Tracking {
2
+ interface TrackingEvent {
3
+ action: string;
4
+ appId: string;
5
+ command: string;
6
+ version?: string;
7
+ properties?: Record<string, string>;
8
+ }
9
+ /**
10
+ * Send a tracking event to Segment via Rivendell.
11
+ * Fire-and-forget: does not await, never throws.
12
+ */
13
+ export function track(event: TrackingEvent): void;
14
+ export {};
15
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Tracking = void 0;
4
+ const RivendellApi_1 = require("./RivendellApi");
5
+ var Tracking;
6
+ (function (Tracking) {
7
+ /**
8
+ * Send a tracking event to Segment via Rivendell.
9
+ * Fire-and-forget: does not await, never throws.
10
+ */
11
+ function track(event) {
12
+ // Fire and forget - don't await
13
+ RivendellApi_1.RivendellApi.post('tracking/events', event).catch(() => {
14
+ // Silently ignore tracking failures
15
+ });
16
+ }
17
+ Tracking.track = track;
18
+ })(Tracking = exports.Tracking || (exports.Tracking = {}));
19
+ //# sourceMappingURL=Tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tracking.js","sourceRoot":"","sources":["../../src/lib/Tracking.ts"],"names":[],"mappings":";;;AAAA,iDAA4C;AAE5C,IAAiB,QAAQ,CAmBxB;AAnBD,WAAiB,QAAQ;IASvB;;;OAGG;IACH,SAAgB,KAAK,CAAC,KAAoB;QACxC,gCAAgC;QAChC,2BAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACrD,oCAAoC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IALe,cAAK,QAKpB,CAAA;AACH,CAAC,EAnBgB,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAmBxB"}
@@ -19,7 +19,11 @@ function formatError(error) {
19
19
  return sanitize(errorMessageFromJsonResponse(error));
20
20
  }
21
21
  else {
22
- return sanitize(error.message);
22
+ let message = `${error.name}: ${error.message}`;
23
+ if ('cause' in error && error.cause instanceof Error) {
24
+ message += ` [Cause: ${error.cause.name}: ${error.cause.message}]`;
25
+ }
26
+ return sanitize(message);
23
27
  }
24
28
  }
25
29
  exports.formatError = formatError;
@@ -1 +1 @@
1
- {"version":3,"file":"formatError.js","sourceRoot":"","sources":["../../src/lib/formatError.ts"],"names":[],"mappings":";;;AAAA,iDAA4C;AAC5C,yCAAoC;AACpC,IAAO,iBAAiB,GAAG,2BAAY,CAAC,QAAQ,CAAC;AACjD,IAAO,aAAa,GAAG,mBAAQ,CAAC,QAAQ,CAAC;AAEzC,SAAgB,WAAW,CAAC,KAAY;;IACtC,IAAI,KAAK,YAAY,iBAAiB,EAAE;QACtC,IAAI,CAAA,MAAA,KAAK,CAAC,QAAQ,0CAAE,MAAM,MAAK,GAAG,EAAE;YAClC,OAAO,mFAAmF,CAAC;SAC5F;aAAM;YACL,OAAO,QAAQ,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;SACtD;KACF;SAAM,IAAI,KAAK,YAAY,aAAa,EAAE;QACzC,OAAO,QAAQ,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;KACtD;SAAM;QACL,OAAO,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KAChC;AACH,CAAC;AAZD,kCAYC;AAED,SAAS,4BAA4B,CAAC,KAAwC;;IAC5E,MAAM,WAAW,GAAG,MAAA,MAAA,KAAK,CAAC,QAAQ,0CAAE,OAAO,0CAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACjE,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,CAAC,kBAAkB,CAAC,KAAI,KAAK,CAAC,YAAY,EAAE;QACnE,IAAI,QAAQ,CAAC;QACb,IAAI;YACF,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;SAC3C;QAAC,OAAO,CAAM,EAAE;YACf,OAAO,KAAK,CAAC,OAAO,CAAC;SACtB;QACD,8EAA8E;QAC9E,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO;gBAC5B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO;gBACzB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ;qBACvB,GAAG,CAAC,CAAC,SAAoC,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;qBACzF,IAAI,CAAC,IAAI,CAAC,CAAC;SACjB;KACF;IAED,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAS;IACzB,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAC7E,CAAC"}
1
+ {"version":3,"file":"formatError.js","sourceRoot":"","sources":["../../src/lib/formatError.ts"],"names":[],"mappings":";;;AAAA,iDAA4C;AAC5C,yCAAoC;AACpC,IAAO,iBAAiB,GAAG,2BAAY,CAAC,QAAQ,CAAC;AACjD,IAAO,aAAa,GAAG,mBAAQ,CAAC,QAAQ,CAAC;AAEzC,SAAgB,WAAW,CAAC,KAAY;;IACtC,IAAI,KAAK,YAAY,iBAAiB,EAAE;QACtC,IAAI,CAAA,MAAA,KAAK,CAAC,QAAQ,0CAAE,MAAM,MAAK,GAAG,EAAE;YAClC,OAAO,mFAAmF,CAAC;SAC5F;aAAM;YACL,OAAO,QAAQ,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;SACtD;KACF;SAAM,IAAI,KAAK,YAAY,aAAa,EAAE;QACzC,OAAO,QAAQ,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;KACtD;SAAM;QACL,IAAI,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QAChD,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,YAAY,KAAK,EAAE;YACpD,OAAO,IAAI,YAAY,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC;SACpE;QACD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;KAC1B;AACH,CAAC;AAhBD,kCAgBC;AAED,SAAS,4BAA4B,CAAC,KAAwC;;IAC5E,MAAM,WAAW,GAAG,MAAA,MAAA,KAAK,CAAC,QAAQ,0CAAE,OAAO,0CAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACjE,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,CAAC,kBAAkB,CAAC,KAAI,KAAK,CAAC,YAAY,EAAE;QACnE,IAAI,QAAQ,CAAC;QACb,IAAI;YACF,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;SAC3C;QAAC,OAAO,CAAM,EAAE;YACf,OAAO,KAAK,CAAC,OAAO,CAAC;SACtB;QACD,8EAA8E;QAC9E,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO;gBAC5B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO;gBACzB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ;qBACvB,GAAG,CAAC,CAAC,SAAoC,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;qBACzF,IAAI,CAAC,IAAI,CAAC,CAAC;SACjB;KACF;IAED,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAS;IACzB,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAC7E,CAAC"}
@@ -1468,7 +1468,7 @@
1468
1468
  }
1469
1469
  ],
1470
1470
  "package": {
1471
- "version": "1.3.3",
1471
+ "version": "1.3.4-beta.1",
1472
1472
  "name": "@optimizely/ocp-cli",
1473
1473
  "license": "Apache-2.0",
1474
1474
  "executable": "ocp"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optimizely/ocp-cli",
3
- "version": "1.3.3",
3
+ "version": "1.3.4-beta.1",
4
4
  "description": "Optimizely Connect Platform command line interface",
5
5
  "repository": "https://github.com/ZaiusInc/ocp-cli",
6
6
  "license": "Apache-2.0",
@@ -32,11 +32,10 @@
32
32
  "test:e2e": "npx vitest run --config vitest.e2e.config.ts",
33
33
  "test:e2e:watch": "npx vitest --config vitest.e2e.config.ts",
34
34
  "test:all": "npm run test && npm run test:e2e",
35
- "test:watch": "npx vitest",
36
- "release": "release-it"
35
+ "test:watch": "npx vitest"
37
36
  },
38
37
  "dependencies": {
39
- "@aws-sdk/client-s3": "^3.316.0",
38
+ "@aws-sdk/client-s3": "3.896",
40
39
  "@inquirer/prompts": "^7.2.4",
41
40
  "adm-zip": "^0.4.13",
42
41
  "chalk": "^4.1.2",
@@ -74,12 +73,15 @@
74
73
  "copy": "^0.3.2",
75
74
  "execa": "^9.6.0",
76
75
  "nodemon": "^2.0.22",
77
- "release-it": "^17.11.0",
78
76
  "rimraf": "^3.0.2",
79
77
  "tslint": "^5.16.0",
80
78
  "typescript": "^4.7.4",
81
79
  "vitest": "^1.6.0"
82
80
  },
81
+ "resolutions": {
82
+ "@aws-sdk/types": "3.893.0",
83
+ "@aws-sdk/util-locate-window": "3.893.0"
84
+ },
83
85
  "engines": {
84
86
  "node": ">=18.0.0"
85
87
  }
@@ -4,11 +4,13 @@ import * as os from 'os';
4
4
  import * as path from 'path';
5
5
  import * as semver from 'semver';
6
6
  import {command, defaultValue, flag, help, option, namespace} from 'oo-cli';
7
+ import {appContext} from '../../lib/AppContext';
7
8
  import {die} from '../../lib/die';
8
9
  import {formatError} from '../../lib/formatError';
9
10
  import {handleInterrupt} from '../../lib/handleInterrupt';
10
11
  import {TerminalOutput} from '../../lib/TerminalOutput';
11
12
  import {TerminalPassthru} from '../../lib/TeminalPassthru';
13
+ import {Tracking} from '../../lib/Tracking';
12
14
 
13
15
  /**
14
16
  * Dev Server command - starts the local development server for OCP apps
@@ -67,6 +69,19 @@ export class DevServerCommand {
67
69
  process.env.APP_ROOT_DIR = this.path;
68
70
  }
69
71
 
72
+ // Track dev server start (fire-and-forget)
73
+ try {
74
+ const ctx = appContext();
75
+ Tracking.track({
76
+ action: 'dev_server_started',
77
+ appId: ctx.appId || 'unknown',
78
+ command: 'dev-server start',
79
+ version: ctx.version,
80
+ });
81
+ } catch {
82
+ // Ignore - don't let tracking errors affect the command
83
+ }
84
+
70
85
  // Import and call startServer from ocp-local-env (installed globally)
71
86
  // Get the global npm modules path and construct the full package path
72
87
  const globalRoot = TerminalOutput.exec('npm root -g').stdout.trim();
@@ -33,9 +33,24 @@ export class ListCommand {
33
33
  public async list(): Promise<void> {
34
34
  try {
35
35
  const criteria: AppVersionSearchCriteria = {
36
- stages: [DeploymentStage.TEST, DeploymentStage.PRODUCTION]
36
+ stages: [DeploymentStage.TEST, DeploymentStage.PRODUCTION],
37
+ states: this.allStatuses ? [] : [AppVersionState.STOPPED, AppVersionState.ABANDONED],
37
38
  };
38
39
 
40
+ if (!this.allStatuses) {
41
+ criteria.states = [
42
+ AppVersionState.NEW,
43
+ AppVersionState.PUBLISHED,
44
+ AppVersionState.BUILD_FAILED,
45
+ AppVersionState.STARTING,
46
+ AppVersionState.START_FAILED,
47
+ AppVersionState.RUNNING,
48
+ AppVersionState.UPGRADING_RUNTIME,
49
+ AppVersionState.STOPPING,
50
+ AppVersionState.STOP_FAILED
51
+ ];
52
+ }
53
+
39
54
  if (this.appId) {
40
55
  criteria.appId = this.appId;
41
56
  }
@@ -35,6 +35,39 @@ export namespace RivendellApi {
35
35
  return request('DELETE', uri);
36
36
  }
37
37
 
38
+ const MAX_RETRIES = 2;
39
+
40
+ function isSocketError(error: unknown): boolean {
41
+ if (error instanceof Error && 'cause' in error) {
42
+ const cause = error.cause as any;
43
+ return cause?.code === 'UND_ERR_SOCKET' || cause?.code === 'ECONNRESET' || cause?.code === 'EPIPE';
44
+ }
45
+ return false;
46
+ }
47
+
48
+ function shouldRetryException(method: Method, error: unknown): boolean {
49
+ // Check if error is an ApiError with a status code
50
+ if (error instanceof ApiError && error.response?.status) {
51
+ const status = error.response.status;
52
+ // Only retry 5xx errors for GET requests, never retry 3xx/4xx
53
+ return method === 'GET' && status >= 500;
54
+ }
55
+
56
+ // For non-ApiError exceptions (network failures, etc.)
57
+ if (method === 'GET') {
58
+ // For GET: retry on network exceptions
59
+ return true;
60
+ } else {
61
+ // For other methods: only retry on socket errors (idempotent concern)
62
+ return isSocketError(error);
63
+ }
64
+ }
65
+
66
+ function shouldRetryResponse(method: Method, status: number): boolean {
67
+ // Only retry 5xx responses for GET requests
68
+ return method === 'GET' && status >= 500;
69
+ }
70
+
38
71
  export async function request<T>(method: Method, uri: string, body?: any): Promise<ApiResponse<T>> {
39
72
  const url = `${runtimeConfig().rivendell}/${uri}`;
40
73
  const requestPayload: RequestInit = { method };
@@ -49,18 +82,56 @@ export namespace RivendellApi {
49
82
  requestPayload.body = JSON.stringify(body);
50
83
  }
51
84
 
52
- const response = await fetch(url, requestPayload);
53
- const responseText = await response.text();
85
+ let lastError: unknown;
86
+ let lastResponseText: string | undefined;
87
+ let lastStatus: number | undefined;
54
88
 
55
- if (response.status < 200 || response.status >= 300) {
56
- const errorMsg = `Received a ${response.status} from OCP: ${getErrorMessage(response.status)}`;
57
- throw new ApiError(errorMsg, responseText, response);
89
+ for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
90
+ try {
91
+ debug(`[RivendellApi] ${method} ${url}${attempt > 0 ? ` (retry ${attempt})` : ''}`);
92
+
93
+ const response = await fetch(url, requestPayload);
94
+ debug(`[RivendellApi] Response ${response.status}`);
95
+
96
+ const responseText = await response.text();
97
+
98
+ // Check for 5xx and retry if applicable
99
+ if (shouldRetryResponse(method, response.status) && attempt < MAX_RETRIES) {
100
+ debug(`[RivendellApi] Server error ${response.status}, retrying...`);
101
+ lastStatus = response.status;
102
+ lastResponseText = responseText;
103
+ continue;
104
+ }
105
+
106
+ if (response.status < 200 || response.status >= 300) {
107
+ const errorMsg = `Received a ${response.status} from OCP: ${getErrorMessage(response.status)}`;
108
+ throw new ApiError(errorMsg, responseText, response);
109
+ }
110
+
111
+ return {
112
+ response,
113
+ body: responseText ? JSON.parse(responseText) : ''
114
+ };
115
+ } catch (error) {
116
+ lastError = error;
117
+ if (shouldRetryException(method, error) && attempt < MAX_RETRIES) {
118
+ debug(`[RivendellApi] ${isSocketError(error) ? 'Socket error' : 'Request failed'}, retrying...`);
119
+ continue;
120
+ }
121
+ throw error;
122
+ }
58
123
  }
59
124
 
60
- return {
61
- response,
62
- body: responseText ? JSON.parse(responseText) : ''
63
- };
125
+ // Exhausted retries - throw appropriate error
126
+ if (lastError) {
127
+ debug(lastError);
128
+ throw lastError;
129
+ }
130
+ if (lastStatus !== undefined) {
131
+ const errorMsg = `Received a ${lastStatus} from OCP after ${MAX_RETRIES} retries: ${getErrorMessage(lastStatus)}`;
132
+ throw new ApiError(errorMsg, lastResponseText || '', undefined);
133
+ }
134
+ throw new Error('Unexpected: no error or response after retries');
64
135
  }
65
136
 
66
137
  function loadApiKey(): string {
@@ -95,4 +166,10 @@ export namespace RivendellApi {
95
166
  return 'Unhandled error.';
96
167
  }
97
168
  }
169
+
170
+ function debug(...args: any[]) {
171
+ if (process.env.OCP_DEBUG === '1') {
172
+ console.debug(...args);
173
+ }
174
+ }
98
175
  }
@@ -0,0 +1,22 @@
1
+ import {RivendellApi} from './RivendellApi';
2
+
3
+ export namespace Tracking {
4
+ interface TrackingEvent {
5
+ action: string;
6
+ appId: string;
7
+ command: string;
8
+ version?: string;
9
+ properties?: Record<string, string>;
10
+ }
11
+
12
+ /**
13
+ * Send a tracking event to Segment via Rivendell.
14
+ * Fire-and-forget: does not await, never throws.
15
+ */
16
+ export function track(event: TrackingEvent): void {
17
+ // Fire and forget - don't await
18
+ RivendellApi.post('tracking/events', event).catch(() => {
19
+ // Silently ignore tracking failures
20
+ });
21
+ }
22
+ }
@@ -13,7 +13,11 @@ export function formatError(error: Error) {
13
13
  } else if (error instanceof MoriaApiError) {
14
14
  return sanitize(errorMessageFromJsonResponse(error));
15
15
  } else {
16
- return sanitize(error.message);
16
+ let message = `${error.name}: ${error.message}`;
17
+ if ('cause' in error && error.cause instanceof Error) {
18
+ message += ` [Cause: ${error.cause.name}: ${error.cause.message}]`;
19
+ }
20
+ return sanitize(message);
17
21
  }
18
22
  }
19
23