@zimic/interceptor 1.4.0 → 1.4.1-canary.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/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  'use strict';
3
3
 
4
- var chunk4COMUARA_js = require('./chunk-4COMUARA.js');
4
+ var chunk3W3A4TJ5_js = require('./chunk-3W3A4TJ5.js');
5
5
  var chunkDGUM43GV_js = require('./chunk-DGUM43GV.js');
6
6
  var yargs = require('yargs');
7
7
  var helpers = require('yargs/helpers');
@@ -18,7 +18,7 @@ var path__default = /*#__PURE__*/_interopDefault(path);
18
18
  var color3__default = /*#__PURE__*/_interopDefault(color3);
19
19
 
20
20
  // package.json
21
- var version = "1.4.0";
21
+ var version = "1.4.1-canary.1";
22
22
 
23
23
  // src/cli/browser/shared/constants.ts
24
24
  var SERVICE_WORKER_FILE_NAME = "mockServiceWorker.js";
@@ -30,7 +30,7 @@ async function initializeBrowserServiceWorker({ publicDirectory }) {
30
30
  await fs__default.default.promises.mkdir(publicDirectory, { recursive: true });
31
31
  const destinationPath = path__default.default.join(publicDirectory, SERVICE_WORKER_FILE_NAME);
32
32
  await fs__default.default.promises.copyFile(MOCK_SERVICE_WORKER_PATH, destinationPath);
33
- chunk4COMUARA_js.logger.info(`Service worker script saved to ${color3__default.default.magenta(destinationPath)}.`);
33
+ chunk3W3A4TJ5_js.logger.info(`Service worker script saved to ${color3__default.default.magenta(destinationPath)}.`);
34
34
  }
35
35
  var init_default = initializeBrowserServiceWorker;
