@redocly/redoc-reef 0.140.0-next.5 → 0.140.0-next.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/dist/api-schemas/mcp-fetch-count.d.ts +2 -18
  3. package/dist/api-schemas/otel-traces.d.ts +7 -1345
  4. package/dist/api-schemas/otel-traces.js +1 -1
  5. package/dist/api-schemas/search-facets.d.ts +3 -31
  6. package/dist/api-schemas/search.d.ts +6 -52
  7. package/dist/cli/build/index.js +1 -1
  8. package/dist/cli/eject/resolveEjectParams.js +1 -1
  9. package/dist/client/app/markdoc/custom-components/openapi/openapi-code-sample.d.ts +2 -0
  10. package/dist/client/app/markdoc/custom-components/openapi/openapi-code-sample.js +1 -1
  11. package/dist/compiled/@redocly/pii/index.mjs +1 -0
  12. package/dist/compiled/@redocly/pii/package.json +1 -0
  13. package/dist/markdoc/tags/openapi-code-sample.js +1 -1
  14. package/dist/server/api-routes/execute-api-route.js +1 -1
  15. package/dist/server/api-routes/run-api-routes-worker.js +1 -1
  16. package/dist/server/config/env-config.d.ts +24 -24
  17. package/dist/server/config/env-schema.d.ts +83 -326
  18. package/dist/server/config/env-schemas/api-urls.d.ts +2 -14
  19. package/dist/server/config/env-schemas/auth.d.ts +10 -32
  20. package/dist/server/config/env-schemas/catalog.d.ts +6 -9
  21. package/dist/server/config/env-schemas/database.d.ts +2 -8
  22. package/dist/server/config/env-schemas/environment-detection.d.ts +20 -18
  23. package/dist/server/config/env-schemas/feature-flags.d.ts +25 -33
  24. package/dist/server/config/env-schemas/organization-project.d.ts +3 -21
  25. package/dist/server/config/env-schemas/scorecards.d.ts +2 -6
  26. package/dist/server/config/env-schemas/search.d.ts +9 -15
  27. package/dist/server/config/env-schemas/server-config.d.ts +6 -31
  28. package/dist/server/config/env-schemas/site.d.ts +1 -5
  29. package/dist/server/config/env-schemas/ssr.d.ts +7 -12
  30. package/dist/server/config/env-schemas/telemetry.d.ts +1 -7
  31. package/dist/server/esbuild/plugins/themes-resolver.js +3 -3
  32. package/dist/server/external-plugins/resolve-external-plugins.js +1 -1
  33. package/dist/server/node-bundle-entry.js +1 -1
  34. package/dist/server/plugins/api-docs/index.js +1 -1
  35. package/dist/server/plugins/api-docs/spec-download.api.js +1 -1
  36. package/dist/server/plugins/api-docs/store-definition-bundles.d.ts +6 -0
  37. package/dist/server/plugins/api-docs/store-definition-bundles.js +1 -1
  38. package/dist/server/plugins/config-parser/index.js +1 -1
  39. package/dist/server/plugins/config-parser/loaders/utils/read-and-validate-config.js +1 -1
  40. package/dist/server/plugins/markdown/attribute-resolvers/resolve-openapi-code-samples.js +1 -1
  41. package/dist/server/plugins/mcp/codemode/tools/describe-tools.d.ts +1 -1
  42. package/dist/server/plugins/mcp/codemode/tools/describe-tools.js +1 -3
  43. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/get-graphql-type-list.js +1 -1
  44. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/list-graphql-apis.js +1 -1
  45. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/types.d.ts +4 -4
  46. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/list-apis.js +1 -1
  47. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/types.d.ts +2 -2
  48. package/dist/server/plugins/mcp/handlers/docs-mcp-handler.js +1 -1
  49. package/dist/server/plugins/mcp/handlers/handle-mcp-request.js +1 -1
  50. package/dist/server/plugins/mcp/servers/docs-server.js +1 -1
  51. package/dist/server/plugins/mcp/servers/mcp-server.js +2 -2
  52. package/dist/server/plugins/mcp/types.d.ts +10 -0
  53. package/dist/server/plugins/mcp/utils/available-tools.d.ts +5 -0
  54. package/dist/server/plugins/mcp/utils/available-tools.js +1 -0
  55. package/dist/server/plugins/mcp/workers/worker-context.d.ts +4 -0
  56. package/dist/server/plugins/mcp/workers/worker-context.js +1 -0
  57. package/dist/server/plugins/scorecard-classic/template/Grid/GridHeader.js +3 -3
  58. package/dist/server/store-config.d.ts +33 -0
  59. package/dist/server/store-config.js +1 -0
  60. package/dist/server/store.d.ts +10 -15
  61. package/dist/server/store.js +1 -1
  62. package/dist/server/tools/notifiers/formatter.js +3 -3
  63. package/dist/server/types/plugins/api-routes.d.ts +4 -1
  64. package/dist/server/utils/envs/env-boolean-string.d.ts +9 -3
  65. package/dist/server/utils/envs/get-api-route-allowed-env-variables.d.ts +2 -0
  66. package/dist/server/utils/envs/get-api-route-allowed-env-variables.js +1 -1
  67. package/dist/server/utils/envs/interpolate-env-variables.d.ts +5 -1
  68. package/dist/server/utils/envs/interpolate-env-variables.js +1 -1
  69. package/dist/server/utils/envs/replace-env-variables-deep.d.ts +17 -9
  70. package/dist/server/utils/envs/replace-env-variables-deep.js +1 -1
  71. package/dist/server/web-server/middleware/jsonValidatorMiddleware.d.ts +556 -287
  72. package/dist/server/workers/mcp-tool-worker-methods.d.ts +7 -0
  73. package/dist/server/workers/mcp-tool-worker-methods.js +1 -0
  74. package/dist/server/workers/mcp-tool-worker-pool.d.ts +0 -1
  75. package/dist/server/workers/mcp-tool-worker-pool.js +1 -1
  76. package/dist/server/workers/mcp-tool-worker.js +1 -1
  77. package/dist/server/workers/types.d.ts +4 -8
  78. package/dist/server/workers/worker-config.d.ts +33 -0
  79. package/dist/server/workers/worker-config.js +1 -0
  80. package/package.json +8 -8
  81. package/dist/server/plugins/mcp/utils/available-sandbox-tools.d.ts +0 -4
  82. package/dist/server/plugins/mcp/utils/available-sandbox-tools.js +0 -1
  83. package/dist/server/tools/notifiers/helpers/privacy/mask-email.d.ts +0 -25
  84. package/dist/server/tools/notifiers/helpers/privacy/mask-email.js +0 -1
  85. package/dist/server/tools/notifiers/helpers/privacy/mask-subject.d.ts +0 -13
  86. package/dist/server/tools/notifiers/helpers/privacy/mask-subject.js +0 -1
  87. package/dist/server/tools/notifiers/helpers/privacy/remove-pii-from-url.d.ts +0 -25
  88. package/dist/server/tools/notifiers/helpers/privacy/remove-pii-from-url.js +0 -1
  89. package/dist/server/tools/notifiers/helpers/privacy/remove-pii.d.ts +0 -36
  90. package/dist/server/tools/notifiers/helpers/privacy/remove-pii.js +0 -1
