@redocly/redoc-reef 0.140.0-next.6 → 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.
- package/CHANGELOG.md +42 -0
- package/dist/api-schemas/mcp-fetch-count.d.ts +2 -18
- package/dist/api-schemas/otel-traces.d.ts +7 -1345
- package/dist/api-schemas/otel-traces.js +1 -1
- package/dist/api-schemas/search-facets.d.ts +3 -31
- package/dist/api-schemas/search.d.ts +6 -52
- package/dist/cli/build/index.js +1 -1
- package/dist/cli/eject/resolveEjectParams.js +1 -1
- package/dist/client/app/markdoc/custom-components/openapi/openapi-code-sample.d.ts +2 -0
- package/dist/client/app/markdoc/custom-components/openapi/openapi-code-sample.js +1 -1
- package/dist/compiled/@redocly/pii/index.mjs +1 -0
- package/dist/compiled/@redocly/pii/package.json +1 -1
- package/dist/markdoc/tags/openapi-code-sample.js +1 -1
- package/dist/server/api-routes/execute-api-route.js +1 -1
- package/dist/server/api-routes/run-api-routes-worker.js +1 -1
- package/dist/server/config/env-config.d.ts +24 -24
- package/dist/server/config/env-schema.d.ts +83 -326
- package/dist/server/config/env-schemas/api-urls.d.ts +2 -14
- package/dist/server/config/env-schemas/auth.d.ts +10 -32
- package/dist/server/config/env-schemas/catalog.d.ts +6 -9
- package/dist/server/config/env-schemas/database.d.ts +2 -8
- package/dist/server/config/env-schemas/environment-detection.d.ts +20 -18
- package/dist/server/config/env-schemas/feature-flags.d.ts +25 -33
- package/dist/server/config/env-schemas/organization-project.d.ts +3 -21
- package/dist/server/config/env-schemas/scorecards.d.ts +2 -6
- package/dist/server/config/env-schemas/search.d.ts +9 -15
- package/dist/server/config/env-schemas/server-config.d.ts +6 -31
- package/dist/server/config/env-schemas/site.d.ts +1 -5
- package/dist/server/config/env-schemas/ssr.d.ts +7 -12
- package/dist/server/config/env-schemas/telemetry.d.ts +1 -7
- package/dist/server/esbuild/plugins/themes-resolver.js +3 -3
- package/dist/server/external-plugins/resolve-external-plugins.js +1 -1
- package/dist/server/node-bundle-entry.js +1 -1
- package/dist/server/plugins/api-docs/index.js +1 -1
- package/dist/server/plugins/api-docs/spec-download.api.js +1 -1
- package/dist/server/plugins/api-docs/store-definition-bundles.d.ts +6 -0
- package/dist/server/plugins/api-docs/store-definition-bundles.js +1 -1
- package/dist/server/plugins/config-parser/index.js +1 -1
- package/dist/server/plugins/markdown/attribute-resolvers/resolve-openapi-code-samples.js +1 -1
- package/dist/server/plugins/mcp/codemode/tools/describe-tools.d.ts +1 -1
- package/dist/server/plugins/mcp/codemode/tools/describe-tools.js +1 -3
- package/dist/server/plugins/mcp/handlers/docs-mcp-handler.js +1 -1
- package/dist/server/plugins/mcp/handlers/handle-mcp-request.js +1 -1
- package/dist/server/plugins/mcp/servers/docs-server.js +1 -1
- package/dist/server/plugins/mcp/servers/mcp-server.js +2 -2
- package/dist/server/plugins/mcp/types.d.ts +10 -0
- package/dist/server/plugins/mcp/utils/available-tools.d.ts +5 -0
- package/dist/server/plugins/mcp/utils/available-tools.js +1 -0
- package/dist/server/plugins/mcp/workers/worker-context.d.ts +4 -0
- package/dist/server/plugins/mcp/workers/worker-context.js +1 -0
- package/dist/server/plugins/scorecard-classic/template/Grid/GridHeader.js +3 -3
- package/dist/server/store-config.d.ts +33 -0
- package/dist/server/store-config.js +1 -0
- package/dist/server/store.d.ts +10 -15
- package/dist/server/store.js +1 -1
- package/dist/server/tools/notifiers/formatter.js +1 -1
- package/dist/server/types/plugins/api-routes.d.ts +4 -1
- package/dist/server/utils/envs/env-boolean-string.d.ts +9 -3
- package/dist/server/utils/envs/get-api-route-allowed-env-variables.d.ts +2 -0
- package/dist/server/utils/envs/get-api-route-allowed-env-variables.js +1 -1
- package/dist/server/utils/envs/interpolate-env-variables.d.ts +5 -1
- package/dist/server/utils/envs/interpolate-env-variables.js +1 -1
- package/dist/server/utils/envs/replace-env-variables-deep.d.ts +17 -9
- package/dist/server/utils/envs/replace-env-variables-deep.js +1 -1
- package/dist/server/web-server/middleware/jsonValidatorMiddleware.d.ts +556 -287
- package/dist/server/workers/mcp-tool-worker-methods.d.ts +7 -0
- package/dist/server/workers/mcp-tool-worker-methods.js +1 -0
- package/dist/server/workers/mcp-tool-worker-pool.d.ts +0 -1
- package/dist/server/workers/mcp-tool-worker-pool.js +1 -1
- package/dist/server/workers/mcp-tool-worker.js +1 -1
- package/dist/server/workers/types.d.ts +4 -8
- package/dist/server/workers/worker-config.d.ts +33 -0
- package/dist/server/workers/worker-config.js +1 -0
- package/package.json +8 -8
- package/dist/compiled/@redocly/pii/index.js +0 -1
- package/dist/server/plugins/mcp/utils/available-sandbox-tools.d.ts +0 -4
- package/dist/server/plugins/mcp/utils/available-sandbox-tools.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{z as r}from"zod";const
|
|
1
|
+
import{z as r}from"zod";const t=r.object({key:r.string(),value:r.record(r.string(),r.unknown())}).passthrough(),a=r.object({name:r.string(),attributes:r.array(t)}).passthrough(),s=r.object({resource:r.object({attributes:r.array(t)}).passthrough(),scopeSpans:r.array(r.object({spans:r.array(a)}).passthrough())}).passthrough(),o=r.object({resourceSpans:r.array(s).optional()}).passthrough();export{o as otelTracesRequestSchema};
|
|
@@ -5,37 +5,9 @@ export declare const searchFacetsRequestSchema: z.ZodObject<{
|
|
|
5
5
|
query: z.ZodOptional<z.ZodString>;
|
|
6
6
|
filter: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
7
7
|
field: z.ZodString;
|
|
8
|
-
values: z.ZodArray<z.ZodString
|
|
8
|
+
values: z.ZodArray<z.ZodString>;
|
|
9
9
|
isQuickFilter: z.ZodOptional<z.ZodBoolean>;
|
|
10
|
-
},
|
|
11
|
-
field: string;
|
|
12
|
-
values: string[];
|
|
13
|
-
isQuickFilter?: boolean | undefined;
|
|
14
|
-
}, {
|
|
15
|
-
field: string;
|
|
16
|
-
values: string[];
|
|
17
|
-
isQuickFilter?: boolean | undefined;
|
|
18
|
-
}>, "many">>;
|
|
10
|
+
}, z.core.$strip>>>;
|
|
19
11
|
facetQuery: z.ZodOptional<z.ZodString>;
|
|
20
|
-
},
|
|
21
|
-
locale: string;
|
|
22
|
-
field?: string | undefined;
|
|
23
|
-
query?: string | undefined;
|
|
24
|
-
filter?: {
|
|
25
|
-
field: string;
|
|
26
|
-
values: string[];
|
|
27
|
-
isQuickFilter?: boolean | undefined;
|
|
28
|
-
}[] | undefined;
|
|
29
|
-
facetQuery?: string | undefined;
|
|
30
|
-
}, {
|
|
31
|
-
locale: string;
|
|
32
|
-
field?: string | undefined;
|
|
33
|
-
query?: string | undefined;
|
|
34
|
-
filter?: {
|
|
35
|
-
field: string;
|
|
36
|
-
values: string[];
|
|
37
|
-
isQuickFilter?: boolean | undefined;
|
|
38
|
-
}[] | undefined;
|
|
39
|
-
facetQuery?: string | undefined;
|
|
40
|
-
}>;
|
|
12
|
+
}, z.core.$strip>;
|
|
41
13
|
//# sourceMappingURL=search-facets.d.ts.map
|
|
@@ -2,66 +2,20 @@ import { z } from 'zod';
|
|
|
2
2
|
export declare const searchFieldNameSchema: z.ZodString;
|
|
3
3
|
export declare const searchFilterItemSchema: z.ZodObject<{
|
|
4
4
|
field: z.ZodString;
|
|
5
|
-
values: z.ZodArray<z.ZodString
|
|
5
|
+
values: z.ZodArray<z.ZodString>;
|
|
6
6
|
isQuickFilter: z.ZodOptional<z.ZodBoolean>;
|
|
7
|
-
},
|
|
8
|
-
field: string;
|
|
9
|
-
values: string[];
|
|
10
|
-
isQuickFilter?: boolean | undefined;
|
|
11
|
-
}, {
|
|
12
|
-
field: string;
|
|
13
|
-
values: string[];
|
|
14
|
-
isQuickFilter?: boolean | undefined;
|
|
15
|
-
}>;
|
|
7
|
+
}, z.core.$strip>;
|
|
16
8
|
export declare const searchRequestSchema: z.ZodObject<{
|
|
17
9
|
query: z.ZodString;
|
|
18
10
|
locale: z.ZodString;
|
|
19
11
|
filter: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
20
12
|
field: z.ZodString;
|
|
21
|
-
values: z.ZodArray<z.ZodString
|
|
13
|
+
values: z.ZodArray<z.ZodString>;
|
|
22
14
|
isQuickFilter: z.ZodOptional<z.ZodBoolean>;
|
|
23
|
-
},
|
|
24
|
-
field: string;
|
|
25
|
-
values: string[];
|
|
26
|
-
isQuickFilter?: boolean | undefined;
|
|
27
|
-
}, {
|
|
28
|
-
field: string;
|
|
29
|
-
values: string[];
|
|
30
|
-
isQuickFilter?: boolean | undefined;
|
|
31
|
-
}>, "many">>;
|
|
15
|
+
}, z.core.$strip>>>;
|
|
32
16
|
loadMore: z.ZodOptional<z.ZodObject<{
|
|
33
17
|
groupKey: z.ZodString;
|
|
34
18
|
offset: z.ZodNumber;
|
|
35
|
-
},
|
|
36
|
-
|
|
37
|
-
offset: number;
|
|
38
|
-
}, {
|
|
39
|
-
groupKey: string;
|
|
40
|
-
offset: number;
|
|
41
|
-
}>>;
|
|
42
|
-
}, "strip", z.ZodTypeAny, {
|
|
43
|
-
query: string;
|
|
44
|
-
locale: string;
|
|
45
|
-
filter?: {
|
|
46
|
-
field: string;
|
|
47
|
-
values: string[];
|
|
48
|
-
isQuickFilter?: boolean | undefined;
|
|
49
|
-
}[] | undefined;
|
|
50
|
-
loadMore?: {
|
|
51
|
-
groupKey: string;
|
|
52
|
-
offset: number;
|
|
53
|
-
} | undefined;
|
|
54
|
-
}, {
|
|
55
|
-
query: string;
|
|
56
|
-
locale: string;
|
|
57
|
-
filter?: {
|
|
58
|
-
field: string;
|
|
59
|
-
values: string[];
|
|
60
|
-
isQuickFilter?: boolean | undefined;
|
|
61
|
-
}[] | undefined;
|
|
62
|
-
loadMore?: {
|
|
63
|
-
groupKey: string;
|
|
64
|
-
offset: number;
|
|
65
|
-
} | undefined;
|
|
66
|
-
}>;
|
|
19
|
+
}, z.core.$strip>>;
|
|
20
|
+
}, z.core.$strip>;
|
|
67
21
|
//# sourceMappingURL=search.d.ts.map
|
package/dist/cli/build/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import v from"node:path";import{unlink as C}from"node:fs/promises";import{PORTAL_VERSION as P}from"../../server/version.js";import{logger as e}from"../../server/tools/notifiers/logger.js";import{reporter as w}from"../../server/tools/notifiers/reporter.js";import{shutdowner as R}from"../../server/tools/shutdowner.js";import{promiseMapLimit as h}from"../../server/utils/async/promise-map-limit.js";import{validateReactPages as A}from"../../server/plugins/pages/validators/validate-react-pages.js";import{initPlugins as E,runPlugins as M,writeClientEntries as D}from"../../server/plugins/lifecycle.js";import{createClientCompiler as j,createNodeBundleCompiler as x}from"../../server/esbuild/esbuild.js";import{validateAllMarkdowns as L}from"../../server/plugins/markdown/compiler.js";import{copyEnvFiles as O}from"./copy-env-files.js";import{EsbuildError as c,esbuildLogger as d}from"../../server/esbuild/esbuild-logger.js";import{reportAllErrors as k}from"../../server/utils/report-all-errors.js";import{writeProblemsReport as z}from"../../server/utils/write-problems-report.js";import{collectAnalytics as J}from"./analytics/collect-analytics.js";import{copyMigrationsFolder as F}from"../../server/providers/database/copy-migrations.js";import{telemetry as s}from"../telemetry/index.js";import{telemetryTraceStep as m}from"../telemetry/helpers/trace-step.js";async function ri(b,i){s.initialize(P),e.info("Starting project build."),i.devLogin=b.devLogin===!0;const y=e.startTiming();await m("com.redocly.build.start",async T=>{D(i);const p=await j(i,i.outdir,"production"),u=await x(i,i.serverOutDir,"production");let o,g;try{await m("com.redocly.build.clientCompilation",async()=>{const l=e.startTiming(),n=await p.rebuild().catch(a=>{throw new c(a)});Array.isArray(n.warnings)&&d(new c({warnings:n.warnings}));const r=e.infoTime(l,"Client JavaScript compiled");r&&s.sendTimingPerformedMessage([{id:"buildStep",object:"timing",uri:"urn:redocly:realm:cli:timing:buildStep",...r}])}),await m("com.redocly.build.serverCompilation",async()=>{const l=e.startTiming(),n=await u.rebuild().catch(a=>{throw new c(a)});Array.isArray(n.warnings)&&d(new c({warnings:n.warnings}));const r=e.infoTime(l,"Server JavaScript compiled");r&&s.sendTimingPerformedMessage([{id:"buildStep",object:"timing",uri:"urn:redocly:realm:cli:timing:buildStep",message:r.message,timeMs:r.timeMs}])}),await i.reloadMarkdocOptions();let t;({pluginInstances:t,lifecycleContext:o}=await E({outdir:i.outdir,serverOutDir:i.serverOutDir,contentDir:i.contentDir,devLogin:i.devLogin,setGlobalConfig:i.setGlobalConfig})),o.fs.dispose(),i.lifecycleContext=o,F(i),await M(t,i,o),g=J(i,o),await m("com.redocly.build.clientServerRecompile",async()=>{const l=e.startTiming();e.info("Re-compiling JavaScript with user code"),(await Promise.all([p.rebuild(),u.rebuild()]).catch(a=>{throw new c(a)})).forEach(({warnings:a})=>{Array.isArray(a)&&d(new c({warnings:a}))});const r=e.infoTime(l,"JavaScript re-compiled");r&&s.sendTimingPerformedMessage([{id:"buildStep",object:"timing",uri:"urn:redocly:realm:cli:timing:buildStep",...r}])}),await m("com.redocly.build.pagesValidation",async()=>{await A(i,o),await L(i,o)}),await k(o),i.markUserCodeReady()}catch(t){T?.error(t),t instanceof c&&await d(t),await w.panic(t instanceof Error?t:String(t))}finally{g&&await g.catch(()=>{}),await p.dispose(),await u.dispose()}w.printErrors(),e.info("Rendering pages..."),await m("com.redocly.build.prepareStaticData",async t=>{const l=e.startTiming(),n=[...i.getAllRoutes(),...i.getAllApiRoutes()];t?.setAttribute("totalRoutes",n.length.toString()),await h(n,15,a=>i.writeRouteStaticData(a,o));const r=e.successTime(l,"Page static data prepared.");r&&s.sendTimingPerformedMessage([{id:"buildStep",object:"timing",uri:"urn:redocly:realm:cli:timing:buildStep",...r}])}),await m("com.redocly.build.storeSerialization",async()=>{const t=e.startTiming();await i.writeServerFiles(),e.successTime(t,"Store serialized and written."),O(i)});const S=e.startTiming();z()&&e.successTime(S,"Broken links written."),await C(v.join(i.serverOutDir,"index.css"));const f=e.successTime(y,"All done");f&&s.sendTimingPerformedMessage([{id:"buildStep",object:"timing",uri:"urn:redocly:realm:cli:timing:buildStep",...f}])}),await R.exitWithCode(0)}export{ri as build};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as c from"path";import{DEFAULT_THEME_NAME as i,USER_THEME_ALIAS as f}from"../../constants/common.js";import{logger as k}from"../../server/tools/notifiers/logger.js";import{reporter as T}from"../../server/tools/notifiers/reporter.js";import{resolveTheme as A}from"./resolveTheme.js";import{EntitlementsProvider as F}from"../../server/entitlements/entitlements-provider.js";const C=["markdoc/attributes/code-walkthrough-filesets.ts","markdoc/attributes/code-walkthrough-filters.ts","markdoc/components/CodeWalkthrough/**","markdoc/tags/code-step.ts","markdoc/tags/code-toggle.ts","markdoc/tags/code-walkthrough.ts"],m=["./core/**","./markdoc/**/default.*","**/__mocks__/**","**/index.*","**/utils/**/*","**/__tests__/**/*","**/__snapshots__/**/*","**/*.stories.*","**/variables.*",...C],v=["./components/CatalogClassic/CatalogClassicCard.*","./components/ColorModeSwitcher/**","./components/ReplayGate/**","./components/ReplaySecuritySchemeActions/**","./components/ReplayTopBarActions/**","./components/Feedback/**","./components/Filter/**","./components/Footer/**","./components/LanguagePicker/**","./components/Menu/**","./components/Navbar/**","./components/PageNavigation/**","./components/Product/**","./components/Search/**","./components/MissingTranslationNotice/**","./components/NavigationTabs/**","./components/UserMenu/**","./layouts/RootLayout.*","./layouts/CustomContexts.*","./layouts/NotFound.*","./layouts/Forbidden.*","./layouts/DocumentationLayoutTop.*","./layouts/DocumentationLayoutBottom.*","./icons/**","./markdoc/**","./ext/**"];async function L(t){const[p,r]=t._,{theme:l,force:u,onSuccess:d,onError:g,onOverride:h,config:
|
|
1
|
+
import*as c from"path";import{DEFAULT_THEME_NAME as i,USER_THEME_ALIAS as f}from"../../constants/common.js";import{logger as k}from"../../server/tools/notifiers/logger.js";import{reporter as T}from"../../server/tools/notifiers/reporter.js";import{resolveTheme as A}from"./resolveTheme.js";import{EntitlementsProvider as F}from"../../server/entitlements/entitlements-provider.js";const C=["markdoc/attributes/code-walkthrough-filesets.ts","markdoc/attributes/code-walkthrough-filters.ts","markdoc/components/CodeWalkthrough/**","markdoc/tags/code-step.ts","markdoc/tags/code-toggle.ts","markdoc/tags/code-walkthrough.ts"],m=["./core/**","./markdoc/**/default.*","**/__mocks__/**","**/index.*","**/utils/**/*","**/__tests__/**/*","**/__snapshots__/**/*","**/*.stories.*","**/variables.*",...C],v=["./components/CatalogClassic/CatalogClassicCard.*","./components/ColorModeSwitcher/**","./components/ReplayGate/**","./components/ReplaySecuritySchemeActions/**","./components/ReplayTopBarActions/**","./components/Feedback/**","./components/Filter/**","./components/Footer/**","./components/LanguagePicker/**","./components/Menu/**","./components/Navbar/**","./components/PageNavigation/**","./components/Product/**","./components/Search/**","./components/MissingTranslationNotice/**","./components/NavigationTabs/**","./components/UserMenu/**","./layouts/RootLayout.*","./layouts/CustomContexts.*","./layouts/NotFound.*","./layouts/Forbidden.*","./layouts/McpNotAllowed.*","./layouts/DocumentationLayoutTop.*","./layouts/DocumentationLayoutBottom.*","./icons/**","./markdoc/**","./ext/**"];async function L(t){const[p,r]=t._,{theme:l,force:u,onSuccess:d,onError:g,onOverride:h,config:y}=t,E=F.instance(),s=c.resolve(t["project-dir"]);let o=l;o||(o=i);const n=await A(s,y.plugins||[],o,r);n||await T.panicOnContentError(`Theme ${o} not found. Skipping eject.`);const e=n?.config.ejectIgnore;e&&!Array.isArray(e)&&k.warn("'ejectIgnore' must be of type Array. Skipping.");const a=await E.getPackageEjectIgnore(),_={force:u,onSuccess:d,onError:g,onOverride:h,onlyFiles:o===i?v:void 0,ignoreFiles:Array.isArray(e)?[...e,...a,...m]:[...a,...m]};return{objectType:p,pathToThemeFolder:n?.pluginDirAbsolutePath,pathToPortalCustomThemeFolder:c.resolve(s,f),componentToEject:r,theme:o,options:_}}export{m as DEFAULT_IGNORED_FILES,v as EJECTABLE_FILES,L as default};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import type { OpenAPIParameterLocation } from '@redocly/api-docs';
|
|
3
|
+
import type { RedocConfig } from '@redocly/config';
|
|
3
4
|
type OpenApiCodeSampleProps = {
|
|
4
5
|
descriptionFile?: string;
|
|
5
6
|
operationId?: string;
|
|
@@ -9,6 +10,7 @@ type OpenApiCodeSampleProps = {
|
|
|
9
10
|
language?: string;
|
|
10
11
|
parameters?: Record<OpenAPIParameterLocation, object>;
|
|
11
12
|
requestBody?: any;
|
|
13
|
+
options?: Partial<RedocConfig>;
|
|
12
14
|
environment?: string;
|
|
13
15
|
environments?: Record<string, Record<string, string>>;
|
|
14
16
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as
|
|
1
|
+
import*as o from"react";import{MarkdownAdapterProvider as h,StoreProvider as E,RedocCodeSample as A,appendUndeclaredConfigureParameters as C,excludeMockServers as m,markdocParser as M}from"@redocly/api-docs";import{ErrorMessage as q,OpenApiComponentWrap as w}from"../styled.elements";import{useStore as x}from"../../hooks/use-store";import{findCodeSamplePanel as I}from"../../utils/find-code-sample-panel.js";import{usePortalMarkdownAdapter as O}from"./use-markdown-adapter";function N(d){const{descriptionFile:c,operationId:s,pointer:p,exampleKey:l,mimeType:u,language:n,requestBody:f,parameters:e,options:a,environment:v,environments:y}=d,{store:r,error:S}=x(c),g=O(),k=o.useMemo(()=>({specType:"openapi",...r?.options,...a,codeSamples:{...r?.options?.codeSamples,...a?.codeSamples,...n&&{languages:[{lang:n}]}},markdownParser:M}),[n,a,r?.options]),i=o.useMemo(()=>{if(!r?.items?.length)return;const t=I(r.items,{pointer:p,sourceId:s});if(!t)return;const P=C({...t.source,servers:m(t.source.servers)},{...e?.path&&{path:e.path},...e?.query&&{query:e.query},...e?.header&&{headers:e.header},...e?.cookie&&{cookie:e.cookie}});return{...t,...t.servers&&{servers:m(t.servers)},source:P}},[r?.items,p,s,e]);return r?i?o.createElement(w,{"data-testid":"openapi-code-sample"},o.createElement(E,{options:k,apiStore:r.store},o.createElement(h,{value:g},o.createElement(A,{node:i,mimeType:u,exampleKey:l,requestBody:f,parameters:e,environment:v,environments:y})))):o.createElement("pre",{style:{color:"red"}},"Cannot find OpenAPI operation (use pointer or operationId)"):o.createElement(q,null,S)}export{N as OpenApiCodeSample};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var o=e=>{if(!e||typeof e!="string"||!e.includes("@"))return e;let[r="",t]=e.split("@");return`${r.length>2?r.slice(0,2)+"*".repeat(r.length-2):"*".repeat(r.length)}@${t}`},m=/[a-zA-Z0-9._%+-]/,b=/^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/,v=e=>{var r;let t="",a=0,l=0;for(;l<e.length;){let n=e.indexOf("@",l);if(n===-1)break;let d=n;for(;d>a&&m.test(e.charAt(d-1));)d--;let s=d<n?(r=b.exec(e.slice(n+1)))===null||r===void 0?void 0:r[0]:void 0;if(!s){l=n+1;continue}let c=n+1+s.length;t+=e.slice(a,d)+o(e.slice(d,c)),a=c,l=c}return t+e.slice(a)},_={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 p(e){return typeof e=="string"}function u(e={}){let r={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(let[t,a]of Object.entries(e))r[t]?r[t]=Object.assign(Object.assign({},r[t]),a):r[t]=a;return r}function i(e,r={}){if(!p(e))return e;let t=u(r),a=e;for(let[l,n]of Object.entries(t)){if(!n.enabled)continue;let d=_[l],s=d?.pattern||n.pattern,c=n.replacement||d?.replacement||"[PII removed]";s&&(a=a.replace(s,c))}return a}function f(e){if(!p(e))return e;try{let r=new URL(e,"http://example.com");for(let[t,a]of r.searchParams.entries()){let l=String(i(a));r.searchParams.set(t,l)}return e.startsWith("http://")||e.startsWith("https://")?r.toString():r.pathname+r.search+r.hash}catch{return String(i(e))}}export{o as maskEmail,v as maskSubject,i as removePii,f as removePiiFromUrl};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@redocly/pii","main":"index.
|
|
1
|
+
{"name":"@redocly/pii","main":"index.mjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{DefinitionPath as a}from"../attributes/index.js";import{getNodeAttribute as o}from"../helpers/get-node-attribute.js";import{getResolvedSampleCodeBlock as p}from"../helpers/get-resolved-sample-code-block.js";const u={schema:{attributes:{descriptionFile:{type:a,required:!0},pointer:{type:String,required:!1},operationId:{type:String,required:!1},exampleKey:{type:String,required:!1},mimeType:{type:String,required:!1},language:{type:String,required:!1},parameters:{type:Object,default:{},required:!1},requestBody:{type:Object,required:!1},environments:{type:Object,default:{},required:!1},environment:{type:String,required:!1},codeSamplesResolved:{type:Array,required:!1,resolver:"openapiCodeSamples"}},validate(r){const e=[];return r.attributes.pointer&&r.attributes.operationId&&e.push({id:"pointer-and-operationId-attributes-are-mutually-exclusive",level:"error",message:'The "pointer" and "operationId" attributes are mutually exclusive, you can only use one.'}),!r.attributes.pointer&&!r.attributes.operationId&&e.push({id:"pointer-or-operationId-attribute-required",level:"error",message:'This tag requires the "pointer" or "operationId" attribute to render correctly.'}),e},render:"OpenApiCodeSample",selfClosing:!0,dynamicComponentLib:"openapi",renderForLlms(r){const e=o(r,"codeSamplesResolved");if(!Array.isArray(e)||e.length===0)return"";const t=e.find(({lang:i})=>i==="shell")??e[0];return p(t)}},tagName:"openapi-code-sample"};export{u as openApiCodeSample};
|
|
1
|
+
import{DefinitionPath as a}from"../attributes/index.js";import{getNodeAttribute as o}from"../helpers/get-node-attribute.js";import{getResolvedSampleCodeBlock as p}from"../helpers/get-resolved-sample-code-block.js";const u={schema:{attributes:{descriptionFile:{type:a,required:!0},pointer:{type:String,required:!1},operationId:{type:String,required:!1},exampleKey:{type:String,required:!1},mimeType:{type:String,required:!1},language:{type:String,required:!1},parameters:{type:Object,default:{},required:!1},requestBody:{type:Object,required:!1},options:{type:Object,default:{},required:!1},environments:{type:Object,default:{},required:!1},environment:{type:String,required:!1},codeSamplesResolved:{type:Array,required:!1,resolver:"openapiCodeSamples"}},validate(r){const e=[];return r.attributes.pointer&&r.attributes.operationId&&e.push({id:"pointer-and-operationId-attributes-are-mutually-exclusive",level:"error",message:'The "pointer" and "operationId" attributes are mutually exclusive, you can only use one.'}),!r.attributes.pointer&&!r.attributes.operationId&&e.push({id:"pointer-or-operationId-attribute-required",level:"error",message:'This tag requires the "pointer" or "operationId" attribute to render correctly.'}),e},render:"OpenApiCodeSample",selfClosing:!0,dynamicComponentLib:"openapi",renderForLlms(r){const e=o(r,"codeSamplesResolved");if(!Array.isArray(e)||e.length===0)return"";const t=e.find(({lang:i})=>i==="shell")??e[0];return p(t)}},tagName:"openapi-code-sample"};export{u as openApiCodeSample};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Hono as l}from"hono";import{TrieRouter as f}from"hono/router/trie-router";import{Logger as d}from"../tools/notifiers/logger.js";import{envConfig as a}from"../config/env-config.js";import{importApiRoutesHandler as
|
|
1
|
+
import{Hono as l}from"hono";import{TrieRouter as f}from"hono/router/trie-router";import{Logger as d}from"../tools/notifiers/logger.js";import{envConfig as a}from"../config/env-config.js";import{importApiRoutesHandler as g}from"./import-api-routes-handlers.js";import{getBodyWithSizeCheck as m}from"./helpers/get-body-with-size-check.js";import{setupLogger as D}from"./helpers/setup-logger.js";import{telemetry as c}from"../telemetry/index.js";import{KvService as w}from"../persistence/kv/services/kv-service.js";import{enhanceContext as R,enhanceMockServerContext as p}from"./helpers/enhance-context.js";import{isMockServerRoute as q}from"./helpers/is-mock-server.js";import{readWorkerConfig as h}from"../workers/worker-config.js";const u=new d,v=8e3,A=100;async function W(e){c.initialize(),D(u,e.requestHandlerId);const n=await H(e),r=await x(e,n).request(e.req.url,e.req),t=await m(r,e.maxResponseSizeMB);return{status:r.status,headers:Object.fromEntries(r.headers.entries()),body:t}}async function H(e){return(await(await b(e))()).default}function x(e,n){const o=new l({router:new f}),r=y(e.requestHandlerId);return o.all(e.slug,async t=>{if(typeof n!="function")return M(e,t);const s=r({honoCtx:t,ctx:{...e.ctxData,config:h(e.ctxData.config)},telemetry:c,getKv:()=>E(e),slug:e.slug}),i=await n(t.req.raw,s,e.staticData);return i instanceof Response?i:typeof i=="string"?t.text(i):t.json(i)}),o.onError((t,s)=>{if(u.error(`[${e.requestHandlerId}] ${t.message} ${t.stack}`),t instanceof SyntaxError)return s.text(t.message,500);throw t}),o}function y(e){return q(e)?p:R}function E(e){return w.getInstance({baseDbDir:e.serverOutDir,sqldRemoteDatabaseUrl:e.sqldRemoteDatabaseUrl,sqldRemoteDatabaseAuthToken:e.sqldRemoteDatabaseAuthToken})}function M(e,n){const o=`API function "${e.slug}" does not export a default function. Add 'export default function (request, context) { ... }' to the file.`;return u.error(`[${e.requestHandlerId}] ${o}`),a.isDevelopMode?n.text(o,500):n.newResponse(null,404)}async function b(e){const n=Date.now()+(a.isDevelopMode?v:0);let o;for(;;){try{const{requestHandlers:r}=await g(e.serverOutDir),t=r?.[e.requestHandlerId];if(typeof t=="function")return t;o=new Error(`Request handler "${e.requestHandlerId}" is not available yet.`)}catch(r){o=r}if(Date.now()>=n)throw o;await new Promise(r=>setTimeout(r,A))}}export{W as executeApiRoute};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as p from"workerpool";import{withPathPrefix as
|
|
1
|
+
import*as p from"workerpool";import{withPathPrefix as f}from"@redocly/theme/core/utils";import{envConfig as u}from"../config/env-config.js";import{telemetry as a}from"../telemetry/index.js";import{TimeoutExceededError as g}from"./errors/timeout-exceeded.js";import{serializeRequest as E}from"./helpers/serialize-request.js";import{apiRoutesWorkers as A,API_ROUTES_WORKER_KEY as T}from"../workers/api-routes-worker-pool.js";import{API_FUNCTIONS_REQUEST_HANDLER_ID as m}from"../plugins/api-functions/index.js";import{toWorkerConfig as h}from"../workers/worker-config.js";const S=1e4,R=15;async function U(e,r,i){a.initialize();const o=r.get("auth"),s=await i.resolveRouteStaticData(e)||{},n=f(e.slug);try{const{status:t,headers:l,body:c}=await A.exec(T,[{serverOutDir:i.serverOutDir,slug:n,requestHandlerId:e.requestHandlerId,maxResponseSizeMB:R,ctxData:{user:{teams:o.teams,email:o.claims.email,claims:o.claims,idpAccessToken:o.idpAccessToken,idpId:o.claims.idpId,isAuthenticated:o.isAuthenticated},config:h(i.config,i.configFile),outdir:i.outdir,baseUrl:new URL(r.req.url).origin},staticData:{...s,props:{...s.props,routeSlug:n,outdir:i.outdir}},req:await E(r.req.raw),sqldRemoteDatabaseUrl:u.SQLD_REMOTE_DATABASE_URL,sqldRemoteDatabaseAuthToken:u.SQLD_REMOTE_DATABASE_AUTH_TOKEN}],{timeout:S});_({requestHandlerId:e.requestHandlerId,status:t,ctx:r});const d=c.data?Buffer.from(c.data):null;return new Response(d,{status:t,headers:l})}catch(t){throw M({requestHandlerId:e.requestHandlerId,error:t}),t instanceof p.Promise.TimeoutError?new g("Timeout exceeded"):t}}function _({requestHandlerId:e,status:r,ctx:i}){e.startsWith(m)?a.sendApiFunctionCalledMessage([{id:"apiFunctionId",object:"apiFunction",uri:"urn:redocly:realm:api:apiFunction:apiFunctionId",handler:e,status:r,message:null}]):a.sendMockServerCalledMessage([{id:e,object:"mockServer",uri:`urn:redocly:realm:api:mockServer:${e}`,error:null,handler:e,headers:{"user-agent":i.req.header("user-agent")??null},status:r}])}function M({requestHandlerId:e,error:r}){e.startsWith(m)?a.sendApiFunctionErrorMessage([{id:"apiFunctionId",object:"apiFunction",uri:"urn:redocly:realm:api:apiFunction:apiFunctionId",status:500,handler:e,message:r.message}]):a.sendMockServerErrorMessage([{id:e,object:"mockServer",uri:`urn:redocly:realm:api:mockServer:${e}`,handler:e,message:r.message}])}export{U as runApiRoutesWorker,M as sendTelemetryErrorMessage};
|
|
@@ -4,8 +4,8 @@ declare function loadEnvConfig(): {
|
|
|
4
4
|
NODE_ENV?: "development" | "production" | undefined;
|
|
5
5
|
REDOCLY_ENV: "development" | "preview" | "production";
|
|
6
6
|
REDOCLY_EXECUTION_MODE: "build" | "develop" | "runtime";
|
|
7
|
-
REDOCLY_INTERNAL_DEV
|
|
8
|
-
CI
|
|
7
|
+
REDOCLY_INTERNAL_DEV: boolean | undefined;
|
|
8
|
+
CI: boolean | undefined;
|
|
9
9
|
PORT?: number | undefined;
|
|
10
10
|
REDOCLY_LOG_FORMAT?: string | undefined;
|
|
11
11
|
REDOCLY_LOG_LEVEL?: string | undefined;
|
|
@@ -15,7 +15,7 @@ declare function loadEnvConfig(): {
|
|
|
15
15
|
REDOCLY_CONTENT_DIR?: string | undefined;
|
|
16
16
|
REDOCLY_PORTAL_VERSION?: string | undefined;
|
|
17
17
|
REDOCLY_TELEMETRY?: string | undefined;
|
|
18
|
-
TELEMETRY_DEV_DEBUG
|
|
18
|
+
TELEMETRY_DEV_DEBUG: boolean | undefined;
|
|
19
19
|
WEB_SERVER_IDLE_TIMEOUT?: string | undefined;
|
|
20
20
|
REDOCLY_PROBLEMS_OUTPUT_FILE?: string | undefined;
|
|
21
21
|
REDOCLY_METADATA_OUTPUT_FOLDER?: string | undefined;
|
|
@@ -36,23 +36,23 @@ declare function loadEnvConfig(): {
|
|
|
36
36
|
OIDC_CLIENT_ID?: string | undefined;
|
|
37
37
|
OIDC_CLIENT_SECRET?: string | undefined;
|
|
38
38
|
OIDC_ISSUER_URL?: string | undefined;
|
|
39
|
-
LOCALHOST_LOGIN
|
|
39
|
+
LOCALHOST_LOGIN: boolean | undefined;
|
|
40
40
|
REDOCLY_OAUTH_USE_INTROSPECT?: string | undefined;
|
|
41
|
-
REDOCLY_ENFORCE_LOGIN
|
|
41
|
+
REDOCLY_ENFORCE_LOGIN: boolean | undefined;
|
|
42
42
|
REDOCLY_ENFORCE_RESIDENCY?: string | undefined;
|
|
43
43
|
REDOCLY_SSR_RENDER_MODE?: "main" | "worker" | undefined;
|
|
44
44
|
REDOCLY_SSR_WORKERS_MIN?: number | undefined;
|
|
45
45
|
REDOCLY_SSR_WORKERS_MAX?: number | undefined;
|
|
46
|
-
NEW_CATALOG_ENABLED
|
|
47
|
-
NEW_SCORECARDS_ENABLED
|
|
46
|
+
NEW_CATALOG_ENABLED: boolean | undefined;
|
|
47
|
+
NEW_SCORECARDS_ENABLED: boolean | undefined;
|
|
48
48
|
ENABLE_COMMENTS?: string | undefined;
|
|
49
|
-
REDOCLY_EXP_DISABLE_MD_VALIDATION
|
|
50
|
-
ENABLE_SOURCE_MAPS
|
|
49
|
+
REDOCLY_EXP_DISABLE_MD_VALIDATION: boolean | undefined;
|
|
50
|
+
ENABLE_SOURCE_MAPS: boolean | undefined;
|
|
51
51
|
PLAN_GATES?: string | undefined;
|
|
52
|
-
REDOCLY_EXP_LLMSTXT_AGENT_FEEDBACK_ENABLED
|
|
52
|
+
REDOCLY_EXP_LLMSTXT_AGENT_FEEDBACK_ENABLED: boolean | undefined;
|
|
53
53
|
REDOCLY_EXP_LLMSTXT_AGENT_FEEDBACK_URL?: string | undefined;
|
|
54
54
|
REDOCLY_EXP_LLMSTXT_AGENT_ENDPOINT?: string | undefined;
|
|
55
|
-
REDOCLY_EXP_REPLAY_GRAPHQL_ENABLED
|
|
55
|
+
REDOCLY_EXP_REPLAY_GRAPHQL_ENABLED: boolean | undefined;
|
|
56
56
|
SEARCH_DEV_REINIT?: string | undefined;
|
|
57
57
|
SEARCH_DEV_DEBUG: boolean;
|
|
58
58
|
REDOCLY_SKIP_TYPESENSE_INDEXING: boolean;
|
|
@@ -65,7 +65,7 @@ declare function loadEnvConfig(): {
|
|
|
65
65
|
REDOCLY_CORS_ORIGINS?: string | undefined;
|
|
66
66
|
SQLD_REMOTE_DATABASE_URL?: string | undefined;
|
|
67
67
|
SQLD_REMOTE_DATABASE_AUTH_TOKEN?: string | undefined;
|
|
68
|
-
FORCE_CATALOG_CACHE_REVALIDATE
|
|
68
|
+
FORCE_CATALOG_CACHE_REVALIDATE: boolean | undefined;
|
|
69
69
|
CATALOG_MAX_REVISIONS?: number | undefined;
|
|
70
70
|
SCORECARDS_POLLING_INTERVAL_MS?: string | undefined;
|
|
71
71
|
OTEL_TRACES_URL?: string | undefined;
|
|
@@ -85,8 +85,8 @@ export declare const envConfig: {
|
|
|
85
85
|
NODE_ENV?: "development" | "production" | undefined;
|
|
86
86
|
REDOCLY_ENV: "development" | "preview" | "production";
|
|
87
87
|
REDOCLY_EXECUTION_MODE: "build" | "develop" | "runtime";
|
|
88
|
-
REDOCLY_INTERNAL_DEV
|
|
89
|
-
CI
|
|
88
|
+
REDOCLY_INTERNAL_DEV: boolean | undefined;
|
|
89
|
+
CI: boolean | undefined;
|
|
90
90
|
PORT?: number | undefined;
|
|
91
91
|
REDOCLY_LOG_FORMAT?: string | undefined;
|
|
92
92
|
REDOCLY_LOG_LEVEL?: string | undefined;
|
|
@@ -96,7 +96,7 @@ export declare const envConfig: {
|
|
|
96
96
|
REDOCLY_CONTENT_DIR?: string | undefined;
|
|
97
97
|
REDOCLY_PORTAL_VERSION?: string | undefined;
|
|
98
98
|
REDOCLY_TELEMETRY?: string | undefined;
|
|
99
|
-
TELEMETRY_DEV_DEBUG
|
|
99
|
+
TELEMETRY_DEV_DEBUG: boolean | undefined;
|
|
100
100
|
WEB_SERVER_IDLE_TIMEOUT?: string | undefined;
|
|
101
101
|
REDOCLY_PROBLEMS_OUTPUT_FILE?: string | undefined;
|
|
102
102
|
REDOCLY_METADATA_OUTPUT_FOLDER?: string | undefined;
|
|
@@ -117,23 +117,23 @@ export declare const envConfig: {
|
|
|
117
117
|
OIDC_CLIENT_ID?: string | undefined;
|
|
118
118
|
OIDC_CLIENT_SECRET?: string | undefined;
|
|
119
119
|
OIDC_ISSUER_URL?: string | undefined;
|
|
120
|
-
LOCALHOST_LOGIN
|
|
120
|
+
LOCALHOST_LOGIN: boolean | undefined;
|
|
121
121
|
REDOCLY_OAUTH_USE_INTROSPECT?: string | undefined;
|
|
122
|
-
REDOCLY_ENFORCE_LOGIN
|
|
122
|
+
REDOCLY_ENFORCE_LOGIN: boolean | undefined;
|
|
123
123
|
REDOCLY_ENFORCE_RESIDENCY?: string | undefined;
|
|
124
124
|
REDOCLY_SSR_RENDER_MODE?: "main" | "worker" | undefined;
|
|
125
125
|
REDOCLY_SSR_WORKERS_MIN?: number | undefined;
|
|
126
126
|
REDOCLY_SSR_WORKERS_MAX?: number | undefined;
|
|
127
|
-
NEW_CATALOG_ENABLED
|
|
128
|
-
NEW_SCORECARDS_ENABLED
|
|
127
|
+
NEW_CATALOG_ENABLED: boolean | undefined;
|
|
128
|
+
NEW_SCORECARDS_ENABLED: boolean | undefined;
|
|
129
129
|
ENABLE_COMMENTS?: string | undefined;
|
|
130
|
-
REDOCLY_EXP_DISABLE_MD_VALIDATION
|
|
131
|
-
ENABLE_SOURCE_MAPS
|
|
130
|
+
REDOCLY_EXP_DISABLE_MD_VALIDATION: boolean | undefined;
|
|
131
|
+
ENABLE_SOURCE_MAPS: boolean | undefined;
|
|
132
132
|
PLAN_GATES?: string | undefined;
|
|
133
|
-
REDOCLY_EXP_LLMSTXT_AGENT_FEEDBACK_ENABLED
|
|
133
|
+
REDOCLY_EXP_LLMSTXT_AGENT_FEEDBACK_ENABLED: boolean | undefined;
|
|
134
134
|
REDOCLY_EXP_LLMSTXT_AGENT_FEEDBACK_URL?: string | undefined;
|
|
135
135
|
REDOCLY_EXP_LLMSTXT_AGENT_ENDPOINT?: string | undefined;
|
|
136
|
-
REDOCLY_EXP_REPLAY_GRAPHQL_ENABLED
|
|
136
|
+
REDOCLY_EXP_REPLAY_GRAPHQL_ENABLED: boolean | undefined;
|
|
137
137
|
SEARCH_DEV_REINIT?: string | undefined;
|
|
138
138
|
SEARCH_DEV_DEBUG: boolean;
|
|
139
139
|
REDOCLY_SKIP_TYPESENSE_INDEXING: boolean;
|
|
@@ -146,7 +146,7 @@ export declare const envConfig: {
|
|
|
146
146
|
REDOCLY_CORS_ORIGINS?: string | undefined;
|
|
147
147
|
SQLD_REMOTE_DATABASE_URL?: string | undefined;
|
|
148
148
|
SQLD_REMOTE_DATABASE_AUTH_TOKEN?: string | undefined;
|
|
149
|
-
FORCE_CATALOG_CACHE_REVALIDATE
|
|
149
|
+
FORCE_CATALOG_CACHE_REVALIDATE: boolean | undefined;
|
|
150
150
|
CATALOG_MAX_REVISIONS?: number | undefined;
|
|
151
151
|
SCORECARDS_POLLING_INTERVAL_MS?: string | undefined;
|
|
152
152
|
OTEL_TRACES_URL?: string | undefined;
|