36
36
  var PROCESS_EXIT_EVENTS = Object.freeze([
@@ -113,7 +113,7 @@ async function startInterceptorServer({
113
113
  ephemeral,
114
114
  onReady
115
115
  }) {
116
- const server = chunk4COMUARA_js.createInterceptorServer({
116
+ const server = chunk3W3A4TJ5_js.createInterceptorServer({
117
117
  hostname,
118
118
  port,
119
119
  logUnhandledRequests,
@@ -137,12 +137,12 @@ async function startInterceptorServer({
137
137
  process.on(exitEvent, exitHandler);
138
138
  }
139
139
  await server.start();
140
- chunk4COMUARA_js.logger.info(
140
+ chunk3W3A4TJ5_js.logger.info(
141
141
  `${ephemeral ? "Ephemeral s" : "S"}erver is running on ${color3__default.default.yellow(`${server.hostname}:${server.port}`)}`
142
142
  );
143
143
  const isDangerouslyUnprotected = !tokensDirectory && process.env.NODE_ENV === "production";
144
144
  if (isDangerouslyUnprotected) {
145
- chunk4COMUARA_js.logger.warn(
145
+ chunk3W3A4TJ5_js.logger.warn(
146
146
  [
147
147
  `Attention: this interceptor server is ${color3__default.default.bold(color3__default.default.red("unprotected"))}. Do not expose it publicly without authentication.`,
148
148
  "",
@@ -171,8 +171,8 @@ async function createInterceptorServerToken({
171
171
  tokenName,
172
172
  tokensDirectory
173
173
  }) {
174
- const token = await chunk4COMUARA_js.createInterceptorToken({ name: tokenName, tokensDirectory });
175
- chunk4COMUARA_js.logger.info(
174
+ const token = await chunk3W3A4TJ5_js.createInterceptorToken({ name: tokenName, tokensDirectory });
175
+ chunk3W3A4TJ5_js.logger.info(
176
176
  [
177
177
  `${color3__default.default.green(color3__default.default.bold("\u2714"))} Token${tokenName ? ` ${color3__default.default.green(tokenName)}` : ""} created:`,
178
178
  "",
@@ -191,8 +191,8 @@ async function createInterceptorServerToken({
191
191
 
192
192
  // src/cli/server/token/list.ts
193
193
  async function listInterceptorServerTokens({ tokensDirectory }) {
194
- const tokens = await chunk4COMUARA_js.listInterceptorTokens({ tokensDirectory });
195
- chunk4COMUARA_js.logger.raw.table(
194
+ const tokens = await chunk3W3A4TJ5_js.listInterceptorTokens({ tokensDirectory });
195
+ chunk3W3A4TJ5_js.logger.raw.table(
196
196
  [
197
197
  { title: "ID", property: "id" },
198
198
  { title: "NAME", property: "name" },
@@ -206,13 +206,13 @@ async function listInterceptorServerTokens({ tokensDirectory }) {
206
206
  );
207
207
  }
208
208
  async function removeInterceptorServerToken({ tokenId, tokensDirectory }) {
209
- const token = await chunk4COMUARA_js.readInterceptorTokenFromFile(tokenId, { tokensDirectory });
209
+ const token = await chunk3W3A4TJ5_js.readInterceptorTokenFromFile(tokenId, { tokensDirectory });
210
210
  if (!token) {
211
- chunk4COMUARA_js.logger.error(`${color3__default.default.red(color3__default.default.bold("\u2718"))} Token ${color3__default.default.red(tokenId)} not found.`);
211
+ chunk3W3A4TJ5_js.logger.error(`${color3__default.default.red(color3__default.default.bold("\u2718"))} Token ${color3__default.default.red(tokenId)} not found.`);
212
212
  process.exit(1);
213
213
  }
214
- await chunk4COMUARA_js.removeInterceptorToken(token.id, { tokensDirectory });
215
- chunk4COMUARA_js.logger.info(`${color3__default.default.green(color3__default.default.bold("\u2714"))} Token ${color3__default.default.green(token.name ?? token.id)} removed.`);
214
+ await chunk3W3A4TJ5_js.removeInterceptorToken(token.id, { tokensDirectory });
215
+ chunk3W3A4TJ5_js.logger.info(`${color3__default.default.green(color3__default.default.bold("\u2714"))} Token ${color3__default.default.green(token.name ?? token.id)} removed.`);
216
216
  }
217
217
 
218
218
  // src/cli/cli.ts
@@ -295,7 +295,7 @@ async function runCLI() {
295
295
  type: "string",
296
296
  description: "The directory where the created interceptor token will be saved.",
297
297
  alias: "t",
298
- default: chunk4COMUARA_js.DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY
298
+ default: chunk3W3A4TJ5_js.DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY
299
299
  }),
300
300
  async (cliArguments) => {
301
301
  await createInterceptorServerToken({
@@ -310,7 +310,7 @@ async function runCLI() {
310
310
  type: "string",
311
311
  description: "The directory where the interceptor tokens are saved.",
312
312
  alias: "t",
313
- default: chunk4COMUARA_js.DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY
313
+ default: chunk3W3A4TJ5_js.DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY
314
314
  }),
315
315
  async (cliArguments) => {
316
316
  await listInterceptorServerTokens({
@@ -328,7 +328,7 @@ async function runCLI() {
328
328
  type: "string",
329
329
  description: "The directory where the interceptor tokens are saved.",
330
330
  alias: "t",
331
- default: chunk4COMUARA_js.DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY
331
+ default: chunk3W3A4TJ5_js.DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY
332
332
  }),
333
333
  async (cliArguments) => {
334
334
  await removeInterceptorServerToken({
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../src/cli/browser/shared/constants.ts","../src/cli/browser/init.ts","../../zimic-utils/src/process/constants.ts","../../zimic-utils/src/process/runCommand.ts","../src/cli/server/start.ts","../src/cli/server/token/create.ts","../src/cli/server/token/list.ts","../src/cli/server/token/remove.ts","../src/cli/cli.ts","../src/cli/index.ts"],"names":["path","__require","fs","logger","color","spawn","createInterceptorServer","exitEvent","createInterceptorToken","listInterceptorTokens","readInterceptorTokenFromFile","removeInterceptorToken","yargs","hideBin","DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY"],"mappings":"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","file":"cli.js","sourcesContent":["{\n \"name\": \"@zimic/interceptor\",\n \"description\": \"Next-gen TypeScript-first HTTP intercepting and mocking\",\n \"keywords\": [\n \"zimic\",\n \"typescript\",\n \"types\",\n \"typegen\",\n \"validation\",\n \"inference\",\n \"http\",\n \"interceptor\",\n \"mock\",\n \"api\",\n \"static\"\n ],\n \"version\": \"1.4.0\",\n \"homepage\": \"https://zimic.dev/docs/interceptor\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/zimicjs/zimic.git\",\n \"directory\": \"packages/zimic-interceptor\"\n },\n \"author\": {\n \"name\": \"Diego Aquino\",\n \"url\": \"https://github.com/diego-aquino\"\n },\n \"funding\": {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/zimicjs\"\n },\n \"private\": false,\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": true\n },\n \"engines\": {\n \"node\": \">=20.0.0\"\n },\n \"license\": \"MIT\",\n \"files\": [\n \"package.json\",\n \"README.md\",\n \"LICENSE.md\",\n \"src\",\n \"!src/**/tests\",\n \"!src/**/__tests__\",\n \"!src/**/*.test.ts\",\n \"dist\",\n \"index.d.ts\",\n \"http.d.ts\",\n \"server.d.ts\"\n ],\n \"sideEffects\": false,\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"index.d.ts\",\n \"bin\": {\n \"zimic-interceptor\": \"./dist/cli.js\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./http\": {\n \"types\": \"./http.d.ts\",\n \"import\": \"./dist/http.mjs\",\n \"require\": \"./dist/http.js\",\n \"default\": \"./dist/http.js\"\n },\n \"./server\": {\n \"types\": \"./server.d.ts\",\n \"import\": \"./dist/server.mjs\",\n \"require\": \"./dist/server.js\",\n \"default\": \"./dist/server.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"setup\": \"concurrently --names playwright,msw 'playwright install chromium' 'msw init ./public --no-save'\",\n \"dev\": \"tsup --watch\",\n \"cli\": \"node --enable-source-maps ./dist/cli.js\",\n \"build\": \"tsup\",\n \"lint\": \"eslint --cache --no-error-on-unmatched-pattern --no-warn-ignored --fix\",\n \"lint:turbo\": \"pnpm lint . --max-warnings 0\",\n \"style\": \"prettier --log-level warn --ignore-unknown --no-error-on-unmatched-pattern --cache\",\n \"style:check\": \"pnpm style --check\",\n \"style:format\": \"pnpm style --write\",\n \"test\": \"dotenv -v NODE_ENV=test -v FORCE_COLOR=1 -- vitest\",\n \"test:turbo\": \"dotenv -v CI=true -- pnpm run test --coverage --reporter verbose\",\n \"types:check\": \"tsc --noEmit\",\n \"postinstall\": \"node --enable-source-maps -e \\\"try{require('./dist/scripts/postinstall')}catch(error){console.error(error)}\\\"\"\n },\n \"dependencies\": {\n \"@whatwg-node/server\": \"0.10.18\",\n \"isomorphic-ws\": \"5.0.0\",\n \"msw\": \"2.13.6\",\n \"picocolors\": \"^1.1.1\",\n \"ws\": \"8.20.0\",\n \"yargs\": \"18.0.0\",\n \"zod\": \"^4.3.6\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^25.6.0\",\n \"@types/ws\": \"^8.18.1\",\n \"@types/yargs\": \"^17.0.35\",\n \"@vitest/browser\": \"^4.1.5\",\n \"@vitest/browser-playwright\": \"^4.1.5\",\n \"@vitest/coverage-istanbul\": \"^4.1.5\",\n \"@zimic/eslint-config-node\": \"workspace:*\",\n \"@zimic/lint-staged-config\": \"workspace:*\",\n \"@zimic/tsconfig\": \"workspace:*\",\n \"@zimic/utils\": \"workspace:*\",\n \"concurrently\": \"^9.2.1\",\n \"dotenv-cli\": \"^11.0.0\",\n \"eslint\": \"^9.39.4\",\n \"playwright\": \"^1.59.1\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"6.0.3\",\n \"vitest\": \"^4.1.5\"\n },\n \"peerDependencies\": {\n \"@zimic/http\": \"^1.2.0 || workspace:*\",\n \"typescript\": \"^5.0.0 || ^6.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"typescript\": {\n \"optional\": true\n }\n }\n}\n","export const SERVICE_WORKER_FILE_NAME = 'mockServiceWorker.js';\n","import fs from 'fs';\nimport path from 'path';\nimport color from 'picocolors';\n\nimport { logger } from '@/utils/logging';\n\nimport { SERVICE_WORKER_FILE_NAME } from './shared/constants';\n\nconst MSW_ROOT_PATH = path.join(require.resolve('msw'), '..', '..', '..');\nexport const MOCK_SERVICE_WORKER_PATH = path.join(MSW_ROOT_PATH, 'lib', SERVICE_WORKER_FILE_NAME);\n\ninterface BrowserServiceWorkerInitOptions {\n publicDirectory: string;\n}\n\nasync function initializeBrowserServiceWorker({ publicDirectory }: BrowserServiceWorkerInitOptions) {\n await fs.promises.mkdir(publicDirectory, { recursive: true });\n\n const destinationPath = path.join(publicDirectory, SERVICE_WORKER_FILE_NAME);\n await fs.promises.copyFile(MOCK_SERVICE_WORKER_PATH, destinationPath);\n\n logger.info(`Service worker script saved to ${color.magenta(destinationPath)}.`);\n}\n\nexport default initializeBrowserServiceWorker;\n","export const PROCESS_EXIT_EVENTS = Object.freeze([\n 'beforeExit',\n 'uncaughtExceptionMonitor',\n 'SIGINT',\n 'SIGTERM',\n 'SIGHUP',\n 'SIGBREAK',\n] as const);\n\nexport type ProcessExitEvent = (typeof PROCESS_EXIT_EVENTS)[number];\n\n// Having an undefined exit code means that the process will already exit with the default exit code.\nexport const PROCESS_EXIT_CODE_BY_EXIT_EVENT: Record<string, number | undefined> = {\n beforeExit: undefined,\n uncaughtExceptionMonitor: undefined,\n SIGINT: 130,\n SIGTERM: 143,\n SIGHUP: 129,\n SIGBREAK: 131,\n} satisfies Record<ProcessExitEvent, number | undefined>;\n","import { spawn, SpawnOptions } from 'child_process';\n\nimport { PROCESS_EXIT_CODE_BY_EXIT_EVENT } from './constants';\n\ninterface CommandErrorOptions {\n command?: string[];\n exitCode?: number;\n signal?: NodeJS.Signals;\n cause?: Error;\n}\n\nexport class CommandError extends Error {\n static readonly DEFAULT_EXIT_CODE = 1;\n\n readonly command: string[];\n readonly exitCode: number;\n readonly signal?: NodeJS.Signals;\n readonly cause?: Error;\n\n constructor(executable: string, options: CommandErrorOptions) {\n const message = CommandError.createMessage(executable, options);\n super(message);\n\n this.name = 'CommandError';\n this.command = options.command ?? [executable];\n this.exitCode = this.getExitCode(options);\n this.signal = options.signal;\n this.cause = options.cause;\n }\n\n private getExitCode(options: CommandErrorOptions): number {\n const existingExitCode = options.exitCode;\n\n const exitCodeInferredFromSignal =\n options.signal === undefined ? undefined : PROCESS_EXIT_CODE_BY_EXIT_EVENT[options.signal];\n\n return existingExitCode ?? exitCodeInferredFromSignal ?? CommandError.DEFAULT_EXIT_CODE;\n }\n\n private static createMessage(command: string, options: CommandErrorOptions) {\n const originalMessage = options.cause?.message;\n const suffix = originalMessage ? `: ${originalMessage}` : '';\n\n if (options.exitCode === undefined && options.signal === undefined) {\n return `Command '${command}' failed${suffix}`;\n }\n\n const prefix = `Command '${command}' exited `;\n const infix = options.exitCode === undefined ? `after signal ${options.signal}` : `with code ${options.exitCode}`;\n\n return `${prefix}${infix}${suffix}`;\n }\n}\n\nasync function runCommand(commandEntry: string, commandArguments: string[], options: SpawnOptions = {}) {\n await new Promise<void>((resolve, reject) => {\n const commandProcess = spawn(commandEntry, commandArguments, { stdio: 'inherit', ...options });\n\n commandProcess.once('error', (error) => {\n const commandError = new CommandError(commandEntry, {\n command: [commandEntry, ...commandArguments],\n cause: error,\n });\n reject(commandError);\n });\n\n commandProcess.once('close', (code, signal) => {\n if (code === 0) {\n resolve();\n return;\n }\n\n const commandError = new CommandError(commandEntry, {\n command: [commandEntry, ...commandArguments],\n exitCode: code ?? undefined,\n signal: signal ?? undefined,\n });\n reject(commandError);\n });\n });\n}\n\nexport default runCommand;\n","import {\n ProcessExitEvent,\n PROCESS_EXIT_EVENTS,\n PROCESS_EXIT_CODE_BY_EXIT_EVENT,\n runCommand,\n CommandError,\n} from '@zimic/utils/process';\nimport color from 'picocolors';\n\nimport { InterceptorServer, createInterceptorServer } from '@/server';\nimport { InterceptorServerOptions } from '@/server/types/options';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerStartOptions extends InterceptorServerOptions {\n ephemeral: boolean;\n onReady?: { command: string; arguments: string[] };\n}\n\nexport let serverSingleton: InterceptorServer | undefined;\n\nasync function startInterceptorServer({\n hostname,\n port,\n logUnhandledRequests,\n tokensDirectory,\n ephemeral,\n onReady,\n}: InterceptorServerStartOptions) {\n const server = createInterceptorServer({\n hostname,\n port,\n logUnhandledRequests,\n tokensDirectory,\n });\n\n async function handleExitEvent(exitEvent: ProcessExitEvent | undefined) {\n await server.stop();\n\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n for (const { exitEvent, exitHandler } of exitHandlerGroups) {\n process.off(exitEvent, exitHandler);\n }\n\n const exitCode = exitEvent ? PROCESS_EXIT_CODE_BY_EXIT_EVENT[exitEvent] : undefined;\n if (exitCode !== undefined) {\n process.exit(exitCode);\n }\n }\n\n const exitHandlerGroups = PROCESS_EXIT_EVENTS.map((exitEvent) => ({\n exitEvent,\n exitHandler: handleExitEvent.bind(null, exitEvent),\n }));\n\n for (const { exitEvent, exitHandler } of exitHandlerGroups) {\n process.on(exitEvent, exitHandler);\n }\n\n serverSingleton = server;\n\n await server.start();\n\n logger.info(\n `${ephemeral ? 'Ephemeral s' : 'S'}erver is running on ${color.yellow(`${server.hostname}:${server.port}`)}`,\n );\n\n const isDangerouslyUnprotected = !tokensDirectory && process.env.NODE_ENV === 'production';\n\n if (isDangerouslyUnprotected) {\n logger.warn(\n [\n `Attention: this interceptor server is ${color.bold(color.red('unprotected'))}. Do not expose it publicly without authentication.`,\n '',\n 'Learn more: https://zimic.dev/docs/interceptor/guides/http/remote-interceptors#interceptor-server-authentication',\n ].join('\\n'),\n );\n }\n\n if (onReady) {\n try {\n await runCommand(onReady.command, onReady.arguments);\n } catch (error) {\n console.error(error);\n\n /* istanbul ignore if -- @preserve\n * A CommandError is always expected here. */\n if (!(error instanceof CommandError)) {\n throw error;\n }\n\n process.exit(error.exitCode);\n }\n }\n\n if (ephemeral) {\n await handleExitEvent(undefined);\n process.exit(0);\n }\n}\n\nexport default startInterceptorServer;\n","import color from 'picocolors';\n\nimport { createInterceptorToken } from '@/server/utils/auth';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerCreateTokenOptions {\n tokenName?: string;\n tokensDirectory: string;\n}\n\nexport async function createInterceptorServerToken({\n tokenName,\n tokensDirectory,\n}: InterceptorServerCreateTokenOptions) {\n const token = await createInterceptorToken({ name: tokenName, tokensDirectory });\n\n logger.info(\n [\n `${color.green(color.bold('✔'))} Token${tokenName ? ` ${color.green(tokenName)}` : ''} created:`,\n '',\n color.yellow(token.value),\n '',\n 'Store this token securely. It cannot be retrieved later.',\n '',\n `To enable authentication in your interceptor server, use the ${color.cyan('--tokens-dir')} option. Only ` +\n 'remote interceptors bearing a valid token will be allowed to connect.',\n '',\n `${color.dim('$')} zimic-interceptor server start ${color.cyan('--tokens-dir')} ${color.magenta(tokensDirectory)}`,\n '',\n 'Learn more: https://zimic.dev/docs/interceptor/guides/http/remote-interceptors#interceptor-server-authentication',\n ].join('\\n'),\n );\n}\n","import { listInterceptorTokens } from '@/server/utils/auth';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerListTokensOptions {\n tokensDirectory: string;\n}\n\nexport async function listInterceptorServerTokens({ tokensDirectory }: InterceptorServerListTokensOptions) {\n const tokens = await listInterceptorTokens({ tokensDirectory });\n\n logger.raw.table(\n [\n { title: 'ID', property: 'id' },\n { title: 'NAME', property: 'name' },\n { title: 'CREATED AT', property: 'createdAt' },\n ],\n tokens.map((token) => ({\n id: token.id,\n name: token.name ?? '',\n createdAt: token.createdAt.toISOString(),\n })),\n );\n}\n","import color from 'picocolors';\n\nimport { readInterceptorTokenFromFile, removeInterceptorToken } from '@/server/utils/auth';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerCreateTokenOptions {\n tokenId: string;\n tokensDirectory: string;\n}\n\nexport async function removeInterceptorServerToken({ tokenId, tokensDirectory }: InterceptorServerCreateTokenOptions) {\n const token = await readInterceptorTokenFromFile(tokenId, { tokensDirectory });\n\n if (!token) {\n logger.error(`${color.red(color.bold('✘'))} Token ${color.red(tokenId)} not found.`);\n process.exit(1);\n }\n\n await removeInterceptorToken(token.id, { tokensDirectory });\n\n logger.info(`${color.green(color.bold('✔'))} Token ${color.green(token.name ?? token.id)} removed.`);\n}\n","import yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nimport { version } from '@@/package.json';\n\nimport { DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY } from '../server/utils/auth';\nimport initializeBrowserServiceWorker from './browser/init';\nimport startInterceptorServer from './server/start';\nimport { createInterceptorServerToken } from './server/token/create';\nimport { listInterceptorServerTokens } from './server/token/list';\nimport { removeInterceptorServerToken } from './server/token/remove';\n\nasync function runCLI() {\n await yargs(hideBin(process.argv))\n .scriptName('zimic-interceptor')\n .version(version)\n .showHelpOnFail(false)\n .strict()\n\n .command('browser', 'Manage your browser mock configuration.', (yargs) =>\n yargs.demandCommand().command(\n 'init <publicDirectory>',\n 'Initialize the browser service worker configuration.',\n (yargs) =>\n yargs.positional('publicDirectory', {\n type: 'string',\n description: 'The path to the public directory of your application.',\n demandOption: true,\n }),\n async (cliArguments) => {\n await initializeBrowserServiceWorker({\n publicDirectory: cliArguments.publicDirectory,\n });\n },\n ),\n )\n\n .command('server', 'Manage interceptor servers.', (yargs) =>\n yargs\n .demandCommand()\n .command(\n 'start [-- onReady]',\n 'Start an interceptor server.',\n (yargs) =>\n yargs\n .positional('onReady', {\n description: 'A command to run when the server is ready to accept connections.',\n type: 'string',\n })\n .option('hostname', {\n type: 'string',\n description: 'The hostname to start the server on.',\n alias: 'h',\n default: 'localhost',\n })\n .option('port', {\n type: 'number',\n description: 'The port to start the server on.',\n alias: 'p',\n })\n .option('ephemeral', {\n type: 'boolean',\n description:\n 'Whether the server should stop automatically after the on-ready command finishes. ' +\n 'If no on-ready command is provided and ephemeral is true, the server will stop immediately after ' +\n 'starting.',\n alias: 'e',\n default: false,\n })\n .option('log-unhandled-requests', {\n type: 'boolean',\n description:\n 'Whether to log a warning when no interceptors were found for the base URL of a request. ' +\n 'If an interceptor was matched, the logging behavior for that base URL is configured in the ' +\n 'interceptor itself.',\n alias: 'l',\n })\n .option('tokens-dir', {\n type: 'string',\n description:\n 'The directory where the authorized interceptor authentication tokens are saved. If provided, only ' +\n 'remote interceptors bearing a valid token will be accepted. This option is essential if you are ' +\n 'exposing your interceptor server publicly. For local development and testing, though, ' +\n '`--tokens-dir` is optional.',\n alias: 't',\n }),\n async (cliArguments) => {\n const onReadyCommand = cliArguments._.at(2)?.toString();\n const onReadyCommandArguments = cliArguments._.slice(3).map((argument) => argument.toString());\n\n await startInterceptorServer({\n hostname: cliArguments.hostname,\n port: cliArguments.port,\n ephemeral: cliArguments.ephemeral,\n logUnhandledRequests: cliArguments.logUnhandledRequests,\n tokensDirectory: cliArguments.tokensDir,\n onReady: onReadyCommand\n ? {\n command: onReadyCommand.toString(),\n arguments: onReadyCommandArguments,\n }\n : undefined,\n });\n },\n )\n\n .command('token', 'Manage remote interceptor authentication tokens.', (yargs) =>\n yargs\n .demandCommand()\n .command(\n 'create',\n 'Create an interceptor token.',\n (yargs) =>\n yargs\n .option('name', {\n type: 'string',\n description: 'The name of the token to create.',\n alias: 'n',\n })\n .option('tokens-dir', {\n type: 'string',\n description: 'The directory where the created interceptor token will be saved.',\n alias: 't',\n default: DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY,\n }),\n async (cliArguments) => {\n await createInterceptorServerToken({\n tokenName: cliArguments.name,\n tokensDirectory: cliArguments.tokensDir,\n });\n },\n )\n\n .command(\n ['ls', 'list'],\n 'List the authorized interceptor tokens.',\n (yargs) =>\n yargs.option('tokens-dir', {\n type: 'string',\n description: 'The directory where the interceptor tokens are saved.',\n alias: 't',\n default: DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY,\n }),\n async (cliArguments) => {\n await listInterceptorServerTokens({\n tokensDirectory: cliArguments.tokensDir,\n });\n },\n )\n\n .command(\n ['rm <tokenId>', 'remove <tokenId>'],\n 'Remove (invalidate) an interceptor token. Existing connections will not be affected, so restarting the ' +\n 'server is recommended to disconnect all interceptors.',\n (yargs) =>\n yargs\n .positional('tokenId', {\n type: 'string',\n description: 'The identifier of the token to remove.',\n demandOption: true,\n })\n .option('tokens-dir', {\n type: 'string',\n description: 'The directory where the interceptor tokens are saved.',\n alias: 't',\n default: DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY,\n }),\n async (cliArguments) => {\n await removeInterceptorServerToken({\n tokenId: cliArguments.tokenId,\n tokensDirectory: cliArguments.tokensDir,\n });\n },\n ),\n ),\n )\n\n .parse();\n}\n\nexport default runCLI;\n","#!/usr/bin/env node\nimport runCLI from './cli';\n\nvoid runCLI();\n"]}
1
+ {"version":3,"sources":["../package.json","../src/cli/browser/shared/constants.ts","../src/cli/browser/init.ts","../../zimic-utils/src/process/constants.ts","../../zimic-utils/src/process/runCommand.ts","../src/cli/server/start.ts","../src/cli/server/token/create.ts","../src/cli/server/token/list.ts","../src/cli/server/token/remove.ts","../src/cli/cli.ts","../src/cli/index.ts"],"names":["path","__require","fs","logger","color","spawn","createInterceptorServer","exitEvent","createInterceptorToken","listInterceptorTokens","readInterceptorTokenFromFile","removeInterceptorToken","yargs","hideBin","DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY"],"mappings":"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","file":"cli.js","sourcesContent":["{\n \"name\": \"@zimic/interceptor\",\n \"description\": \"Next-gen TypeScript-first HTTP intercepting and mocking\",\n \"keywords\": [\n \"zimic\",\n \"typescript\",\n \"types\",\n \"typegen\",\n \"validation\",\n \"inference\",\n \"http\",\n \"interceptor\",\n \"mock\",\n \"api\",\n \"static\"\n ],\n \"version\": \"1.4.1-canary.1\",\n \"homepage\": \"https://zimic.dev/docs/interceptor\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/zimicjs/zimic.git\",\n \"directory\": \"packages/zimic-interceptor\"\n },\n \"author\": {\n \"name\": \"Diego Aquino\",\n \"url\": \"https://github.com/diego-aquino\"\n },\n \"funding\": {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/zimicjs\"\n },\n \"private\": false,\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": true\n },\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"license\": \"MIT\",\n \"files\": [\n \"package.json\",\n \"README.md\",\n \"LICENSE.md\",\n \"src\",\n \"!src/**/tests\",\n \"!src/**/__tests__\",\n \"!src/**/*.test.ts\",\n \"dist\",\n \"index.d.ts\",\n \"http.d.ts\",\n \"server.d.ts\"\n ],\n \"sideEffects\": false,\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"index.d.ts\",\n \"bin\": {\n \"zimic-interceptor\": \"./dist/cli.js\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./http\": {\n \"types\": \"./http.d.ts\",\n \"import\": \"./dist/http.mjs\",\n \"require\": \"./dist/http.js\",\n \"default\": \"./dist/http.js\"\n },\n \"./server\": {\n \"types\": \"./server.d.ts\",\n \"import\": \"./dist/server.mjs\",\n \"require\": \"./dist/server.js\",\n \"default\": \"./dist/server.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"setup\": \"concurrently --names playwright,msw 'playwright install chromium' 'msw init ./public --no-save'\",\n \"dev\": \"tsup --watch\",\n \"cli\": \"node --enable-source-maps ./dist/cli.js\",\n \"build\": \"tsup\",\n \"lint\": \"eslint --cache --no-error-on-unmatched-pattern --no-warn-ignored --fix\",\n \"lint:turbo\": \"pnpm lint . --max-warnings 0\",\n \"style\": \"prettier --log-level warn --ignore-unknown --no-error-on-unmatched-pattern --cache\",\n \"style:check\": \"pnpm style --check\",\n \"style:format\": \"pnpm style --write\",\n \"test\": \"dotenv -v NODE_ENV=test -v FORCE_COLOR=1 -- vitest\",\n \"test:turbo\": \"dotenv -v CI=true -- pnpm run test --coverage --reporter verbose\",\n \"types:check\": \"tsc --noEmit\",\n \"postinstall\": \"node --enable-source-maps -e \\\"try{require('./dist/scripts/postinstall')}catch(error){console.error(error)}\\\"\"\n },\n \"dependencies\": {\n \"@whatwg-node/server\": \"0.10.18\",\n \"isomorphic-ws\": \"5.0.0\",\n \"msw\": \"2.14.2\",\n \"picocolors\": \"^1.1.1\",\n \"ws\": \"8.20.0\",\n \"yargs\": \"18.0.0\",\n \"zod\": \"^4.4.2\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^25.6.0\",\n \"@types/ws\": \"^8.18.1\",\n \"@types/yargs\": \"^17.0.35\",\n \"@vitest/browser\": \"^4.1.5\",\n \"@vitest/browser-playwright\": \"^4.1.5\",\n \"@vitest/coverage-istanbul\": \"^4.1.5\",\n \"@zimic/eslint-config-node\": \"workspace:*\",\n \"@zimic/lint-staged-config\": \"workspace:*\",\n \"@zimic/tsconfig\": \"workspace:*\",\n \"@zimic/utils\": \"workspace:*\",\n \"concurrently\": \"^9.2.1\",\n \"dotenv-cli\": \"^11.0.0\",\n \"eslint\": \"^9.39.4\",\n \"playwright\": \"^1.59.1\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"6.0.3\",\n \"vitest\": \"^4.1.5\"\n },\n \"peerDependencies\": {\n \"@zimic/http\": \"^1.2.0 || workspace:*\",\n \"typescript\": \"^5.0.0 || ^6.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"typescript\": {\n \"optional\": true\n }\n }\n}\n","export const SERVICE_WORKER_FILE_NAME = 'mockServiceWorker.js';\n","import fs from 'fs';\nimport path from 'path';\nimport color from 'picocolors';\n\nimport { logger } from '@/utils/logging';\n\nimport { SERVICE_WORKER_FILE_NAME } from './shared/constants';\n\nconst MSW_ROOT_PATH = path.join(require.resolve('msw'), '..', '..', '..');\nexport const MOCK_SERVICE_WORKER_PATH = path.join(MSW_ROOT_PATH, 'lib', SERVICE_WORKER_FILE_NAME);\n\ninterface BrowserServiceWorkerInitOptions {\n publicDirectory: string;\n}\n\nasync function initializeBrowserServiceWorker({ publicDirectory }: BrowserServiceWorkerInitOptions) {\n await fs.promises.mkdir(publicDirectory, { recursive: true });\n\n const destinationPath = path.join(publicDirectory, SERVICE_WORKER_FILE_NAME);\n await fs.promises.copyFile(MOCK_SERVICE_WORKER_PATH, destinationPath);\n\n logger.info(`Service worker script saved to ${color.magenta(destinationPath)}.`);\n}\n\nexport default initializeBrowserServiceWorker;\n","export const PROCESS_EXIT_EVENTS = Object.freeze([\n 'beforeExit',\n 'uncaughtExceptionMonitor',\n 'SIGINT',\n 'SIGTERM',\n 'SIGHUP',\n 'SIGBREAK',\n] as const);\n\nexport type ProcessExitEvent = (typeof PROCESS_EXIT_EVENTS)[number];\n\n// Having an undefined exit code means that the process will already exit with the default exit code.\nexport const PROCESS_EXIT_CODE_BY_EXIT_EVENT: Record<string, number | undefined> = {\n beforeExit: undefined,\n uncaughtExceptionMonitor: undefined,\n SIGINT: 130,\n SIGTERM: 143,\n SIGHUP: 129,\n SIGBREAK: 131,\n} satisfies Record<ProcessExitEvent, number | undefined>;\n","import { spawn, SpawnOptions } from 'child_process';\n\nimport { PROCESS_EXIT_CODE_BY_EXIT_EVENT } from './constants';\n\ninterface CommandErrorOptions {\n command?: string[];\n exitCode?: number;\n signal?: NodeJS.Signals;\n cause?: Error;\n}\n\nexport class CommandError extends Error {\n static readonly DEFAULT_EXIT_CODE = 1;\n\n readonly command: string[];\n readonly exitCode: number;\n readonly signal?: NodeJS.Signals;\n readonly cause?: Error;\n\n constructor(executable: string, options: CommandErrorOptions) {\n const message = CommandError.createMessage(executable, options);\n super(message);\n\n this.name = 'CommandError';\n this.command = options.command ?? [executable];\n this.exitCode = this.getExitCode(options);\n this.signal = options.signal;\n this.cause = options.cause;\n }\n\n private getExitCode(options: CommandErrorOptions): number {\n const existingExitCode = options.exitCode;\n\n const exitCodeInferredFromSignal =\n options.signal === undefined ? undefined : PROCESS_EXIT_CODE_BY_EXIT_EVENT[options.signal];\n\n return existingExitCode ?? exitCodeInferredFromSignal ?? CommandError.DEFAULT_EXIT_CODE;\n }\n\n private static createMessage(command: string, options: CommandErrorOptions) {\n const originalMessage = options.cause?.message;\n const suffix = originalMessage ? `: ${originalMessage}` : '';\n\n if (options.exitCode === undefined && options.signal === undefined) {\n return `Command '${command}' failed${suffix}`;\n }\n\n const prefix = `Command '${command}' exited `;\n const infix = options.exitCode === undefined ? `after signal ${options.signal}` : `with code ${options.exitCode}`;\n\n return `${prefix}${infix}${suffix}`;\n }\n}\n\nasync function runCommand(commandEntry: string, commandArguments: string[], options: SpawnOptions = {}) {\n await new Promise<void>((resolve, reject) => {\n const commandProcess = spawn(commandEntry, commandArguments, { stdio: 'inherit', ...options });\n\n commandProcess.once('error', (error) => {\n const commandError = new CommandError(commandEntry, {\n command: [commandEntry, ...commandArguments],\n cause: error,\n });\n reject(commandError);\n });\n\n commandProcess.once('close', (code, signal) => {\n if (code === 0) {\n resolve();\n return;\n }\n\n const commandError = new CommandError(commandEntry, {\n command: [commandEntry, ...commandArguments],\n exitCode: code ?? undefined,\n signal: signal ?? undefined,\n });\n reject(commandError);\n });\n });\n}\n\nexport default runCommand;\n","import {\n ProcessExitEvent,\n PROCESS_EXIT_EVENTS,\n PROCESS_EXIT_CODE_BY_EXIT_EVENT,\n runCommand,\n CommandError,\n} from '@zimic/utils/process';\nimport color from 'picocolors';\n\nimport { InterceptorServer, createInterceptorServer } from '@/server';\nimport { InterceptorServerOptions } from '@/server/types/options';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerStartOptions extends InterceptorServerOptions {\n ephemeral: boolean;\n onReady?: { command: string; arguments: string[] };\n}\n\nexport let serverSingleton: InterceptorServer | undefined;\n\nasync function startInterceptorServer({\n hostname,\n port,\n logUnhandledRequests,\n tokensDirectory,\n ephemeral,\n onReady,\n}: InterceptorServerStartOptions) {\n const server = createInterceptorServer({\n hostname,\n port,\n logUnhandledRequests,\n tokensDirectory,\n });\n\n async function handleExitEvent(exitEvent: ProcessExitEvent | undefined) {\n await server.stop();\n\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n for (const { exitEvent, exitHandler } of exitHandlerGroups) {\n process.off(exitEvent, exitHandler);\n }\n\n const exitCode = exitEvent ? PROCESS_EXIT_CODE_BY_EXIT_EVENT[exitEvent] : undefined;\n if (exitCode !== undefined) {\n process.exit(exitCode);\n }\n }\n\n const exitHandlerGroups = PROCESS_EXIT_EVENTS.map((exitEvent) => ({\n exitEvent,\n exitHandler: handleExitEvent.bind(null, exitEvent),\n }));\n\n for (const { exitEvent, exitHandler } of exitHandlerGroups) {\n process.on(exitEvent, exitHandler);\n }\n\n serverSingleton = server;\n\n await server.start();\n\n logger.info(\n `${ephemeral ? 'Ephemeral s' : 'S'}erver is running on ${color.yellow(`${server.hostname}:${server.port}`)}`,\n );\n\n const isDangerouslyUnprotected = !tokensDirectory && process.env.NODE_ENV === 'production';\n\n if (isDangerouslyUnprotected) {\n logger.warn(\n [\n `Attention: this interceptor server is ${color.bold(color.red('unprotected'))}. Do not expose it publicly without authentication.`,\n '',\n 'Learn more: https://zimic.dev/docs/interceptor/guides/http/remote-interceptors#interceptor-server-authentication',\n ].join('\\n'),\n );\n }\n\n if (onReady) {\n try {\n await runCommand(onReady.command, onReady.arguments);\n } catch (error) {\n console.error(error);\n\n /* istanbul ignore if -- @preserve\n * A CommandError is always expected here. */\n if (!(error instanceof CommandError)) {\n throw error;\n }\n\n process.exit(error.exitCode);\n }\n }\n\n if (ephemeral) {\n await handleExitEvent(undefined);\n process.exit(0);\n }\n}\n\nexport default startInterceptorServer;\n","import color from 'picocolors';\n\nimport { createInterceptorToken } from '@/server/utils/auth';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerCreateTokenOptions {\n tokenName?: string;\n tokensDirectory: string;\n}\n\nexport async function createInterceptorServerToken({\n tokenName,\n tokensDirectory,\n}: InterceptorServerCreateTokenOptions) {\n const token = await createInterceptorToken({ name: tokenName, tokensDirectory });\n\n logger.info(\n [\n `${color.green(color.bold('✔'))} Token${tokenName ? ` ${color.green(tokenName)}` : ''} created:`,\n '',\n color.yellow(token.value),\n '',\n 'Store this token securely. It cannot be retrieved later.',\n '',\n `To enable authentication in your interceptor server, use the ${color.cyan('--tokens-dir')} option. Only ` +\n 'remote interceptors bearing a valid token will be allowed to connect.',\n '',\n `${color.dim('$')} zimic-interceptor server start ${color.cyan('--tokens-dir')} ${color.magenta(tokensDirectory)}`,\n '',\n 'Learn more: https://zimic.dev/docs/interceptor/guides/http/remote-interceptors#interceptor-server-authentication',\n ].join('\\n'),\n );\n}\n","import { listInterceptorTokens } from '@/server/utils/auth';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerListTokensOptions {\n tokensDirectory: string;\n}\n\nexport async function listInterceptorServerTokens({ tokensDirectory }: InterceptorServerListTokensOptions) {\n const tokens = await listInterceptorTokens({ tokensDirectory });\n\n logger.raw.table(\n [\n { title: 'ID', property: 'id' },\n { title: 'NAME', property: 'name' },\n { title: 'CREATED AT', property: 'createdAt' },\n ],\n tokens.map((token) => ({\n id: token.id,\n name: token.name ?? '',\n createdAt: token.createdAt.toISOString(),\n })),\n );\n}\n","import color from 'picocolors';\n\nimport { readInterceptorTokenFromFile, removeInterceptorToken } from '@/server/utils/auth';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerCreateTokenOptions {\n tokenId: string;\n tokensDirectory: string;\n}\n\nexport async function removeInterceptorServerToken({ tokenId, tokensDirectory }: InterceptorServerCreateTokenOptions) {\n const token = await readInterceptorTokenFromFile(tokenId, { tokensDirectory });\n\n if (!token) {\n logger.error(`${color.red(color.bold('✘'))} Token ${color.red(tokenId)} not found.`);\n process.exit(1);\n }\n\n await removeInterceptorToken(token.id, { tokensDirectory });\n\n logger.info(`${color.green(color.bold('✔'))} Token ${color.green(token.name ?? token.id)} removed.`);\n}\n","import yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nimport { version } from '@@/package.json';\n\nimport { DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY } from '../server/utils/auth';\nimport initializeBrowserServiceWorker from './browser/init';\nimport startInterceptorServer from './server/start';\nimport { createInterceptorServerToken } from './server/token/create';\nimport { listInterceptorServerTokens } from './server/token/list';\nimport { removeInterceptorServerToken } from './server/token/remove';\n\nasync function runCLI() {\n await yargs(hideBin(process.argv))\n .scriptName('zimic-interceptor')\n .version(version)\n .showHelpOnFail(false)\n .strict()\n\n .command('browser', 'Manage your browser mock configuration.', (yargs) =>\n yargs.demandCommand().command(\n 'init <publicDirectory>',\n 'Initialize the browser service worker configuration.',\n (yargs) =>\n yargs.positional('publicDirectory', {\n type: 'string',\n description: 'The path to the public directory of your application.',\n demandOption: true,\n }),\n async (cliArguments) => {\n await initializeBrowserServiceWorker({\n publicDirectory: cliArguments.publicDirectory,\n });\n },\n ),\n )\n\n .command('server', 'Manage interceptor servers.', (yargs) =>\n yargs\n .demandCommand()\n .command(\n 'start [-- onReady]',\n 'Start an interceptor server.',\n (yargs) =>\n yargs\n .positional('onReady', {\n description: 'A command to run when the server is ready to accept connections.',\n type: 'string',\n })\n .option('hostname', {\n type: 'string',\n description: 'The hostname to start the server on.',\n alias: 'h',\n default: 'localhost',\n })\n .option('port', {\n type: 'number',\n description: 'The port to start the server on.',\n alias: 'p',\n })\n .option('ephemeral', {\n type: 'boolean',\n description:\n 'Whether the server should stop automatically after the on-ready command finishes. ' +\n 'If no on-ready command is provided and ephemeral is true, the server will stop immediately after ' +\n 'starting.',\n alias: 'e',\n default: false,\n })\n .option('log-unhandled-requests', {\n type: 'boolean',\n description:\n 'Whether to log a warning when no interceptors were found for the base URL of a request. ' +\n 'If an interceptor was matched, the logging behavior for that base URL is configured in the ' +\n 'interceptor itself.',\n alias: 'l',\n })\n .option('tokens-dir', {\n type: 'string',\n description:\n 'The directory where the authorized interceptor authentication tokens are saved. If provided, only ' +\n 'remote interceptors bearing a valid token will be accepted. This option is essential if you are ' +\n 'exposing your interceptor server publicly. For local development and testing, though, ' +\n '`--tokens-dir` is optional.',\n alias: 't',\n }),\n async (cliArguments) => {\n const onReadyCommand = cliArguments._.at(2)?.toString();\n const onReadyCommandArguments = cliArguments._.slice(3).map((argument) => argument.toString());\n\n await startInterceptorServer({\n hostname: cliArguments.hostname,\n port: cliArguments.port,\n ephemeral: cliArguments.ephemeral,\n logUnhandledRequests: cliArguments.logUnhandledRequests,\n tokensDirectory: cliArguments.tokensDir,\n onReady: onReadyCommand\n ? {\n command: onReadyCommand.toString(),\n arguments: onReadyCommandArguments,\n }\n : undefined,\n });\n },\n )\n\n .command('token', 'Manage remote interceptor authentication tokens.', (yargs) =>\n yargs\n .demandCommand()\n .command(\n 'create',\n 'Create an interceptor token.',\n (yargs) =>\n yargs\n .option('name', {\n type: 'string',\n description: 'The name of the token to create.',\n alias: 'n',\n })\n .option('tokens-dir', {\n type: 'string',\n description: 'The directory where the created interceptor token will be saved.',\n alias: 't',\n default: DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY,\n }),\n async (cliArguments) => {\n await createInterceptorServerToken({\n tokenName: cliArguments.name,\n tokensDirectory: cliArguments.tokensDir,\n });\n },\n )\n\n .command(\n ['ls', 'list'],\n 'List the authorized interceptor tokens.',\n (yargs) =>\n yargs.option('tokens-dir', {\n type: 'string',\n description: 'The directory where the interceptor tokens are saved.',\n alias: 't',\n default: DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY,\n }),\n async (cliArguments) => {\n await listInterceptorServerTokens({\n tokensDirectory: cliArguments.tokensDir,\n });\n },\n )\n\n .command(\n ['rm <tokenId>', 'remove <tokenId>'],\n 'Remove (invalidate) an interceptor token. Existing connections will not be affected, so restarting the ' +\n 'server is recommended to disconnect all interceptors.',\n (yargs) =>\n yargs\n .positional('tokenId', {\n type: 'string',\n description: 'The identifier of the token to remove.',\n demandOption: true,\n })\n .option('tokens-dir', {\n type: 'string',\n description: 'The directory where the interceptor tokens are saved.',\n alias: 't',\n default: DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY,\n }),\n async (cliArguments) => {\n await removeInterceptorServerToken({\n tokenId: cliArguments.tokenId,\n tokensDirectory: cliArguments.tokensDir,\n });\n },\n ),\n ),\n )\n\n .parse();\n}\n\nexport default runCLI;\n","#!/usr/bin/env node\nimport runCLI from './cli';\n\nvoid runCLI();\n"]}
package/dist/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY, createInterceptorToken, logger, listInterceptorTokens, readInterceptorTokenFromFile, removeInterceptorToken, createInterceptorServer } from './chunk-VFCCTIDU.mjs';
2
+ import { DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY, createInterceptorToken, logger, listInterceptorTokens, readInterceptorTokenFromFile, removeInterceptorToken, createInterceptorServer } from './chunk-F3VMDYHM.mjs';
3
3
  import { __require } from './chunk-BJTO5JO5.mjs';
4
4
  import yargs from 'yargs';
5
5
  import { hideBin } from 'yargs/helpers';
@@ -9,7 +9,7 @@ import color3 from 'picocolors';
9
9
  import { spawn } from 'child_process';
10
10
 
11
11
  // package.json
12
- var version = "1.4.0";
12
+ var version = "1.4.1-canary.1";
13
13
 
14
14
  // src/cli/browser/shared/constants.ts
15
15
  var SERVICE_WORKER_FILE_NAME = "mockServiceWorker.js";
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../src/cli/browser/shared/constants.ts","../src/cli/browser/init.ts","../../zimic-utils/src/process/constants.ts","../../zimic-utils/src/process/runCommand.ts","../src/cli/server/start.ts","../src/cli/server/token/create.ts","../src/cli/server/token/list.ts","../src/cli/server/token/remove.ts","../src/cli/cli.ts","../src/cli/index.ts"],"names":["color","exitEvent","yargs"],"mappings":"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","file":"cli.mjs","sourcesContent":["{\n \"name\": \"@zimic/interceptor\",\n \"description\": \"Next-gen TypeScript-first HTTP intercepting and mocking\",\n \"keywords\": [\n \"zimic\",\n \"typescript\",\n \"types\",\n \"typegen\",\n \"validation\",\n \"inference\",\n \"http\",\n \"interceptor\",\n \"mock\",\n \"api\",\n \"static\"\n ],\n \"version\": \"1.4.0\",\n \"homepage\": \"https://zimic.dev/docs/interceptor\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/zimicjs/zimic.git\",\n \"directory\": \"packages/zimic-interceptor\"\n },\n \"author\": {\n \"name\": \"Diego Aquino\",\n \"url\": \"https://github.com/diego-aquino\"\n },\n \"funding\": {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/zimicjs\"\n },\n \"private\": false,\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": true\n },\n \"engines\": {\n \"node\": \">=20.0.0\"\n },\n \"license\": \"MIT\",\n \"files\": [\n \"package.json\",\n \"README.md\",\n \"LICENSE.md\",\n \"src\",\n \"!src/**/tests\",\n \"!src/**/__tests__\",\n \"!src/**/*.test.ts\",\n \"dist\",\n \"index.d.ts\",\n \"http.d.ts\",\n \"server.d.ts\"\n ],\n \"sideEffects\": false,\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"index.d.ts\",\n \"bin\": {\n \"zimic-interceptor\": \"./dist/cli.js\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./http\": {\n \"types\": \"./http.d.ts\",\n \"import\": \"./dist/http.mjs\",\n \"require\": \"./dist/http.js\",\n \"default\": \"./dist/http.js\"\n },\n \"./server\": {\n \"types\": \"./server.d.ts\",\n \"import\": \"./dist/server.mjs\",\n \"require\": \"./dist/server.js\",\n \"default\": \"./dist/server.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"setup\": \"concurrently --names playwright,msw 'playwright install chromium' 'msw init ./public --no-save'\",\n \"dev\": \"tsup --watch\",\n \"cli\": \"node --enable-source-maps ./dist/cli.js\",\n \"build\": \"tsup\",\n \"lint\": \"eslint --cache --no-error-on-unmatched-pattern --no-warn-ignored --fix\",\n \"lint:turbo\": \"pnpm lint . --max-warnings 0\",\n \"style\": \"prettier --log-level warn --ignore-unknown --no-error-on-unmatched-pattern --cache\",\n \"style:check\": \"pnpm style --check\",\n \"style:format\": \"pnpm style --write\",\n \"test\": \"dotenv -v NODE_ENV=test -v FORCE_COLOR=1 -- vitest\",\n \"test:turbo\": \"dotenv -v CI=true -- pnpm run test --coverage --reporter verbose\",\n \"types:check\": \"tsc --noEmit\",\n \"postinstall\": \"node --enable-source-maps -e \\\"try{require('./dist/scripts/postinstall')}catch(error){console.error(error)}\\\"\"\n },\n \"dependencies\": {\n \"@whatwg-node/server\": \"0.10.18\",\n \"isomorphic-ws\": \"5.0.0\",\n \"msw\": \"2.13.6\",\n \"picocolors\": \"^1.1.1\",\n \"ws\": \"8.20.0\",\n \"yargs\": \"18.0.0\",\n \"zod\": \"^4.3.6\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^25.6.0\",\n \"@types/ws\": \"^8.18.1\",\n \"@types/yargs\": \"^17.0.35\",\n \"@vitest/browser\": \"^4.1.5\",\n \"@vitest/browser-playwright\": \"^4.1.5\",\n \"@vitest/coverage-istanbul\": \"^4.1.5\",\n \"@zimic/eslint-config-node\": \"workspace:*\",\n \"@zimic/lint-staged-config\": \"workspace:*\",\n \"@zimic/tsconfig\": \"workspace:*\",\n \"@zimic/utils\": \"workspace:*\",\n \"concurrently\": \"^9.2.1\",\n \"dotenv-cli\": \"^11.0.0\",\n \"eslint\": \"^9.39.4\",\n \"playwright\": \"^1.59.1\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"6.0.3\",\n \"vitest\": \"^4.1.5\"\n },\n \"peerDependencies\": {\n \"@zimic/http\": \"^1.2.0 || workspace:*\",\n \"typescript\": \"^5.0.0 || ^6.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"typescript\": {\n \"optional\": true\n }\n }\n}\n","export const SERVICE_WORKER_FILE_NAME = 'mockServiceWorker.js';\n","import fs from 'fs';\nimport path from 'path';\nimport color from 'picocolors';\n\nimport { logger } from '@/utils/logging';\n\nimport { SERVICE_WORKER_FILE_NAME } from './shared/constants';\n\nconst MSW_ROOT_PATH = path.join(require.resolve('msw'), '..', '..', '..');\nexport const MOCK_SERVICE_WORKER_PATH = path.join(MSW_ROOT_PATH, 'lib', SERVICE_WORKER_FILE_NAME);\n\ninterface BrowserServiceWorkerInitOptions {\n publicDirectory: string;\n}\n\nasync function initializeBrowserServiceWorker({ publicDirectory }: BrowserServiceWorkerInitOptions) {\n await fs.promises.mkdir(publicDirectory, { recursive: true });\n\n const destinationPath = path.join(publicDirectory, SERVICE_WORKER_FILE_NAME);\n await fs.promises.copyFile(MOCK_SERVICE_WORKER_PATH, destinationPath);\n\n logger.info(`Service worker script saved to ${color.magenta(destinationPath)}.`);\n}\n\nexport default initializeBrowserServiceWorker;\n","export const PROCESS_EXIT_EVENTS = Object.freeze([\n 'beforeExit',\n 'uncaughtExceptionMonitor',\n 'SIGINT',\n 'SIGTERM',\n 'SIGHUP',\n 'SIGBREAK',\n] as const);\n\nexport type ProcessExitEvent = (typeof PROCESS_EXIT_EVENTS)[number];\n\n// Having an undefined exit code means that the process will already exit with the default exit code.\nexport const PROCESS_EXIT_CODE_BY_EXIT_EVENT: Record<string, number | undefined> = {\n beforeExit: undefined,\n uncaughtExceptionMonitor: undefined,\n SIGINT: 130,\n SIGTERM: 143,\n SIGHUP: 129,\n SIGBREAK: 131,\n} satisfies Record<ProcessExitEvent, number | undefined>;\n","import { spawn, SpawnOptions } from 'child_process';\n\nimport { PROCESS_EXIT_CODE_BY_EXIT_EVENT } from './constants';\n\ninterface CommandErrorOptions {\n command?: string[];\n exitCode?: number;\n signal?: NodeJS.Signals;\n cause?: Error;\n}\n\nexport class CommandError extends Error {\n static readonly DEFAULT_EXIT_CODE = 1;\n\n readonly command: string[];\n readonly exitCode: number;\n readonly signal?: NodeJS.Signals;\n readonly cause?: Error;\n\n constructor(executable: string, options: CommandErrorOptions) {\n const message = CommandError.createMessage(executable, options);\n super(message);\n\n this.name = 'CommandError';\n this.command = options.command ?? [executable];\n this.exitCode = this.getExitCode(options);\n this.signal = options.signal;\n this.cause = options.cause;\n }\n\n private getExitCode(options: CommandErrorOptions): number {\n const existingExitCode = options.exitCode;\n\n const exitCodeInferredFromSignal =\n options.signal === undefined ? undefined : PROCESS_EXIT_CODE_BY_EXIT_EVENT[options.signal];\n\n return existingExitCode ?? exitCodeInferredFromSignal ?? CommandError.DEFAULT_EXIT_CODE;\n }\n\n private static createMessage(command: string, options: CommandErrorOptions) {\n const originalMessage = options.cause?.message;\n const suffix = originalMessage ? `: ${originalMessage}` : '';\n\n if (options.exitCode === undefined && options.signal === undefined) {\n return `Command '${command}' failed${suffix}`;\n }\n\n const prefix = `Command '${command}' exited `;\n const infix = options.exitCode === undefined ? `after signal ${options.signal}` : `with code ${options.exitCode}`;\n\n return `${prefix}${infix}${suffix}`;\n }\n}\n\nasync function runCommand(commandEntry: string, commandArguments: string[], options: SpawnOptions = {}) {\n await new Promise<void>((resolve, reject) => {\n const commandProcess = spawn(commandEntry, commandArguments, { stdio: 'inherit', ...options });\n\n commandProcess.once('error', (error) => {\n const commandError = new CommandError(commandEntry, {\n command: [commandEntry, ...commandArguments],\n cause: error,\n });\n reject(commandError);\n });\n\n commandProcess.once('close', (code, signal) => {\n if (code === 0) {\n resolve();\n return;\n }\n\n const commandError = new CommandError(commandEntry, {\n command: [commandEntry, ...commandArguments],\n exitCode: code ?? undefined,\n signal: signal ?? undefined,\n });\n reject(commandError);\n });\n });\n}\n\nexport default runCommand;\n","import {\n ProcessExitEvent,\n PROCESS_EXIT_EVENTS,\n PROCESS_EXIT_CODE_BY_EXIT_EVENT,\n runCommand,\n CommandError,\n} from '@zimic/utils/process';\nimport color from 'picocolors';\n\nimport { InterceptorServer, createInterceptorServer } from '@/server';\nimport { InterceptorServerOptions } from '@/server/types/options';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerStartOptions extends InterceptorServerOptions {\n ephemeral: boolean;\n onReady?: { command: string; arguments: string[] };\n}\n\nexport let serverSingleton: InterceptorServer | undefined;\n\nasync function startInterceptorServer({\n hostname,\n port,\n logUnhandledRequests,\n tokensDirectory,\n ephemeral,\n onReady,\n}: InterceptorServerStartOptions) {\n const server = createInterceptorServer({\n hostname,\n port,\n logUnhandledRequests,\n tokensDirectory,\n });\n\n async function handleExitEvent(exitEvent: ProcessExitEvent | undefined) {\n await server.stop();\n\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n for (const { exitEvent, exitHandler } of exitHandlerGroups) {\n process.off(exitEvent, exitHandler);\n }\n\n const exitCode = exitEvent ? PROCESS_EXIT_CODE_BY_EXIT_EVENT[exitEvent] : undefined;\n if (exitCode !== undefined) {\n process.exit(exitCode);\n }\n }\n\n const exitHandlerGroups = PROCESS_EXIT_EVENTS.map((exitEvent) => ({\n exitEvent,\n exitHandler: handleExitEvent.bind(null, exitEvent),\n }));\n\n for (const { exitEvent, exitHandler } of exitHandlerGroups) {\n process.on(exitEvent, exitHandler);\n }\n\n serverSingleton = server;\n\n await server.start();\n\n logger.info(\n `${ephemeral ? 'Ephemeral s' : 'S'}erver is running on ${color.yellow(`${server.hostname}:${server.port}`)}`,\n );\n\n const isDangerouslyUnprotected = !tokensDirectory && process.env.NODE_ENV === 'production';\n\n if (isDangerouslyUnprotected) {\n logger.warn(\n [\n `Attention: this interceptor server is ${color.bold(color.red('unprotected'))}. Do not expose it publicly without authentication.`,\n '',\n 'Learn more: https://zimic.dev/docs/interceptor/guides/http/remote-interceptors#interceptor-server-authentication',\n ].join('\\n'),\n );\n }\n\n if (onReady) {\n try {\n await runCommand(onReady.command, onReady.arguments);\n } catch (error) {\n console.error(error);\n\n /* istanbul ignore if -- @preserve\n * A CommandError is always expected here. */\n if (!(error instanceof CommandError)) {\n throw error;\n }\n\n process.exit(error.exitCode);\n }\n }\n\n if (ephemeral) {\n await handleExitEvent(undefined);\n process.exit(0);\n }\n}\n\nexport default startInterceptorServer;\n","import color from 'picocolors';\n\nimport { createInterceptorToken } from '@/server/utils/auth';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerCreateTokenOptions {\n tokenName?: string;\n tokensDirectory: string;\n}\n\nexport async function createInterceptorServerToken({\n tokenName,\n tokensDirectory,\n}: InterceptorServerCreateTokenOptions) {\n const token = await createInterceptorToken({ name: tokenName, tokensDirectory });\n\n logger.info(\n [\n `${color.green(color.bold('✔'))} Token${tokenName ? ` ${color.green(tokenName)}` : ''} created:`,\n '',\n color.yellow(token.value),\n '',\n 'Store this token securely. It cannot be retrieved later.',\n '',\n `To enable authentication in your interceptor server, use the ${color.cyan('--tokens-dir')} option. Only ` +\n 'remote interceptors bearing a valid token will be allowed to connect.',\n '',\n `${color.dim('$')} zimic-interceptor server start ${color.cyan('--tokens-dir')} ${color.magenta(tokensDirectory)}`,\n '',\n 'Learn more: https://zimic.dev/docs/interceptor/guides/http/remote-interceptors#interceptor-server-authentication',\n ].join('\\n'),\n );\n}\n","import { listInterceptorTokens } from '@/server/utils/auth';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerListTokensOptions {\n tokensDirectory: string;\n}\n\nexport async function listInterceptorServerTokens({ tokensDirectory }: InterceptorServerListTokensOptions) {\n const tokens = await listInterceptorTokens({ tokensDirectory });\n\n logger.raw.table(\n [\n { title: 'ID', property: 'id' },\n { title: 'NAME', property: 'name' },\n { title: 'CREATED AT', property: 'createdAt' },\n ],\n tokens.map((token) => ({\n id: token.id,\n name: token.name ?? '',\n createdAt: token.createdAt.toISOString(),\n })),\n );\n}\n","import color from 'picocolors';\n\nimport { readInterceptorTokenFromFile, removeInterceptorToken } from '@/server/utils/auth';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerCreateTokenOptions {\n tokenId: string;\n tokensDirectory: string;\n}\n\nexport async function removeInterceptorServerToken({ tokenId, tokensDirectory }: InterceptorServerCreateTokenOptions) {\n const token = await readInterceptorTokenFromFile(tokenId, { tokensDirectory });\n\n if (!token) {\n logger.error(`${color.red(color.bold('✘'))} Token ${color.red(tokenId)} not found.`);\n process.exit(1);\n }\n\n await removeInterceptorToken(token.id, { tokensDirectory });\n\n logger.info(`${color.green(color.bold('✔'))} Token ${color.green(token.name ?? token.id)} removed.`);\n}\n","import yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nimport { version } from '@@/package.json';\n\nimport { DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY } from '../server/utils/auth';\nimport initializeBrowserServiceWorker from './browser/init';\nimport startInterceptorServer from './server/start';\nimport { createInterceptorServerToken } from './server/token/create';\nimport { listInterceptorServerTokens } from './server/token/list';\nimport { removeInterceptorServerToken } from './server/token/remove';\n\nasync function runCLI() {\n await yargs(hideBin(process.argv))\n .scriptName('zimic-interceptor')\n .version(version)\n .showHelpOnFail(false)\n .strict()\n\n .command('browser', 'Manage your browser mock configuration.', (yargs) =>\n yargs.demandCommand().command(\n 'init <publicDirectory>',\n 'Initialize the browser service worker configuration.',\n (yargs) =>\n yargs.positional('publicDirectory', {\n type: 'string',\n description: 'The path to the public directory of your application.',\n demandOption: true,\n }),\n async (cliArguments) => {\n await initializeBrowserServiceWorker({\n publicDirectory: cliArguments.publicDirectory,\n });\n },\n ),\n )\n\n .command('server', 'Manage interceptor servers.', (yargs) =>\n yargs\n .demandCommand()\n .command(\n 'start [-- onReady]',\n 'Start an interceptor server.',\n (yargs) =>\n yargs\n .positional('onReady', {\n description: 'A command to run when the server is ready to accept connections.',\n type: 'string',\n })\n .option('hostname', {\n type: 'string',\n description: 'The hostname to start the server on.',\n alias: 'h',\n default: 'localhost',\n })\n .option('port', {\n type: 'number',\n description: 'The port to start the server on.',\n alias: 'p',\n })\n .option('ephemeral', {\n type: 'boolean',\n description:\n 'Whether the server should stop automatically after the on-ready command finishes. ' +\n 'If no on-ready command is provided and ephemeral is true, the server will stop immediately after ' +\n 'starting.',\n alias: 'e',\n default: false,\n })\n .option('log-unhandled-requests', {\n type: 'boolean',\n description:\n 'Whether to log a warning when no interceptors were found for the base URL of a request. ' +\n 'If an interceptor was matched, the logging behavior for that base URL is configured in the ' +\n 'interceptor itself.',\n alias: 'l',\n })\n .option('tokens-dir', {\n type: 'string',\n description:\n 'The directory where the authorized interceptor authentication tokens are saved. If provided, only ' +\n 'remote interceptors bearing a valid token will be accepted. This option is essential if you are ' +\n 'exposing your interceptor server publicly. For local development and testing, though, ' +\n '`--tokens-dir` is optional.',\n alias: 't',\n }),\n async (cliArguments) => {\n const onReadyCommand = cliArguments._.at(2)?.toString();\n const onReadyCommandArguments = cliArguments._.slice(3).map((argument) => argument.toString());\n\n await startInterceptorServer({\n hostname: cliArguments.hostname,\n port: cliArguments.port,\n ephemeral: cliArguments.ephemeral,\n logUnhandledRequests: cliArguments.logUnhandledRequests,\n tokensDirectory: cliArguments.tokensDir,\n onReady: onReadyCommand\n ? {\n command: onReadyCommand.toString(),\n arguments: onReadyCommandArguments,\n }\n : undefined,\n });\n },\n )\n\n .command('token', 'Manage remote interceptor authentication tokens.', (yargs) =>\n yargs\n .demandCommand()\n .command(\n 'create',\n 'Create an interceptor token.',\n (yargs) =>\n yargs\n .option('name', {\n type: 'string',\n description: 'The name of the token to create.',\n alias: 'n',\n })\n .option('tokens-dir', {\n type: 'string',\n description: 'The directory where the created interceptor token will be saved.',\n alias: 't',\n default: DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY,\n }),\n async (cliArguments) => {\n await createInterceptorServerToken({\n tokenName: cliArguments.name,\n tokensDirectory: cliArguments.tokensDir,\n });\n },\n )\n\n .command(\n ['ls', 'list'],\n 'List the authorized interceptor tokens.',\n (yargs) =>\n yargs.option('tokens-dir', {\n type: 'string',\n description: 'The directory where the interceptor tokens are saved.',\n alias: 't',\n default: DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY,\n }),\n async (cliArguments) => {\n await listInterceptorServerTokens({\n tokensDirectory: cliArguments.tokensDir,\n });\n },\n )\n\n .command(\n ['rm <tokenId>', 'remove <tokenId>'],\n 'Remove (invalidate) an interceptor token. Existing connections will not be affected, so restarting the ' +\n 'server is recommended to disconnect all interceptors.',\n (yargs) =>\n yargs\n .positional('tokenId', {\n type: 'string',\n description: 'The identifier of the token to remove.',\n demandOption: true,\n })\n .option('tokens-dir', {\n type: 'string',\n description: 'The directory where the interceptor tokens are saved.',\n alias: 't',\n default: DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY,\n }),\n async (cliArguments) => {\n await removeInterceptorServerToken({\n tokenId: cliArguments.tokenId,\n tokensDirectory: cliArguments.tokensDir,\n });\n },\n ),\n ),\n )\n\n .parse();\n}\n\nexport default runCLI;\n","#!/usr/bin/env node\nimport runCLI from './cli';\n\nvoid runCLI();\n"]}
1
+ {"version":3,"sources":["../package.json","../src/cli/browser/shared/constants.ts","../src/cli/browser/init.ts","../../zimic-utils/src/process/constants.ts","../../zimic-utils/src/process/runCommand.ts","../src/cli/server/start.ts","../src/cli/server/token/create.ts","../src/cli/server/token/list.ts","../src/cli/server/token/remove.ts","../src/cli/cli.ts","../src/cli/index.ts"],"names":["color","exitEvent","yargs"],"mappings":"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","file":"cli.mjs","sourcesContent":["{\n \"name\": \"@zimic/interceptor\",\n \"description\": \"Next-gen TypeScript-first HTTP intercepting and mocking\",\n \"keywords\": [\n \"zimic\",\n \"typescript\",\n \"types\",\n \"typegen\",\n \"validation\",\n \"inference\",\n \"http\",\n \"interceptor\",\n \"mock\",\n \"api\",\n \"static\"\n ],\n \"version\": \"1.4.1-canary.1\",\n \"homepage\": \"https://zimic.dev/docs/interceptor\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/zimicjs/zimic.git\",\n \"directory\": \"packages/zimic-interceptor\"\n },\n \"author\": {\n \"name\": \"Diego Aquino\",\n \"url\": \"https://github.com/diego-aquino\"\n },\n \"funding\": {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/zimicjs\"\n },\n \"private\": false,\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": true\n },\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"license\": \"MIT\",\n \"files\": [\n \"package.json\",\n \"README.md\",\n \"LICENSE.md\",\n \"src\",\n \"!src/**/tests\",\n \"!src/**/__tests__\",\n \"!src/**/*.test.ts\",\n \"dist\",\n \"index.d.ts\",\n \"http.d.ts\",\n \"server.d.ts\"\n ],\n \"sideEffects\": false,\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"index.d.ts\",\n \"bin\": {\n \"zimic-interceptor\": \"./dist/cli.js\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./http\": {\n \"types\": \"./http.d.ts\",\n \"import\": \"./dist/http.mjs\",\n \"require\": \"./dist/http.js\",\n \"default\": \"./dist/http.js\"\n },\n \"./server\": {\n \"types\": \"./server.d.ts\",\n \"import\": \"./dist/server.mjs\",\n \"require\": \"./dist/server.js\",\n \"default\": \"./dist/server.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"setup\": \"concurrently --names playwright,msw 'playwright install chromium' 'msw init ./public --no-save'\",\n \"dev\": \"tsup --watch\",\n \"cli\": \"node --enable-source-maps ./dist/cli.js\",\n \"build\": \"tsup\",\n \"lint\": \"eslint --cache --no-error-on-unmatched-pattern --no-warn-ignored --fix\",\n \"lint:turbo\": \"pnpm lint . --max-warnings 0\",\n \"style\": \"prettier --log-level warn --ignore-unknown --no-error-on-unmatched-pattern --cache\",\n \"style:check\": \"pnpm style --check\",\n \"style:format\": \"pnpm style --write\",\n \"test\": \"dotenv -v NODE_ENV=test -v FORCE_COLOR=1 -- vitest\",\n \"test:turbo\": \"dotenv -v CI=true -- pnpm run test --coverage --reporter verbose\",\n \"types:check\": \"tsc --noEmit\",\n \"postinstall\": \"node --enable-source-maps -e \\\"try{require('./dist/scripts/postinstall')}catch(error){console.error(error)}\\\"\"\n },\n \"dependencies\": {\n \"@whatwg-node/server\": \"0.10.18\",\n \"isomorphic-ws\": \"5.0.0\",\n \"msw\": \"2.14.2\",\n \"picocolors\": \"^1.1.1\",\n \"ws\": \"8.20.0\",\n \"yargs\": \"18.0.0\",\n \"zod\": \"^4.4.2\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^25.6.0\",\n \"@types/ws\": \"^8.18.1\",\n \"@types/yargs\": \"^17.0.35\",\n \"@vitest/browser\": \"^4.1.5\",\n \"@vitest/browser-playwright\": \"^4.1.5\",\n \"@vitest/coverage-istanbul\": \"^4.1.5\",\n \"@zimic/eslint-config-node\": \"workspace:*\",\n \"@zimic/lint-staged-config\": \"workspace:*\",\n \"@zimic/tsconfig\": \"workspace:*\",\n \"@zimic/utils\": \"workspace:*\",\n \"concurrently\": \"^9.2.1\",\n \"dotenv-cli\": \"^11.0.0\",\n \"eslint\": \"^9.39.4\",\n \"playwright\": \"^1.59.1\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"6.0.3\",\n \"vitest\": \"^4.1.5\"\n },\n \"peerDependencies\": {\n \"@zimic/http\": \"^1.2.0 || workspace:*\",\n \"typescript\": \"^5.0.0 || ^6.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"typescript\": {\n \"optional\": true\n }\n }\n}\n","export const SERVICE_WORKER_FILE_NAME = 'mockServiceWorker.js';\n","import fs from 'fs';\nimport path from 'path';\nimport color from 'picocolors';\n\nimport { logger } from '@/utils/logging';\n\nimport { SERVICE_WORKER_FILE_NAME } from './shared/constants';\n\nconst MSW_ROOT_PATH = path.join(require.resolve('msw'), '..', '..', '..');\nexport const MOCK_SERVICE_WORKER_PATH = path.join(MSW_ROOT_PATH, 'lib', SERVICE_WORKER_FILE_NAME);\n\ninterface BrowserServiceWorkerInitOptions {\n publicDirectory: string;\n}\n\nasync function initializeBrowserServiceWorker({ publicDirectory }: BrowserServiceWorkerInitOptions) {\n await fs.promises.mkdir(publicDirectory, { recursive: true });\n\n const destinationPath = path.join(publicDirectory, SERVICE_WORKER_FILE_NAME);\n await fs.promises.copyFile(MOCK_SERVICE_WORKER_PATH, destinationPath);\n\n logger.info(`Service worker script saved to ${color.magenta(destinationPath)}.`);\n}\n\nexport default initializeBrowserServiceWorker;\n","export const PROCESS_EXIT_EVENTS = Object.freeze([\n 'beforeExit',\n 'uncaughtExceptionMonitor',\n 'SIGINT',\n 'SIGTERM',\n 'SIGHUP',\n 'SIGBREAK',\n] as const);\n\nexport type ProcessExitEvent = (typeof PROCESS_EXIT_EVENTS)[number];\n\n// Having an undefined exit code means that the process will already exit with the default exit code.\nexport const PROCESS_EXIT_CODE_BY_EXIT_EVENT: Record<string, number | undefined> = {\n beforeExit: undefined,\n uncaughtExceptionMonitor: undefined,\n SIGINT: 130,\n SIGTERM: 143,\n SIGHUP: 129,\n SIGBREAK: 131,\n} satisfies Record<ProcessExitEvent, number | undefined>;\n","import { spawn, SpawnOptions } from 'child_process';\n\nimport { PROCESS_EXIT_CODE_BY_EXIT_EVENT } from './constants';\n\ninterface CommandErrorOptions {\n command?: string[];\n exitCode?: number;\n signal?: NodeJS.Signals;\n cause?: Error;\n}\n\nexport class CommandError extends Error {\n static readonly DEFAULT_EXIT_CODE = 1;\n\n readonly command: string[];\n readonly exitCode: number;\n readonly signal?: NodeJS.Signals;\n readonly cause?: Error;\n\n constructor(executable: string, options: CommandErrorOptions) {\n const message = CommandError.createMessage(executable, options);\n super(message);\n\n this.name = 'CommandError';\n this.command = options.command ?? [executable];\n this.exitCode = this.getExitCode(options);\n this.signal = options.signal;\n this.cause = options.cause;\n }\n\n private getExitCode(options: CommandErrorOptions): number {\n const existingExitCode = options.exitCode;\n\n const exitCodeInferredFromSignal =\n options.signal === undefined ? undefined : PROCESS_EXIT_CODE_BY_EXIT_EVENT[options.signal];\n\n return existingExitCode ?? exitCodeInferredFromSignal ?? CommandError.DEFAULT_EXIT_CODE;\n }\n\n private static createMessage(command: string, options: CommandErrorOptions) {\n const originalMessage = options.cause?.message;\n const suffix = originalMessage ? `: ${originalMessage}` : '';\n\n if (options.exitCode === undefined && options.signal === undefined) {\n return `Command '${command}' failed${suffix}`;\n }\n\n const prefix = `Command '${command}' exited `;\n const infix = options.exitCode === undefined ? `after signal ${options.signal}` : `with code ${options.exitCode}`;\n\n return `${prefix}${infix}${suffix}`;\n }\n}\n\nasync function runCommand(commandEntry: string, commandArguments: string[], options: SpawnOptions = {}) {\n await new Promise<void>((resolve, reject) => {\n const commandProcess = spawn(commandEntry, commandArguments, { stdio: 'inherit', ...options });\n\n commandProcess.once('error', (error) => {\n const commandError = new CommandError(commandEntry, {\n command: [commandEntry, ...commandArguments],\n cause: error,\n });\n reject(commandError);\n });\n\n commandProcess.once('close', (code, signal) => {\n if (code === 0) {\n resolve();\n return;\n }\n\n const commandError = new CommandError(commandEntry, {\n command: [commandEntry, ...commandArguments],\n exitCode: code ?? undefined,\n signal: signal ?? undefined,\n });\n reject(commandError);\n });\n });\n}\n\nexport default runCommand;\n","import {\n ProcessExitEvent,\n PROCESS_EXIT_EVENTS,\n PROCESS_EXIT_CODE_BY_EXIT_EVENT,\n runCommand,\n CommandError,\n} from '@zimic/utils/process';\nimport color from 'picocolors';\n\nimport { InterceptorServer, createInterceptorServer } from '@/server';\nimport { InterceptorServerOptions } from '@/server/types/options';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerStartOptions extends InterceptorServerOptions {\n ephemeral: boolean;\n onReady?: { command: string; arguments: string[] };\n}\n\nexport let serverSingleton: InterceptorServer | undefined;\n\nasync function startInterceptorServer({\n hostname,\n port,\n logUnhandledRequests,\n tokensDirectory,\n ephemeral,\n onReady,\n}: InterceptorServerStartOptions) {\n const server = createInterceptorServer({\n hostname,\n port,\n logUnhandledRequests,\n tokensDirectory,\n });\n\n async function handleExitEvent(exitEvent: ProcessExitEvent | undefined) {\n await server.stop();\n\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n for (const { exitEvent, exitHandler } of exitHandlerGroups) {\n process.off(exitEvent, exitHandler);\n }\n\n const exitCode = exitEvent ? PROCESS_EXIT_CODE_BY_EXIT_EVENT[exitEvent] : undefined;\n if (exitCode !== undefined) {\n process.exit(exitCode);\n }\n }\n\n const exitHandlerGroups = PROCESS_EXIT_EVENTS.map((exitEvent) => ({\n exitEvent,\n exitHandler: handleExitEvent.bind(null, exitEvent),\n }));\n\n for (const { exitEvent, exitHandler } of exitHandlerGroups) {\n process.on(exitEvent, exitHandler);\n }\n\n serverSingleton = server;\n\n await server.start();\n\n logger.info(\n `${ephemeral ? 'Ephemeral s' : 'S'}erver is running on ${color.yellow(`${server.hostname}:${server.port}`)}`,\n );\n\n const isDangerouslyUnprotected = !tokensDirectory && process.env.NODE_ENV === 'production';\n\n if (isDangerouslyUnprotected) {\n logger.warn(\n [\n `Attention: this interceptor server is ${color.bold(color.red('unprotected'))}. Do not expose it publicly without authentication.`,\n '',\n 'Learn more: https://zimic.dev/docs/interceptor/guides/http/remote-interceptors#interceptor-server-authentication',\n ].join('\\n'),\n );\n }\n\n if (onReady) {\n try {\n await runCommand(onReady.command, onReady.arguments);\n } catch (error) {\n console.error(error);\n\n /* istanbul ignore if -- @preserve\n * A CommandError is always expected here. */\n if (!(error instanceof CommandError)) {\n throw error;\n }\n\n process.exit(error.exitCode);\n }\n }\n\n if (ephemeral) {\n await handleExitEvent(undefined);\n process.exit(0);\n }\n}\n\nexport default startInterceptorServer;\n","import color from 'picocolors';\n\nimport { createInterceptorToken } from '@/server/utils/auth';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerCreateTokenOptions {\n tokenName?: string;\n tokensDirectory: string;\n}\n\nexport async function createInterceptorServerToken({\n tokenName,\n tokensDirectory,\n}: InterceptorServerCreateTokenOptions) {\n const token = await createInterceptorToken({ name: tokenName, tokensDirectory });\n\n logger.info(\n [\n `${color.green(color.bold('✔'))} Token${tokenName ? ` ${color.green(tokenName)}` : ''} created:`,\n '',\n color.yellow(token.value),\n '',\n 'Store this token securely. It cannot be retrieved later.',\n '',\n `To enable authentication in your interceptor server, use the ${color.cyan('--tokens-dir')} option. Only ` +\n 'remote interceptors bearing a valid token will be allowed to connect.',\n '',\n `${color.dim('$')} zimic-interceptor server start ${color.cyan('--tokens-dir')} ${color.magenta(tokensDirectory)}`,\n '',\n 'Learn more: https://zimic.dev/docs/interceptor/guides/http/remote-interceptors#interceptor-server-authentication',\n ].join('\\n'),\n );\n}\n","import { listInterceptorTokens } from '@/server/utils/auth';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerListTokensOptions {\n tokensDirectory: string;\n}\n\nexport async function listInterceptorServerTokens({ tokensDirectory }: InterceptorServerListTokensOptions) {\n const tokens = await listInterceptorTokens({ tokensDirectory });\n\n logger.raw.table(\n [\n { title: 'ID', property: 'id' },\n { title: 'NAME', property: 'name' },\n { title: 'CREATED AT', property: 'createdAt' },\n ],\n tokens.map((token) => ({\n id: token.id,\n name: token.name ?? '',\n createdAt: token.createdAt.toISOString(),\n })),\n );\n}\n","import color from 'picocolors';\n\nimport { readInterceptorTokenFromFile, removeInterceptorToken } from '@/server/utils/auth';\nimport { logger } from '@/utils/logging';\n\ninterface InterceptorServerCreateTokenOptions {\n tokenId: string;\n tokensDirectory: string;\n}\n\nexport async function removeInterceptorServerToken({ tokenId, tokensDirectory }: InterceptorServerCreateTokenOptions) {\n const token = await readInterceptorTokenFromFile(tokenId, { tokensDirectory });\n\n if (!token) {\n logger.error(`${color.red(color.bold('✘'))} Token ${color.red(tokenId)} not found.`);\n process.exit(1);\n }\n\n await removeInterceptorToken(token.id, { tokensDirectory });\n\n logger.info(`${color.green(color.bold('✔'))} Token ${color.green(token.name ?? token.id)} removed.`);\n}\n","import yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nimport { version } from '@@/package.json';\n\nimport { DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY } from '../server/utils/auth';\nimport initializeBrowserServiceWorker from './browser/init';\nimport startInterceptorServer from './server/start';\nimport { createInterceptorServerToken } from './server/token/create';\nimport { listInterceptorServerTokens } from './server/token/list';\nimport { removeInterceptorServerToken } from './server/token/remove';\n\nasync function runCLI() {\n await yargs(hideBin(process.argv))\n .scriptName('zimic-interceptor')\n .version(version)\n .showHelpOnFail(false)\n .strict()\n\n .command('browser', 'Manage your browser mock configuration.', (yargs) =>\n yargs.demandCommand().command(\n 'init <publicDirectory>',\n 'Initialize the browser service worker configuration.',\n (yargs) =>\n yargs.positional('publicDirectory', {\n type: 'string',\n description: 'The path to the public directory of your application.',\n demandOption: true,\n }),\n async (cliArguments) => {\n await initializeBrowserServiceWorker({\n publicDirectory: cliArguments.publicDirectory,\n });\n },\n ),\n )\n\n .command('server', 'Manage interceptor servers.', (yargs) =>\n yargs\n .demandCommand()\n .command(\n 'start [-- onReady]',\n 'Start an interceptor server.',\n (yargs) =>\n yargs\n .positional('onReady', {\n description: 'A command to run when the server is ready to accept connections.',\n type: 'string',\n })\n .option('hostname', {\n type: 'string',\n description: 'The hostname to start the server on.',\n alias: 'h',\n default: 'localhost',\n })\n .option('port', {\n type: 'number',\n description: 'The port to start the server on.',\n alias: 'p',\n })\n .option('ephemeral', {\n type: 'boolean',\n description:\n 'Whether the server should stop automatically after the on-ready command finishes. ' +\n 'If no on-ready command is provided and ephemeral is true, the server will stop immediately after ' +\n 'starting.',\n alias: 'e',\n default: false,\n })\n .option('log-unhandled-requests', {\n type: 'boolean',\n description:\n 'Whether to log a warning when no interceptors were found for the base URL of a request. ' +\n 'If an interceptor was matched, the logging behavior for that base URL is configured in the ' +\n 'interceptor itself.',\n alias: 'l',\n })\n .option('tokens-dir', {\n type: 'string',\n description:\n 'The directory where the authorized interceptor authentication tokens are saved. If provided, only ' +\n 'remote interceptors bearing a valid token will be accepted. This option is essential if you are ' +\n 'exposing your interceptor server publicly. For local development and testing, though, ' +\n '`--tokens-dir` is optional.',\n alias: 't',\n }),\n async (cliArguments) => {\n const onReadyCommand = cliArguments._.at(2)?.toString();\n const onReadyCommandArguments = cliArguments._.slice(3).map((argument) => argument.toString());\n\n await startInterceptorServer({\n hostname: cliArguments.hostname,\n port: cliArguments.port,\n ephemeral: cliArguments.ephemeral,\n logUnhandledRequests: cliArguments.logUnhandledRequests,\n tokensDirectory: cliArguments.tokensDir,\n onReady: onReadyCommand\n ? {\n command: onReadyCommand.toString(),\n arguments: onReadyCommandArguments,\n }\n : undefined,\n });\n },\n )\n\n .command('token', 'Manage remote interceptor authentication tokens.', (yargs) =>\n yargs\n .demandCommand()\n .command(\n 'create',\n 'Create an interceptor token.',\n (yargs) =>\n yargs\n .option('name', {\n type: 'string',\n description: 'The name of the token to create.',\n alias: 'n',\n })\n .option('tokens-dir', {\n type: 'string',\n description: 'The directory where the created interceptor token will be saved.',\n alias: 't',\n default: DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY,\n }),\n async (cliArguments) => {\n await createInterceptorServerToken({\n tokenName: cliArguments.name,\n tokensDirectory: cliArguments.tokensDir,\n });\n },\n )\n\n .command(\n ['ls', 'list'],\n 'List the authorized interceptor tokens.',\n (yargs) =>\n yargs.option('tokens-dir', {\n type: 'string',\n description: 'The directory where the interceptor tokens are saved.',\n alias: 't',\n default: DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY,\n }),\n async (cliArguments) => {\n await listInterceptorServerTokens({\n tokensDirectory: cliArguments.tokensDir,\n });\n },\n )\n\n .command(\n ['rm <tokenId>', 'remove <tokenId>'],\n 'Remove (invalidate) an interceptor token. Existing connections will not be affected, so restarting the ' +\n 'server is recommended to disconnect all interceptors.',\n (yargs) =>\n yargs\n .positional('tokenId', {\n type: 'string',\n description: 'The identifier of the token to remove.',\n demandOption: true,\n })\n .option('tokens-dir', {\n type: 'string',\n description: 'The directory where the interceptor tokens are saved.',\n alias: 't',\n default: DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY,\n }),\n async (cliArguments) => {\n await removeInterceptorServerToken({\n tokenId: cliArguments.tokenId,\n tokensDirectory: cliArguments.tokensDir,\n });\n },\n ),\n ),\n )\n\n .parse();\n}\n\nexport default runCLI;\n","#!/usr/bin/env node\nimport runCLI from './cli';\n\nvoid runCLI();\n"]}
package/dist/http.js CHANGED
@@ -331,9 +331,6 @@ function isServerSide() {
331
331
  function isClientSide() {
332
332
  return typeof window !== "undefined" && typeof document !== "undefined";
333
333
  }
334
- function isGlobalFileAvailable() {
335
- return globalThis.File !== void 0;
336
- }
337
334
 
338
335
  // src/utils/logging.ts
339
336
  var logger = new Logger_default({
@@ -365,7 +362,7 @@ function stringifyValueToLog(value, options = {}) {
365
362
  if (value instanceof http.HttpFormData) {
366
363
  return `FormData ${stringifyValueToLog(value.toObject())}`;
367
364
  }
368
- if (isGlobalFileAvailable() && value instanceof File) {
365
+ if (value instanceof File) {
369
366
  return `File { name: '${value.name}', type: '${value.type}', size: ${value.size} }`;
370
367
  }
371
368
  if (value instanceof Blob) {
@@ -1962,12 +1959,6 @@ var UnsupportedResponseBypassError = class extends Error {
1962
1959
  };
1963
1960
  var UnsupportedResponseBypassError_default = UnsupportedResponseBypassError;
1964
1961
 
1965
- // src/utils/crypto.ts
1966
- var importCrypto = createCachedDynamicImport_default(async () => {
1967
- const globalCrypto = globalThis.crypto;
1968
- return globalCrypto ?? await import('crypto');
1969
- });
1970
-
1971
1962
  // src/utils/fetch.ts
1972
1963
  function deserializeRequest(serializedRequest) {
1973
1964
  const deserializedBody = serializedRequest.body ? convertBase64ToArrayBuffer(serializedRequest.body) : null;
@@ -2247,7 +2238,7 @@ var WebSocketHandler = class {
2247
2238
  const listeners = this.channelListeners[message.channel]?.event ?? /* @__PURE__ */ new Set();
2248
2239
  const listenerPromises = Array.from(listeners, async (listener) => {
2249
2240
  const replyData = await listener(message, socket);
2250
- await this.reply(message, replyData, { sockets: [socket] });
2241
+ this.reply(message, replyData, { sockets: [socket] });
2251
2242
  });
2252
2243
  await Promise.all(listenerPromises);
2253
2244
  }
@@ -2257,8 +2248,7 @@ var WebSocketHandler = class {
2257
2248
  });
2258
2249
  await Promise.all(closingPromises);
2259
2250
  }
2260
- async createEventMessage(channel, eventData) {
2261
- const crypto = await importCrypto();
2251
+ createEventMessage(channel, eventData) {
2262
2252
  const eventMessage = {
2263
2253
  id: crypto.randomUUID(),
2264
2254
  channel,
@@ -2266,12 +2256,12 @@ var WebSocketHandler = class {
2266
2256
  };
2267
2257
  return eventMessage;
2268
2258
  }
2269
- async send(channel, eventData, options = {}) {
2270
- const event = await this.createEventMessage(channel, eventData);
2259
+ send(channel, eventData, options = {}) {
2260
+ const event = this.createEventMessage(channel, eventData);
2271
2261
  this.sendMessage(event, options.sockets);
2272
2262
  }
2273
2263
  async request(channel, requestData, options = {}) {
2274
- const request = await this.createEventMessage(channel, requestData);
2264
+ const request = this.createEventMessage(channel, requestData);
2275
2265
  this.sendMessage(request, options.sockets);
2276
2266
  const response = await this.waitForReply(channel, request, options.sockets);
2277
2267
  return response.data;
@@ -2318,14 +2308,13 @@ var WebSocketHandler = class {
2318
2308
  isReplyMessage(message) {
2319
2309
  return "requestId" in message;
2320
2310
  }
2321
- async reply(request, replyData, options) {
2322
- const reply = await this.createReplyMessage(request, replyData);
2311
+ reply(request, replyData, options) {
2312
+ const reply = this.createReplyMessage(request, replyData);
2323
2313
  if (this.isRunning) {
2324
2314
  this.sendMessage(reply, options.sockets);
2325
2315
  }
2326
2316
  }
2327
- async createReplyMessage(request, replyData) {
2328
- const crypto = await importCrypto();
2317
+ createReplyMessage(request, replyData) {
2329
2318
  const replyMessage = {
2330
2319
  id: crypto.randomUUID(),
2331
2320
  channel: request.channel,
@@ -2509,7 +2498,6 @@ var RemoteHttpInterceptorWorker = class extends HttpInterceptorWorker_default {
2509
2498
  throw new NotRunningHttpInterceptorError_default();
2510
2499
  }
2511
2500
  validatePathParams_default(path);
2512
- const crypto = await importCrypto();
2513
2501
  const handler = {
2514
2502
  id: crypto.randomUUID(),
2515
2503
  baseURL: interceptor.baseURLAsString,
@@ -2913,8 +2901,6 @@ var InvalidJSONError = class extends http.InvalidJSONError {
2913
2901
  * Ignoring because checking unknown platforms is not configured in our test setup. */
2914
2902
  /* istanbul ignore else -- @preserve
2915
2903
  * Since we start the internal worker once and do not stop it, tests may not be able exercise this branch. */
2916
- /* istanbul ignore next -- @preserve
2917
- * Ignoring as Node.js >=20 provides a global crypto and the import fallback won't run. */
2918
2904
  /* istanbul ignore else -- @preserve
2919
2905
  * An unauthorized close event is the only one we expect to happen here. */
2920
2906
  /* istanbul ignore else -- @preserve