Compare commits

...
Author SHA1 Message Date
Eduard Gert 2dc89631aa Revert workflow 2024-08-13 13:09:27 +02:00
Eduard Gert 3fa0aa8f00 Update workflow 2024-07-17 16:57:52 +02:00
Eduard Gert 3a132ef553 Fix type errors 2024-07-17 16:45:30 +02:00
Eduard Gert 40b2797f82 Fix type 2024-07-17 15:15:32 +02:00
Eduard Gert dedef3fa56 Update axa oidc library 2024-07-17 15:04:46 +02:00
Tom Hubrecht 121778c4a6 Fix package-lock.json (#401) 2024-07-12 10:35:31 +02:00
juliaroesschen d4102c5d04 fix typo in route update modal (#397) 2024-07-04 15:05:57 +02:00
pascal-fischer e78c35bdbe Fix DNS modal to allow one char domains (#393)
* update regex to allow one char domains in DNS routing modal

* update regex
2024-07-04 10:50:37 +02:00
juliaroesschen 6ebee98695 Fix typo in Network Routes dialogue (#395) 2024-07-04 10:48:49 +02:00
juliaroesschen f4b28d5f40 Fix typo in routes modal 2024-06-28 11:38:39 +02:00
10 changed files with 197 additions and 244 deletions

No files matched your search

+36 -80
View File
@@ -8,7 +8,7 @@
"name": "netbird-dashboard",
"version": "2.0.0",
"dependencies": {
"@axa-fr/react-oidc": "^5.14.0",
"@axa-fr/react-oidc": "^7.22.18",
"@radix-ui/react-accordion": "^1.1.2",
"@radix-ui/react-checkbox": "^1.0.4",
"@radix-ui/react-collapsible": "^1.0.3",
@@ -48,7 +48,7 @@
"framer-motion": "^10.16.4",
"ip-cidr": "^3.1.0",
"lodash": "^4.17.21",
"lucide-react": "^0.287.0",
"lucide-react": "^0.383.0",
"next": "13.5.5",
"next-themes": "^0.2.1",
"punycode": "^2.3.1",
@@ -93,16 +93,31 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@axa-fr/react-oidc": {
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/@axa-fr/react-oidc/-/react-oidc-5.14.2.tgz",
"integrity": "sha512-N+ssJlVtVHnsvlusMxY3zLPKCB+lGzeHIxWXUb0WY3uA7Z+jxx7A2m9W1kHbhYzHuihgA3rWIcdKsvtdkeKXwg==",
"node_modules/@axa-fr/oidc-client": {
"version": "7.22.18",
"resolved": "https://registry.npmjs.org/@axa-fr/oidc-client/-/oidc-client-7.22.18.tgz",
"integrity": "sha512-emXC5EfdopQyxHFNvhso05+x8x/2qJkk87MwbnGVE96dn5Hu9WTpn+mmj5ybVhKG7hizMmOtIQTgcDptnDGKHQ==",
"hasInstallScript": true,
"dependencies": {
"@openid/appauth": "1.3.1"
"@axa-fr/oidc-client-service-worker": "7.22.18"
}
},
"node_modules/@axa-fr/oidc-client-service-worker": {
"version": "7.22.18",
"resolved": "https://registry.npmjs.org/@axa-fr/oidc-client-service-worker/-/oidc-client-service-worker-7.22.18.tgz",
"integrity": "sha512-DMtERkFMSB3P2oyNqA/VWg0gtg3UccRo2YzZ2kmEvFQEUURhTgCMpp03Y0v9wWt6sPmt54hCGphoKfqLOjJj7w=="
},
"node_modules/@axa-fr/react-oidc": {
"version": "7.22.18",
"resolved": "https://registry.npmjs.org/@axa-fr/react-oidc/-/react-oidc-7.22.18.tgz",
"integrity": "sha512-bMLdQV8kpd4OYvl1Yz8KSeZuKVdAL2fS0I4V6Up271oVLpi4sPN+xuHr2j9J9ZOFdqp4bE1eC3IxVo/Q6Cihzg==",
"hasInstallScript": true,
"dependencies": {
"@axa-fr/oidc-client": "7.22.18",
"@axa-fr/oidc-client-service-worker": "7.22.18"
},
"peerDependencies": {
"react": "x",
"react-dom": "x"
"react": "^17.0.0 || ^18.0.0"
}
},
"node_modules/@babel/runtime": {
@@ -542,32 +557,6 @@
"node": ">= 8"
}
},
"node_modules/@openid/appauth": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/@openid/appauth/-/appauth-1.3.1.tgz",
"integrity": "sha512-e54kpi219wES2ijPzeHe1kMnT8VKH8YeTd1GAn9BzVBmutz3tBgcG1y8a4pziNr4vNjFnuD4W446Ua7ELnNDiA==",
"dependencies": {
"@types/base64-js": "^1.3.0",
"@types/jquery": "^3.5.5",
"base64-js": "^1.5.1",
"follow-redirects": "^1.13.3",
"form-data": "^4.0.0",
"opener": "^1.5.2"
}
},
"node_modules/@openid/appauth/node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/@popperjs/core": {
"version": "2.11.8",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
@@ -1658,24 +1647,11 @@
"url": "https://github.com/sponsors/tannerlinsley"
}
},
"node_modules/@types/base64-js": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@types/base64-js/-/base64-js-1.3.2.tgz",
"integrity": "sha512-Q2Xn2/vQHRGLRXhQ5+BSLwhHkR3JVflxVKywH0Q6fVoAiUE8fFYL2pE5/l2ZiOiBDfA8qUqRnSxln4G/NFz1Sg=="
},
"node_modules/@types/crypto-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz",
"integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ=="
},
"node_modules/@types/jquery": {
"version": "3.5.29",
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.29.tgz",
"integrity": "sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg==",
"dependencies": {
"@types/sizzle": "*"
}
},
"node_modules/@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -1731,7 +1707,8 @@
"node_modules/@types/sizzle": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz",
"integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg=="
"integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==",
"dev": true
},
"node_modules/@types/yauzl": {
"version": "2.10.3",
@@ -2187,7 +2164,8 @@
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"dev": true
},
"node_modules/at-least-node": {
"version": "1.0.0",
@@ -2285,6 +2263,7 @@
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"dev": true,
"funding": [
{
"type": "github",
@@ -2927,6 +2906,7 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dev": true,
"dependencies": {
"delayed-stream": "~1.0.0"
},
@@ -3170,6 +3150,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
@@ -4057,25 +4038,6 @@
"tailwindcss": "^3"
}
},
"node_modules/follow-redirects": {
"version": "1.15.5",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
"integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"engines": {
"node": ">=4.0"
},
"peerDependenciesMeta": {
"debug": {
"optional": true
}
}
},
"node_modules/for-each": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
@@ -5351,9 +5313,9 @@
}
},
"node_modules/lucide-react": {
"version": "0.287.0",
"resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.287.0.tgz",
"integrity": "sha512-auxP2bTGiMoELzX+6ItTeNzLmhGd/O+PHBsrXV2YwPXYCxarIFJhiMOSzFT9a1GWeYPSZtnWdLr79IVXr/5JqQ==",
"version": "0.383.0",
"resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.383.0.tgz",
"integrity": "sha512-13xlG0CQCJtzjSQYwwJ3WRqMHtRj3EXmLlorrARt7y+IHnxUCp3XyFNL1DfaGySWxHObDvnu1u1dV+0VMKHUSg==",
"peerDependencies": {
"react": "^16.5.1 || ^17.0.0 || ^18.0.0"
}
@@ -5396,6 +5358,7 @@
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dev": true,
"engines": {
"node": ">= 0.6"
}
@@ -5404,6 +5367,7 @@
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dev": true,
"dependencies": {
"mime-db": "1.52.0"
},
@@ -5712,14 +5676,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/opener": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
"integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
"bin": {
"opener": "bin/opener-bin.js"
}
},
"node_modules/optionator": {
"version": "0.9.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+1 -1
View File
@@ -13,7 +13,7 @@
"cypress:open": "cypress open"
},
"dependencies": {
"@axa-fr/react-oidc": "^5.14.0",
"@axa-fr/react-oidc": "^7.22.18",
"@radix-ui/react-accordion": "^1.1.2",
"@radix-ui/react-checkbox": "^1.0.4",
"@radix-ui/react-collapsible": "^1.0.3",
+3 -3
View File
@@ -1,10 +1,10 @@
"use client";
import { OidcProvider } from "@axa-fr/react-oidc";
import {
AuthorityConfiguration,
OidcConfiguration,
} from "@axa-fr/react-oidc/dist/vanilla/oidc";
OidcProvider,
} from "@axa-fr/react-oidc";
import FullScreenLoading from "@components/ui/FullScreenLoading";
import { useLocalStorage } from "@hooks/useLocalStorage";
import { useRedirect } from "@hooks/useRedirect";
@@ -30,7 +30,7 @@ const auth0AuthorityConfig: AuthorityConfiguration = {
revocation_endpoint: new URL("oauth/revoke", config.authority).href,
end_session_endpoint: new URL("v2/logout", config.authority).href,
userinfo_endpoint: new URL("userinfo", config.authority).href,
//issuer: new URL("", config.authority).href,
issuer: new URL("", config.authority).href,
};
const onEvent = (configurationName: any, eventName: any, data: any) => {
+1 -1
View File
@@ -80,7 +80,7 @@ export default function PeerProvider({ children, peer }: Props) {
approval_required == undefined ? undefined : approval_required,
},
`/${peer.id}`,
);
) as Promise<Peer>;
};
const openSSHDialog = async (): Promise<boolean> => {
@@ -39,7 +39,7 @@ export default function PostureCheckModal({
onSuccess,
postureCheck,
}: Props) {
const postureCheckRequest = useApiCall("/posture-checks");
const postureCheckRequest = useApiCall<PostureCheck>("/posture-checks");
const { mutate } = useSWRConfig();
const [name, setName] = useState(postureCheck?.name || "");
@@ -145,159 +145,148 @@ export default function PostureCheckModal({
const [tab, setTab] = useState("checks");
return (
<>
<Modal open={open} onOpenChange={onOpenChange} key={open ? 1 : 0}>
<ModalContent
maxWidthClass={cn("relative", "max-w-2xl")}
showClose={true}
>
<ModalHeader
icon={<ShieldCheck size={19} />}
title={
postureCheck ? "Update Posture Check" : "Create Posture Check"
}
description={
"Use posture checks to further restrict access in your network."
}
color={"netbird"}
/>
<Modal open={open} onOpenChange={onOpenChange} key={open ? 1 : 0}>
<ModalContent
maxWidthClass={cn("relative", "max-w-2xl")}
showClose={true}
>
<ModalHeader
icon={<ShieldCheck size={19} />}
title={postureCheck ? "Update Posture Check" : "Create Posture Check"}
description={
"Use posture checks to further restrict access in your network."
}
color={"netbird"}
/>
<Tabs onValueChange={(v) => setTab(v)} defaultValue={tab} value={tab}>
<TabsList justify={"start"} className={"px-8"}>
<TabsTrigger value={"checks"}>
<LayoutList size={16} />
Checks
</TabsTrigger>
<Tabs onValueChange={(v) => setTab(v)} defaultValue={tab} value={tab}>
<TabsList justify={"start"} className={"px-8"}>
<TabsTrigger value={"checks"}>
<LayoutList size={16} />
Checks
</TabsTrigger>
<TabsTrigger
value={"general"}
disabled={!isAtLeastOneCheckEnabled}
>
<Text
size={16}
className={
"text-nb-gray-500 group-data-[state=active]/trigger:text-netbird transition-all"
}
/>
Name & Description
</TabsTrigger>
</TabsList>
<TabsTrigger value={"general"} disabled={!isAtLeastOneCheckEnabled}>
<Text
size={16}
className={
"text-nb-gray-500 group-data-[state=active]/trigger:text-netbird transition-all"
}
/>
Name & Description
</TabsTrigger>
</TabsList>
<TabsContent value={"checks"} className={"pb-6 px-8"}>
<>
<PostureCheckNetBirdVersion
value={nbVersionCheck}
onChange={setNbVersionCheck}
<TabsContent value={"checks"} className={"pb-6 px-8"}>
<>
<PostureCheckNetBirdVersion
value={nbVersionCheck}
onChange={setNbVersionCheck}
/>
<PostureCheckGeoLocation
value={geoLocationCheck}
onChange={setGeoLocationCheckCheck}
/>
<PostureCheckPeerNetworkRange
value={peerNetworkRangeCheck}
onChange={setPeerNetworkRangeCheck}
/>
<PostureCheckOperatingSystem
value={osVersionCheck}
onChange={setOsVersionCheck}
/>
<PostureCheckProcess
value={processCheck}
onChange={setProcessCheck}
/>
</>
</TabsContent>
<TabsContent value={"general"} className={"pb-8 px-8"}>
<div className={"flex flex-col gap-6"}>
<div>
<Label>Name of the Posture Check</Label>
<HelpText>
Set an easily identifiable name for your posture check.
</HelpText>
<Input
autoFocus={true}
tabIndex={0}
value={name}
onChange={(e) => setName(e.target.value)}
placeholder={"e.g., NetBird Version > 0.25.0"}
/>
<PostureCheckGeoLocation
value={geoLocationCheck}
onChange={setGeoLocationCheckCheck}
/>
<PostureCheckPeerNetworkRange
value={peerNetworkRangeCheck}
onChange={setPeerNetworkRangeCheck}
/>
<PostureCheckOperatingSystem
value={osVersionCheck}
onChange={setOsVersionCheck}
/>
<PostureCheckProcess
value={processCheck}
onChange={setProcessCheck}
/>
</>
</TabsContent>
<TabsContent value={"general"} className={"pb-8 px-8"}>
<div className={"flex flex-col gap-6"}>
<div>
<Label>Name of the Posture Check</Label>
<HelpText>
Set an easily identifiable name for your posture check.
</HelpText>
<Input
autoFocus={true}
tabIndex={0}
value={name}
onChange={(e) => setName(e.target.value)}
placeholder={"e.g., NetBird Version > 0.25.0"}
/>
</div>
<div>
<Label>Description (optional)</Label>
<HelpText>
Write a short description to add more context to this
policy.
</HelpText>
<Textarea
value={description}
onChange={(e) => setDescription(e.target.value)}
placeholder={
"e.g., Check if the NetBird version is bigger than 0.25.0"
}
rows={3}
/>
</div>
</div>
</TabsContent>
</Tabs>
<div>
<Label>Description (optional)</Label>
<HelpText>
Write a short description to add more context to this policy.
</HelpText>
<Textarea
value={description}
onChange={(e) => setDescription(e.target.value)}
placeholder={
"e.g., Check if the NetBird version is bigger than 0.25.0"
}
rows={3}
/>
</div>
</div>
</TabsContent>
</Tabs>
<ModalFooter className={"items-center"}>
<div className={"w-full"}>
<Paragraph className={"text-sm mt-auto"}>
Learn more about
<InlineLink
href={"https://docs.netbird.io/how-to/manage-posture-checks"}
target={"_blank"}
<ModalFooter className={"items-center"}>
<div className={"w-full"}>
<Paragraph className={"text-sm mt-auto"}>
Learn more about
<InlineLink
href={"https://docs.netbird.io/how-to/manage-posture-checks"}
target={"_blank"}
>
Posture Checks
<ExternalLinkIcon size={12} />
</InlineLink>
</Paragraph>
</div>
<div className={"flex gap-3 w-full justify-end"}>
<>
{tab == "checks" && (
<Button
variant={"secondary"}
onClick={() => onOpenChange(false)}
>
Posture Checks
<ExternalLinkIcon size={12} />
</InlineLink>
</Paragraph>
</div>
<div className={"flex gap-3 w-full justify-end"}>
<>
{tab == "checks" && (
<Button
variant={"secondary"}
onClick={() => onOpenChange(false)}
>
Cancel
</Button>
)}
Cancel
</Button>
)}
{tab == "general" && (
<Button
variant={"secondary"}
onClick={() => setTab("checks")}
>
Back
</Button>
)}
{tab == "general" && (
<Button variant={"secondary"} onClick={() => setTab("checks")}>
Back
</Button>
)}
{!postureCheck && tab == "checks" && (
<Button
variant={"primary"}
onClick={() => setTab("general")}
disabled={!isAtLeastOneCheckEnabled}
>
Continue
</Button>
)}
{!postureCheck && tab == "checks" && (
<Button
variant={"primary"}
onClick={() => setTab("general")}
disabled={!isAtLeastOneCheckEnabled}
>
Continue
</Button>
)}
{((!postureCheck && tab == "general") || postureCheck) && (
<Button
variant={"primary"}
disabled={!canCreate}
onClick={updateOrCreatePostureCheck}
>
{postureCheck ? "Save Changes" : "Create Posture Check"}
</Button>
)}
</>
</div>
</ModalFooter>
</ModalContent>
</Modal>
</>
{((!postureCheck && tab == "general") || postureCheck) && (
<Button
variant={"primary"}
disabled={!canCreate}
onClick={updateOrCreatePostureCheck}
>
{postureCheck ? "Save Changes" : "Create Posture Check"}
</Button>
)}
</>
</div>
</ModalFooter>
</ModalContent>
</Modal>
);
}
+3 -3
View File
@@ -488,7 +488,7 @@ export function RouteModalContent({
<div>
<HelpText>
Assign a peer group with Linux machines to be used as
{exitNode ? " exit nodes." : "routing peers."}
{exitNode ? " exit nodes." : " routing peers."}
</HelpText>
<PeerGroupSelector
max={1}
@@ -577,9 +577,9 @@ export function RouteModalContent({
<div className={cn("flex justify-between")}>
<div>
<Label>Metrics</Label>
<Label>Metric</Label>
<HelpText className={"max-w-[200px]"}>
Lower metrics indicating higher priority routes.
A lower metric indicates a higher priority route.
</HelpText>
</div>
+2 -2
View File
@@ -396,9 +396,9 @@ function RouteUpdateModalContent({ onSuccess, route, cell }: ModalProps) {
)}
<div className={cn("flex justify-between")}>
<div>
<Label>Metrics</Label>
<Label>Metric</Label>
<HelpText className={"max-w-[200px]"}>
Lower metrics indicating higher priority routes.
A lower metric indicates a higher priority route.
</HelpText>
</div>
+15 -7
View File
@@ -50,7 +50,9 @@ async function apiRequest<T>(
}
}
export function useNetBirdFetch(ignoreError: boolean = false) {
export function useNetBirdFetch(ignoreError: boolean = false): {
fetch: (input: RequestInfo, init?: RequestInit) => Promise<Response>;
} {
const tokenSource = config.tokenSource || "accessToken";
const { idToken } = useOidcIdToken();
const { accessToken } = useOidcAccessToken();
@@ -69,7 +71,10 @@ export function useNetBirdFetch(ignoreError: boolean = false) {
const nativeFetch = async (input: RequestInfo, init?: RequestInit) => {
const tokenExpired = await isTokenExpired();
if (tokenExpired) {
return handleErrors({ code: 401, message: "token expired" });
return handleErrors({
code: 401,
message: "token expired",
} as ErrorResponse);
}
const headers = {
@@ -85,7 +90,10 @@ export function useNetBirdFetch(ignoreError: boolean = false) {
};
return {
fetch: nativeFetch,
fetch: nativeFetch as (
input: RequestInfo,
init?: RequestInit,
) => Promise<Response>,
};
}
@@ -131,22 +139,22 @@ export function useApiCall<T>(url: string, ignoreError = false) {
post: async (data: any, suffix = "") => {
return apiRequest<T>(fetch, "POST", url + suffix, data)
.then((res) => Promise.resolve(res as T))
.catch((err) => handleErrors(err as ErrorResponse));
.catch((err) => handleErrors(err as ErrorResponse)) as Promise<T>;
},
put: async (data: any, suffix = "") => {
return apiRequest<T>(fetch, "PUT", url + suffix, data)
.then((res) => Promise.resolve(res as T))
.catch((err) => handleErrors(err as ErrorResponse));
.catch((err) => handleErrors(err as ErrorResponse)) as Promise<T>;
},
del: async (data: any = "", suffix = "") => {
return apiRequest<T>(fetch, "DELETE", url + suffix, data)
.then((res) => Promise.resolve(res as T))
.catch((err) => handleErrors(err as ErrorResponse));
.catch((err) => handleErrors(err as ErrorResponse)) as Promise<T>;
},
get: async (suffix = "") => {
return apiRequest<T>(fetch, "GET", url + suffix)
.then((res) => Promise.resolve(res as T))
.catch((err) => handleErrors(err as ErrorResponse));
.catch((err) => handleErrors(err as ErrorResponse)) as Promise<T>;
},
};
}
+1 -1
View File
@@ -1,4 +1,4 @@
import { StringMap } from "@axa-fr/react-oidc/dist/vanilla/oidc";
import { StringMap } from "@axa-fr/react-oidc";
import { validator } from "@utils/helpers";
interface Config {
+1 -1
View File
@@ -42,7 +42,7 @@ export const sleep = (ms: number) => {
export const validator = {
isValidDomain: (domain: string) => {
const unicodeDomain =
/^(?!.*\s)(\.?[a-zA-Z0-9\u00A1-\uFFFF](?!.*\s$)(?!.*\.$)(?:(?!-)[a-zA-Z0-9\u00A1-\uFFFF-]{1,63}(?<!-)\.){0,126}(?!-)[a-zA-Z0-9\u00A1-\uFFFF-]{1,63}(?<!-))$/u;
/^(?!.*\.\.)(?!.*\.$)(?!.*\s)(?:(?!-)(?!.*--)[a-zA-Z0-9\u00A1-\uFFFF-]{1,63}(?<!-)\.)+(?!-)(?!.*--)[a-zA-Z0-9\u00A1-\uFFFF-]{2,63}$/u;
try {
const minMaxChars = [1, 255];
const isValidDomainLength =