@@ -0,0 +1,7 @@
1
+ import type { WorkerParams } from './types.js';
2
+ import { MCP_TOOL_AVAILABILITY_KEY, MCP_TOOL_WORKER_KEY } from './mcp-tool-worker-pool.js';
3
+ export declare const mcpToolWorkerMethods: {
4
+ executeMcpTool: (params: WorkerParams<typeof MCP_TOOL_WORKER_KEY>[0]) => Promise<import("../plugins/mcp/types.js").McpToolWorkerResponse>;
5
+ mcpToolAvailability: (params: WorkerParams<typeof MCP_TOOL_AVAILABILITY_KEY>[0]) => Promise<Record<string, boolean>>;
6
+ };
7
+ //# sourceMappingURL=mcp-tool-worker-methods.d.ts.map
@@ -0,0 +1 @@
1
+ import{executeMcpTool as e,mcpToolAvailability as r}from"../plugins/mcp/workers/execute-mcp-tool.js";import{fromWorkerContext as t}from"../plugins/mcp/workers/worker-context.js";import{MCP_TOOL_AVAILABILITY_KEY as c,MCP_TOOL_WORKER_KEY as m}from"./mcp-tool-worker-pool.js";const T={[m]:o=>e({...o,context:t(o.context)}),[c]:o=>r({...o,context:t(o.context)})};export{T as mcpToolWorkerMethods};
@@ -1,6 +1,5 @@
1
1
  import { WorkerPool } from './worker-pool.js';
