From a37b37de716856cd86f2389fb0b09653580289d7 Mon Sep 17 00:00:00 2001 From: Adrienne Rio Date: Wed, 13 Nov 2024 15:45:00 +0800 Subject: [PATCH 1/3] feat: added callback page stylings and icon --- package-lock.json | 3768 +++++++++++++++++-------- package.json | 13 +- src/assets/404.png | Bin 0 -> 25557 bytes src/assets/404.svg | 241 ++ src/assets/deriv_logo.svg | 3 + src/components/Callback/Callback.scss | 71 + src/components/Callback/Callback.tsx | 93 + src/components/Callback/index.ts | 1 + src/components/index.ts | 1 + src/index.ts | 1 + src/oidc/error.ts | 38 +- src/oidc/index.ts | 55 +- tsconfig.json | 2 +- vite.config.ts | 21 + 14 files changed, 3015 insertions(+), 1293 deletions(-) create mode 100644 src/assets/404.png create mode 100644 src/assets/404.svg create mode 100644 src/assets/deriv_logo.svg create mode 100644 src/components/Callback/Callback.scss create mode 100644 src/components/Callback/Callback.tsx create mode 100644 src/components/Callback/index.ts create mode 100644 src/components/index.ts diff --git a/package-lock.json b/package-lock.json index 4b602c6..8f45326 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,10 +8,10 @@ "name": "@deriv-com/auth-client", "version": "0.0.0-development", "dependencies": { - "@deriv-com/utils": "^0.0.37", "oidc-client-ts": "^3.1.0" }, "devDependencies": { + "@deriv-com/utils": "^0.0.37", "@eslint/js": "^9.9.0", "@semantic-release/changelog": "^6.0.3", "@semantic-release/github": "^10.0.2", @@ -30,11 +30,20 @@ "prettier": "3.3.3", "react": "^18.3.1", "react-dom": "^18.3.1", + "sass": "^1.80.6", + "sass-embedded": "^1.80.6", "semantic-release": "^23.0.6", "typescript": "^5.5.4", "typescript-eslint": "^8.0.1", "vite": "^5.4.1", - "vite-plugin-dts": "^4.2.1" + "vite-plugin-dts": "^4.2.1", + "vite-plugin-lib-inject-css": "^2.1.1", + "vite-plugin-svgr": "^4.3.0" + }, + "peerDependencies": { + "@deriv-com/utils": "^0.0.37", + "react": "^18.3.1", + "react-dom": "^18.3.1" } }, "node_modules/@ampproject/remapping": { @@ -50,13 +59,171 @@ "node": ">=6.0.0" } }, + "node_modules/@ast-grep/napi": { + "version": "0.22.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi/-/napi-0.22.6.tgz", + "integrity": "sha512-kNF87HiI4omHC7VzyBZSvqOAXtMlSDRF2YX+O5ya0XKv/7/GYms1opLQ+BQ9twLLDj0WsSFX4MYg0TrinZTxTg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@ast-grep/napi-darwin-arm64": "0.22.6", + "@ast-grep/napi-darwin-x64": "0.22.6", + "@ast-grep/napi-linux-arm64-gnu": "0.22.6", + "@ast-grep/napi-linux-x64-gnu": "0.22.6", + "@ast-grep/napi-linux-x64-musl": "0.22.6", + "@ast-grep/napi-win32-arm64-msvc": "0.22.6", + "@ast-grep/napi-win32-ia32-msvc": "0.22.6", + "@ast-grep/napi-win32-x64-msvc": "0.22.6" + } + }, + "node_modules/@ast-grep/napi-darwin-arm64": { + "version": "0.22.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-darwin-arm64/-/napi-darwin-arm64-0.22.6.tgz", + "integrity": "sha512-L9rEGJ8fNi5LxbZj860wbXxjX7DLNV799zcTaPOSzYadvNyhMY3LWvDXd45Vtx6Dh8QRtCoEMQmw8KaRCEjm9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-darwin-x64": { + "version": "0.22.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-darwin-x64/-/napi-darwin-x64-0.22.6.tgz", + "integrity": "sha512-0iuM6iDJNhcPd6a/JJr64AallR7ttGW/MvUujfQdvJEZY5p9LK35xm23dULznW0tIMgwtMKPRaprgk8LPondKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-linux-arm64-gnu": { + "version": "0.22.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-arm64-gnu/-/napi-linux-arm64-gnu-0.22.6.tgz", + "integrity": "sha512-9PAqNJlAQfFm1RW0DVCM/S4gFHdppxUTWacB3qEeJZXgdLnoH0KGQa4z3Xo559SPYDKZy0VnY02mZ3XJ+v6/Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-linux-x64-gnu": { + "version": "0.22.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-x64-gnu/-/napi-linux-x64-gnu-0.22.6.tgz", + "integrity": "sha512-nZf+gxXVrZqvP1LN6HwzOMA4brF3umBXfMequQzv8S6HeJ4c34P23F0Tw8mHtQpVYP9PQWJUvt3LJQ8Xvd5Hiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-linux-x64-musl": { + "version": "0.22.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-x64-musl/-/napi-linux-x64-musl-0.22.6.tgz", + "integrity": "sha512-gcJeBMgJQf2pZZo0lgH0Vg4ycyujM7Am8VlomXhavC/dPpkddA1tiHSIC4fCNneLU1EqHITy3ALSmM4GLdsjBw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-win32-arm64-msvc": { + "version": "0.22.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-arm64-msvc/-/napi-win32-arm64-msvc-0.22.6.tgz", + "integrity": "sha512-YDDzvPIyl4ti8xZfjvGSGVCX9JJjMQjyWPlXcwRpiLRnHThtHTDL8PyE2yq+gAPuZ28QbrygMkP9EKXIyYFVcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-win32-ia32-msvc": { + "version": "0.22.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-ia32-msvc/-/napi-win32-ia32-msvc-0.22.6.tgz", + "integrity": "sha512-w5P0MDcBD3bifC2K9nCDEFYacy8HQnXdf6fX6cIE/7xL8XEDs6D1lQjGewrZDcMAXVXUQfupj4P27ZsJRmuIoQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-win32-x64-msvc": { + "version": "0.22.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-x64-msvc/-/napi-win32-x64-msvc-0.22.6.tgz", + "integrity": "sha512-1aaHvgsCBwUP0tDf4HXPMpUV/nUwsOWgRCiBc2zIJjdEjT9TTk795EIX9Z1Nc0OMCrxVEceyiKcYTofXa0Fpxw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -64,10 +231,11 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -112,29 +280,32 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6", + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -152,28 +323,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -183,50 +355,41 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -244,99 +407,14 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.26.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -376,30 +454,32 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -417,19 +497,26 @@ } }, "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@bufbuild/protobuf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.2.2.tgz", + "integrity": "sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A==", + "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -443,7 +530,8 @@ "node_modules/@deriv-com/utils": { "version": "0.0.37", "resolved": "https://registry.npmjs.org/@deriv-com/utils/-/utils-0.0.37.tgz", - "integrity": "sha512-+ngUvT+OqwblBoqkHcsbLtljjwOGIjjMpo5xLS5fwyhtNvBe8Rcq+140QV1j0xq9vlm2kmcowEKIVBq33imFmg==" + "integrity": "sha512-+ngUvT+OqwblBoqkHcsbLtljjwOGIjjMpo5xLS5fwyhtNvBe8Rcq+140QV1j0xq9vlm2kmcowEKIVBq33imFmg==", + "dev": true }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", @@ -1346,490 +1434,814 @@ "@octokit/openapi-types": "^22.2.0" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@parcel/watcher": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz", + "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==", "dev": true, + "hasInstallScript": true, + "license": "MIT", "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "dev": true, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dev": true, "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "dev": true, - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">= 10.0.0" }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", - "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", - "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.0", + "@parcel/watcher-darwin-arm64": "2.5.0", + "@parcel/watcher-darwin-x64": "2.5.0", + "@parcel/watcher-freebsd-x64": "2.5.0", + "@parcel/watcher-linux-arm-glibc": "2.5.0", + "@parcel/watcher-linux-arm-musl": "2.5.0", + "@parcel/watcher-linux-arm64-glibc": "2.5.0", + "@parcel/watcher-linux-arm64-musl": "2.5.0", + "@parcel/watcher-linux-x64-glibc": "2.5.0", + "@parcel/watcher-linux-x64-musl": "2.5.0", + "@parcel/watcher-win32-arm64": "2.5.0", + "@parcel/watcher-win32-ia32": "2.5.0", + "@parcel/watcher-win32-x64": "2.5.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz", + "integrity": "sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", - "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz", + "integrity": "sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", - "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz", + "integrity": "sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", - "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz", + "integrity": "sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==", "cpu": [ - "arm" + "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "linux" - ] + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", - "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz", + "integrity": "sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", - "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz", + "integrity": "sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==", "cpu": [ - "arm64" + "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", - "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz", + "integrity": "sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", - "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", - "cpu": [ - "ppc64" ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", - "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz", + "integrity": "sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==", "cpu": [ - "riscv64" + "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", - "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", - "cpu": [ - "s390x" ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", - "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz", + "integrity": "sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", - "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz", + "integrity": "sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", - "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz", + "integrity": "sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", - "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz", + "integrity": "sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", - "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz", + "integrity": "sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" - ] - }, - "node_modules/@rushstack/node-core-library": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.7.0.tgz", - "integrity": "sha512-Ff9Cz/YlWu9ce4dmqNBZpA45AEya04XaBFIjV7xTVeEf+y/kTjEasmozqFELXlNG4ROdevss75JrrZ5WgufDkQ==", - "dev": true, - "dependencies": { - "ajv": "~8.13.0", - "ajv-draft-04": "~1.0.0", - "ajv-formats": "~3.0.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.22.1", - "semver": "~7.5.4" - }, - "peerDependencies": { - "@types/node": "*" + ], + "engines": { + "node": ">= 10.0.0" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@rushstack/node-core-library/node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "optional": true, + "engines": { + "node": ">=14" } }, - "node_modules/@rushstack/node-core-library/node_modules/ajv-draft-04": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", "dev": true, - "peerDependencies": { - "ajv": "^8.5.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "engines": { + "node": ">=12.22.0" } }, - "node_modules/@rushstack/node-core-library/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "4.2.10" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=12.22.0" } }, - "node_modules/@rushstack/node-core-library/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "node_modules/@rushstack/node-core-library/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@rushstack/node-core-library/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/@rollup/pluginutils": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", + "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@rushstack/rig-package": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.3.tgz", - "integrity": "sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==", - "dev": true, - "dependencies": { - "resolve": "~1.22.1", - "strip-json-comments": "~3.1.1" - } - }, - "node_modules/@rushstack/terminal": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.14.0.tgz", - "integrity": "sha512-juTKMAMpTIJKudeFkG5slD8Z/LHwNwGZLtU441l/u82XdTBfsP+LbGKJLCNwP5se+DMCT55GB8x9p6+C4UL7jw==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "5.7.0", - "supports-color": "~8.1.1" + "node": ">=14.0.0" }, "peerDependencies": { - "@types/node": "*" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { - "@types/node": { + "rollup": { "optional": true } } }, - "node_modules/@rushstack/terminal/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@rushstack/ts-command-line": { - "version": "4.22.6", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.22.6.tgz", - "integrity": "sha512-QSRqHT/IfoC5nk9zn6+fgyqOPXHME0BfchII9EUPR19pocsNp/xSbeBCbD3PIR2Lg+Q5qk7OFqk1VhWPMdKHJg==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@rushstack/terminal": "0.14.0", - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "string-argv": "~0.3.1" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@rushstack/ts-command-line/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@sec-ant/readable-stream": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", - "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", - "dev": true + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@semantic-release/changelog": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", - "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rushstack/node-core-library": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.7.0.tgz", + "integrity": "sha512-Ff9Cz/YlWu9ce4dmqNBZpA45AEya04XaBFIjV7xTVeEf+y/kTjEasmozqFELXlNG4ROdevss75JrrZ5WgufDkQ==", + "dev": true, + "dependencies": { + "ajv": "~8.13.0", + "ajv-draft-04": "~1.0.0", + "ajv-formats": "~3.0.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/node-core-library/node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "dev": true, + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@rushstack/node-core-library/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/@rushstack/node-core-library/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@rushstack/rig-package": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.3.tgz", + "integrity": "sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==", + "dev": true, + "dependencies": { + "resolve": "~1.22.1", + "strip-json-comments": "~3.1.1" + } + }, + "node_modules/@rushstack/terminal": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.14.0.tgz", + "integrity": "sha512-juTKMAMpTIJKudeFkG5slD8Z/LHwNwGZLtU441l/u82XdTBfsP+LbGKJLCNwP5se+DMCT55GB8x9p6+C4UL7jw==", + "dev": true, + "dependencies": { + "@rushstack/node-core-library": "5.7.0", + "supports-color": "~8.1.1" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/terminal/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@rushstack/ts-command-line": { + "version": "4.22.6", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.22.6.tgz", + "integrity": "sha512-QSRqHT/IfoC5nk9zn6+fgyqOPXHME0BfchII9EUPR19pocsNp/xSbeBCbD3PIR2Lg+Q5qk7OFqk1VhWPMdKHJg==", + "dev": true, + "dependencies": { + "@rushstack/terminal": "0.14.0", + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "string-argv": "~0.3.1" + } + }, + "node_modules/@rushstack/ts-command-line/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true + }, + "node_modules/@semantic-release/changelog": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", + "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", + "dev": true, + "dependencies": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", "fs-extra": "^11.0.0", "lodash": "^4.17.4" }, @@ -2103,6 +2515,277 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@svgr/core/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, "node_modules/@swc/core": { "version": "1.7.23", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.23.tgz", @@ -2976,9 +3659,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "dev": true, "funding": [ { @@ -2994,11 +3677,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -3007,6 +3691,13 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer-builder": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", + "dev": true, + "license": "MIT/X11" + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3016,10 +3707,23 @@ "node": ">=6" } }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/caniuse-lite": { - "version": "1.0.30001659", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001659.tgz", - "integrity": "sha512-Qxxyfv3RdHAfJcXelgf0hU4DFUVXBGTjqrBUZLUh8AtlGnsDo+CnncYtTd95+ZKfnANUOzxyIQCuU/UeBZBYoA==", + "version": "1.0.30001680", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz", + "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==", "dev": true, "funding": [ { @@ -3034,7 +3738,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", @@ -3061,6 +3766,22 @@ "node": ">=10" } }, + "node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -3270,6 +3991,13 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "dev": true, + "license": "MIT" + }, "node_modules/compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", @@ -3526,6 +4254,20 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -3538,6 +4280,17 @@ "node": ">=8" } }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -3566,10 +4319,11 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.18", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz", - "integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==", - "dev": true + "version": "1.5.56", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.56.tgz", + "integrity": "sha512-7lXb9dAvimCFdvUMTyucD4mnIndt/xhRKFAlky0CyFogdnNmdPQNoHI23msF/2V4mpTxMzgMdjK4+YRlFlRQZw==", + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -4532,6 +5286,13 @@ "node": ">= 4" } }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true, + "license": "MIT" + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -4838,15 +5599,16 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -5095,6 +5857,16 @@ "loose-envify": "cli.js" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -5325,6 +6097,25 @@ "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", "dev": true }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/node-emoji": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", @@ -5344,7 +6135,8 @@ "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/normalize-package-data": { "version": "6.0.2", @@ -7628,8 +8420,244 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/supports-color": { - "version": "9.4.0", + "node_modules/npm/node_modules/supports-color": { + "version": "9.4.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "6.2.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "2.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "2.0.1", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/unique-filename": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/which": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/which/node_modules/isexe": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/npm/node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", "dev": true, "inBundle": true, "license": "MIT", @@ -7637,1076 +8665,1288 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/npm/node_modules/tar": { - "version": "6.2.1", + "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } + "license": "MIT" }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", + "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">= 8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", + "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/npm/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", + "node_modules/npm/node_modules/write-file-atomic": { + "version": "5.0.1", "dev": true, "inBundle": true, "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "1.3.0", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, - "inBundle": true, - "license": "MIT" + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/npm/node_modules/treeverse": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", + "node_modules/oidc-client-ts": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/oidc-client-ts/-/oidc-client-ts-3.1.0.tgz", + "integrity": "sha512-IDopEXjiwjkmJLYZo6BTlvwOtnlSniWZkKZoXforC/oLZHC9wkIxd25Kwtmo5yKFMMVcsp3JY6bhcNJqdYk8+g==", + "dependencies": { + "jwt-decode": "^4.0.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=18" } }, - "node_modules/npm/node_modules/tuf-js": { - "version": "2.2.1", + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "@tufjs/models": "2.0.1", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" + "mimic-fn": "^4.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/unique-filename": { - "version": "3.0.0", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, - "inBundle": true, - "license": "ISC", "dependencies": { - "unique-slug": "^4.0.0" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 0.8.0" } }, - "node_modules/npm/node_modules/unique-slug": { - "version": "4.0.0", + "node_modules/p-each-series": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-filter": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", + "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, - "inBundle": true, - "license": "ISC", "dependencies": { - "imurmurhash": "^0.1.4" + "p-map": "^7.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", + "node_modules/p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", "dev": true, - "inBundle": true, - "license": "MIT" + "engines": { + "node": ">=8" + } }, - "node_modules/npm/node_modules/validate-npm-package-license": { - "version": "3.0.4", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "inBundle": true, - "license": "Apache-2.0", "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { - "version": "3.0.1", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "5.0.1", + "node_modules/p-map": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.2.tgz", + "integrity": "sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==", "dev": true, - "inBundle": true, - "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "3.0.1", + "node_modules/p-reduce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", "dev": true, - "inBundle": true, - "license": "ISC" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/npm/node_modules/which": { - "version": "4.0.0", + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/npm/node_modules/which/node_modules/isexe": { - "version": "3.1.1", + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "inBundle": true, - "license": "ISC", + "dependencies": { + "callsites": "^3.0.0" + }, "engines": { - "node": ">=16" + "node": ">=6" } }, - "node_modules/npm/node_modules/wrap-ansi": { + "node_modules/parse-json": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", + "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@babel/code-frame": "^7.22.13", + "index-to-position": "^0.1.2", + "type-fest": "^4.7.1" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "parse5": "^6.0.1" } }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "inBundle": true, - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "inBundle": true, - "license": "MIT" + "engines": { + "node": ">=8" + } }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=12" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", + "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": "20 || >=22" } }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "5.0.1", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/yallist": { - "version": "4.0.0", + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "inBundle": true, - "license": "ISC" + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/oidc-client-ts": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/oidc-client-ts/-/oidc-client-ts-3.1.0.tgz", - "integrity": "sha512-IDopEXjiwjkmJLYZo6BTlvwOtnlSniWZkKZoXforC/oLZHC9wkIxd25Kwtmo5yKFMMVcsp3JY6bhcNJqdYk8+g==", + "node_modules/pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", + "dev": true, "dependencies": { - "jwt-decode": "^4.0.0" + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/pkg-conf/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "dependencies": { - "mimic-fn": "^4.0.0" + "locate-path": "^2.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=4" } }, - "node_modules/p-each-series": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", - "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, - "engines": { - "node": ">=12" + "dependencies": { + "p-try": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-filter": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", - "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "dependencies": { - "p-map": "^7.0.1" + "p-limit": "^1.1.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/p-is-promise": { + "node_modules/pkg-conf/node_modules/path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/pkg-types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz", + "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "confbox": "^0.1.7", + "mlly": "^1.7.1", + "pathe": "^1.1.2" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/postcss": { + "version": "8.4.44", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz", + "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "p-limit": "^3.0.2" + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10 || ^12 || >=14" } }, - "node_modules/p-map": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.2.tgz", - "integrity": "sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/p-reduce": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", - "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, "engines": { - "node": ">=12" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "node_modules/pretty-ms": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.1.0.tgz", + "integrity": "sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==", "dev": true, + "dependencies": { + "parse-ms": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, "engines": { "node": ">=6" } }, - "node_modules/parse-json": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", - "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "index-to-position": "^0.1.2", - "type-fest": "^4.7.1" - }, - "engines": { - "node": ">=18" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "rc": "cli.js" } }, - "node_modules/parse-ms": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", - "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, + "license": "MIT", "dependencies": { - "parse5": "^6.0.1" + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/read-package-up": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", + "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", "dev": true, + "dependencies": { + "find-up-simple": "^1.0.0", + "read-pkg": "^9.0.0", + "type-fest": "^4.6.0" + }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "node_modules/read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", "dev": true, "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": "20 || >=22" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", - "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", + "node_modules/read-pkg-up": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-11.0.0.tgz", + "integrity": "sha512-LOVbvF1Q0SZdjClSefZ0Nz5z8u+tIE7mV5NibzmE9VYmDe9CaBbAVtz1veOSZbofrdsilxuDAYnFenukZVp8/Q==", + "deprecated": "Renamed to read-package-up", "dev": true, + "dependencies": { + "find-up-simple": "^1.0.0", + "read-pkg": "^9.0.0", + "type-fest": "^4.6.0" + }, "engines": { - "node": "20 || >=22" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">= 14.16.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", + "node_modules/registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", "dev": true, "dependencies": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" + "@pnpm/npm-conf": "^2.1.0" }, "engines": { - "node": ">=4" + "node": ">=14" } }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/pkg-conf/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "p-try": "^1.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=4" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pkg-conf/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, "engines": { "node": ">=4" } }, - "node_modules/pkg-conf/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "engines": { - "node": ">=4" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/pkg-types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz", - "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", + "node_modules/rollup": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "dev": true, "dependencies": { - "confbox": "^0.1.7", - "mlly": "^1.7.1", - "pathe": "^1.1.2" + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", + "fsevents": "~2.3.2" } }, - "node_modules/postcss": { - "version": "8.4.44", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz", - "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "type": "github", + "url": "https://github.com/sponsors/feross" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" + "type": "patreon", + "url": "https://www.patreon.com/feross" }, { - "type": "github", - "url": "https://github.com/sponsors/ai" + "type": "consulting", + "url": "https://feross.org/support" } ], "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" + "queue-microtask": "^1.2.2" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, - "engines": { - "node": ">= 0.8.0" + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" } }, - "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/sass": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.6.tgz", + "integrity": "sha512-ccZgdHNiBF1NHBsWvacvT5rju3y1d/Eu+8Ex6c21nHp2lZGLBEtuwc415QfiI1PJa1TpCo3iXwwSRjRpn2Ckjg==", "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, "bin": { - "prettier": "bin/prettier.cjs" + "sass": "sass.js" }, "engines": { - "node": ">=14" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, - "node_modules/pretty-ms": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.1.0.tgz", - "integrity": "sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==", + "node_modules/sass-embedded": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.80.6.tgz", + "integrity": "sha512-Og4aqBnaA3oJfIpHaLuNATAqzBRgUJDYJy2X15V59cot2wYOtiT/ciPnyuq1o7vpDEeOkHhEd+mSviSlXoETug==", "dev": true, + "license": "MIT", "dependencies": { - "parse-ms": "^4.0.0" + "@bufbuild/protobuf": "^2.0.0", + "buffer-builder": "^0.2.0", + "colorjs.io": "^0.5.0", + "immutable": "^4.0.0", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" }, "engines": { - "node": ">=18" + "node": ">=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "sass-embedded-android-arm": "1.80.6", + "sass-embedded-android-arm64": "1.80.6", + "sass-embedded-android-ia32": "1.80.6", + "sass-embedded-android-riscv64": "1.80.6", + "sass-embedded-android-x64": "1.80.6", + "sass-embedded-darwin-arm64": "1.80.6", + "sass-embedded-darwin-x64": "1.80.6", + "sass-embedded-linux-arm": "1.80.6", + "sass-embedded-linux-arm64": "1.80.6", + "sass-embedded-linux-ia32": "1.80.6", + "sass-embedded-linux-musl-arm": "1.80.6", + "sass-embedded-linux-musl-arm64": "1.80.6", + "sass-embedded-linux-musl-ia32": "1.80.6", + "sass-embedded-linux-musl-riscv64": "1.80.6", + "sass-embedded-linux-musl-x64": "1.80.6", + "sass-embedded-linux-riscv64": "1.80.6", + "sass-embedded-linux-x64": "1.80.6", + "sass-embedded-win32-arm64": "1.80.6", + "sass-embedded-win32-ia32": "1.80.6", + "sass-embedded-win32-x64": "1.80.6" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.80.6.tgz", + "integrity": "sha512-UeUKMTRsnz4/dh7IzvhjONxa4/jmVp539CHDd8VZOsqg9M3HcNJNIkUzQWbuwZ+nSlWrTuo7Tvn3XlypopCBzw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true + "node_modules/sass-embedded-android-arm64": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.80.6.tgz", + "integrity": "sha512-4rC4ZGM/k4ENVjLXnK3JTst8e8FI9MHSol2Fl7dCdYyJ3KLnlt4qL4AEYfU8zq1tcBb7CBOSZVR+CzCKubnXdg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/sass-embedded-android-ia32": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.80.6.tgz", + "integrity": "sha512-Lxz2SXE2KdHnynuHF+D6flDvrd55/zaEAWUeka9MxEr6FmR66d8UBOIy5ETwCSUd//S/SE5Jl6oTnHppgD1zNA==", + "cpu": [ + "ia32" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6" + "node": ">=14.0.0" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "node_modules/sass-embedded-android-riscv64": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.80.6.tgz", + "integrity": "sha512-hKdxY/oOqB+JJhSoBTDM5DJO1j/xtxQgayh2cLCCUx37IQQe3SEdc3V2JFf/4mIo5peaS4cjqwwSATF+l2zaXg==", + "cpu": [ + "riscv64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/sass-embedded-android-x64": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.80.6.tgz", + "integrity": "sha512-Eap2Fi3kTx/rVLBsOnOp5RYPr5+lFjTZ652zR24dmYFe9/sDgasakJIOPjOvD2bRuL9z0uWEY1AXVeeOPeZKrg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.80.6.tgz", + "integrity": "sha512-0mnAx8Vq6Gxj3PQt3imgITfK33hhqrSKpyHSuab71gZZni5opsdtoggq2JawW+1taRFTEZwbZJLKZ0MBDbwCCA==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.10.0" + "node": ">=14.0.0" } }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "node_modules/sass-embedded-darwin-x64": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.80.6.tgz", + "integrity": "sha512-Ib20yNZFOrJ7YVT+ltoe+JQNKPcRclM3iLAK69XZZYcSeFM/72SCoQBAaVGIpT23dxDp7FXiE4lO602c3xTRwQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.10.0" + "node": ">=14.0.0" } }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "node_modules/sass-embedded-linux-arm": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.80.6.tgz", + "integrity": "sha512-QR0Q6TZox/ThuU2r9c0s3fKCgU2rXAEocpitdgxFp6tta+GsQlMFV3oON2unAa8Bwnuxkmf0YOaK0Oy/TwzkXw==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "node_modules/sass-embedded-linux-arm64": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.80.6.tgz", + "integrity": "sha512-n5r98pBXawrQQKaxIYCMM1zDpnngsqxTkOrmvsYLFiAMCSbR0lWf/7sBB33k/Pm0D6dsbp3jpHilCoQNKI3jIw==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" + "node": ">=14.0.0" } }, - "node_modules/read-package-up": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", - "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", + "node_modules/sass-embedded-linux-ia32": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.80.6.tgz", + "integrity": "sha512-O6dWZdcOkryRdDCxVMGOeVowgblpDgVcAuRtZ1F1X7XfbpDriTQm64D+9vVZIrywYSPoJfQMJJ662cr0wUs9IQ==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "find-up-simple": "^1.0.0", - "read-pkg": "^9.0.0", - "type-fest": "^4.6.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.0.0" } }, - "node_modules/read-pkg": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.80.6.tgz", + "integrity": "sha512-X9FC8s8fvQGRiXc+eATlZ57N44Iq3nNa0M0ugi3ysdJwkaNYvOeS4QzBHKQAaw3QiTqdxTnLUHHVBkyzdCi9pw==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.3", - "normalize-package-data": "^6.0.0", - "parse-json": "^8.0.0", - "type-fest": "^4.6.0", - "unicorn-magic": "^0.1.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.0.0" } }, - "node_modules/read-pkg-up": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-11.0.0.tgz", - "integrity": "sha512-LOVbvF1Q0SZdjClSefZ0Nz5z8u+tIE7mV5NibzmE9VYmDe9CaBbAVtz1veOSZbofrdsilxuDAYnFenukZVp8/Q==", - "deprecated": "Renamed to read-package-up", + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.80.6.tgz", + "integrity": "sha512-VeUSHUi3MAsvOlg9QI4X/2j04h1659aE+7qKP/282CYBTrGkjFGSXZhIki9WKWDgIpDiSInRYXfQQRWhPhjCDg==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "find-up-simple": "^1.0.0", - "read-pkg": "^9.0.0", - "type-fest": "^4.6.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.0.0" } }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/sass-embedded-linux-musl-ia32": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.80.6.tgz", + "integrity": "sha512-GqitS2Nab8ah0+wfCqaxW1hnI1piC08FimL6+lM9YWK5DbCOOF82IapbvJOy0feUmd/wNnHmyNTgE9h0zVMFdQ==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.80.6.tgz", + "integrity": "sha512-ySs15z7QSRRQK/aByEEqaJLYW/sTpfynefNPZCtsVNVEzNRwy+DRpxNChtxo+QjKq97ocXETbdG5KLik7QOTJg==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14" + "node": ">=14.0.0" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.80.6.tgz", + "integrity": "sha512-DzeNqU/SN0mWFznoOH4RtVGcrg3Eoa41pUQhKMtrhNbCmIE1zNDunUiAEVTNpdHJF4nxf7ELUPXWmStM31CbUQ==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" + "node": ">=14.0.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.80.6.tgz", + "integrity": "sha512-AyoHJ3icV9xuJjq1YzJqpEj2XfiC/KBkVYTUrCELKiXP0DN1gi/BpUwZNCAgCM3CyEdMef4LQM/ztCYJxYzdyg==", + "cpu": [ + "riscv64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" + "node": ">=14.0.0" } }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "node_modules/sass-embedded-linux-x64": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.80.6.tgz", + "integrity": "sha512-EohsE9CEqx0ycylnsEj/0DNPG99Tb0qAVZspiAs5xHFCJjXOFfp3cRQu0BRf+lZ1b72IhPFXymzVtojvzUHb7g==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/sass-embedded-win32-arm64": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.80.6.tgz", + "integrity": "sha512-29wETQi1ykeVvpd4zMVokpQKFSOZskGJzZawuuNCdo7BHjHKIRDsqbz8YT1CewHPBshI0hfD21fenmjxYjGXPQ==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=4" + "node": ">=14.0.0" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/sass-embedded-win32-ia32": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.80.6.tgz", + "integrity": "sha512-1s3OpK2iTIfIL/a91QhAQnffsbuWfnsM8Lx4Fxt0f7ErnxjCV6q8MUFTV/UhcLtLyTFnPCA62DLjp2KGCjMI9A==", + "cpu": [ + "ia32" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=14.0.0" } }, - "node_modules/rollup": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", - "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", + "node_modules/sass-embedded-win32-x64": { + "version": "1.80.6", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.80.6.tgz", + "integrity": "sha512-0pH4Zr9silHkcmLPC0ghnD3DI0vMsjA7dKvGR32/RbbjOSvHV5cDQRLiuVJAPp34dfMA7kJd1ysSchRdH0igAQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.22.4", - "@rollup/rollup-android-arm64": "4.22.4", - "@rollup/rollup-darwin-arm64": "4.22.4", - "@rollup/rollup-darwin-x64": "4.22.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", - "@rollup/rollup-linux-arm-musleabihf": "4.22.4", - "@rollup/rollup-linux-arm64-gnu": "4.22.4", - "@rollup/rollup-linux-arm64-musl": "4.22.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", - "@rollup/rollup-linux-riscv64-gnu": "4.22.4", - "@rollup/rollup-linux-s390x-gnu": "4.22.4", - "@rollup/rollup-linux-x64-gnu": "4.22.4", - "@rollup/rollup-linux-x64-musl": "4.22.4", - "@rollup/rollup-win32-arm64-msvc": "4.22.4", - "@rollup/rollup-win32-ia32-msvc": "4.22.4", - "@rollup/rollup-win32-x64-msvc": "4.22.4", - "fsevents": "~2.3.2" + "node": ">=14.0.0" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/sass-embedded/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "license": "MIT", "dependencies": { - "queue-microtask": "^1.2.2" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dev": true, + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } @@ -9032,6 +10272,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -9310,6 +10561,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true, + "license": "MIT" + }, "node_modules/temp-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", @@ -9431,15 +10689,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -9476,6 +10725,13 @@ "typescript": ">=4.2.0" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -9613,9 +10869,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -9631,9 +10887,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -9676,6 +10933,13 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "dev": true, + "license": "MIT" + }, "node_modules/vite": { "version": "5.4.3", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.3.tgz", @@ -9764,6 +11028,36 @@ } } }, + "node_modules/vite-plugin-lib-inject-css": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/vite-plugin-lib-inject-css/-/vite-plugin-lib-inject-css-2.1.1.tgz", + "integrity": "sha512-RIMeVnqBK/8I0E9nnQWzws6pdj5ilRMPJSnXYb6nWxNR4EmDPnksnb/ACoR5Fy7QfzULqS4gtQMrjwnNCC9zoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ast-grep/napi": "^0.22.3", + "magic-string": "^0.30.10", + "picocolors": "^1.0.0" + }, + "peerDependencies": { + "vite": "*" + } + }, + "node_modules/vite-plugin-svgr": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.3.0.tgz", + "integrity": "sha512-Jy9qLB2/PyWklpYy0xk0UU3TlU0t2UMpJXZvf+hWII1lAmRHrOUKi11Uw8N3rxoNk7atZNYO3pR3vI1f7oi+6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.3", + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0" + }, + "peerDependencies": { + "vite": ">=2.6.0" + } + }, "node_modules/vscode-uri": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", diff --git a/package.json b/package.json index 2c5ceab..358fc46 100644 --- a/package.json +++ b/package.json @@ -20,10 +20,15 @@ "access": "public" }, "dependencies": { - "@deriv-com/utils": "^0.0.37", "oidc-client-ts": "^3.1.0" }, + "peerDependencies": { + "@deriv-com/utils": "^0.0.37", + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, "devDependencies": { + "@deriv-com/utils": "^0.0.37", "@eslint/js": "^9.9.0", "@semantic-release/changelog": "^6.0.3", "@semantic-release/github": "^10.0.2", @@ -42,10 +47,14 @@ "prettier": "3.3.3", "react": "^18.3.1", "react-dom": "^18.3.1", + "sass": "^1.80.6", + "sass-embedded": "^1.80.6", "semantic-release": "^23.0.6", "typescript": "^5.5.4", "typescript-eslint": "^8.0.1", "vite": "^5.4.1", - "vite-plugin-dts": "^4.2.1" + "vite-plugin-dts": "^4.2.1", + "vite-plugin-lib-inject-css": "^2.1.1", + "vite-plugin-svgr": "^4.3.0" } } diff --git a/src/assets/404.png b/src/assets/404.png new file mode 100644 index 0000000000000000000000000000000000000000..e839b5911d0934de6dbf0374a43e15bccf60f583 GIT binary patch literal 25557 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/deriv_logo.svg b/src/assets/deriv_logo.svg new file mode 100644 index 0000000..e664ec6 --- /dev/null +++ b/src/assets/deriv_logo.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/components/Callback/Callback.scss b/src/components/Callback/Callback.scss new file mode 100644 index 0000000..c8b8fa5 --- /dev/null +++ b/src/components/Callback/Callback.scss @@ -0,0 +1,71 @@ +@import url('https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap'); + +.callback-container { + font-family: 'Ubuntu', sans-serif; + height: 100vh; + width: 100vw; + background-repeat: no-repeat; + background-position: center; + position: relative; + align-items: center; + + .callback-container__header { + border-bottom: 1px solid #00000014; + width: 100%; + display: flex; + align-items: center; + justify-content: center; + gap: 1.4rem; + position: absolute; + + & > svg { + width: 72px; + height: 24px; + display: flex; + align-items: center; + justify-content: center; + padding: auto 5%; + min-height: 5rem; + color: #ff444f; + } + } + + .callback-container__error { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100%; + gap: 1rem; + + h3 { + color: #000000; + font-size: 48px; + text-align: center; + font-weight: bold; + margin: 0; + } + + p { + font-weight: normal; + font-size: 16px; + } + + button { + width: fit-content; + } + } + + .callback-container__loading { + div.barspinner { + & > div.barspinner__rect { + background: #ff444f !important; + } + } + } + + & > svg { + width: 20rem; + height: 10rem; + } +} diff --git a/src/components/Callback/Callback.tsx b/src/components/Callback/Callback.tsx new file mode 100644 index 0000000..acc03b7 --- /dev/null +++ b/src/components/Callback/Callback.tsx @@ -0,0 +1,93 @@ +import { useState, useEffect } from 'react'; +import { LegacyTokens, requestLegacyToken, requestOidcToken } from '../../oidc'; +// @ts-expect-error blabla +import ErrorIcon from '../../assets/404.svg?react'; + +import './Callback.scss'; +import { OIDCError, OIDCErrorType } from '../../oidc/error'; + +const Loading = () => ( +
+ {Array.from(new Array(5)).map((_, inx) => ( +
+ ))} +
+); + +type CallbackProps = { + onSignInSuccess?: (tokens: LegacyTokens) => void; + onSignInError?: (error: Error) => void; + redirectUri: string; + postLogoutRedirectUri?: string; + onClickReturn?: () => void; + errorMessage?: string; +}; + +export const Callback = ({ + onClickReturn, + onSignInSuccess, + onSignInError, + redirectUri, + postLogoutRedirectUri, + errorMessage, +}: CallbackProps) => { + const [error, setError] = useState(null); + + const fetchTokens = async () => { + try { + const { accessToken } = await requestOidcToken(redirectUri, postLogoutRedirectUri); + + if (accessToken) { + const legacyTokens = await requestLegacyToken(accessToken); + + onSignInSuccess?.(legacyTokens); + } + } catch (err) { + if (err instanceof Error) { + setError(err); + onSignInError?.(err); + } + } + }; + + useEffect(() => { + const params = new URLSearchParams(window.location.search); + const oneTimeCode = params.get('code'); + + if (oneTimeCode) { + fetchTokens(); + } else { + setError( + new OIDCError( + OIDCErrorType.OneTimeCodeMissing, + 'the one time code was not returned by the authorization server' + ) + ); + } + }, []); + + return ( +
+
+ + + +
+
+ {!error && ( +
+ +
+ )} + {!error &&

We are logging you in...

} + {error && } + {error &&

There was an issue logging you in

} + {error &&

{errorMessage || error.message}

} + {error && } +
+
+ ); +}; diff --git a/src/components/Callback/index.ts b/src/components/Callback/index.ts new file mode 100644 index 0000000..f974f70 --- /dev/null +++ b/src/components/Callback/index.ts @@ -0,0 +1 @@ +export { Callback } from './Callback'; diff --git a/src/components/index.ts b/src/components/index.ts new file mode 100644 index 0000000..18d8816 --- /dev/null +++ b/src/components/index.ts @@ -0,0 +1 @@ +export * from './Callback'; diff --git a/src/index.ts b/src/index.ts index e9d6bb6..e4b0e47 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,2 +1,3 @@ export * from './hooks/'; export * from './oidc/'; +export * from './components/'; diff --git a/src/oidc/error.ts b/src/oidc/error.ts index e39c938..4eda9d1 100644 --- a/src/oidc/error.ts +++ b/src/oidc/error.ts @@ -1,34 +1,18 @@ export enum OIDCErrorType { - FailedToFetchOIDCConfiguration = "FailedToFetchOIDCConfiguration", - AuthenticationRequestFailed = "AuthenticationRequestFailed", - AccessTokenRequestFailed = "AccessTokenRequestFailed", - LegacyTokenRequestFailed = "LegacyTokenRequestFailed", - UserManagerCreationFailed = "UserManagerCreationFailed" + FailedToFetchOIDCConfiguration = 'FailedToFetchOIDCConfiguration', + AuthenticationRequestFailed = 'AuthenticationRequestFailed', + AccessTokenRequestFailed = 'AccessTokenRequestFailed', + LegacyTokenRequestFailed = 'LegacyTokenRequestFailed', + UserManagerCreationFailed = 'UserManagerCreationFailed', + OneTimeCodeMissing = 'OneTimeCodeMissing', } export class OIDCError extends Error { - constructor(type: OIDCErrorType) { - let message = ''; - switch (type) { - case OIDCErrorType.FailedToFetchOIDCConfiguration: - message = 'Failed to fetch OIDC configuration' - break - case OIDCErrorType.AuthenticationRequestFailed: - message = 'Authentication request failed' - break - case OIDCErrorType.AccessTokenRequestFailed: - message = 'Unable to request access tokens' - break - case OIDCErrorType.LegacyTokenRequestFailed: - message = 'Unable to request legacy tokens' - break - case OIDCErrorType.UserManagerCreationFailed: - message = 'Unable to create user manager for OIDC' - break - default: - message = 'There was an issue in authenticating the user' - } + type: OIDCErrorType; + + constructor(type: OIDCErrorType, message: string) { super(message); this.name = type; + this.type = type; } -} \ No newline at end of file +} diff --git a/src/oidc/index.ts b/src/oidc/index.ts index 8e2724a..17af272 100644 --- a/src/oidc/index.ts +++ b/src/oidc/index.ts @@ -1,6 +1,6 @@ import { UserManager, WebStorageStateStore } from 'oidc-client-ts'; -import { WebSocketUtils } from '@deriv-com/utils'; import { OIDCError, OIDCErrorType } from './error'; +import { getServerInfo } from '../constants'; type OidcConfiguration = { issuer: string; @@ -11,6 +11,16 @@ type OidcConfiguration = { post_logout_redirect_uri: string; }; +type GetLegacyTokensResponse = { + acct1: string; + token1: string; +}; + +export type LegacyTokens = { + acct1: string; + token1: string; +}; + /** * Fetches the OIDC configuration for the given serverUrl. * @returns {Promise} - A promise resolving to the OIDC configuration. @@ -27,19 +37,13 @@ export const fetchOidcConfiguration = async (): Promise => { const response = await fetch(oidc_url); const data = await response.json(); - const endpoints = { - authorization_endpoint: data.authorization_endpoint, - token_endpoint: data.token_endpoint, - userinfo_endpoint: data.userinfo_endpoint, - end_session_endpoint: data.end_session_endpoint, - }; - - localStorage.setItem('config.oidc_endpoints', JSON.stringify(endpoints)); + localStorage.setItem('config.oidc_endpoints', JSON.stringify(data)); return data; } catch (error) { console.error('Failed to fetch OIDC configuration:', error); - throw new OIDCError(OIDCErrorType.FailedToFetchOIDCConfiguration); + if (error instanceof Error) throw new OIDCError(OIDCErrorType.FailedToFetchOIDCConfiguration, error.message); + throw new OIDCError(OIDCErrorType.FailedToFetchOIDCConfiguration, 'unable to fetch OIDC configuration'); } }; @@ -48,19 +52,16 @@ export const fetchOidcConfiguration = async (): Promise => { * @param {string} redirect_uri - The URL to redirect to after authentication. * @param {string} post_logout_redirect_uri - The URL to redirect to after logout. */ -export const requestOidcAuthentication = async ( - app_id: string, - redirect_uri: string, - post_logout_redirect_uri: string -) => { +export const requestOidcAuthentication = async (redirect_uri: string, post_logout_redirect_uri: string) => { try { - const userManager = await createUserManager(app_id, redirect_uri, post_logout_redirect_uri); + const userManager = await createUserManager(redirect_uri, post_logout_redirect_uri); await userManager.signinRedirect(); return { userManager }; } catch (error) { console.error('Authentication failed:', error); - throw new OIDCError(OIDCErrorType.AuthenticationRequestFailed); + if (error instanceof Error) throw new OIDCError(OIDCErrorType.AuthenticationRequestFailed, error.message); + throw new OIDCError(OIDCErrorType.AuthenticationRequestFailed, 'unable to request OIDC authentication'); } }; @@ -72,12 +73,11 @@ export const requestOidcAuthentication = async ( * @param {string} post_logout_redirect_uri The URL to redirect to after logout. This defaults to the current URL where this function is called */ export const requestOidcToken = async ( - app_id: string, redirect_uri: string = window.location.href, post_logout_redirect_uri: string = window.location.href ) => { try { - const userManager = await createUserManager(app_id, redirect_uri, post_logout_redirect_uri); + const userManager = await createUserManager(redirect_uri, post_logout_redirect_uri); const user = await userManager.signinCallback(); @@ -86,7 +86,8 @@ export const requestOidcToken = async ( }; } catch (error) { console.error('unable to request access tokens: ', error); - throw new OIDCError(OIDCErrorType.AccessTokenRequestFailed); + if (error instanceof Error) throw new OIDCError(OIDCErrorType.AccessTokenRequestFailed, error.message); + throw new OIDCError(OIDCErrorType.AccessTokenRequestFailed, 'unable to request access tokens'); } }; @@ -95,7 +96,7 @@ export const requestOidcToken = async ( * * @param {string} accessToken The access token received after calling `requestOidcToken` successfully */ -export const requestLegacyToken = async (accessToken: string) => { +export const requestLegacyToken = async (accessToken: string): Promise => { const server_url_from_local_storage = localStorage.getItem('config.server_url') || 'oauth.deriv.com'; try { @@ -110,7 +111,8 @@ export const requestLegacyToken = async (accessToken: string) => { return data; } catch (error) { console.error('unable to request legacy tokens: ', error); - throw new OIDCError(OIDCErrorType.LegacyTokenRequestFailed); + if (error instanceof Error) throw new OIDCError(OIDCErrorType.LegacyTokenRequestFailed, error.message); + throw new OIDCError(OIDCErrorType.LegacyTokenRequestFailed, 'unable to request legacy tokens'); } }; @@ -120,15 +122,15 @@ export const requestLegacyToken = async (accessToken: string) => { * @param {string} redirect_uri - The URL to redirect to after authentication. * @param {string} post_logout_redirect_uri - The URL to redirect to after logout. */ -export const createUserManager = async (app_id: string, redirect_uri: string, post_logout_redirect_uri: string) => { - const client_id = app_id || localStorage.getItem('config.app_id') || WebSocketUtils.getAppId(); +export const createUserManager = async (redirect_uri: string, post_logout_redirect_uri: string) => { + const { appId } = getServerInfo(); try { const oidc_config = await fetchOidcConfiguration(); const userManager = new UserManager({ authority: oidc_config.issuer, - client_id: client_id, + client_id: appId, redirect_uri: redirect_uri, response_type: 'code', scope: 'openid', @@ -138,6 +140,7 @@ export const createUserManager = async (app_id: string, redirect_uri: string, po return userManager; } catch (error) { console.error('unable to create user manager for OIDC: ', error); - throw new OIDCError(OIDCErrorType.UserManagerCreationFailed); + if (error instanceof Error) throw new OIDCError(OIDCErrorType.UserManagerCreationFailed, error.message); + throw new OIDCError(OIDCErrorType.UserManagerCreationFailed, 'unable to create user manager for OIDC'); } }; diff --git a/tsconfig.json b/tsconfig.json index c518040..66068c6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,6 +19,6 @@ "noFallthroughCasesInSwitch": true, "allowSyntheticDefaultImports": true }, - "include": ["src"], + "include": ["src", "lib"], "exclude": ["**/*.spec.ts"] } diff --git a/vite.config.ts b/vite.config.ts index afd1823..c064267 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,11 +4,16 @@ import { extname, relative, resolve } from 'path'; import { fileURLToPath } from 'node:url'; import { glob } from 'glob'; import dts from 'vite-plugin-dts'; +import svgr from 'vite-plugin-svgr'; +import sass from 'sass'; +import { libInjectCss } from 'vite-plugin-lib-inject-css'; // https://vitejs.dev/config/ export default defineConfig({ plugins: [ react(), + libInjectCss(), + svgr(), dts({ include: ['src'], exclude: ['src/**/*.spec.tsx', 'src/App.tsx', 'src/main.tsx'], @@ -16,6 +21,18 @@ export default defineConfig({ insertTypesEntry: true, }), ], + resolve: { + alias: { + '@': resolve(__dirname, './src'), + }, + }, + css: { + preprocessorOptions: { + scss: { + implementation: sass, + }, + }, + }, build: { lib: { entry: resolve(__dirname, 'src/index.ts'), @@ -53,6 +70,10 @@ export default defineConfig({ output: { assetFileNames: 'assets/[name][extname]', entryFileNames: '[name].js', + globals: { + react: 'React', + 'react-dom': 'ReactDOM', + }, }, }, }, From c0967e5c1cab6ba23bbb0a4741c58da8c90420d2 Mon Sep 17 00:00:00 2001 From: Adrienne Rio Date: Fri, 15 Nov 2024 11:44:59 +0800 Subject: [PATCH 2/3] chore: added jsdocs and updated default login urls --- src/assets/404.png | Bin 25557 -> 0 bytes src/assets/deriv_logo.svg | 9 +- src/components/Callback/Callback.scss | 10 +- src/components/Callback/Callback.tsx | 111 ++++++-- src/oidc/config.ts | 9 + src/oidc/error.ts | 2 +- src/oidc/index.ts | 148 +--------- src/oidc/oidc.ts | 264 ++++++++++++++++++ src/svg.d.ts | 4 + ....timestamp-1731388576701-8082a0489a372.mjs | 71 +++++ 10 files changed, 445 insertions(+), 183 deletions(-) delete mode 100644 src/assets/404.png create mode 100644 src/oidc/config.ts create mode 100644 src/oidc/oidc.ts create mode 100644 src/svg.d.ts create mode 100644 vite.config.ts.timestamp-1731388576701-8082a0489a372.mjs diff --git a/src/assets/404.png b/src/assets/404.png deleted file mode 100644 index e839b5911d0934de6dbf0374a43e15bccf60f583..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25557 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 - - \ No newline at end of file + + + \ No newline at end of file diff --git a/src/components/Callback/Callback.scss b/src/components/Callback/Callback.scss index c8b8fa5..b784beb 100644 --- a/src/components/Callback/Callback.scss +++ b/src/components/Callback/Callback.scss @@ -1,6 +1,6 @@ @import url('https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap'); -.callback-container { +.callback { font-family: 'Ubuntu', sans-serif; height: 100vh; width: 100vw; @@ -9,7 +9,7 @@ position: relative; align-items: center; - .callback-container__header { + &__header { border-bottom: 1px solid #00000014; width: 100%; display: flex; @@ -30,7 +30,7 @@ } } - .callback-container__error { + &__content { display: flex; flex-direction: column; justify-content: center; @@ -40,7 +40,7 @@ h3 { color: #000000; - font-size: 48px; + font-size: 34px; text-align: center; font-weight: bold; margin: 0; @@ -56,7 +56,7 @@ } } - .callback-container__loading { + &__loading { div.barspinner { & > div.barspinner__rect { background: #ff444f !important; diff --git a/src/components/Callback/Callback.tsx b/src/components/Callback/Callback.tsx index acc03b7..78ab639 100644 --- a/src/components/Callback/Callback.tsx +++ b/src/components/Callback/Callback.tsx @@ -1,10 +1,9 @@ -import { useState, useEffect } from 'react'; -import { LegacyTokens, requestLegacyToken, requestOidcToken } from '../../oidc'; -// @ts-expect-error blabla -import ErrorIcon from '../../assets/404.svg?react'; +import { useCallback, useState, useEffect } from 'react'; +import { LegacyTokens, requestLegacyToken, requestOidcToken, OIDCError, OIDCErrorType } from '../../oidc'; +import { ReactComponent as ErrorIcon } from '../../assets/404.svg'; +import { ReactComponent as DerivLogoIcon } from '../../assets/deriv_logo.svg'; import './Callback.scss'; -import { OIDCError, OIDCErrorType } from '../../oidc/error'; const Loading = () => (
@@ -15,29 +14,69 @@ const Loading = () => ( ); type CallbackProps = { + /** callback function triggerred when `requestOidcToken` is successful. Use this only when you want to request the legacy tokens yourself, otherwise pass your callback to `onSignInSuccess` prop instead */ + onRequestOidcTokenSuccess?: (accessToken: string) => void; + /** callback function triggered when the OIDC authentication flow is successful */ onSignInSuccess?: (tokens: LegacyTokens) => void; + /** callback function triggered when sign-in encounters an error */ onSignInError?: (error: Error) => void; - redirectUri: string; + /** URI to redirect to the callback page. This is where you should pass the callback page URL in your app .e.g. https://app.deriv.com/callback or https://smarttrader.deriv.com/en/callback */ + redirectCallbackUri?: string; + /** URI to redirect after authentication is completed or failed */ + postLoginRedirectUri?: string; + /** URI to redirect after logout */ postLogoutRedirectUri?: string; - onClickReturn?: () => void; + /** callback function triggered when return button is clicked in error state */ + onClickReturn?: (error: OIDCError) => void; + /** custom error message to display */ errorMessage?: string; }; +/** + * Callback component handles the OAuth callback process and token management + * + * @component + * @param {Object} props - Component props + * @param {Function} [props.onSignInSuccess] - Callback for successful sign-in + * @param {Function} [props.onSignInError] - Callback for sign-in errors + * @param {string} props.callbackRedirectUri - The URI for the callback page + * @param {string} [props.postLogoutRedirectUri] - Post-logout redirect URI + * @param {Function} [props.onClickReturn] - Callback for return button click + * @param {string} [props.errorMessage] - Custom error message + * + * @returns {JSX.Element} Rendered component + * + * @example + * ```jsx + * handleSuccess(tokens)} + * onSignInError={(error) => handleError(error)} + * /> + **/ + export const Callback = ({ - onClickReturn, + onClickReturn: onClickReturnCallback, onSignInSuccess, onSignInError, - redirectUri, + onRequestOidcTokenSuccess, + redirectCallbackUri, + postLoginRedirectUri, postLogoutRedirectUri, errorMessage, }: CallbackProps) => { const [error, setError] = useState(null); - const fetchTokens = async () => { + const fetchTokens = useCallback(async () => { try { - const { accessToken } = await requestOidcToken(redirectUri, postLogoutRedirectUri); + const { accessToken } = await requestOidcToken({ + redirectCallbackUri, + postLogoutRedirectUri, + }); if (accessToken) { + onRequestOidcTokenSuccess?.(accessToken); + const legacyTokens = await requestLegacyToken(accessToken); onSignInSuccess?.(legacyTokens); @@ -48,6 +87,21 @@ export const Callback = ({ onSignInError?.(err); } } + }, [redirectCallbackUri, postLogoutRedirectUri]); + + const onClickReturn = () => { + if (onClickReturnCallback && error !== null) { + onClickReturnCallback(error); + } else { + // Redirect the user back to the page they started from + // If there's no record from where they came from, default to redirect back to their main home page (window.location.origin) + // window.location.origin returns => https://app.deriv.com if the URL is https://app.deriv.com/callback + const _postLoginRedirectUri = + postLoginRedirectUri || + localStorage.getItem('config.post_login_redirect_uri') || + window.location.origin; + window.location.href = _postLoginRedirectUri; + } }; useEffect(() => { @@ -67,26 +121,27 @@ export const Callback = ({ }, []); return ( -
-
- - - +
+
+
-
+
{!error && ( -
- -
+ <> +
+ +
+

We are logging you in...

+ + )} + {error && ( + <> + +

There was an issue logging you in

+

{errorMessage || error.message}

+ + )} - {!error &&

We are logging you in...

} - {error && } - {error &&

There was an issue logging you in

} - {error &&

{errorMessage || error.message}

} - {error && }
); diff --git a/src/oidc/config.ts b/src/oidc/config.ts new file mode 100644 index 0000000..dd70d12 --- /dev/null +++ b/src/oidc/config.ts @@ -0,0 +1,9 @@ +export const getConfigurations = () => { + const postLoginRedirectUri = localStorage.getItem('config.post_login_redirect_uri') || window.location.origin; + const postLogoutRedirectUri = localStorage.getItem('config.post_logout_redirect_uri') || window.location.origin; + + return { + postLoginRedirectUri, + postLogoutRedirectUri, + }; +}; diff --git a/src/oidc/error.ts b/src/oidc/error.ts index 4eda9d1..edf3e05 100644 --- a/src/oidc/error.ts +++ b/src/oidc/error.ts @@ -8,7 +8,7 @@ export enum OIDCErrorType { } export class OIDCError extends Error { - type: OIDCErrorType; + type?: OIDCErrorType; constructor(type: OIDCErrorType, message: string) { super(message); diff --git a/src/oidc/index.ts b/src/oidc/index.ts index 17af272..08f25d2 100644 --- a/src/oidc/index.ts +++ b/src/oidc/index.ts @@ -1,146 +1,2 @@ -import { UserManager, WebStorageStateStore } from 'oidc-client-ts'; -import { OIDCError, OIDCErrorType } from './error'; -import { getServerInfo } from '../constants'; - -type OidcConfiguration = { - issuer: string; - redirect_uri: string; - client_id: string; - response_type: string; - scope: string; - post_logout_redirect_uri: string; -}; - -type GetLegacyTokensResponse = { - acct1: string; - token1: string; -}; - -export type LegacyTokens = { - acct1: string; - token1: string; -}; - -/** - * Fetches the OIDC configuration for the given serverUrl. - * @returns {Promise} - A promise resolving to the OIDC configuration. - * @throws {Error} - If there is a failure while fetching the OIDC configuration. - */ -export const fetchOidcConfiguration = async (): Promise => { - const config_from_local_storage = localStorage.getItem('config.oidc_endpoints'); - if (config_from_local_storage) return JSON.parse(config_from_local_storage); - - const server_url_from_local_storage = localStorage.getItem('config.server_url') || 'oauth.deriv.com'; - const oidc_url = `https://${server_url_from_local_storage}/.well-known/openid-configuration`; - - try { - const response = await fetch(oidc_url); - const data = await response.json(); - - localStorage.setItem('config.oidc_endpoints', JSON.stringify(data)); - - return data; - } catch (error) { - console.error('Failed to fetch OIDC configuration:', error); - if (error instanceof Error) throw new OIDCError(OIDCErrorType.FailedToFetchOIDCConfiguration, error.message); - throw new OIDCError(OIDCErrorType.FailedToFetchOIDCConfiguration, 'unable to fetch OIDC configuration'); - } -}; - -/** - * Initiates the authentication flow by redirecting to the authorization endpoint. - * @param {string} redirect_uri - The URL to redirect to after authentication. - * @param {string} post_logout_redirect_uri - The URL to redirect to after logout. - */ -export const requestOidcAuthentication = async (redirect_uri: string, post_logout_redirect_uri: string) => { - try { - const userManager = await createUserManager(redirect_uri, post_logout_redirect_uri); - - await userManager.signinRedirect(); - return { userManager }; - } catch (error) { - console.error('Authentication failed:', error); - if (error instanceof Error) throw new OIDCError(OIDCErrorType.AuthenticationRequestFailed, error.message); - throw new OIDCError(OIDCErrorType.AuthenticationRequestFailed, 'unable to request OIDC authentication'); - } -}; - -/** - * Requests access tokens from the Hydra authorization server. - * The returned access tokens will be used to fetch the original tokens that can be passed to the `authorize` endpoint - * @param {string} app_id The app ID of the platform requesting the access tokens - * @param {string} redirect_uri The URL to redirect to after authentication. This defaults to the current URL where this function is called - * @param {string} post_logout_redirect_uri The URL to redirect to after logout. This defaults to the current URL where this function is called - */ -export const requestOidcToken = async ( - redirect_uri: string = window.location.href, - post_logout_redirect_uri: string = window.location.href -) => { - try { - const userManager = await createUserManager(redirect_uri, post_logout_redirect_uri); - - const user = await userManager.signinCallback(); - - return { - accessToken: user?.access_token, - }; - } catch (error) { - console.error('unable to request access tokens: ', error); - if (error instanceof Error) throw new OIDCError(OIDCErrorType.AccessTokenRequestFailed, error.message); - throw new OIDCError(OIDCErrorType.AccessTokenRequestFailed, 'unable to request access tokens'); - } -}; - -/** - * Fetches the tokens that will be passed to the `authorize` endpoint. - * - * @param {string} accessToken The access token received after calling `requestOidcToken` successfully - */ -export const requestLegacyToken = async (accessToken: string): Promise => { - const server_url_from_local_storage = localStorage.getItem('config.server_url') || 'oauth.deriv.com'; - - try { - const response = await fetch(`https://${server_url_from_local_storage}/oauth2/legacy/tokens`, { - method: 'POST', - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }); - const data = await response.json(); - - return data; - } catch (error) { - console.error('unable to request legacy tokens: ', error); - if (error instanceof Error) throw new OIDCError(OIDCErrorType.LegacyTokenRequestFailed, error.message); - throw new OIDCError(OIDCErrorType.LegacyTokenRequestFailed, 'unable to request legacy tokens'); - } -}; - -/** - * Creates a UserManager instance that will be used to manage and call the OIDC flow - * @param {string} app_id - The app ID of the platform - * @param {string} redirect_uri - The URL to redirect to after authentication. - * @param {string} post_logout_redirect_uri - The URL to redirect to after logout. - */ -export const createUserManager = async (redirect_uri: string, post_logout_redirect_uri: string) => { - const { appId } = getServerInfo(); - - try { - const oidc_config = await fetchOidcConfiguration(); - - const userManager = new UserManager({ - authority: oidc_config.issuer, - client_id: appId, - redirect_uri: redirect_uri, - response_type: 'code', - scope: 'openid', - stateStore: new WebStorageStateStore({ store: window.localStorage }), - post_logout_redirect_uri: post_logout_redirect_uri, - }); - return userManager; - } catch (error) { - console.error('unable to create user manager for OIDC: ', error); - if (error instanceof Error) throw new OIDCError(OIDCErrorType.UserManagerCreationFailed, error.message); - throw new OIDCError(OIDCErrorType.UserManagerCreationFailed, 'unable to create user manager for OIDC'); - } -}; +export * from './error'; +export * from './oidc'; diff --git a/src/oidc/oidc.ts b/src/oidc/oidc.ts new file mode 100644 index 0000000..62a00fd --- /dev/null +++ b/src/oidc/oidc.ts @@ -0,0 +1,264 @@ +import { UserManager, WebStorageStateStore } from 'oidc-client-ts'; +import { OIDCError, OIDCErrorType } from './error'; +import { getServerInfo } from '../constants'; +import { getConfigurations } from './config'; + +export type OidcConfiguration = { + issuer: string; + redirect_uri: string; + client_id: string; + response_type: string; + scope: string; + post_logout_redirect_uri: string; +}; + +export type LegacyTokens = { + acct1: string; + acct2?: string; + acct3?: string; + token1: string; + token2?: string; + token3?: string; + cur1: string; + cur2?: string; + cur3?: string; +}; + +type RequestOidcAuthenticationOptions = { + redirectCallbackUri?: string; + postLoginRedirectUri?: string; + postLogoutRedirectUri?: string; +}; + +type RequestOidcTokenOptions = { + redirectCallbackUri?: string; + postLogoutRedirectUri?: string; +}; + +type CreateUserManagerOptions = { + redirectCallbackUri?: string; + postLogoutRedirectUri?: string; +}; + +/** + * Fetches the OIDC configuration for the given serverUrl. + * @returns {Promise} - A promise resolving to the OIDC configuration. + * @throws {Error} - If there is a failure while fetching the OIDC configuration. + */ +export const fetchOidcConfiguration = async (): Promise => { + const configFromLocalStorage = localStorage.getItem('config.oidc_endpoints'); + if (configFromLocalStorage) { + const { serverUrl } = getServerInfo(); + const config = JSON.parse(configFromLocalStorage) as OidcConfiguration; + // we need to check this, because in case when they go to the endpoints page and switch the app ID and server URL + // we need to invalidate our OIDC configurations cuz its still pointing to the old server URL + if (config.issuer === serverUrl) return JSON.parse(configFromLocalStorage); + } + + const { serverUrl } = getServerInfo(); + const oidc_url = `https://${serverUrl}/.well-known/openid-configuration`; + + try { + const response = await fetch(oidc_url); + const data = await response.json(); + + localStorage.setItem('config.oidc_endpoints', JSON.stringify(data)); + + return data; + } catch (error) { + console.error('Failed to fetch OIDC configuration:', error); + if (error instanceof Error) throw new OIDCError(OIDCErrorType.FailedToFetchOIDCConfiguration, error.message); + throw new OIDCError(OIDCErrorType.FailedToFetchOIDCConfiguration, 'unable to fetch OIDC configuration'); + } +}; + +/** + * Initiates the OIDC authentication flow by redirecting to Deriv's authorization server. + * This is the first step in the OIDC flow, which calls the authorization endpoint and if successful, should redirect back to the callback page. + * + * Your application must have a callback page with the `Callback` component from this library, or if not, some page that calls the next few endpoints using `requestOidcToken` and `requestLegacyToken` + * + * @param options - Configuration options for the OIDC authentication request + * @param options.redirectCallbackUri - The callback page URI to redirect back + * @param options.postLoginRedirectUri - The URI to redirect after the callback page. This is where you usually pass the page URL where you initiated the login flow + * @param options.postLogoutRedirectUri - The URI where the application should redirect after processing the logout + * + * @returns Promise that resolves to an object containing the UserManager instance + * @throws {OIDCError} With type AuthenticationRequestFailed if the authentication request fails + * + * @example + * ```typescript + * try { + * const { userManager } = await requestOidcAuthentication({ + * redirectCallbackUri: 'https://smarttrader.deriv.com/en/callback', + * postLoginRedirectUri: 'https://smarttrader.deriv.com/en/trading', + * postLogoutRedirectUri: https://smarttrader.deriv.com/en/trading'' + * }); + * } catch (error) { + * // Handle authentication request error + * } + * ``` + * + * @remarks + * - If postLoginRedirectUri is not provided, it defaults to the current window's URL origin, i.e. https://smarttrader.deriv.com instead of https://smarttrader.deriv.com/en/trading + * - If postLogoutRedirectUri is not provided, it defaults to the current window's origin, i.e. https://smarttrader.deriv.com instead of https://smarttrader.deriv.com/en/trading + * - The post login/logout redirect URIs are stored in local storage as `config.post_login_redirect_uri` and `config.post_logout_redirect_uri` + */ +export const requestOidcAuthentication = async (options: RequestOidcAuthenticationOptions) => { + const { redirectCallbackUri, postLoginRedirectUri, postLogoutRedirectUri } = options; + + // If the post login redirect URI is not specified, redirect the user back to where the OIDC authentication is initiated + // This will be used later by the Callback component to redirect back to where the OIDC flow is initiated + localStorage.setItem('config.post_login_redirect_uri', postLoginRedirectUri || window.location.origin); + // Same as post login redirect URI, if not specified we default to where this function is called for post logout redirect + localStorage.setItem('config.post_logout_redirect_uri', postLogoutRedirectUri || window.location.origin); + + try { + const userManager = await createUserManager({ + redirectCallbackUri, + postLogoutRedirectUri, + }); + + await userManager.signinRedirect(); + return { userManager }; + } catch (error) { + console.error('Authentication failed:', error); + if (error instanceof Error) throw new OIDCError(OIDCErrorType.AuthenticationRequestFailed, error.message); + throw new OIDCError(OIDCErrorType.AuthenticationRequestFailed, 'unable to request OIDC authentication'); + } +}; + +/** + * Requests access tokens from the authorization server. * The returned access tokens will be used to fetch the original tokens that can be passed to the `authorize` endpoint. + * + * This function should only be called when `requestOidcAuthentication` has been called. Generally this function should be placed within the callback page. + * + * @param options - Configuration options for the OIDC token request + * @param options.redirectCallbackUri - The callback page URI to redirect back + * @param options.postLogoutRedirectUri - The URI to redirect after successfully logging out + * @returns Promise that resolves to an object containing the access token + * @returns {Object} result + * @returns {string} result.accessToken - The OAuth2/OIDC access token + * + * @throws {OIDCError} With type AccessTokenRequestFailed if the token request fails + * + * @example + * ```typescript + * try { + * const { accessToken } = await requestOidcToken({ + * redirectCallbackUri: 'https://smarttrader.deriv.com/en/callback' + * }); + * + * // Use the access token for authenticated API calls + * } catch (error) { + * // Handle token request error + * } + * ``` + * + * @remarks + * - This function should be called on the callback page/route of your application + * - The function expects the OIDC callback parameters to be present in the URL + * - The access token can be null if the authentication flow fails or is cancelled + */ +export const requestOidcToken = async (options: RequestOidcTokenOptions) => { + const { redirectCallbackUri, postLogoutRedirectUri } = options; + + try { + const userManager = await createUserManager({ + redirectCallbackUri, + postLogoutRedirectUri, + }); + + const user = await userManager.signinCallback(); + + return { + accessToken: user?.access_token, + }; + } catch (error) { + console.error('unable to request access tokens: ', error); + if (error instanceof Error) throw new OIDCError(OIDCErrorType.AccessTokenRequestFailed, error.message); + throw new OIDCError(OIDCErrorType.AccessTokenRequestFailed, 'unable to request access tokens'); + } +}; + +/** + * Fetches the tokens that will be passed to the `authorize` endpoint. + * + * @param {string} accessToken The access token received after calling `requestOidcToken` successfully + */ + +/** + * Fetches the tokens that will be passed to the `authorize` endpoint. + * + * @param {string} accessToken - The OAuth2/OIDC access token obtained from `requestOidcToken` function + * @returns {Promise} A promise that resolves to an object containing the legacy tokens + * + * @throws {OIDCError} With type LegacyTokenRequestFailed if the request fails + * + * @example + * ```typescript + * // YourCallbackPage.tsx + * try { + * const { accessToken } = await requestOidcToken(...) + * + * const legacyTokens = await requestLegacyToken(accessToken); + * + * } catch (error) { + * // Handle legacy token request error + * } + * ``` + */ +export const requestLegacyToken = async (accessToken: string): Promise => { + const { serverUrl } = getServerInfo(); + + try { + const response = await fetch(`https://${serverUrl}/oauth2/legacy/tokens`, { + method: 'POST', + headers: { + Authorization: `Bearer ${accessToken}`, + }, + }); + const data = await response.json(); + + return data; + } catch (error) { + console.error('unable to request legacy tokens: ', error); + if (error instanceof Error) throw new OIDCError(OIDCErrorType.LegacyTokenRequestFailed, error.message); + throw new OIDCError(OIDCErrorType.LegacyTokenRequestFailed, 'unable to request legacy tokens'); + } +}; + +/** + * Creates a UserManager instance that will be used to manage and call the OIDC flow + * @param options - Configuration options for the OIDC token request + * @param options.redirectCallbackUri - The callback page URI to redirect back + * @param options.postLogoutRedirectUri - The URI to redirect after logging out + */ +export const createUserManager = async (options: CreateUserManagerOptions) => { + const { redirectCallbackUri, postLogoutRedirectUri } = options; + const { appId } = getServerInfo(); + + const { postLogoutRedirectUri: postLogoutRedirectUriFromStorage } = getConfigurations(); + + // if the user does not provide a redirectUri, default to /callback route as the redirect URI + const _redirectUri = redirectCallbackUri || `${window.location.origin}/callback`; + const _postLogoutRedirectUri = postLogoutRedirectUri || postLogoutRedirectUriFromStorage || window.location.origin; + + try { + const oidc_config = await fetchOidcConfiguration(); + const userManager = new UserManager({ + authority: oidc_config.issuer, + client_id: appId, + redirect_uri: _redirectUri, + response_type: 'code', + scope: 'openid', + stateStore: new WebStorageStateStore({ store: window.localStorage }), + post_logout_redirect_uri: _postLogoutRedirectUri, + }); + return userManager; + } catch (error) { + console.error('unable to create user manager for OIDC: ', error); + if (error instanceof Error) throw new OIDCError(OIDCErrorType.UserManagerCreationFailed, error.message); + throw new OIDCError(OIDCErrorType.UserManagerCreationFailed, 'unable to create user manager for OIDC'); + } +}; diff --git a/src/svg.d.ts b/src/svg.d.ts new file mode 100644 index 0000000..6e59a47 --- /dev/null +++ b/src/svg.d.ts @@ -0,0 +1,4 @@ +declare module '*.svg' { + import React from 'react'; + export const ReactComponent: React.FunctionComponent>; +} diff --git a/vite.config.ts.timestamp-1731388576701-8082a0489a372.mjs b/vite.config.ts.timestamp-1731388576701-8082a0489a372.mjs new file mode 100644 index 0000000..4ecbcc8 --- /dev/null +++ b/vite.config.ts.timestamp-1731388576701-8082a0489a372.mjs @@ -0,0 +1,71 @@ +// vite.config.ts +import { defineConfig } from "file:///Users/adriennerio/Documents/auth-client/node_modules/vite/dist/node/index.js"; +import react from "file:///Users/adriennerio/Documents/auth-client/node_modules/@vitejs/plugin-react/dist/index.mjs"; +import { extname, relative, resolve } from "path"; +import { fileURLToPath } from "node:url"; +import { glob } from "file:///Users/adriennerio/Documents/auth-client/node_modules/glob/dist/esm/index.js"; +import dts from "file:///Users/adriennerio/Documents/auth-client/node_modules/vite-plugin-dts/dist/index.mjs"; +var __vite_injected_original_dirname = "/Users/adriennerio/Documents/auth-client"; +var __vite_injected_original_import_meta_url = "file:///Users/adriennerio/Documents/auth-client/vite.config.ts"; +var vite_config_default = defineConfig({ + plugins: [ + react(), + dts({ + include: ["src"], + exclude: ["src/**/*.spec.tsx", "src/App.tsx", "src/main.tsx"], + tsconfigPath: "./tsconfig.app.json", + insertTypesEntry: true + }) + ], + resolve: { + alias: { + "@": resolve(__vite_injected_original_dirname, "./src") + } + }, + build: { + lib: { + entry: resolve(__vite_injected_original_dirname, "src/index.ts"), + formats: ["es"], + name: "@deriv-com/auth-client", + fileName: "auth-client" + }, + copyPublicDir: false, + rollupOptions: { + external: ["react", "react/jsx-runtime", "react-dom", "@deriv-com/utils"], + input: Object.fromEntries( + glob.sync("src/**/*.{ts,tsx}", { + ignore: [ + "**/*.test.ts", + "**/*.test.tsx", + "**/*.spec.ts", + "**/*.spec.tsx", + "**/__tests__/**", + "./src/App.tsx", + "./src/main.tsx" + ] + }).map((file) => { + return [ + // The name of the entry point + // src/nested/foo.ts becomes nested/foo + relative("src", file.slice(0, file.length - extname(file).length)), + // The absolute path to the entry file + // src/nested/foo.ts becomes /project/src/nested/foo.ts + fileURLToPath(new URL(file, __vite_injected_original_import_meta_url)) + ]; + }) + ), + output: { + assetFileNames: "assets/[name][extname]", + entryFileNames: "[name].js", + globals: { + react: "React", + "react-dom": "ReactDOM" + } + } + } + } +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvYWRyaWVubmVyaW8vRG9jdW1lbnRzL2F1dGgtY2xpZW50XCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvYWRyaWVubmVyaW8vRG9jdW1lbnRzL2F1dGgtY2xpZW50L3ZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9hZHJpZW5uZXJpby9Eb2N1bWVudHMvYXV0aC1jbGllbnQvdml0ZS5jb25maWcudHNcIjtpbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tICd2aXRlJztcbmltcG9ydCByZWFjdCBmcm9tICdAdml0ZWpzL3BsdWdpbi1yZWFjdCc7XG5pbXBvcnQgeyBleHRuYW1lLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGdsb2IgfSBmcm9tICdnbG9iJztcbmltcG9ydCBkdHMgZnJvbSAndml0ZS1wbHVnaW4tZHRzJztcblxuLy8gaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy9cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyh7XG4gICAgcGx1Z2luczogW1xuICAgICAgICByZWFjdCgpLFxuICAgICAgICBkdHMoe1xuICAgICAgICAgICAgaW5jbHVkZTogWydzcmMnXSxcbiAgICAgICAgICAgIGV4Y2x1ZGU6IFsnc3JjLyoqLyouc3BlYy50c3gnLCAnc3JjL0FwcC50c3gnLCAnc3JjL21haW4udHN4J10sXG4gICAgICAgICAgICB0c2NvbmZpZ1BhdGg6ICcuL3RzY29uZmlnLmFwcC5qc29uJyxcbiAgICAgICAgICAgIGluc2VydFR5cGVzRW50cnk6IHRydWUsXG4gICAgICAgIH0pLFxuICAgIF0sXG4gICAgcmVzb2x2ZToge1xuICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgJ0AnOiByZXNvbHZlKF9fZGlybmFtZSwgJy4vc3JjJyksXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBidWlsZDoge1xuICAgICAgICBsaWI6IHtcbiAgICAgICAgICAgIGVudHJ5OiByZXNvbHZlKF9fZGlybmFtZSwgJ3NyYy9pbmRleC50cycpLFxuICAgICAgICAgICAgZm9ybWF0czogWydlcyddLFxuICAgICAgICAgICAgbmFtZTogJ0BkZXJpdi1jb20vYXV0aC1jbGllbnQnLFxuICAgICAgICAgICAgZmlsZU5hbWU6ICdhdXRoLWNsaWVudCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvcHlQdWJsaWNEaXI6IGZhbHNlLFxuICAgICAgICByb2xsdXBPcHRpb25zOiB7XG4gICAgICAgICAgICBleHRlcm5hbDogWydyZWFjdCcsICdyZWFjdC9qc3gtcnVudGltZScsICdyZWFjdC1kb20nLCAnQGRlcml2LWNvbS91dGlscyddLFxuICAgICAgICAgICAgaW5wdXQ6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgICAgICBnbG9iXG4gICAgICAgICAgICAgICAgICAgIC5zeW5jKCdzcmMvKiovKi57dHMsdHN4fScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqKi8qLnRlc3QudHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqKi8qLnRlc3QudHN4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKiovKi5zcGVjLnRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKiovKi5zcGVjLnRzeCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyoqL19fdGVzdHNfXy8qKicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4vc3JjL0FwcC50c3gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuL3NyYy9tYWluLnRzeCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAubWFwKGZpbGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgZW50cnkgcG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcmMvbmVzdGVkL2Zvby50cyBiZWNvbWVzIG5lc3RlZC9mb29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZSgnc3JjJywgZmlsZS5zbGljZSgwLCBmaWxlLmxlbmd0aCAtIGV4dG5hbWUoZmlsZSkubGVuZ3RoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGVudHJ5IGZpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcmMvbmVzdGVkL2Zvby50cyBiZWNvbWVzIC9wcm9qZWN0L3NyYy9uZXN0ZWQvZm9vLnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVVSTFRvUGF0aChuZXcgVVJMKGZpbGUsIGltcG9ydC5tZXRhLnVybCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldEZpbGVOYW1lczogJ2Fzc2V0cy9bbmFtZV1bZXh0bmFtZV0nLFxuICAgICAgICAgICAgICAgIGVudHJ5RmlsZU5hbWVzOiAnW25hbWVdLmpzJyxcbiAgICAgICAgICAgICAgICBnbG9iYWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWN0OiAnUmVhY3QnLFxuICAgICAgICAgICAgICAgICAgICAncmVhY3QtZG9tJzogJ1JlYWN0RE9NJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQTBTLFNBQVMsb0JBQW9CO0FBQ3ZVLE9BQU8sV0FBVztBQUNsQixTQUFTLFNBQVMsVUFBVSxlQUFlO0FBQzNDLFNBQVMscUJBQXFCO0FBQzlCLFNBQVMsWUFBWTtBQUNyQixPQUFPLFNBQVM7QUFMaEIsSUFBTSxtQ0FBbUM7QUFBK0ksSUFBTSwyQ0FBMkM7QUFRek8sSUFBTyxzQkFBUSxhQUFhO0FBQUEsRUFDeEIsU0FBUztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sSUFBSTtBQUFBLE1BQ0EsU0FBUyxDQUFDLEtBQUs7QUFBQSxNQUNmLFNBQVMsQ0FBQyxxQkFBcUIsZUFBZSxjQUFjO0FBQUEsTUFDNUQsY0FBYztBQUFBLE1BQ2Qsa0JBQWtCO0FBQUEsSUFDdEIsQ0FBQztBQUFBLEVBQ0w7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNMLE9BQU87QUFBQSxNQUNILEtBQUssUUFBUSxrQ0FBVyxPQUFPO0FBQUEsSUFDbkM7QUFBQSxFQUNKO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDSCxLQUFLO0FBQUEsTUFDRCxPQUFPLFFBQVEsa0NBQVcsY0FBYztBQUFBLE1BQ3hDLFNBQVMsQ0FBQyxJQUFJO0FBQUEsTUFDZCxNQUFNO0FBQUEsTUFDTixVQUFVO0FBQUEsSUFDZDtBQUFBLElBQ0EsZUFBZTtBQUFBLElBQ2YsZUFBZTtBQUFBLE1BQ1gsVUFBVSxDQUFDLFNBQVMscUJBQXFCLGFBQWEsa0JBQWtCO0FBQUEsTUFDeEUsT0FBTyxPQUFPO0FBQUEsUUFDVixLQUNLLEtBQUsscUJBQXFCO0FBQUEsVUFDdkIsUUFBUTtBQUFBLFlBQ0o7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNKO0FBQUEsUUFDSixDQUFDLEVBQ0EsSUFBSSxVQUFRO0FBQ1QsaUJBQU87QUFBQTtBQUFBO0FBQUEsWUFHSCxTQUFTLE9BQU8sS0FBSyxNQUFNLEdBQUcsS0FBSyxTQUFTLFFBQVEsSUFBSSxFQUFFLE1BQU0sQ0FBQztBQUFBO0FBQUE7QUFBQSxZQUdqRSxjQUFjLElBQUksSUFBSSxNQUFNLHdDQUFlLENBQUM7QUFBQSxVQUNoRDtBQUFBLFFBQ0osQ0FBQztBQUFBLE1BQ1Q7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNKLGdCQUFnQjtBQUFBLFFBQ2hCLGdCQUFnQjtBQUFBLFFBQ2hCLFNBQVM7QUFBQSxVQUNMLE9BQU87QUFBQSxVQUNQLGFBQWE7QUFBQSxRQUNqQjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNKLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg== From 5255b83143b9873278c500c559f62d44f5cfc00c Mon Sep 17 00:00:00 2001 From: Adrienne Rio Date: Fri, 15 Nov 2024 11:48:00 +0800 Subject: [PATCH 3/3] chore: removed build files --- ....timestamp-1731388576701-8082a0489a372.mjs | 71 ------------------- 1 file changed, 71 deletions(-) delete mode 100644 vite.config.ts.timestamp-1731388576701-8082a0489a372.mjs diff --git a/vite.config.ts.timestamp-1731388576701-8082a0489a372.mjs b/vite.config.ts.timestamp-1731388576701-8082a0489a372.mjs deleted file mode 100644 index 4ecbcc8..0000000 --- a/vite.config.ts.timestamp-1731388576701-8082a0489a372.mjs +++ /dev/null @@ -1,71 +0,0 @@ -// vite.config.ts -import { defineConfig } from "file:///Users/adriennerio/Documents/auth-client/node_modules/vite/dist/node/index.js"; -import react from "file:///Users/adriennerio/Documents/auth-client/node_modules/@vitejs/plugin-react/dist/index.mjs"; -import { extname, relative, resolve } from "path"; -import { fileURLToPath } from "node:url"; -import { glob } from "file:///Users/adriennerio/Documents/auth-client/node_modules/glob/dist/esm/index.js"; -import dts from "file:///Users/adriennerio/Documents/auth-client/node_modules/vite-plugin-dts/dist/index.mjs"; -var __vite_injected_original_dirname = "/Users/adriennerio/Documents/auth-client"; -var __vite_injected_original_import_meta_url = "file:///Users/adriennerio/Documents/auth-client/vite.config.ts"; -var vite_config_default = defineConfig({ - plugins: [ - react(), - dts({ - include: ["src"], - exclude: ["src/**/*.spec.tsx", "src/App.tsx", "src/main.tsx"], - tsconfigPath: "./tsconfig.app.json", - insertTypesEntry: true - }) - ], - resolve: { - alias: { - "@": resolve(__vite_injected_original_dirname, "./src") - } - }, - build: { - lib: { - entry: resolve(__vite_injected_original_dirname, "src/index.ts"), - formats: ["es"], - name: "@deriv-com/auth-client", - fileName: "auth-client" - }, - copyPublicDir: false, - rollupOptions: { - external: ["react", "react/jsx-runtime", "react-dom", "@deriv-com/utils"], - input: Object.fromEntries( - glob.sync("src/**/*.{ts,tsx}", { - ignore: [ - "**/*.test.ts", - "**/*.test.tsx", - "**/*.spec.ts", - "**/*.spec.tsx", - "**/__tests__/**", - "./src/App.tsx", - "./src/main.tsx" - ] - }).map((file) => { - return [ - // The name of the entry point - // src/nested/foo.ts becomes nested/foo - relative("src", file.slice(0, file.length - extname(file).length)), - // The absolute path to the entry file - // src/nested/foo.ts becomes /project/src/nested/foo.ts - fileURLToPath(new URL(file, __vite_injected_original_import_meta_url)) - ]; - }) - ), - output: { - assetFileNames: "assets/[name][extname]", - entryFileNames: "[name].js", - globals: { - react: "React", - "react-dom": "ReactDOM" - } - } - } - } -}); -export { - vite_config_default as default -}; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvYWRyaWVubmVyaW8vRG9jdW1lbnRzL2F1dGgtY2xpZW50XCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvYWRyaWVubmVyaW8vRG9jdW1lbnRzL2F1dGgtY2xpZW50L3ZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9hZHJpZW5uZXJpby9Eb2N1bWVudHMvYXV0aC1jbGllbnQvdml0ZS5jb25maWcudHNcIjtpbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tICd2aXRlJztcbmltcG9ydCByZWFjdCBmcm9tICdAdml0ZWpzL3BsdWdpbi1yZWFjdCc7XG5pbXBvcnQgeyBleHRuYW1lLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGdsb2IgfSBmcm9tICdnbG9iJztcbmltcG9ydCBkdHMgZnJvbSAndml0ZS1wbHVnaW4tZHRzJztcblxuLy8gaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy9cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyh7XG4gICAgcGx1Z2luczogW1xuICAgICAgICByZWFjdCgpLFxuICAgICAgICBkdHMoe1xuICAgICAgICAgICAgaW5jbHVkZTogWydzcmMnXSxcbiAgICAgICAgICAgIGV4Y2x1ZGU6IFsnc3JjLyoqLyouc3BlYy50c3gnLCAnc3JjL0FwcC50c3gnLCAnc3JjL21haW4udHN4J10sXG4gICAgICAgICAgICB0c2NvbmZpZ1BhdGg6ICcuL3RzY29uZmlnLmFwcC5qc29uJyxcbiAgICAgICAgICAgIGluc2VydFR5cGVzRW50cnk6IHRydWUsXG4gICAgICAgIH0pLFxuICAgIF0sXG4gICAgcmVzb2x2ZToge1xuICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgJ0AnOiByZXNvbHZlKF9fZGlybmFtZSwgJy4vc3JjJyksXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBidWlsZDoge1xuICAgICAgICBsaWI6IHtcbiAgICAgICAgICAgIGVudHJ5OiByZXNvbHZlKF9fZGlybmFtZSwgJ3NyYy9pbmRleC50cycpLFxuICAgICAgICAgICAgZm9ybWF0czogWydlcyddLFxuICAgICAgICAgICAgbmFtZTogJ0BkZXJpdi1jb20vYXV0aC1jbGllbnQnLFxuICAgICAgICAgICAgZmlsZU5hbWU6ICdhdXRoLWNsaWVudCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvcHlQdWJsaWNEaXI6IGZhbHNlLFxuICAgICAgICByb2xsdXBPcHRpb25zOiB7XG4gICAgICAgICAgICBleHRlcm5hbDogWydyZWFjdCcsICdyZWFjdC9qc3gtcnVudGltZScsICdyZWFjdC1kb20nLCAnQGRlcml2LWNvbS91dGlscyddLFxuICAgICAgICAgICAgaW5wdXQ6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgICAgICBnbG9iXG4gICAgICAgICAgICAgICAgICAgIC5zeW5jKCdzcmMvKiovKi57dHMsdHN4fScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqKi8qLnRlc3QudHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqKi8qLnRlc3QudHN4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKiovKi5zcGVjLnRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKiovKi5zcGVjLnRzeCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyoqL19fdGVzdHNfXy8qKicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4vc3JjL0FwcC50c3gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuL3NyYy9tYWluLnRzeCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAubWFwKGZpbGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgZW50cnkgcG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcmMvbmVzdGVkL2Zvby50cyBiZWNvbWVzIG5lc3RlZC9mb29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZSgnc3JjJywgZmlsZS5zbGljZSgwLCBmaWxlLmxlbmd0aCAtIGV4dG5hbWUoZmlsZSkubGVuZ3RoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGVudHJ5IGZpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcmMvbmVzdGVkL2Zvby50cyBiZWNvbWVzIC9wcm9qZWN0L3NyYy9uZXN0ZWQvZm9vLnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVVSTFRvUGF0aChuZXcgVVJMKGZpbGUsIGltcG9ydC5tZXRhLnVybCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldEZpbGVOYW1lczogJ2Fzc2V0cy9bbmFtZV1bZXh0bmFtZV0nLFxuICAgICAgICAgICAgICAgIGVudHJ5RmlsZU5hbWVzOiAnW25hbWVdLmpzJyxcbiAgICAgICAgICAgICAgICBnbG9iYWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWN0OiAnUmVhY3QnLFxuICAgICAgICAgICAgICAgICAgICAncmVhY3QtZG9tJzogJ1JlYWN0RE9NJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQTBTLFNBQVMsb0JBQW9CO0FBQ3ZVLE9BQU8sV0FBVztBQUNsQixTQUFTLFNBQVMsVUFBVSxlQUFlO0FBQzNDLFNBQVMscUJBQXFCO0FBQzlCLFNBQVMsWUFBWTtBQUNyQixPQUFPLFNBQVM7QUFMaEIsSUFBTSxtQ0FBbUM7QUFBK0ksSUFBTSwyQ0FBMkM7QUFRek8sSUFBTyxzQkFBUSxhQUFhO0FBQUEsRUFDeEIsU0FBUztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sSUFBSTtBQUFBLE1BQ0EsU0FBUyxDQUFDLEtBQUs7QUFBQSxNQUNmLFNBQVMsQ0FBQyxxQkFBcUIsZUFBZSxjQUFjO0FBQUEsTUFDNUQsY0FBYztBQUFBLE1BQ2Qsa0JBQWtCO0FBQUEsSUFDdEIsQ0FBQztBQUFBLEVBQ0w7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNMLE9BQU87QUFBQSxNQUNILEtBQUssUUFBUSxrQ0FBVyxPQUFPO0FBQUEsSUFDbkM7QUFBQSxFQUNKO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDSCxLQUFLO0FBQUEsTUFDRCxPQUFPLFFBQVEsa0NBQVcsY0FBYztBQUFBLE1BQ3hDLFNBQVMsQ0FBQyxJQUFJO0FBQUEsTUFDZCxNQUFNO0FBQUEsTUFDTixVQUFVO0FBQUEsSUFDZDtBQUFBLElBQ0EsZUFBZTtBQUFBLElBQ2YsZUFBZTtBQUFBLE1BQ1gsVUFBVSxDQUFDLFNBQVMscUJBQXFCLGFBQWEsa0JBQWtCO0FBQUEsTUFDeEUsT0FBTyxPQUFPO0FBQUEsUUFDVixLQUNLLEtBQUsscUJBQXFCO0FBQUEsVUFDdkIsUUFBUTtBQUFBLFlBQ0o7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNKO0FBQUEsUUFDSixDQUFDLEVBQ0EsSUFBSSxVQUFRO0FBQ1QsaUJBQU87QUFBQTtBQUFBO0FBQUEsWUFHSCxTQUFTLE9BQU8sS0FBSyxNQUFNLEdBQUcsS0FBSyxTQUFTLFFBQVEsSUFBSSxFQUFFLE1BQU0sQ0FBQztBQUFBO0FBQUE7QUFBQSxZQUdqRSxjQUFjLElBQUksSUFBSSxNQUFNLHdDQUFlLENBQUM7QUFBQSxVQUNoRDtBQUFBLFFBQ0osQ0FBQztBQUFBLE1BQ1Q7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNKLGdCQUFnQjtBQUFBLFFBQ2hCLGdCQUFnQjtBQUFBLFFBQ2hCLFNBQVM7QUFBQSxVQUNMLE9BQU87QUFBQSxVQUNQLGFBQWE7QUFBQSxRQUNqQjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNKLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==