@testsmith/api-spector 0.9.0 → 0.9.2

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.
@@ -3,7 +3,7 @@ const promises = require("node:fs/promises");
3
3
  const path = require("node:path");
4
4
  const crypto = require("node:crypto");
5
5
  const undici = require("undici");
6
- const requestExec = require("./request-exec-CcF1Fzve.js");
6
+ const requestExec = require("./request-exec-B8DJ8Id2.js");
7
7
  const Ajv = require("ajv");
8
8
  const jsYaml = require("js-yaml");
9
9
  require("node:http");
@@ -8,6 +8,13 @@ const IPC = {
8
8
  /** Event (main→renderer): a `spector://open-from-git?url=…` deep link was
9
9
  * received; the renderer runs the same open-from-Git flow as the button. */
10
10
  openFromGitDeepLink: "file:openFromGitDeepLink",
11
+ /** Event (main→renderer): a `spector://import?token=…` deep link was
12
+ * received; the renderer imports the shared collection/request. */
13
+ importShareDeepLink: "file:importShareDeepLink",
14
+ /** Serialize the open workspace to a secret-free snapshot for cloud sync. */
15
+ serializeWorkspace: "file:serializeWorkspace",
16
+ /** Apply a pulled snapshot to disk (backs up first; merges local secrets). */
17
+ applyWorkspaceSnapshot: "file:applyWorkspaceSnapshot",
11
18
  getLastWorkspace: "file:getLastWorkspace",
12
19
  getRecentWorkspaces: "file:getRecentWorkspaces",
13
20
  saveWorkspace: "file:saveWorkspace",
@@ -240,6 +247,10 @@ const IPC = {
240
247
  branches: "git:branches",
241
248
  checkout: "git:checkout",
242
249
  deleteBranch: "git:deleteBranch",
250
+ stashList: "git:stashList",
251
+ stash: "git:stash",
252
+ stashPop: "git:stashPop",
253
+ stashDrop: "git:stashDrop",
243
254
  fetch: "git:fetch",
244
255
  pull: "git:pull",
245
256
  push: "git:push",
@@ -308,7 +319,28 @@ const IPC = {
308
319
  /** Open a flow's page in the cloud UI. */
309
320
  openFlow: "cloud:openFlow",
310
321
  /** Open the cloud deployment matrix in the browser. */
311
- openMatrix: "cloud:openMatrix"
322
+ openMatrix: "cloud:openMatrix",
323
+ /** Share a collection as a public read-only link (POST /api/share). */
324
+ shareCollection: "cloud:shareCollection",
325
+ /** Share a single request as a public read-only link (POST /api/share). */
326
+ shareRequest: "cloud:shareRequest",
327
+ /** Share a folder subtree as a public read-only link (POST /api/share). */
328
+ shareFolder: "cloud:shareFolder",
329
+ /** Fetch a shared collection/request by token for import (GET /api/share/{token}). */
330
+ importShare: "cloud:importShare",
331
+ /** Look up an existing share for a local collection/request (GET /api/share-lookup). */
332
+ shareLookup: "cloud:shareLookup",
333
+ /** Restrict a share: set/clear its expiry (PATCH /api/share/{token}). */
334
+ shareUpdate: "cloud:shareUpdate",
335
+ /** Revoke a share link (DELETE /api/share/{token}). */
336
+ shareRevoke: "cloud:shareRevoke",
337
+ /** Cloud-synced workspaces (collaborate without git). */
338
+ workspaceList: "cloud:workspaceList",
339
+ workspaceCreate: "cloud:workspaceCreate",
340
+ workspacePull: "cloud:workspacePull",
341
+ workspacePush: "cloud:workspacePush",
342
+ workspaceVersions: "cloud:workspaceVersions",
343
+ workspaceRestore: "cloud:workspaceRestore"
312
344
  }
313
345
  };
314
346
  function handleIpc(ipc, channel, fn) {
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const uuid = require("uuid");
4
- const soapHandler = require("./soap-handler-BF5ii0UV.js");
5
- require("./handle-_4XMUlwm.js");
4
+ const soapHandler = require("./soap-handler-D_Hj9e8S.js");
5
+ require("./handle-HQp1EXf8.js");
6
6
  require("node:https");
7
7
  require("node:http");
8
8
  require("@xmldom/xmldom");
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- const requestExec = require("./request-exec-CcF1Fzve.js");
2
+ const requestExec = require("./request-exec-B8DJ8Id2.js");
3
3
  const grpc = require("@grpc/grpc-js");
4
4
  const protoLoader = require("@grpc/proto-loader");
5
5
  const fs = require("node:fs");
@@ -24,7 +24,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
24
  const undici = require("undici");
25
25
  const promises$1 = require("fs/promises");
26
26
  const nodeTls = require("tls");
27
- const handle = require("./handle-_4XMUlwm.js");
27
+ const handle = require("./handle-HQp1EXf8.js");
28
28
  const fs = require("node:fs");
29
29
  const os = require("node:os");
30
30
  const path = require("node:path");
@@ -105,20 +105,21 @@ function readFileTrim(path2) {
105
105
  }
106
106
  function resolveConn$4() {
107
107
  const cfg = getSecretsConfig()?.vault ?? {};
108
- const address = env$4("VAULT_ADDR", "API_SPECTOR_VAULT_ADDR") ?? cfg.address;
108
+ const address = env$4("VAULT_ADDR", "BAO_ADDR", "API_SPECTOR_VAULT_ADDR") ?? cfg.address;
109
109
  if (!address) {
110
- throw new Error("Vault is not configured: set VAULT_ADDR (or settings.secrets.vault.address)");
111
- }
112
- const token = env$4("VAULT_TOKEN", "API_SPECTOR_VAULT_TOKEN") ?? readFileTrim(path.join(os.homedir(), ".vault-token"));
113
- const roleId = env$4("VAULT_ROLE_ID", "API_SPECTOR_VAULT_ROLE_ID") ?? cfg.roleId;
114
- const secretId = env$4("VAULT_SECRET_ID", "API_SPECTOR_VAULT_SECRET_ID");
115
- const jwt = env$4("VAULT_JWT", "API_SPECTOR_VAULT_JWT") ?? (env$4("VAULT_JWT_PATH", "API_SPECTOR_VAULT_JWT_PATH") ? readFileTrim(env$4("VAULT_JWT_PATH", "API_SPECTOR_VAULT_JWT_PATH")) : void 0);
116
- const jwtRole = env$4("VAULT_JWT_ROLE", "API_SPECTOR_VAULT_JWT_ROLE") ?? cfg.jwtRole;
117
- const explicit = env$4("VAULT_AUTH_METHOD", "API_SPECTOR_VAULT_AUTH_METHOD") ?? cfg.authMethod;
110
+ throw new Error("Vault/OpenBao is not configured: set VAULT_ADDR or BAO_ADDR (or settings.secrets.vault.address)");
111
+ }
112
+ const token = env$4("VAULT_TOKEN", "BAO_TOKEN", "API_SPECTOR_VAULT_TOKEN") ?? readFileTrim(path.join(os.homedir(), ".vault-token")) ?? readFileTrim(path.join(os.homedir(), ".bao-token"));
113
+ const roleId = env$4("VAULT_ROLE_ID", "BAO_ROLE_ID", "API_SPECTOR_VAULT_ROLE_ID") ?? cfg.roleId;
114
+ const secretId = env$4("VAULT_SECRET_ID", "BAO_SECRET_ID", "API_SPECTOR_VAULT_SECRET_ID");
115
+ const jwtPath = env$4("VAULT_JWT_PATH", "BAO_JWT_PATH", "API_SPECTOR_VAULT_JWT_PATH");
116
+ const jwt = env$4("VAULT_JWT", "BAO_JWT", "API_SPECTOR_VAULT_JWT") ?? (jwtPath ? readFileTrim(jwtPath) : void 0);
117
+ const jwtRole = env$4("VAULT_JWT_ROLE", "BAO_JWT_ROLE", "API_SPECTOR_VAULT_JWT_ROLE") ?? cfg.jwtRole;
118
+ const explicit = env$4("VAULT_AUTH_METHOD", "BAO_AUTH_METHOD", "API_SPECTOR_VAULT_AUTH_METHOD") ?? cfg.authMethod;
118
119
  const authMethod = explicit ?? (token ? "token" : roleId ? "approle" : jwt ? "jwt" : "token");
119
120
  return {
120
121
  address: address.replace(/\/+$/, ""),
121
- namespace: env$4("VAULT_NAMESPACE", "API_SPECTOR_VAULT_NAMESPACE") ?? cfg.namespace,
122
+ namespace: env$4("VAULT_NAMESPACE", "BAO_NAMESPACE", "API_SPECTOR_VAULT_NAMESPACE") ?? cfg.namespace,
122
123
  authMethod,
123
124
  token,
124
125
  roleId,
@@ -126,9 +127,9 @@ function resolveConn$4() {
126
127
  jwt,
127
128
  jwtRole,
128
129
  loginMount: cfg.loginMount,
129
- kvVersion: env$4("VAULT_KV_VERSION", "API_SPECTOR_VAULT_KV_VERSION") ?? cfg.kvVersion ?? "auto",
130
- skipVerify: (env$4("VAULT_SKIP_VERIFY", "API_SPECTOR_VAULT_SKIP_VERIFY") ?? "").toLowerCase() === "true" || cfg.skipVerify === true,
131
- caPath: env$4("VAULT_CACERT", "API_SPECTOR_VAULT_CACERT")
130
+ kvVersion: env$4("VAULT_KV_VERSION", "BAO_KV_VERSION", "API_SPECTOR_VAULT_KV_VERSION") ?? cfg.kvVersion ?? "auto",
131
+ skipVerify: (env$4("VAULT_SKIP_VERIFY", "BAO_SKIP_VERIFY", "API_SPECTOR_VAULT_SKIP_VERIFY") ?? "").toLowerCase() === "true" || cfg.skipVerify === true,
132
+ caPath: env$4("VAULT_CACERT", "BAO_CACERT", "API_SPECTOR_VAULT_CACERT")
132
133
  };
133
134
  }
134
135
  let cachedToken$2 = null;
@@ -202,15 +203,15 @@ async function clientToken(conn) {
202
203
  cachedToken$2 = { value: token, expiresAt: ttl > 0 ? now + ttl * 1e3 : now + 5 * 6e4 };
203
204
  return token;
204
205
  }
205
- async function readSecret(refBody) {
206
+ async function readSecret(refBody, scheme) {
206
207
  const hash = refBody.lastIndexOf("#");
207
208
  if (hash < 0) {
208
- throw new Error(`Vault reference must be 'vault:<path>#<key>' (got 'vault:${refBody}')`);
209
+ throw new Error(`${scheme} reference must be '${scheme}:<path>#<key>' (got '${scheme}:${refBody}')`);
209
210
  }
210
211
  const path2 = refBody.slice(0, hash).replace(/^\/+/, "");
211
212
  const key = refBody.slice(hash + 1);
212
213
  if (!path2 || !key) {
213
- throw new Error(`Vault reference must be 'vault:<path>#<key>' (got 'vault:${refBody}')`);
214
+ throw new Error(`${scheme} reference must be '${scheme}:<path>#<key>' (got '${scheme}:${refBody}')`);
214
215
  }
215
216
  const conn = resolveConn$4();
216
217
  const cacheKey = `${conn.address}|${conn.namespace ?? ""}|${path2}`;
@@ -235,7 +236,11 @@ async function readSecret(refBody) {
235
236
  }
236
237
  const vaultProvider = {
237
238
  scheme: "vault",
238
- resolve: (refBody) => readSecret(refBody)
239
+ resolve: (refBody) => readSecret(refBody, "vault")
240
+ };
241
+ const openBaoProvider = {
242
+ scheme: "bao",
243
+ resolve: (refBody) => readSecret(refBody, "bao")
239
244
  };
240
245
  function hmac(key, data) {
241
246
  return crypto.createHmac("sha256", key).update(data, "utf8").digest();
@@ -658,6 +663,7 @@ const gcpSecretManagerProvider = {
658
663
  resolve: (refBody) => resolve(refBody)
659
664
  };
660
665
  registerSecretProvider(vaultProvider);
666
+ registerSecretProvider(openBaoProvider);
661
667
  registerSecretProvider(awsSecretsProvider);
662
668
  registerSecretProvider(azureKeyVaultProvider);
663
669
  registerSecretProvider(onePasswordProvider);
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- const handle = require("./handle-_4XMUlwm.js");
2
+ const handle = require("./handle-HQp1EXf8.js");
3
3
  const https = require("node:https");
4
4
  const http = require("node:http");
5
5
  const xmldom = require("@xmldom/xmldom");
@@ -324,7 +324,7 @@ function registerSoapHandlers(ipc) {
324
324
  handle.handleIpc(ipc, handle.IPC.wsdl.import, async (_event, opts) => {
325
325
  const { validateWsdlImport } = await Promise.resolve().then(() => require("./ipc-validate-sqUFqRmE.js"));
326
326
  validateWsdlImport(opts);
327
- const { importWsdl } = await Promise.resolve().then(() => require("./import-ujxXe3Uu.js"));
327
+ const { importWsdl } = await Promise.resolve().then(() => require("./import-DVpFH9Wb.js"));
328
328
  const wsdlText = opts.xml ?? (opts.url ? await fetchUrl(opts.url) : "");
329
329
  if (!wsdlText) throw new Error("wsdl:import requires either `url` or `xml`");
330
330
  return importWsdl(wsdlText, { name: opts.name, existingMockPorts: opts.existingMockPorts });
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  const promises = require("node:fs/promises");
4
4
  const path = require("node:path");
5
- const brokerClient = require("./chunks/broker-client-DqDgA2G6.js");
5
+ const brokerClient = require("./chunks/broker-client-Cl6Fu3oD.js");
6
6
  const escape = require("./chunks/escape-DDVAlOvZ.js");
7
7
  const crypto = require("node:crypto");
8
8
  const undici = require("undici");
@@ -11,10 +11,10 @@ const cliCommon = require("./chunks/cli-common-GnihVSjU.js");
11
11
  const node_child_process = require("node:child_process");
12
12
  const jsYaml = require("js-yaml");
13
13
  const environments = require("./chunks/environments-iM3SUM-4.js");
14
- require("./chunks/request-exec-CcF1Fzve.js");
14
+ require("./chunks/request-exec-B8DJ8Id2.js");
15
15
  require("fs/promises");
16
16
  require("tls");
17
- require("./chunks/handle-_4XMUlwm.js");
17
+ require("./chunks/handle-HQp1EXf8.js");
18
18
  require("node:fs");
19
19
  require("dayjs");
20
20
  require("node:vm");
package/out/main/flow.js CHANGED
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  const promises = require("node:fs/promises");
4
4
  const path = require("node:path");
5
- const requestExec = require("./chunks/request-exec-CcF1Fzve.js");
5
+ const requestExec = require("./chunks/request-exec-B8DJ8Id2.js");
6
6
  const requestCollection = require("./chunks/request-collection-zRRUfg0X.js");
7
7
  const environments = require("./chunks/environments-iM3SUM-4.js");
8
8
  const flowEngine = require("./chunks/flow-engine-BxwjEy37.js");
@@ -10,7 +10,7 @@ const cliCommon = require("./chunks/cli-common-GnihVSjU.js");
10
10
  require("undici");
11
11
  require("fs/promises");
12
12
  require("tls");
13
- require("./chunks/handle-_4XMUlwm.js");
13
+ require("./chunks/handle-HQp1EXf8.js");
14
14
  require("node:fs");
15
15
  require("node:os");
16
16
  require("node:crypto");
@@ -281,7 +281,7 @@ async function main() {
281
281
  const envName = args.environment ?? args.env;
282
282
  const env = environments.selectEnvironment(workspace, environments$1, envName);
283
283
  const verbose = Boolean(args.verbose);
284
- const version = `v${"0.9.0"}`;
284
+ const version = `v${"0.9.2"}`;
285
285
  console.log("");
286
286
  console.log(cliCommon.color(" API Flow Runner" + (version ? ` ${version}` : ""), cliCommon.C.bold, cliCommon.C.white));
287
287
  console.log(cliCommon.color(` Flow: ${flow.name}`, cliCommon.C.gray));
package/out/main/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  const electron = require("electron");
3
- const handle = require("./chunks/handle-_4XMUlwm.js");
3
+ const handle = require("./chunks/handle-HQp1EXf8.js");
4
4
  const path = require("node:path");
5
5
  const fs = require("node:fs");
6
6
  const registerHandlers = require("./register-handlers.js");
7
- const requestExec = require("./chunks/request-exec-CcF1Fzve.js");
7
+ const requestExec = require("./chunks/request-exec-B8DJ8Id2.js");
8
8
  const electronUpdater = require("electron-updater");
9
9
  const mockServer = require("./chunks/mock-server-C4kTFkod.js");
10
10
  require("node:fs/promises");
@@ -18,7 +18,7 @@ require("./chunks/ipc-validate-sqUFqRmE.js");
18
18
  require("ajv");
19
19
  require("js-yaml");
20
20
  require("undici");
21
- require("./chunks/soap-handler-BF5ii0UV.js");
21
+ require("./chunks/soap-handler-D_Hj9e8S.js");
22
22
  require("node:https");
23
23
  require("node:http");
24
24
  require("@xmldom/xmldom");
@@ -32,7 +32,7 @@ require("node:os");
32
32
  require("@grpc/grpc-js");
33
33
  require("@grpc/proto-loader");
34
34
  require("./chunks/escape-DDVAlOvZ.js");
35
- require("./chunks/broker-client-DqDgA2G6.js");
35
+ require("./chunks/broker-client-Cl6Fu3oD.js");
36
36
  require("./chunks/recorder-BkO8G_mB.js");
37
37
  require("fs/promises");
38
38
  require("tls");
@@ -50,7 +50,7 @@ function isNewer(a, b) {
50
50
  return a2 > b2;
51
51
  }
52
52
  async function checkForUpdate() {
53
- const current = "0.9.0";
53
+ const current = "0.9.2";
54
54
  try {
55
55
  const res = await fetch(REGISTRY_URL, { signal: AbortSignal.timeout(4e3) });
56
56
  if (!res.ok) return null;
@@ -103,6 +103,7 @@ if (process.env.ELECTRON_NO_SANDBOX === "1") {
103
103
  }
104
104
  const PROTOCOL = "spector";
105
105
  let pendingRepoUrl = null;
106
+ let pendingImportToken = null;
106
107
  function deepLinkFromArgv(argv) {
107
108
  return argv.find((a) => a.startsWith(`${PROTOCOL}://`)) ?? null;
108
109
  }
@@ -119,12 +120,27 @@ function parseOpenFromGit(deepLink) {
119
120
  const repo = u.searchParams.get("url");
120
121
  return repo?.trim() ? repo.trim() : null;
121
122
  }
123
+ function parseImportShare(deepLink) {
124
+ let u;
125
+ try {
126
+ u = new URL(deepLink);
127
+ } catch {
128
+ return null;
129
+ }
130
+ if (u.protocol !== `${PROTOCOL}:`) return null;
131
+ const action = u.hostname || u.pathname.replace(/^\/+/, "").split("/")[0];
132
+ if (action !== "import") return null;
133
+ const token = u.searchParams.get("token");
134
+ return token?.trim() ? token.trim() : null;
135
+ }
122
136
  function handleDeepLink(deepLink) {
123
137
  const repo = parseOpenFromGit(deepLink);
124
- if (!repo) return;
138
+ const token = repo ? null : parseImportShare(deepLink);
139
+ if (!repo && !token) return;
125
140
  const win = electron.BrowserWindow.getAllWindows()[0];
126
141
  if (!win) {
127
142
  pendingRepoUrl = repo;
143
+ pendingImportToken = token;
128
144
  if (electron.app.isReady()) createWindow();
129
145
  return;
130
146
  }
@@ -132,15 +148,23 @@ function handleDeepLink(deepLink) {
132
148
  win.focus();
133
149
  if (win.webContents.isLoading()) {
134
150
  pendingRepoUrl = repo;
151
+ pendingImportToken = token;
135
152
  } else {
136
- win.webContents.send(handle.IPC.file.openFromGitDeepLink, repo);
153
+ if (repo) win.webContents.send(handle.IPC.file.openFromGitDeepLink, repo);
154
+ if (token) win.webContents.send(handle.IPC.file.importShareDeepLink, token);
137
155
  }
138
156
  }
139
157
  function flushDeepLink(win) {
140
- if (!pendingRepoUrl) return;
141
- const repo = pendingRepoUrl;
142
- pendingRepoUrl = null;
143
- win.webContents.send(handle.IPC.file.openFromGitDeepLink, repo);
158
+ if (pendingRepoUrl) {
159
+ const repo = pendingRepoUrl;
160
+ pendingRepoUrl = null;
161
+ win.webContents.send(handle.IPC.file.openFromGitDeepLink, repo);
162
+ }
163
+ if (pendingImportToken) {
164
+ const token = pendingImportToken;
165
+ pendingImportToken = null;
166
+ win.webContents.send(handle.IPC.file.importShareDeepLink, token);
167
+ }
144
168
  }
145
169
  function createSplashWindow() {
146
170
  const splash = new electron.BrowserWindow({
package/out/main/lib.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const mockServer = require("./chunks/mock-server-C4kTFkod.js");
4
- const requestExec = require("./chunks/request-exec-CcF1Fzve.js");
4
+ const requestExec = require("./chunks/request-exec-B8DJ8Id2.js");
5
5
  const flowEngine = require("./chunks/flow-engine-BxwjEy37.js");
6
6
  require("node:http");
7
7
  require("node:crypto");
@@ -11,7 +11,7 @@ require("@xmldom/xmldom");
11
11
  require("undici");
12
12
  require("fs/promises");
13
13
  require("tls");
14
- require("./chunks/handle-_4XMUlwm.js");
14
+ require("./chunks/handle-HQp1EXf8.js");
15
15
  require("node:fs");
16
16
  require("node:os");
17
17
  require("node:path");
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
- const perfRun = require("./chunks/perf-run-Ww_weuqI.js");
3
- const requestExec = require("./chunks/request-exec-CcF1Fzve.js");
2
+ const perfRun = require("./chunks/perf-run-BNunvZsG.js");
3
+ const requestExec = require("./chunks/request-exec-B8DJ8Id2.js");
4
4
  require("@grpc/grpc-js");
5
5
  require("@grpc/proto-loader");
6
6
  require("node:fs");
@@ -13,7 +13,7 @@ require("uuid");
13
13
  require("undici");
14
14
  require("fs/promises");
15
15
  require("tls");
16
- require("./chunks/handle-_4XMUlwm.js");
16
+ require("./chunks/handle-HQp1EXf8.js");
17
17
  require("node:crypto");
18
18
  require("dayjs");
19
19
  require("node:vm");
package/out/main/perf.js CHANGED
@@ -2,17 +2,17 @@
2
2
  "use strict";
3
3
  const promises = require("node:fs/promises");
4
4
  const path = require("node:path");
5
- const requestExec = require("./chunks/request-exec-CcF1Fzve.js");
5
+ const requestExec = require("./chunks/request-exec-B8DJ8Id2.js");
6
6
  const requestCollection = require("./chunks/request-collection-zRRUfg0X.js");
7
7
  const environments = require("./chunks/environments-iM3SUM-4.js");
8
8
  const flowEngine = require("./chunks/flow-engine-BxwjEy37.js");
9
- const perfRun = require("./chunks/perf-run-Ww_weuqI.js");
9
+ const perfRun = require("./chunks/perf-run-BNunvZsG.js");
10
10
  const perfReport = require("./chunks/perf-report-KXGZgCDY.js");
11
11
  const cliCommon = require("./chunks/cli-common-GnihVSjU.js");
12
12
  require("undici");
13
13
  require("fs/promises");
14
14
  require("tls");
15
- require("./chunks/handle-_4XMUlwm.js");
15
+ require("./chunks/handle-HQp1EXf8.js");
16
16
  require("node:fs");
17
17
  require("node:os");
18
18
  require("node:crypto");
@@ -191,7 +191,7 @@ async function main() {
191
191
  targetLabel = `flow: ${flow.name}`;
192
192
  }
193
193
  const load = perfRun.deriveLoad(plan);
194
- const version = `v${"0.9.0"}`;
194
+ const version = `v${"0.9.2"}`;
195
195
  console.log("");
196
196
  console.log(cliCommon.color(" API Performance" + (version ? ` ${version}` : ""), cliCommon.C.bold, cliCommon.C.white));
197
197
  console.log(cliCommon.color(` Plan: ${plan.name}`, cliCommon.C.gray));