2
2
  export declare const MCP_TOOL_WORKER_KEY = "executeMcpTool";
3
- export declare const MCP_TOOL_IS_AVAILABLE_KEY = "isMcpToolAvailable";
4
3
  export declare const MCP_TOOL_AVAILABILITY_KEY = "mcpToolAvailability";
5
4
  export declare const mcpToolWorkers: WorkerPool;
6
5
  //# sourceMappingURL=mcp-tool-worker-pool.d.ts.map
@@ -1 +1 @@
1
- import{getAllowedEnvs as o}from"../utils/envs/get-api-route-allowed-env-variables.js";import{WorkerPool as r}from"./worker-pool.js";const p="executeMcpTool",l="isMcpToolAvailable",c="mcpToolAvailability",e=5,i=new r({workerScript:"./mcp-tool-worker",minWorkers:1,maxWorkers:e,workerType:"process",forkOpts:{stdio:"inherit"},resolveForkEnv:o,lazy:!0,sandbox:!0});export{c as MCP_TOOL_AVAILABILITY_KEY,l as MCP_TOOL_IS_AVAILABLE_KEY,p as MCP_TOOL_WORKER_KEY,i as mcpToolWorkers};
1
+ import{getAllowedEnvs as o}from"../utils/envs/get-api-route-allowed-env-variables.js";import{WorkerPool as r}from"./worker-pool.js";const p="executeMcpTool",c="mcpToolAvailability",e=5,l=new r({workerScript:"./mcp-tool-worker",minWorkers:1,maxWorkers:e,workerType:"process",forkOpts:{stdio:"inherit"},resolveForkEnv:o,lazy:!0,sandbox:!0});export{c as MCP_TOOL_AVAILABILITY_KEY,p as MCP_TOOL_WORKER_KEY,l as mcpToolWorkers};
@@ -1 +1 @@
1
- import o from"workerpool";import{executeMcpTool as r,isMcpToolAvailable as _,mcpToolAvailability as i}from"../plugins/mcp/workers/execute-mcp-tool.js";import{MCP_TOOL_AVAILABILITY_KEY as l,MCP_TOOL_IS_AVAILABLE_KEY as A,MCP_TOOL_WORKER_KEY as m}from"./mcp-tool-worker-pool.js";o.worker({[m]:r,[A]:_,[l]:i});
1
+ import o from"workerpool";import{mcpToolWorkerMethods as r}from"./mcp-tool-worker-methods.js";o.worker(r);
@@ -1,11 +1,11 @@
1
1
  import type { ApiRoutesWorkerParams, ApiRoutesWorkerResponse } from '../types/plugins/api-routes.js';
2
2
  import type { RenderPayload } from '../../types/ssr.js';
3
3
  import type { ScorecardsWorkerParams, ScorecardsWorkerResponse } from '../types/plugins/scorecards.js';
4
- import type { McpToolContext, McpToolExecutionParams, McpToolWorkerResponse } from '../plugins/mcp/types.js';
4
+ import type { McpToolWorkerContext, McpToolWorkerParams, McpToolWorkerResponse } from '../plugins/mcp/types.js';
5
5
  import type { SCORECARDS_WORKER_KEY } from './scorecards-worker-pool.js';
6
6
  import type { API_ROUTES_WORKER_KEY } from './api-routes-worker-pool.js';
7
7
  import type { SSR_WORKER_KEY } from './ssr-worker-pool.js';
