@zimic/interceptor 1.1.4 → 1.1.5-canary.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.
- package/dist/{chunk-KIM2YGPM.mjs → chunk-CL2KWDK6.mjs} +2 -2
- package/dist/chunk-CL2KWDK6.mjs.map +1 -0
- package/dist/{chunk-WBOIAXNW.js → chunk-TDULAKH2.js} +2 -2
- package/dist/chunk-TDULAKH2.js.map +1 -0
- package/dist/cli.js +18 -18
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +2 -2
- package/dist/cli.mjs.map +1 -1
- package/dist/http.d.ts +2 -2
- package/dist/http.js +74 -36
- package/dist/http.js.map +1 -1
- package/dist/http.mjs +74 -36
- package/dist/http.mjs.map +1 -1
- package/dist/server.js +6 -6
- package/dist/server.mjs +1 -1
- package/package.json +26 -26
- package/src/http/interceptor/HttpInterceptorClient.ts +52 -19
- package/src/http/requestHandler/HttpRequestHandlerClient.ts +40 -18
- package/src/http/requestHandler/LocalHttpRequestHandler.ts +12 -2
- package/src/http/requestHandler/RemoteHttpRequestHandler.ts +12 -2
- package/src/http/requestHandler/types/restrictions.ts +2 -2
- package/src/utils/http.ts +0 -4
- package/dist/chunk-KIM2YGPM.mjs.map +0 -1
- package/dist/chunk-WBOIAXNW.js.map +0 -1
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","../src/utils/processes.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","createCachedDynamicImport_default","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.1.4\",\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 \"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 run --coverage\",\n \"types:check\": \"tsc --noEmit\",\n \"deps:install-playwright\": \"playwright install chromium\",\n \"deps:init-msw\": \"msw init ./public --no-save\",\n \"deps:prepare\": \"pnpm deps:install-playwright && pnpm deps:init-msw\",\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.12\",\n \"execa\": \"9.6.0\",\n \"isomorphic-ws\": \"5.0.0\",\n \"msw\": \"2.11.1\",\n \"picocolors\": \"^1.1.1\",\n \"ws\": \"8.18.3\",\n \"yargs\": \"18.0.0\",\n \"zod\": \"^4.1.11\"\n },\n \"optionalDependencies\": {\n \"bufferutil\": \"4.0.9\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^24.6.2\",\n \"@types/ws\": \"^8.18.1\",\n \"@types/yargs\": \"^17.0.33\",\n \"@vitest/browser\": \"^3.2.4\",\n \"@vitest/coverage-istanbul\": \"^3.2.4\",\n \"@zimic/eslint-config-node\": \"workspace:*\",\n \"@zimic/lint-staged-config\": \"workspace:*\",\n \"@zimic/tsconfig\": \"workspace:*\",\n \"@zimic/utils\": \"workspace:*\",\n \"dotenv-cli\": \"^10.0.0\",\n \"eslint\": \"^9.37.0\",\n \"playwright\": \"^1.55.1\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^3.2.4\"\n },\n \"peerDependencies\": {\n \"@zimic/http\": \"^1.2.0 || workspace:*\",\n \"typescript\": \">=5.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","import createCachedDynamicImport from '@zimic/utils/import/createCachedDynamicImport';\n\nexport 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\nexport const importExeca = createCachedDynamicImport(() => import('execa'));\n\ninterface CommandErrorOptions {\n command?: string[];\n exitCode?: number;\n signal?: NodeJS.Signals;\n originalMessage?: string;\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\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 }\n\n private getExitCode(options: CommandErrorOptions): number {\n const existingExitCode = options.exitCode;\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 suffix = options.originalMessage ? `: ${options.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\nexport async function runCommand(commandEntry: string, commandArguments: string[]) {\n const { execa: $, ExecaError } = await importExeca();\n\n try {\n await $(commandEntry, commandArguments, { stdio: 'inherit' });\n } catch (error) {\n /* istanbul ignore if -- @preserve\n * This is a safeguard if the error is not an ExecaError. It is not expected to run. */\n if (!(error instanceof ExecaError)) {\n throw error;\n }\n\n const commandError = new CommandError(commandEntry, {\n command: [commandEntry, ...commandArguments],\n exitCode: error.exitCode,\n signal: error.signal,\n originalMessage: error.originalMessage,\n });\n\n throw commandError;\n }\n}\n","import color from 'picocolors';\n\nimport { InterceptorServer, createInterceptorServer } from '@/server';\nimport { InterceptorServerOptions } from '@/server/types/options';\nimport { logger } from '@/utils/logging';\nimport {\n CommandError,\n PROCESS_EXIT_CODE_BY_EXIT_EVENT,\n PROCESS_EXIT_EVENTS,\n ProcessExitEvent,\n runCommand,\n} from '@/utils/processes';\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","../src/utils/processes.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","createCachedDynamicImport_default","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.1.5-canary.2\",\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 \"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 run --coverage\",\n \"types:check\": \"tsc --noEmit\",\n \"deps:install-playwright\": \"playwright install chromium\",\n \"deps:init-msw\": \"msw init ./public --no-save\",\n \"deps:prepare\": \"pnpm deps:install-playwright && pnpm deps:init-msw\",\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.12\",\n \"execa\": \"9.6.0\",\n \"isomorphic-ws\": \"5.0.0\",\n \"msw\": \"2.11.1\",\n \"picocolors\": \"^1.1.1\",\n \"ws\": \"8.18.3\",\n \"yargs\": \"18.0.0\",\n \"zod\": \"^4.1.11\"\n },\n \"optionalDependencies\": {\n \"bufferutil\": \"4.0.9\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^24.6.2\",\n \"@types/ws\": \"^8.18.1\",\n \"@types/yargs\": \"^17.0.33\",\n \"@vitest/browser\": \"^3.2.4\",\n \"@vitest/coverage-istanbul\": \"^3.2.4\",\n \"@zimic/eslint-config-node\": \"workspace:*\",\n \"@zimic/lint-staged-config\": \"workspace:*\",\n \"@zimic/tsconfig\": \"workspace:*\",\n \"@zimic/utils\": \"workspace:*\",\n \"dotenv-cli\": \"^10.0.0\",\n \"eslint\": \"^9.37.0\",\n \"playwright\": \"^1.55.1\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^3.2.4\"\n },\n \"peerDependencies\": {\n \"@zimic/http\": \"^1.2.0 || workspace:*\",\n \"typescript\": \">=5.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","import createCachedDynamicImport from '@zimic/utils/import/createCachedDynamicImport';\n\nexport 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\nexport const importExeca = createCachedDynamicImport(() => import('execa'));\n\ninterface CommandErrorOptions {\n command?: string[];\n exitCode?: number;\n signal?: NodeJS.Signals;\n originalMessage?: string;\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\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 }\n\n private getExitCode(options: CommandErrorOptions): number {\n const existingExitCode = options.exitCode;\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 suffix = options.originalMessage ? `: ${options.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\nexport async function runCommand(commandEntry: string, commandArguments: string[]) {\n const { execa: $, ExecaError } = await importExeca();\n\n try {\n await $(commandEntry, commandArguments, { stdio: 'inherit' });\n } catch (error) {\n /* istanbul ignore if -- @preserve\n * This is a safeguard if the error is not an ExecaError. It is not expected to run. */\n if (!(error instanceof ExecaError)) {\n throw error;\n }\n\n const commandError = new CommandError(commandEntry, {\n command: [commandEntry, ...commandArguments],\n exitCode: error.exitCode,\n signal: error.signal,\n originalMessage: error.originalMessage,\n });\n\n throw commandError;\n }\n}\n","import color from 'picocolors';\n\nimport { InterceptorServer, createInterceptorServer } from '@/server';\nimport { InterceptorServerOptions } from '@/server/types/options';\nimport { logger } from '@/utils/logging';\nimport {\n CommandError,\n PROCESS_EXIT_CODE_BY_EXIT_EVENT,\n PROCESS_EXIT_EVENTS,\n ProcessExitEvent,\n runCommand,\n} from '@/utils/processes';\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 { createCachedDynamicImport_default, DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY, logger, createInterceptorServer, createInterceptorToken, listInterceptorTokens, readInterceptorTokenFromFile, removeInterceptorToken } from './chunk-
|
|
2
|
+
import { createCachedDynamicImport_default, DEFAULT_INTERCEPTOR_TOKENS_DIRECTORY, logger, createInterceptorServer, createInterceptorToken, listInterceptorTokens, readInterceptorTokenFromFile, removeInterceptorToken } from './chunk-CL2KWDK6.mjs';
|
|
3
3
|
import { __require } from './chunk-BJTO5JO5.mjs';
|
|
4
4
|
import yargs from 'yargs';
|
|
5
5
|
import { hideBin } from 'yargs/helpers';
|
|
@@ -8,7 +8,7 @@ import path from 'path';
|
|
|
8
8
|
import color3 from 'picocolors';
|
|
9
9
|
|
|
10
10
|
// package.json
|
|
11
|
-
var version = "1.1.
|
|
11
|
+
var version = "1.1.5-canary.2";
|
|
12
12
|
|
|
13
13
|
// src/cli/browser/shared/constants.ts
|
|
14
14
|
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","../src/utils/processes.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.1.4\",\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 \"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 run --coverage\",\n \"types:check\": \"tsc --noEmit\",\n \"deps:install-playwright\": \"playwright install chromium\",\n \"deps:init-msw\": \"msw init ./public --no-save\",\n \"deps:prepare\": \"pnpm deps:install-playwright && pnpm deps:init-msw\",\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.12\",\n \"execa\": \"9.6.0\",\n \"isomorphic-ws\": \"5.0.0\",\n \"msw\": \"2.11.1\",\n \"picocolors\": \"^1.1.1\",\n \"ws\": \"8.18.3\",\n \"yargs\": \"18.0.0\",\n \"zod\": \"^4.1.11\"\n },\n \"optionalDependencies\": {\n \"bufferutil\": \"4.0.9\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^24.6.2\",\n \"@types/ws\": \"^8.18.1\",\n \"@types/yargs\": \"^17.0.33\",\n \"@vitest/browser\": \"^3.2.4\",\n \"@vitest/coverage-istanbul\": \"^3.2.4\",\n \"@zimic/eslint-config-node\": \"workspace:*\",\n \"@zimic/lint-staged-config\": \"workspace:*\",\n \"@zimic/tsconfig\": \"workspace:*\",\n \"@zimic/utils\": \"workspace:*\",\n \"dotenv-cli\": \"^10.0.0\",\n \"eslint\": \"^9.37.0\",\n \"playwright\": \"^1.55.1\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^3.2.4\"\n },\n \"peerDependencies\": {\n \"@zimic/http\": \"^1.2.0 || workspace:*\",\n \"typescript\": \">=5.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","import createCachedDynamicImport from '@zimic/utils/import/createCachedDynamicImport';\n\nexport 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\nexport const importExeca = createCachedDynamicImport(() => import('execa'));\n\ninterface CommandErrorOptions {\n command?: string[];\n exitCode?: number;\n signal?: NodeJS.Signals;\n originalMessage?: string;\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\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 }\n\n private getExitCode(options: CommandErrorOptions): number {\n const existingExitCode = options.exitCode;\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 suffix = options.originalMessage ? `: ${options.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\nexport async function runCommand(commandEntry: string, commandArguments: string[]) {\n const { execa: $, ExecaError } = await importExeca();\n\n try {\n await $(commandEntry, commandArguments, { stdio: 'inherit' });\n } catch (error) {\n /* istanbul ignore if -- @preserve\n * This is a safeguard if the error is not an ExecaError. It is not expected to run. */\n if (!(error instanceof ExecaError)) {\n throw error;\n }\n\n const commandError = new CommandError(commandEntry, {\n command: [commandEntry, ...commandArguments],\n exitCode: error.exitCode,\n signal: error.signal,\n originalMessage: error.originalMessage,\n });\n\n throw commandError;\n }\n}\n","import color from 'picocolors';\n\nimport { InterceptorServer, createInterceptorServer } from '@/server';\nimport { InterceptorServerOptions } from '@/server/types/options';\nimport { logger } from '@/utils/logging';\nimport {\n CommandError,\n PROCESS_EXIT_CODE_BY_EXIT_EVENT,\n PROCESS_EXIT_EVENTS,\n ProcessExitEvent,\n runCommand,\n} from '@/utils/processes';\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","../src/utils/processes.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.1.5-canary.2\",\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 \"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 run --coverage\",\n \"types:check\": \"tsc --noEmit\",\n \"deps:install-playwright\": \"playwright install chromium\",\n \"deps:init-msw\": \"msw init ./public --no-save\",\n \"deps:prepare\": \"pnpm deps:install-playwright && pnpm deps:init-msw\",\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.12\",\n \"execa\": \"9.6.0\",\n \"isomorphic-ws\": \"5.0.0\",\n \"msw\": \"2.11.1\",\n \"picocolors\": \"^1.1.1\",\n \"ws\": \"8.18.3\",\n \"yargs\": \"18.0.0\",\n \"zod\": \"^4.1.11\"\n },\n \"optionalDependencies\": {\n \"bufferutil\": \"4.0.9\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^24.6.2\",\n \"@types/ws\": \"^8.18.1\",\n \"@types/yargs\": \"^17.0.33\",\n \"@vitest/browser\": \"^3.2.4\",\n \"@vitest/coverage-istanbul\": \"^3.2.4\",\n \"@zimic/eslint-config-node\": \"workspace:*\",\n \"@zimic/lint-staged-config\": \"workspace:*\",\n \"@zimic/tsconfig\": \"workspace:*\",\n \"@zimic/utils\": \"workspace:*\",\n \"dotenv-cli\": \"^10.0.0\",\n \"eslint\": \"^9.37.0\",\n \"playwright\": \"^1.55.1\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^3.2.4\"\n },\n \"peerDependencies\": {\n \"@zimic/http\": \"^1.2.0 || workspace:*\",\n \"typescript\": \">=5.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","import createCachedDynamicImport from '@zimic/utils/import/createCachedDynamicImport';\n\nexport 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\nexport const importExeca = createCachedDynamicImport(() => import('execa'));\n\ninterface CommandErrorOptions {\n command?: string[];\n exitCode?: number;\n signal?: NodeJS.Signals;\n originalMessage?: string;\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\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 }\n\n private getExitCode(options: CommandErrorOptions): number {\n const existingExitCode = options.exitCode;\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 suffix = options.originalMessage ? `: ${options.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\nexport async function runCommand(commandEntry: string, commandArguments: string[]) {\n const { execa: $, ExecaError } = await importExeca();\n\n try {\n await $(commandEntry, commandArguments, { stdio: 'inherit' });\n } catch (error) {\n /* istanbul ignore if -- @preserve\n * This is a safeguard if the error is not an ExecaError. It is not expected to run. */\n if (!(error instanceof ExecaError)) {\n throw error;\n }\n\n const commandError = new CommandError(commandEntry, {\n command: [commandEntry, ...commandArguments],\n exitCode: error.exitCode,\n signal: error.signal,\n originalMessage: error.originalMessage,\n });\n\n throw commandError;\n }\n}\n","import color from 'picocolors';\n\nimport { InterceptorServer, createInterceptorServer } from '@/server';\nimport { InterceptorServerOptions } from '@/server/types/options';\nimport { logger } from '@/utils/logging';\nimport {\n CommandError,\n PROCESS_EXIT_CODE_BY_EXIT_EVENT,\n PROCESS_EXIT_EVENTS,\n ProcessExitEvent,\n runCommand,\n} from '@/utils/processes';\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.d.ts
CHANGED
|
@@ -264,8 +264,8 @@ interface RestrictionDiff<Value> {
|
|
|
264
264
|
}
|
|
265
265
|
interface RestrictionDiffs {
|
|
266
266
|
computed?: RestrictionDiff<boolean>;
|
|
267
|
-
headers?: RestrictionDiff<HttpHeaders
|
|
268
|
-
searchParams?: RestrictionDiff<HttpSearchParams
|
|
267
|
+
headers?: RestrictionDiff<HttpHeaders>;
|
|
268
|
+
searchParams?: RestrictionDiff<HttpSearchParams>;
|
|
269
269
|
body?: RestrictionDiff<unknown>;
|
|
270
270
|
}
|
|
271
271
|
interface UnmatchedHttpInterceptorRequestGroup {
|
package/dist/http.js
CHANGED
|
@@ -641,23 +641,30 @@ var HttpRequestHandlerClient = class {
|
|
|
641
641
|
return this;
|
|
642
642
|
}
|
|
643
643
|
async matchesRequest(request) {
|
|
644
|
-
const
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
this.numberOfMatchedRequests++;
|
|
648
|
-
} else {
|
|
649
|
-
const shouldSaveUnmatchedGroup = this.interceptor.requestSaving.enabled && this.restrictions.length > 0 && this.timesDeclarationPointer !== void 0;
|
|
650
|
-
if (shouldSaveUnmatchedGroup) {
|
|
651
|
-
this.unmatchedRequestGroups.push({ request, diff: restrictionsMatch.diff });
|
|
652
|
-
}
|
|
644
|
+
const restrictionsMatch = await this.matchesRestrictions(request);
|
|
645
|
+
if (!restrictionsMatch.success) {
|
|
646
|
+
return { success: false, cause: "unmatchedRestrictions", diff: restrictionsMatch.diff };
|
|
653
647
|
}
|
|
654
|
-
|
|
655
|
-
|
|
648
|
+
const hasResponseDeclaration = this.createResponseDeclaration !== void 0;
|
|
649
|
+
if (!hasResponseDeclaration) {
|
|
650
|
+
return { success: false, cause: "missingResponseDeclaration" };
|
|
656
651
|
}
|
|
657
|
-
const
|
|
658
|
-
|
|
652
|
+
const canAcceptMoreRequests = this.numberOfMatchedRequests < this.limits.numberOfRequests.max;
|
|
653
|
+
if (!canAcceptMoreRequests) {
|
|
654
|
+
return { success: false, cause: "exceededNumberOfRequests" };
|
|
655
|
+
}
|
|
656
|
+
return { success: true };
|
|
659
657
|
}
|
|
660
|
-
|
|
658
|
+
markRequestAsMatched(_request) {
|
|
659
|
+
this.numberOfMatchedRequests++;
|
|
660
|
+
}
|
|
661
|
+
markRequestAsUnmatched(request, options) {
|
|
662
|
+
const shouldSaveUnmatchedRequests = this.interceptor.requestSaving.enabled && this.restrictions.length > 0 && this.timesDeclarationPointer !== void 0;
|
|
663
|
+
if (shouldSaveUnmatchedRequests) {
|
|
664
|
+
this.unmatchedRequestGroups.push({ request, diff: options.diff });
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
async matchesRestrictions(request) {
|
|
661
668
|
for (const restriction of this.restrictions) {
|
|
662
669
|
if (this.isComputedRequestRestriction(restriction)) {
|
|
663
670
|
const matchesComputedRestriction = await restriction(request);
|
|
@@ -855,8 +862,16 @@ var LocalHttpRequestHandler = class {
|
|
|
855
862
|
get requests() {
|
|
856
863
|
return this.client.requests;
|
|
857
864
|
}
|
|
858
|
-
matchesRequest(request) {
|
|
859
|
-
|
|
865
|
+
async matchesRequest(request) {
|
|
866
|
+
const requestMatch = await this.client.matchesRequest(request);
|
|
867
|
+
if (requestMatch.success) {
|
|
868
|
+
this.client.markRequestAsMatched(request);
|
|
869
|
+
} else if (requestMatch.cause === "unmatchedRestrictions") {
|
|
870
|
+
this.client.markRequestAsUnmatched(request, { diff: requestMatch.diff });
|
|
871
|
+
} else {
|
|
872
|
+
this.client.markRequestAsMatched(request);
|
|
873
|
+
}
|
|
874
|
+
return requestMatch;
|
|
860
875
|
}
|
|
861
876
|
async applyResponseDeclaration(request) {
|
|
862
877
|
return this.client.applyResponseDeclaration(request);
|
|
@@ -1339,8 +1354,16 @@ var RemoteHttpRequestHandler = class {
|
|
|
1339
1354
|
get requests() {
|
|
1340
1355
|
return this.client.requests;
|
|
1341
1356
|
}
|
|
1342
|
-
matchesRequest(request) {
|
|
1343
|
-
|
|
1357
|
+
async matchesRequest(request) {
|
|
1358
|
+
const requestMatch = await this.client.matchesRequest(request);
|
|
1359
|
+
if (requestMatch.success) {
|
|
1360
|
+
this.client.markRequestAsMatched(request);
|
|
1361
|
+
} else if (requestMatch.cause === "unmatchedRestrictions") {
|
|
1362
|
+
this.client.markRequestAsUnmatched(request, { diff: requestMatch.diff });
|
|
1363
|
+
} else {
|
|
1364
|
+
this.client.markRequestAsMatched(request);
|
|
1365
|
+
}
|
|
1366
|
+
return requestMatch;
|
|
1344
1367
|
}
|
|
1345
1368
|
async applyResponseDeclaration(request) {
|
|
1346
1369
|
return this.client.applyResponseDeclaration(request);
|
|
@@ -1384,7 +1407,7 @@ var HttpInterceptorClient = class {
|
|
|
1384
1407
|
onUnhandledRequest;
|
|
1385
1408
|
isRunning = false;
|
|
1386
1409
|
Handler;
|
|
1387
|
-
|
|
1410
|
+
handlers = {
|
|
1388
1411
|
GET: /* @__PURE__ */ new Map(),
|
|
1389
1412
|
POST: /* @__PURE__ */ new Map(),
|
|
1390
1413
|
PATCH: /* @__PURE__ */ new Map(),
|
|
@@ -1505,17 +1528,17 @@ var HttpInterceptorClient = class {
|
|
|
1505
1528
|
return handler;
|
|
1506
1529
|
}
|
|
1507
1530
|
registerRequestHandler(handler) {
|
|
1508
|
-
const
|
|
1509
|
-
const isAlreadyRegistered =
|
|
1531
|
+
const pathHandlers = this.handlers[handler.method].get(handler.path) ?? [];
|
|
1532
|
+
const isAlreadyRegistered = pathHandlers.includes(handler.client);
|
|
1510
1533
|
if (isAlreadyRegistered) {
|
|
1511
1534
|
return;
|
|
1512
1535
|
}
|
|
1513
|
-
|
|
1514
|
-
const isFirstHandlerForMethodPath =
|
|
1536
|
+
pathHandlers.push(handler.client);
|
|
1537
|
+
const isFirstHandlerForMethodPath = pathHandlers.length === 1;
|
|
1515
1538
|
if (!isFirstHandlerForMethodPath) {
|
|
1516
1539
|
return;
|
|
1517
1540
|
}
|
|
1518
|
-
this.
|
|
1541
|
+
this.handlers[handler.method].set(handler.path, pathHandlers);
|
|
1519
1542
|
const pathRegex = createRegexFromPath_default(handler.path);
|
|
1520
1543
|
const registrationResult = this.workerOrThrow.use(this, handler.method, handler.path, async (context) => {
|
|
1521
1544
|
const response = await this.handleInterceptedRequest(
|
|
@@ -1556,21 +1579,36 @@ var HttpInterceptorClient = class {
|
|
|
1556
1579
|
console.warn(error);
|
|
1557
1580
|
}
|
|
1558
1581
|
}
|
|
1559
|
-
async findMatchedHandler(method, path,
|
|
1560
|
-
const
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1582
|
+
async findMatchedHandler(method, path, request) {
|
|
1583
|
+
const pathHandlers = this.handlers[method].get(path) ?? [];
|
|
1584
|
+
const failedRequestMatches = /* @__PURE__ */ new Map();
|
|
1585
|
+
for (let handlerIndex = pathHandlers.length - 1; handlerIndex >= 0; handlerIndex--) {
|
|
1586
|
+
const handler = pathHandlers[handlerIndex];
|
|
1587
|
+
const requestMatch = await handler.matchesRequest(request);
|
|
1588
|
+
if (requestMatch.success) {
|
|
1589
|
+
handler.markRequestAsMatched(request);
|
|
1564
1590
|
return handler;
|
|
1565
1591
|
}
|
|
1592
|
+
failedRequestMatches.set(handler, requestMatch);
|
|
1593
|
+
}
|
|
1594
|
+
for (let handlerIndex = pathHandlers.length - 1; handlerIndex >= 0; handlerIndex--) {
|
|
1595
|
+
const handler = pathHandlers[handlerIndex];
|
|
1596
|
+
const requestMatch = failedRequestMatches.get(handler);
|
|
1597
|
+
if (requestMatch?.cause === "unmatchedRestrictions") {
|
|
1598
|
+
handler.markRequestAsUnmatched(request, { diff: requestMatch.diff });
|
|
1599
|
+
} else {
|
|
1600
|
+
handler.markRequestAsMatched(request);
|
|
1601
|
+
break;
|
|
1602
|
+
}
|
|
1566
1603
|
}
|
|
1567
1604
|
return void 0;
|
|
1568
1605
|
}
|
|
1569
1606
|
checkTimes() {
|
|
1570
1607
|
for (const method of http.HTTP_METHODS) {
|
|
1571
|
-
const
|
|
1572
|
-
for (const handlers of
|
|
1573
|
-
for (
|
|
1608
|
+
const pathHandlers = this.handlers[method];
|
|
1609
|
+
for (const handlers of pathHandlers.values()) {
|
|
1610
|
+
for (let handlerIndex = handlers.length - 1; handlerIndex >= 0; handlerIndex--) {
|
|
1611
|
+
const handler = handlers[handlerIndex];
|
|
1574
1612
|
handler.checkTimes();
|
|
1575
1613
|
}
|
|
1576
1614
|
}
|
|
@@ -1585,17 +1623,17 @@ var HttpInterceptorClient = class {
|
|
|
1585
1623
|
for (const result of newClearResults) {
|
|
1586
1624
|
clearResults.push(Promise.resolve(result));
|
|
1587
1625
|
}
|
|
1588
|
-
const
|
|
1589
|
-
|
|
1626
|
+
const pathHandlers = this.handlers[method];
|
|
1627
|
+
pathHandlers.clear();
|
|
1590
1628
|
}
|
|
1591
1629
|
if (options.onCommitSuccess) {
|
|
1592
1630
|
void Promise.all(clearResults).then(options.onCommitSuccess, options.onCommitError);
|
|
1593
1631
|
}
|
|
1594
1632
|
}
|
|
1595
1633
|
clearMethodHandlers(method) {
|
|
1596
|
-
const
|
|
1634
|
+
const pathHandlers = this.handlers[method];
|
|
1597
1635
|
const clearResults = [];
|
|
1598
|
-
for (const handlers of
|
|
1636
|
+
for (const handlers of pathHandlers.values()) {
|
|
1599
1637
|
for (const handler of handlers) {
|
|
1600
1638
|
clearResults.push(handler.clear());
|
|
1601
1639
|
}
|