8
- import type { MCP_TOOL_AVAILABILITY_KEY, MCP_TOOL_IS_AVAILABLE_KEY, MCP_TOOL_WORKER_KEY } from './mcp-tool-worker-pool.js';
8
+ import type { MCP_TOOL_AVAILABILITY_KEY, MCP_TOOL_WORKER_KEY } from './mcp-tool-worker-pool.js';
9
9
  export type SsrWorkerResponse = {
10
10
  html: string;
11
11
  statusCode: 200 | 500;
@@ -25,17 +25,13 @@ export type WorkerTypeMapping = {
25
25
  response: ScorecardsWorkerResponse;
26
26
  };
27
27
  [MCP_TOOL_WORKER_KEY]: {
28
- params: [McpToolExecutionParams];
28
+ params: [McpToolWorkerParams];
29
29
  response: McpToolWorkerResponse;
30
30
  };
31
- [MCP_TOOL_IS_AVAILABLE_KEY]: {
32
- params: [Omit<McpToolExecutionParams, 'args' | 'extra'>];
33
- response: boolean;
34
- };
35
31
  [MCP_TOOL_AVAILABILITY_KEY]: {
36
32
  params: [{
37
33
  toolNames: string[];
38
- context: McpToolContext;
34
+ context: McpToolWorkerContext;
39
35
  }];
40
36
  response: Record<string, boolean>;
41
37
  };
@@ -0,0 +1,33 @@
1
+ import type { RedoclyConfig } from '@redocly/config';
2
+ type ConfigFileRef = {
3
+ path: string;
4
+ env: Record<string, string>;
5
+ };
6
+ /**
7
+ * The store config file of a build output, and the env values that resolve its placeholders in a
8
+ * worker. `env` has no variable that the worker env excludes: those placeholders stay unresolved.
9
+ * Main process only: `config` is the store config that was loaded from the file.
10
+ */
11
+ export type StoreConfigFile = ConfigFileRef & {
12
+ config: RedoclyConfig;
13
+ };
14
+ /** The config as it crosses to a worker: the config file entries, overridden by `entries`. */
15
+ export type WorkerConfig = {
16
+ file: ConfigFileRef;
17
+ entries: Partial<RedoclyConfig>;
18
+ } | {
19
+ file?: undefined;
20
+ entries: RedoclyConfig;
21
+ };
22
+ /**
23
+ * Sends only the top-level entries of `config` that are not the same values as in the config file.
24
+ * Without a config file (`develop`), sends all of `config`.
25
+ */
26
+ export declare function toWorkerConfig(config: RedoclyConfig, configFile: StoreConfigFile | undefined): WorkerConfig;
27
+ /**
28
+ * Worker side. Returns a config that the call owns: a change to it, at any depth, is not seen by
29
+ * other calls. Throws when the config file cannot be read.
30
+ */
31
+ export declare function readWorkerConfig(workerConfig: WorkerConfig): RedoclyConfig;
32
+ export {};
33
+ //# sourceMappingURL=worker-config.d.ts.map
@@ -0,0 +1 @@
1
+ import{readFileSync as a}from"node:fs";import{MARKDOC_PARTIALS_DATA_KEY as f}from"../constants/common.js";import{resolveStoreConfig as l}from"../store-config.js";let s;function m(n,e){if(!e)return{entries:n};const o=e.config;return{file:{path:e.path,env:e.env},entries:Object.fromEntries(Object.entries(n).filter(([t,r])=>o[t]!==r))}}function j(n){const{file:e,entries:o}=n;if(!e)return o;const t=d(e),r=Object.fromEntries(Object.keys(t).map(i=>[i,()=>structuredClone(t[i])]));return r[f]=()=>u(e)[f],O(r,o)}function d(n){const e=JSON.stringify([n.path,n.env]);if(s?.key!==e){const{[f]:o,...t}=u(n);s={key:e,config:t}}return s.config}function u({path:n,env:e}){let o;try{o=JSON.parse(a(n,"utf8"))}catch(t){throw new Error(`Could not read the store config file "${n}": ${String(t)}`)}return l(o,t=>e[t]).config}function O(n,e){const o={},t=(r,i)=>{Object.defineProperty(o,r,{value:i,writable:!0,enumerable:!0,configurable:!0})};for(const[r,i]of Object.entries(n)){if(Object.hasOwn(e,r)){t(r,e[r]);continue}Object.defineProperty(o,r,{enumerable:!0,configurable:!0,get:()=>{const c=i();return t(r,c),c},set:c=>t(r,c)})}for(const[r,i]of Object.entries(e))Object.hasOwn(o,r)||t(r,i);return o}export{j as readWorkerConfig,m as toWorkerConfig};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/redoc-reef",
3
- "version": "0.140.0-next.5",
3
+ "version": "0.140.0-next.7",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "bin": {
@@ -21,7 +21,7 @@
21
21
  "@jitl/quickjs-singlefile-mjs-release-sync": "0.32.0",
22
22
  "@libsql/client": "0.17.3",
23
23
  "@markdoc/markdoc": "npm:@redocly/markdoc@0.7.0-beta.2",
24
- "@modelcontextprotocol/server": "2.0.0",
24
+ "@modelcontextprotocol/server": "2.3.1",
25
25
  "@opentelemetry/api": "1.9.1",
26
26
  "@opentelemetry/context-zone": "2.0.1",
27
27
  "@opentelemetry/core": "2.8.0",
@@ -33,14 +33,14 @@
33
33
  "@opentelemetry/sdk-trace-web": "2.8.0",
34
34
  "@opentelemetry/semantic-conventions": "1.40.0",
35
35
  "@redocly/ajv": "8.18.0",
36
- "@redocly/api-docs": "0.5.0-next.3",
37
- "@redocly/config": "0.67.0",
36
+ "@redocly/api-docs": "0.5.0-next.5",
37
+ "@redocly/config": "0.69.0",
38
38
  "@redocly/markdoc": "0.7.0-beta.2",
39
- "@redocly/openapi-core": "2.66.0",
39
+ "@redocly/openapi-core": "2.72.1",
40
40
  "@redocly/portal-legacy-ui": "0.19.0",
41
- "@redocly/portal-plugin-mock-server": "0.25.0-next.0",
41
+ "@redocly/portal-plugin-mock-server": "0.25.0-next.2",
42
42
  "@redocly/realm-asyncapi-sdk": "0.17.0",
43
- "@redocly/theme": "0.72.0-next.2",
43
+ "@redocly/theme": "0.72.0-next.4",
44
44
  "@shikijs/transformers": "3.21.0",
45
45
  "@tanstack/react-query": "5.62.3",
46
46
  "@tanstack/react-table": "8.21.3",
@@ -98,7 +98,7 @@
98
98
  "xml-crypto": "6.1.0",
99
99
  "xpath": "0.0.34",
100
100
  "yaml-ast-parser": "0.0.43",
101
- "zod": "^3.25.76"
101
+ "zod": "^4.6.6"
102
102
  },
103
103
  "peerDependencies": {
104
104
  "react": "^19.2.7",
@@ -1,4 +0,0 @@
1
- import type { McpToolSchema } from '../../../types';
2
- import type { McpToolContext } from '../types.js';
3
- export declare function availableSandboxTools(candidates: McpToolSchema[], context: McpToolContext): Promise<McpToolSchema[]>;
4
- //# sourceMappingURL=available-sandbox-tools.d.ts.map
@@ -1 +0,0 @@
1
- import{logger as a}from"../../../tools/notifiers/logger.js";import{mcpToolWorkers as n,MCP_TOOL_AVAILABILITY_KEY as m}from"../../../workers/mcp-tool-worker-pool.js";async function p(t,l){if(t.length===0)return t;const e=t.map(o=>o.name);let r;try{r=await n.exec(m,[{toolNames:e,context:l}],{timeout:1e4})}catch(o){return i(t,o instanceof Error?o.message:String(o))}return!r||typeof r!="object"?i(t,"the worker returned no availability map"):t.filter(o=>r[o.name]!==!1)}function i(t,l){const e=t.filter(r=>r.hasAvailabilityGate);return e.length===0?t:(a.warn(`MCP tool availability is unknown (${l}); the sandbox tool list drops the gated tools: ${e.map(r=>r.name).join(", ")}.`),t.filter(r=>!r.hasAvailabilityGate))}export{p as availableSandboxTools};
@@ -1,25 +0,0 @@
1
- /**
2
- * Masks the username part of an email address for privacy or anonymization.
3
- *
4
- * The function preserves the domain while replacing most characters in the username
5
- * with asterisks (`*`). It keeps the first two characters visible when the username
6
- * is longer than two characters. If the input is invalid or not a string containing
7
- * an `@` symbol, it returns the original value unchanged.
8
- *
9
- * @example
10
- * ```ts
11
- * maskEmail("john.doe@example.com");
12
- * // → "jo******@example.com"
13
- *
14
- * maskEmail("ab@example.com");
15
- * // → "ab@example.com"
16
- *
17
- * maskEmail("a@example.com");
18
- * // → "*@example.com"
19
- * ```
20
- *
21
- * @param email - The email address to mask.
22
- * @returns A masked version of the email, or the original value if invalid.
23
- */
24
- export declare const maskEmail: (email: string) => string;
25
- //# sourceMappingURL=mask-email.d.ts.map
@@ -1 +0,0 @@
1
- const r=e=>{if(!e||typeof e!="string"||!e.includes("@"))return e;const[n,t]=e.split("@");return`${n.length>2?n.slice(0,2)+"*".repeat(n.length-2):"*".repeat(n.length)}@${t}`};export{r as maskEmail};
@@ -1,13 +0,0 @@
1
- /**
2
- * Masks all email addresses found within a given subject string.
3
- *
4
- * This utility searches the input text for any email-like patterns and replaces
5
- * each one using the {@link maskEmail} function, preserving the rest of the string.
6
- * It is typically used to sanitize or anonymize email addresses before logging,
7
- * displaying, or transmitting text content.
8
- *
9
- * @param subject - The text that may contain one or more email addresses.
10
- * @returns A new string with all detected email addresses masked.
11
- */
12
- export declare const maskSubject: (subject: string) => string;
13
- //# sourceMappingURL=mask-subject.d.ts.map
@@ -1 +0,0 @@
1
- import{maskEmail as c}from"./mask-email.js";const r=/[a-zA-Z0-9._%+-]/,m=/^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/,d=e=>{let o="",i=0,a=0;for(;a<e.length;){const n=e.indexOf("@",a);if(n===-1)break;let t=n;for(;t>i&&r.test(e.charAt(t-1));)t--;const s=t<n?m.exec(e.slice(n+1))?.[0]:void 0;if(!s){a=n+1;continue}const l=n+1+s.length;o+=e.slice(i,t)+c(e.slice(t,l)),i=l,a=l}return o+e.slice(i)};export{d as maskSubject};
@@ -1,25 +0,0 @@
1
- /**
2
- * Sanitizes personally identifiable information (PII) found within a URL or query string.
3
- *
4
- * This function scans all query parameter values and removes or masks any PII using
5
- * the {@link removePii} function. It gracefully handles both absolute and relative URLs.
6
- *
7
- * - If the input is not a string, it is returned unchanged.
8
- * - If parsing as a URL fails, the function falls back to applying {@link removePii}
9
- * directly on the raw string.
10
- * - The output preserves the original format (absolute or relative).
11
- *
12
- * @example
13
- * ```ts
14
- * removePiiFromUrl('https://example.com?email=john.doe@example.com&phone=555-123-4567');
15
- * // → 'https://example.com/?email=[email_removed]&phone=[phone_removed]'
16
- *
17
- * removePiiFromUrl('/profile?ssn=123-45-6789');
18
- * // → '/profile?ssn=[SSN_removed]'
19
- * ```
20
- *
21
- * @param url - The input URL string or relative path to sanitize.
22
- * @returns A sanitized URL string with PII masked, or the input value unchanged if not a string.
23
- */
24
- export declare function removePiiFromUrl(url: unknown): unknown;
25
- //# sourceMappingURL=remove-pii-from-url.d.ts.map
@@ -1 +0,0 @@
1
- import{isString as n}from"../../../../../utils/string/is-string.js";import{removePii as e}from"./remove-pii.js";function m(t){if(!n(t))return t;try{const r=new URL(t,"http://example.com");for(const[i,s]of r.searchParams.entries()){const a=String(e(s));r.searchParams.set(i,a)}return t.startsWith("http://")||t.startsWith("https://")?r.toString():r.pathname+r.search+r.hash}catch{return String(e(t))}}export{m as removePiiFromUrl};
@@ -1,36 +0,0 @@
1
- /**
2
- * Implementation of PII sanitization from @coffeeandfun/remove-pii (MIT licensed) without unnecessary methods
3
- */
4
- type PIIConfigOption = {
5
- enabled: false;
6
- replacement?: string;
7
- pattern?: RegExp;
8
- } | {
9
- enabled: true;
10
- replacement: string;
11
- pattern?: RegExp;
12
- };
13
- type PIIConfig = {
14
- [key: string]: PIIConfigOption;
15
- };
16
- /**
17
- * Removes or masks personally identifiable information (PII) from a given text string.
18
- *
19
- * This function identifies and replaces sensitive data such as email addresses,
20
- * phone numbers, credit card numbers, and other personal identifiers with
21
- * configurable placeholder strings. It’s a lightweight implementation inspired by
22
- * `@coffeeandfun/remove-pii` (MIT licensed), keeping only the essential sanitization logic.
23
- *
24
- * By default, all common PII patterns (email, phone, SSN, credit card, address,
25
- * passport number, driver’s license, ZIP code, bank account, and date of birth)
26
- * are detected and replaced. Custom configuration can override or disable any pattern.
27
- *
28
- * Non-string inputs are returned unchanged.
29
- *
30
- * @param text - The input text that may contain personally identifiable information.
31
- * @param options - Optional configuration to enable, disable, or customize PII replacements.
32
- * @returns A sanitized string with PII masked or removed; if the input is not a string, returns it unchanged.
33
- */
34
- export declare function removePii(text: unknown, options?: PIIConfig): unknown;
35
- export {};
36
- //# sourceMappingURL=remove-pii.d.ts.map
@@ -1 +0,0 @@
1
- import{isString as m}from"../../../../../utils/string/is-string.js";const s={email:{pattern:/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,replacement:"[email_removed]"},phone:{pattern:/(?:\+?1[-.\s]?)?\(?([0-9]{3})\)?[-.\s]?([0-9]{3})[-.\s]?([0-9]{4})(?:\s?(?:ext|x|extension)\.?\s?(\d+))?/g,replacement:"[phone_removed]"},ssn:{pattern:/\b(?!000|666|9\d{2})\d{3}-?(?!00)\d{2}-?(?!0000)\d{4}\b/g,replacement:"[SSN_removed]"},creditCard:{pattern:/\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b/g,replacement:"[credit_card_removed]"},address:{pattern:/\b\d+\s[A-Za-z0-9\s,.-]+(?:Street|St|Avenue|Ave|Road|Rd|Boulevard|Blvd|Lane|Ln|Drive|Dr|Court|Ct|Circle|Cir|Way|Place|Pl|Parkway|Pkwy|Terrace|Ter)\b/gi,replacement:"[address_removed]"},passport:{pattern:/\b[A-Z]{2}[0-9]{7}\b/g,replacement:"[passport_number_removed]"},driversLicense:{pattern:/\b[A-Z]{1,2}[0-9]{6,9}\b/g,replacement:"[driver_license_removed]"},zipCode:{pattern:/(?<!\d-)\b\d{5}(?:-\d{4})?\b(?!-\d)/g,replacement:"[zip_code_removed]"},bankAccount:{pattern:/\b\d{8,17}\b/g,replacement:"[bank_account_removed]"},dateOfBirth:{pattern:/\b(?:0[1-9]|1[0-2])[-/](?:0[1-9]|[12][0-9]|3[01])[-/](?:19|20)\d{2}\b/g,replacement:"[date_removed]"}};function l(n={}){const e={email:{enabled:!0,replacement:"[email_removed]"},phone:{enabled:!0,replacement:"[phone_removed]"},ssn:{enabled:!0,replacement:"[SSN_removed]"},creditCard:{enabled:!0,replacement:"[credit_card_removed]"},address:{enabled:!0,replacement:"[address_removed]"},passport:{enabled:!0,replacement:"[passport_number_removed]"},driversLicense:{enabled:!0,replacement:"[driver_license_removed]"},zipCode:{enabled:!0,replacement:"[zip_code_removed]"},bankAccount:{enabled:!0,replacement:"[bank_account_removed]"},dateOfBirth:{enabled:!0,replacement:"[date_removed]"}};for(const[r,t]of Object.entries(n))e[r]?e[r]={...e[r],...t}:e[r]=t;return e}function b(n,e={}){if(!m(n))return n;const r=l(e);let t=n;for(const[c,a]of Object.entries(r)){if(!a.enabled)continue;const d=s[c],o=d?.pattern||a.pattern,p=a.replacement||d?.replacement||"[PII removed]";o&&(t=t.replace(o,p))}return t}export{b as removePii};