mirror of
https://github.com/labring/FastGPT.git
synced 2025-10-20 18:54:09 +00:00
feat: google auth
This commit is contained in:
@@ -50,10 +50,10 @@
|
|||||||
"react-hook-form": "^7.43.1",
|
"react-hook-form": "^7.43.1",
|
||||||
"react-markdown": "^8.0.5",
|
"react-markdown": "^8.0.5",
|
||||||
"react-syntax-highlighter": "^15.5.0",
|
"react-syntax-highlighter": "^15.5.0",
|
||||||
"redis": "^4.6.5",
|
|
||||||
"rehype-katex": "^6.0.2",
|
"rehype-katex": "^6.0.2",
|
||||||
"remark-gfm": "^3.0.1",
|
"remark-gfm": "^3.0.1",
|
||||||
"remark-math": "^5.1.1",
|
"remark-math": "^5.1.1",
|
||||||
|
"request-ip": "^3.3.0",
|
||||||
"sass": "^1.58.3",
|
"sass": "^1.58.3",
|
||||||
"sharp": "^0.31.3",
|
"sharp": "^0.31.3",
|
||||||
"tunnel": "^0.0.6",
|
"tunnel": "^0.0.6",
|
||||||
@@ -73,6 +73,7 @@
|
|||||||
"@types/react": "18.0.28",
|
"@types/react": "18.0.28",
|
||||||
"@types/react-dom": "18.0.11",
|
"@types/react-dom": "18.0.11",
|
||||||
"@types/react-syntax-highlighter": "^15.5.6",
|
"@types/react-syntax-highlighter": "^15.5.6",
|
||||||
|
"@types/request-ip": "^0.0.37",
|
||||||
"@types/tunnel": "^0.0.3",
|
"@types/tunnel": "^0.0.3",
|
||||||
"eslint": "8.34.0",
|
"eslint": "8.34.0",
|
||||||
"eslint-config-next": "13.1.6",
|
"eslint-config-next": "13.1.6",
|
||||||
|
129
pnpm-lock.yaml
generated
129
pnpm-lock.yaml
generated
@@ -25,6 +25,7 @@ specifiers:
|
|||||||
'@types/react': 18.0.28
|
'@types/react': 18.0.28
|
||||||
'@types/react-dom': 18.0.11
|
'@types/react-dom': 18.0.11
|
||||||
'@types/react-syntax-highlighter': ^15.5.6
|
'@types/react-syntax-highlighter': ^15.5.6
|
||||||
|
'@types/request-ip': ^0.0.37
|
||||||
'@types/tunnel': ^0.0.3
|
'@types/tunnel': ^0.0.3
|
||||||
axios: ^1.3.3
|
axios: ^1.3.3
|
||||||
cookie: ^0.5.0
|
cookie: ^0.5.0
|
||||||
@@ -58,10 +59,10 @@ specifiers:
|
|||||||
react-hook-form: ^7.43.1
|
react-hook-form: ^7.43.1
|
||||||
react-markdown: ^8.0.5
|
react-markdown: ^8.0.5
|
||||||
react-syntax-highlighter: ^15.5.0
|
react-syntax-highlighter: ^15.5.0
|
||||||
redis: ^4.6.5
|
|
||||||
rehype-katex: ^6.0.2
|
rehype-katex: ^6.0.2
|
||||||
remark-gfm: ^3.0.1
|
remark-gfm: ^3.0.1
|
||||||
remark-math: ^5.1.1
|
remark-math: ^5.1.1
|
||||||
|
request-ip: ^3.3.0
|
||||||
sass: ^1.58.3
|
sass: ^1.58.3
|
||||||
sharp: ^0.31.3
|
sharp: ^0.31.3
|
||||||
tunnel: ^0.0.6
|
tunnel: ^0.0.6
|
||||||
@@ -109,10 +110,10 @@ dependencies:
|
|||||||
react-hook-form: registry.npmmirror.com/react-hook-form/7.43.1_react@18.2.0
|
react-hook-form: registry.npmmirror.com/react-hook-form/7.43.1_react@18.2.0
|
||||||
react-markdown: registry.npmmirror.com/react-markdown/8.0.5_pmekkgnqduwlme35zpnqhenc34
|
react-markdown: registry.npmmirror.com/react-markdown/8.0.5_pmekkgnqduwlme35zpnqhenc34
|
||||||
react-syntax-highlighter: registry.npmmirror.com/react-syntax-highlighter/15.5.0_react@18.2.0
|
react-syntax-highlighter: registry.npmmirror.com/react-syntax-highlighter/15.5.0_react@18.2.0
|
||||||
redis: registry.npmmirror.com/redis/4.6.5
|
|
||||||
rehype-katex: registry.npmmirror.com/rehype-katex/6.0.2
|
rehype-katex: registry.npmmirror.com/rehype-katex/6.0.2
|
||||||
remark-gfm: registry.npmmirror.com/remark-gfm/3.0.1
|
remark-gfm: registry.npmmirror.com/remark-gfm/3.0.1
|
||||||
remark-math: registry.npmmirror.com/remark-math/5.1.1
|
remark-math: registry.npmmirror.com/remark-math/5.1.1
|
||||||
|
request-ip: 3.3.0
|
||||||
sass: registry.npmmirror.com/sass/1.58.3
|
sass: registry.npmmirror.com/sass/1.58.3
|
||||||
sharp: registry.npmmirror.com/sharp/0.31.3
|
sharp: registry.npmmirror.com/sharp/0.31.3
|
||||||
tunnel: registry.npmmirror.com/tunnel/0.0.6
|
tunnel: registry.npmmirror.com/tunnel/0.0.6
|
||||||
@@ -132,6 +133,7 @@ devDependencies:
|
|||||||
'@types/react': registry.npmmirror.com/@types/react/18.0.28
|
'@types/react': registry.npmmirror.com/@types/react/18.0.28
|
||||||
'@types/react-dom': registry.npmmirror.com/@types/react-dom/18.0.11
|
'@types/react-dom': registry.npmmirror.com/@types/react-dom/18.0.11
|
||||||
'@types/react-syntax-highlighter': registry.npmmirror.com/@types/react-syntax-highlighter/15.5.6
|
'@types/react-syntax-highlighter': registry.npmmirror.com/@types/react-syntax-highlighter/15.5.6
|
||||||
|
'@types/request-ip': 0.0.37
|
||||||
'@types/tunnel': registry.npmmirror.com/@types/tunnel/0.0.3
|
'@types/tunnel': registry.npmmirror.com/@types/tunnel/0.0.3
|
||||||
eslint: registry.npmmirror.com/eslint/8.34.0
|
eslint: registry.npmmirror.com/eslint/8.34.0
|
||||||
eslint-config-next: registry.npmmirror.com/eslint-config-next/13.1.6_7kw3g6rralp5ps6mg3uyzz6azm
|
eslint-config-next: registry.npmmirror.com/eslint-config-next/13.1.6_7kw3g6rralp5ps6mg3uyzz6azm
|
||||||
@@ -302,6 +304,19 @@ packages:
|
|||||||
'@types/unist': 2.0.6
|
'@types/unist': 2.0.6
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@types/node/14.18.42:
|
||||||
|
resolution: {integrity: sha512-xefu+RBie4xWlK8hwAzGh3npDz/4VhF6icY/shU+zv/1fNn+ZVG7T7CRwe9LId9sAYRPxI+59QBPuKL3WpyGRg==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@types/node/18.14.0:
|
||||||
|
resolution: {integrity: sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==}
|
||||||
|
|
||||||
|
/@types/request-ip/0.0.37:
|
||||||
|
resolution: {integrity: sha512-uw6/i3rQnpznxD7LtLaeuZytLhKZK6bRoTS6XVJlwxIOoOpEBU7bgKoVXDNtOg4Xl6riUKHa9bjMVrL6ESqYlQ==}
|
||||||
|
dependencies:
|
||||||
|
'@types/node': 18.14.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
/@types/unist/2.0.6:
|
/@types/unist/2.0.6:
|
||||||
resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
|
resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
|
||||||
dev: false
|
dev: false
|
||||||
@@ -347,6 +362,10 @@ packages:
|
|||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/request-ip/3.3.0:
|
||||||
|
resolution: {integrity: sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/saslprep/1.0.3:
|
/saslprep/1.0.3:
|
||||||
resolution: {integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==}
|
resolution: {integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
@@ -4897,72 +4916,6 @@ packages:
|
|||||||
version: 2.11.6
|
version: 2.11.6
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
registry.npmmirror.com/@redis/bloom/1.2.0_@redis+client@1.5.6:
|
|
||||||
resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@redis/bloom/-/bloom-1.2.0.tgz}
|
|
||||||
id: registry.npmmirror.com/@redis/bloom/1.2.0
|
|
||||||
name: '@redis/bloom'
|
|
||||||
version: 1.2.0
|
|
||||||
peerDependencies:
|
|
||||||
'@redis/client': ^1.0.0
|
|
||||||
dependencies:
|
|
||||||
'@redis/client': registry.npmmirror.com/@redis/client/1.5.6
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
registry.npmmirror.com/@redis/client/1.5.6:
|
|
||||||
resolution: {integrity: sha512-dFD1S6je+A47Lj22jN/upVU2fj4huR7S9APd7/ziUXsIXDL+11GPYti4Suv5y8FuXaN+0ZG4JF+y1houEJ7ToA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@redis/client/-/client-1.5.6.tgz}
|
|
||||||
name: '@redis/client'
|
|
||||||
version: 1.5.6
|
|
||||||
engines: {node: '>=14'}
|
|
||||||
dependencies:
|
|
||||||
cluster-key-slot: registry.npmmirror.com/cluster-key-slot/1.1.2
|
|
||||||
generic-pool: registry.npmmirror.com/generic-pool/3.9.0
|
|
||||||
yallist: registry.npmmirror.com/yallist/4.0.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
registry.npmmirror.com/@redis/graph/1.1.0_@redis+client@1.5.6:
|
|
||||||
resolution: {integrity: sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@redis/graph/-/graph-1.1.0.tgz}
|
|
||||||
id: registry.npmmirror.com/@redis/graph/1.1.0
|
|
||||||
name: '@redis/graph'
|
|
||||||
version: 1.1.0
|
|
||||||
peerDependencies:
|
|
||||||
'@redis/client': ^1.0.0
|
|
||||||
dependencies:
|
|
||||||
'@redis/client': registry.npmmirror.com/@redis/client/1.5.6
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
registry.npmmirror.com/@redis/json/1.0.4_@redis+client@1.5.6:
|
|
||||||
resolution: {integrity: sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@redis/json/-/json-1.0.4.tgz}
|
|
||||||
id: registry.npmmirror.com/@redis/json/1.0.4
|
|
||||||
name: '@redis/json'
|
|
||||||
version: 1.0.4
|
|
||||||
peerDependencies:
|
|
||||||
'@redis/client': ^1.0.0
|
|
||||||
dependencies:
|
|
||||||
'@redis/client': registry.npmmirror.com/@redis/client/1.5.6
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
registry.npmmirror.com/@redis/search/1.1.2_@redis+client@1.5.6:
|
|
||||||
resolution: {integrity: sha512-/cMfstG/fOh/SsE+4/BQGeuH/JJloeWuH+qJzM8dbxuWvdWibWAOAHHCZTMPhV3xIlH4/cUEIA8OV5QnYpaVoA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@redis/search/-/search-1.1.2.tgz}
|
|
||||||
id: registry.npmmirror.com/@redis/search/1.1.2
|
|
||||||
name: '@redis/search'
|
|
||||||
version: 1.1.2
|
|
||||||
peerDependencies:
|
|
||||||
'@redis/client': ^1.0.0
|
|
||||||
dependencies:
|
|
||||||
'@redis/client': registry.npmmirror.com/@redis/client/1.5.6
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
registry.npmmirror.com/@redis/time-series/1.0.4_@redis+client@1.5.6:
|
|
||||||
resolution: {integrity: sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@redis/time-series/-/time-series-1.0.4.tgz}
|
|
||||||
id: registry.npmmirror.com/@redis/time-series/1.0.4
|
|
||||||
name: '@redis/time-series'
|
|
||||||
version: 1.0.4
|
|
||||||
peerDependencies:
|
|
||||||
'@redis/client': ^1.0.0
|
|
||||||
dependencies:
|
|
||||||
'@redis/client': registry.npmmirror.com/@redis/client/1.5.6
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
registry.npmmirror.com/@rushstack/eslint-patch/1.2.0:
|
registry.npmmirror.com/@rushstack/eslint-patch/1.2.0:
|
||||||
resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz}
|
resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz}
|
||||||
name: '@rushstack/eslint-patch'
|
name: '@rushstack/eslint-patch'
|
||||||
@@ -5287,16 +5240,11 @@ packages:
|
|||||||
version: 12.20.55
|
version: 12.20.55
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
registry.npmmirror.com/@types/node/14.18.42:
|
|
||||||
resolution: {integrity: sha512-xefu+RBie4xWlK8hwAzGh3npDz/4VhF6icY/shU+zv/1fNn+ZVG7T7CRwe9LId9sAYRPxI+59QBPuKL3WpyGRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-14.18.42.tgz}
|
|
||||||
name: '@types/node'
|
|
||||||
version: 14.18.42
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
registry.npmmirror.com/@types/node/18.14.0:
|
registry.npmmirror.com/@types/node/18.14.0:
|
||||||
resolution: {integrity: sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-18.14.0.tgz}
|
resolution: {integrity: sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-18.14.0.tgz}
|
||||||
name: '@types/node'
|
name: '@types/node'
|
||||||
version: 18.14.0
|
version: 18.14.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
registry.npmmirror.com/@types/nodemailer/6.4.7:
|
registry.npmmirror.com/@types/nodemailer/6.4.7:
|
||||||
resolution: {integrity: sha512-f5qCBGAn/f0qtRcd4SEn88c8Fp3Swct1731X4ryPKqS61/A3LmmzN8zaEz7hneJvpjFbUUgY7lru/B/7ODTazg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/nodemailer/-/nodemailer-6.4.7.tgz}
|
resolution: {integrity: sha512-f5qCBGAn/f0qtRcd4SEn88c8Fp3Swct1731X4ryPKqS61/A3LmmzN8zaEz7hneJvpjFbUUgY7lru/B/7ODTazg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/nodemailer/-/nodemailer-6.4.7.tgz}
|
||||||
@@ -5395,7 +5343,7 @@ packages:
|
|||||||
name: '@types/whatwg-url'
|
name: '@types/whatwg-url'
|
||||||
version: 8.2.2
|
version: 8.2.2
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': registry.npmmirror.com/@types/node/18.14.0
|
'@types/node': 18.14.0
|
||||||
'@types/webidl-conversions': registry.npmmirror.com/@types/webidl-conversions/7.0.0
|
'@types/webidl-conversions': registry.npmmirror.com/@types/webidl-conversions/7.0.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
@@ -5404,7 +5352,7 @@ packages:
|
|||||||
name: '@types/xml2js'
|
name: '@types/xml2js'
|
||||||
version: 0.4.11
|
version: 0.4.11
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': registry.npmmirror.com/@types/node/18.14.0
|
'@types/node': 18.14.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
registry.npmmirror.com/@typescript-eslint/parser/5.52.0_7kw3g6rralp5ps6mg3uyzz6azm:
|
registry.npmmirror.com/@typescript-eslint/parser/5.52.0_7kw3g6rralp5ps6mg3uyzz6azm:
|
||||||
@@ -6117,13 +6065,6 @@ packages:
|
|||||||
version: 0.0.1
|
version: 0.0.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
registry.npmmirror.com/cluster-key-slot/1.1.2:
|
|
||||||
resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz}
|
|
||||||
name: cluster-key-slot
|
|
||||||
version: 1.1.2
|
|
||||||
engines: {node: '>=0.10.0'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
registry.npmmirror.com/color-convert/1.9.3:
|
registry.npmmirror.com/color-convert/1.9.3:
|
||||||
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz}
|
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz}
|
||||||
name: color-convert
|
name: color-convert
|
||||||
@@ -7514,13 +7455,6 @@ packages:
|
|||||||
version: 1.2.3
|
version: 1.2.3
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
registry.npmmirror.com/generic-pool/3.9.0:
|
|
||||||
resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/generic-pool/-/generic-pool-3.9.0.tgz}
|
|
||||||
name: generic-pool
|
|
||||||
version: 3.9.0
|
|
||||||
engines: {node: '>= 4'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
registry.npmmirror.com/gensync/1.0.0-beta.2:
|
registry.npmmirror.com/gensync/1.0.0-beta.2:
|
||||||
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz}
|
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz}
|
||||||
name: gensync
|
name: gensync
|
||||||
@@ -7926,7 +7860,7 @@ packages:
|
|||||||
name: httpx
|
name: httpx
|
||||||
version: 2.2.7
|
version: 2.2.7
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': registry.npmmirror.com/@types/node/14.18.42
|
'@types/node': 14.18.42
|
||||||
debug: registry.npmmirror.com/debug/4.3.4
|
debug: registry.npmmirror.com/debug/4.3.4
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@@ -10515,19 +10449,6 @@ packages:
|
|||||||
picomatch: registry.npmmirror.com/picomatch/2.3.1
|
picomatch: registry.npmmirror.com/picomatch/2.3.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
registry.npmmirror.com/redis/4.6.5:
|
|
||||||
resolution: {integrity: sha512-O0OWA36gDQbswOdUuAhRL6mTZpHFN525HlgZgDaVNgCJIAZR3ya06NTESb0R+TUZ+BFaDpz6NnnVvoMx9meUFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/redis/-/redis-4.6.5.tgz}
|
|
||||||
name: redis
|
|
||||||
version: 4.6.5
|
|
||||||
dependencies:
|
|
||||||
'@redis/bloom': registry.npmmirror.com/@redis/bloom/1.2.0_@redis+client@1.5.6
|
|
||||||
'@redis/client': registry.npmmirror.com/@redis/client/1.5.6
|
|
||||||
'@redis/graph': registry.npmmirror.com/@redis/graph/1.1.0_@redis+client@1.5.6
|
|
||||||
'@redis/json': registry.npmmirror.com/@redis/json/1.0.4_@redis+client@1.5.6
|
|
||||||
'@redis/search': registry.npmmirror.com/@redis/search/1.1.2_@redis+client@1.5.6
|
|
||||||
'@redis/time-series': registry.npmmirror.com/@redis/time-series/1.0.4_@redis+client@1.5.6
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
registry.npmmirror.com/reflect-metadata/0.1.13:
|
registry.npmmirror.com/reflect-metadata/0.1.13:
|
||||||
resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz}
|
resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz}
|
||||||
name: reflect-metadata
|
name: reflect-metadata
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
import { GET, POST, PUT } from './request';
|
import { GET, POST, PUT } from './request';
|
||||||
import type { ChatModelItemType } from '@/constants/model';
|
import type { ChatModelItemType } from '@/constants/model';
|
||||||
|
import type { InitDateResponse } from '@/pages/api/system/getInitData';
|
||||||
|
|
||||||
export const getFilling = () => GET<{ beianText: string }>('/system/getFiling');
|
export const getInitData = () => GET<InitDateResponse>('/system/getInitData');
|
||||||
|
|
||||||
export const getSystemModelList = () => GET<ChatModelItemType[]>('/system/getModels');
|
export const getSystemModelList = () => GET<ChatModelItemType[]>('/system/getModels');
|
||||||
|
@@ -6,13 +6,11 @@ import { UserBillType, UserType, UserUpdateParams } from '@/types/user';
|
|||||||
import type { PagingData, RequestPaging } from '@/types';
|
import type { PagingData, RequestPaging } from '@/types';
|
||||||
import { PaySchema } from '@/types/mongoSchema';
|
import { PaySchema } from '@/types/mongoSchema';
|
||||||
|
|
||||||
export const sendAuthCode = ({
|
export const sendAuthCode = (data: {
|
||||||
username,
|
|
||||||
type
|
|
||||||
}: {
|
|
||||||
username: string;
|
username: string;
|
||||||
type: `${UserAuthTypeEnum}`;
|
type: `${UserAuthTypeEnum}`;
|
||||||
}) => GET('/user/sendAuthCode', { username, type });
|
googleToken: string;
|
||||||
|
}) => POST('/user/sendAuthCode', data);
|
||||||
|
|
||||||
export const getTokenLogin = () => GET<UserType>('/user/tokenLogin');
|
export const getTokenLogin = () => GET<UserType>('/user/tokenLogin');
|
||||||
|
|
||||||
|
@@ -3,8 +3,13 @@ import { sendAuthCode } from '@/api/user';
|
|||||||
import { UserAuthTypeEnum } from '@/constants/common';
|
import { UserAuthTypeEnum } from '@/constants/common';
|
||||||
let timer: any;
|
let timer: any;
|
||||||
import { useToast } from './useToast';
|
import { useToast } from './useToast';
|
||||||
|
import { getClientToken } from '@/utils/plugin/google';
|
||||||
|
import { useGlobalStore } from '@/store/global';
|
||||||
|
|
||||||
export const useSendCode = () => {
|
export const useSendCode = () => {
|
||||||
|
const {
|
||||||
|
initData: { googleVerKey }
|
||||||
|
} = useGlobalStore();
|
||||||
const { toast } = useToast();
|
const { toast } = useToast();
|
||||||
const [codeSending, setCodeSending] = useState(false);
|
const [codeSending, setCodeSending] = useState(false);
|
||||||
const [codeCountDown, setCodeCountDown] = useState(0);
|
const [codeCountDown, setCodeCountDown] = useState(0);
|
||||||
@@ -24,7 +29,8 @@ export const useSendCode = () => {
|
|||||||
try {
|
try {
|
||||||
await sendAuthCode({
|
await sendAuthCode({
|
||||||
username,
|
username,
|
||||||
type
|
type,
|
||||||
|
googleToken: await getClientToken(googleVerKey)
|
||||||
});
|
});
|
||||||
setCodeCountDown(60);
|
setCodeCountDown(60);
|
||||||
timer = setInterval(() => {
|
timer = setInterval(() => {
|
||||||
|
@@ -10,7 +10,7 @@ import NProgress from 'nprogress'; //nprogress module
|
|||||||
import Router from 'next/router';
|
import Router from 'next/router';
|
||||||
import 'nprogress/nprogress.css';
|
import 'nprogress/nprogress.css';
|
||||||
import '../styles/reset.scss';
|
import '../styles/reset.scss';
|
||||||
import { useToast } from '@/hooks/useToast';
|
import { useGlobalStore } from '@/store/global';
|
||||||
|
|
||||||
//Binding events.
|
//Binding events.
|
||||||
Router.events.on('routeChangeStart', () => NProgress.start());
|
Router.events.on('routeChangeStart', () => NProgress.start());
|
||||||
@@ -29,23 +29,20 @@ const queryClient = new QueryClient({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export default function App({ Component, pageProps }: AppProps) {
|
export default function App({ Component, pageProps }: AppProps) {
|
||||||
const { toast } = useToast();
|
const {
|
||||||
// 校验是否支持 click 事件
|
loadInitData,
|
||||||
|
initData: { googleVerKey }
|
||||||
|
} = useGlobalStore();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (typeof document.createElement('div').click !== 'function') {
|
loadInitData();
|
||||||
toast({
|
}, []);
|
||||||
title: '你的浏览器版本过低',
|
|
||||||
status: 'warning'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}, [toast]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Head>
|
<Head>
|
||||||
<title>Fast GPT</title>
|
<title>Fast GPT</title>
|
||||||
<meta name="description" content="Generated by Fast GPT" />
|
<meta name="description" content="Generated by Fast GPT" />
|
||||||
|
|
||||||
<meta
|
<meta
|
||||||
name="viewport"
|
name="viewport"
|
||||||
content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no, viewport-fit=cover"
|
content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no, viewport-fit=cover"
|
||||||
@@ -55,6 +52,12 @@ export default function App({ Component, pageProps }: AppProps) {
|
|||||||
<Script src="/js/qrcode.min.js" strategy="lazyOnload"></Script>
|
<Script src="/js/qrcode.min.js" strategy="lazyOnload"></Script>
|
||||||
<Script src="/js/pdf.js" strategy="lazyOnload"></Script>
|
<Script src="/js/pdf.js" strategy="lazyOnload"></Script>
|
||||||
<Script src="/js/html2pdf.bundle.min.js" strategy="lazyOnload"></Script>
|
<Script src="/js/html2pdf.bundle.min.js" strategy="lazyOnload"></Script>
|
||||||
|
{googleVerKey && (
|
||||||
|
<Script
|
||||||
|
src={`https://www.recaptcha.net/recaptcha/api.js?render=${googleVerKey}`}
|
||||||
|
strategy="lazyOnload"
|
||||||
|
></Script>
|
||||||
|
)}
|
||||||
<Script src="/js/particles.js"></Script>
|
<Script src="/js/particles.js"></Script>
|
||||||
<QueryClientProvider client={queryClient}>
|
<QueryClientProvider client={queryClient}>
|
||||||
<ChakraProvider theme={theme}>
|
<ChakraProvider theme={theme}>
|
||||||
|
@@ -62,5 +62,5 @@ export function gpt_chatItemTokenSlice({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result.length === 0 && messages[0] ? [messages[0]] : result;
|
||||||
}
|
}
|
||||||
|
@@ -2,10 +2,16 @@
|
|||||||
import type { NextApiRequest, NextApiResponse } from 'next';
|
import type { NextApiRequest, NextApiResponse } from 'next';
|
||||||
import { jsonRes } from '@/service/response';
|
import { jsonRes } from '@/service/response';
|
||||||
|
|
||||||
|
export type InitDateResponse = {
|
||||||
|
beianText: string;
|
||||||
|
googleVerKey: string;
|
||||||
|
};
|
||||||
|
|
||||||
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
|
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||||
jsonRes(res, {
|
jsonRes<InitDateResponse>(res, {
|
||||||
data: {
|
data: {
|
||||||
beianText: process.env.SAFE_BEIAN_TEXT || ''
|
beianText: process.env.SAFE_BEIAN_TEXT || '',
|
||||||
|
googleVerKey: process.env.CLIENT_GOOGLE_VER_TOKEN || ''
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
@@ -7,15 +7,29 @@ import { sendPhoneCode, sendEmailCode } from '@/service/utils/sendNote';
|
|||||||
import { UserAuthTypeEnum } from '@/constants/common';
|
import { UserAuthTypeEnum } from '@/constants/common';
|
||||||
import { customAlphabet } from 'nanoid';
|
import { customAlphabet } from 'nanoid';
|
||||||
const nanoid = customAlphabet('123456789', 6);
|
const nanoid = customAlphabet('123456789', 6);
|
||||||
|
import { authGoogleToken } from '@/utils/plugin/google';
|
||||||
|
import requestIp from 'request-ip';
|
||||||
|
|
||||||
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
|
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||||
try {
|
try {
|
||||||
const { username, type } = req.query as { username: string; type: `${UserAuthTypeEnum}` };
|
const { username, type, googleToken } = req.body as {
|
||||||
|
username: string;
|
||||||
|
type: `${UserAuthTypeEnum}`;
|
||||||
|
googleToken: string;
|
||||||
|
};
|
||||||
|
|
||||||
if (!username || !type) {
|
if (!username || !type) {
|
||||||
throw new Error('缺少参数');
|
throw new Error('缺少参数');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// google auth
|
||||||
|
process.env.SERVICE_GOOGLE_VER_TOKEN &&
|
||||||
|
(await authGoogleToken({
|
||||||
|
secret: process.env.SERVICE_GOOGLE_VER_TOKEN,
|
||||||
|
response: googleToken,
|
||||||
|
remoteip: requestIp.getClientIp(req) || undefined
|
||||||
|
}));
|
||||||
|
|
||||||
await connectToDatabase();
|
await connectToDatabase();
|
||||||
|
|
||||||
const code = nanoid();
|
const code = nanoid();
|
||||||
|
@@ -291,7 +291,7 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
|
|||||||
}, 100);
|
}, 100);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await gptChatPrompt(newChatList.slice(-2));
|
await gptChatPrompt(newChatList.slice(newChatList.length - 2));
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
toast({
|
toast({
|
||||||
title: typeof err === 'string' ? err : err?.message || '聊天出错了~',
|
title: typeof err === 'string' ? err : err?.message || '聊天出错了~',
|
||||||
|
@@ -2,8 +2,6 @@ import React, { useEffect } from 'react';
|
|||||||
import { Card, Box, Link, Flex, Image, Button } from '@chakra-ui/react';
|
import { Card, Box, Link, Flex, Image, Button } from '@chakra-ui/react';
|
||||||
import Markdown from '@/components/Markdown';
|
import Markdown from '@/components/Markdown';
|
||||||
import { useMarkdown } from '@/hooks/useMarkdown';
|
import { useMarkdown } from '@/hooks/useMarkdown';
|
||||||
import { getFilling } from '@/api/system';
|
|
||||||
import { useQuery } from '@tanstack/react-query';
|
|
||||||
import { useRouter } from 'next/router';
|
import { useRouter } from 'next/router';
|
||||||
import { useGlobalStore } from '@/store/global';
|
import { useGlobalStore } from '@/store/global';
|
||||||
|
|
||||||
@@ -13,7 +11,10 @@ const Home = () => {
|
|||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { inviterId } = router.query as { inviterId: string };
|
const { inviterId } = router.query as { inviterId: string };
|
||||||
const { data } = useMarkdown({ url: '/intro.md' });
|
const { data } = useMarkdown({ url: '/intro.md' });
|
||||||
const { isPc } = useGlobalStore();
|
const {
|
||||||
|
isPc,
|
||||||
|
initData: { beianText }
|
||||||
|
} = useGlobalStore();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (inviterId) {
|
if (inviterId) {
|
||||||
@@ -21,8 +22,6 @@ const Home = () => {
|
|||||||
}
|
}
|
||||||
}, [inviterId]);
|
}, [inviterId]);
|
||||||
|
|
||||||
const { data: { beianText = '' } = {} } = useQuery(['init'], getFilling);
|
|
||||||
|
|
||||||
/* 加载动画 */
|
/* 加载动画 */
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
@@ -124,7 +124,8 @@ const InputDataModal = ({
|
|||||||
<ModalCloseButton />
|
<ModalCloseButton />
|
||||||
|
|
||||||
<Box
|
<Box
|
||||||
display={['block', 'flex']}
|
display={'flex'}
|
||||||
|
flexDirection={['column', 'row']}
|
||||||
flex={'1 0 0'}
|
flex={'1 0 0'}
|
||||||
h={['100%', 0]}
|
h={['100%', 0]}
|
||||||
overflow={'overlay'}
|
overflow={'overlay'}
|
||||||
|
@@ -1,8 +1,12 @@
|
|||||||
import { create } from 'zustand';
|
import { create } from 'zustand';
|
||||||
import { devtools } from 'zustand/middleware';
|
import { devtools } from 'zustand/middleware';
|
||||||
import { immer } from 'zustand/middleware/immer';
|
import { immer } from 'zustand/middleware/immer';
|
||||||
|
import type { InitDateResponse } from '@/pages/api/system/getInitData';
|
||||||
|
import { getInitData } from '@/api/system';
|
||||||
|
|
||||||
type State = {
|
type State = {
|
||||||
|
initData: InitDateResponse;
|
||||||
|
loadInitData: () => Promise<void>;
|
||||||
loading: boolean;
|
loading: boolean;
|
||||||
setLoading: (val: boolean) => null;
|
setLoading: (val: boolean) => null;
|
||||||
screenWidth: number;
|
screenWidth: number;
|
||||||
@@ -13,6 +17,18 @@ type State = {
|
|||||||
export const useGlobalStore = create<State>()(
|
export const useGlobalStore = create<State>()(
|
||||||
devtools(
|
devtools(
|
||||||
immer((set, get) => ({
|
immer((set, get) => ({
|
||||||
|
initData: {
|
||||||
|
beianText: '',
|
||||||
|
googleVerKey: ''
|
||||||
|
},
|
||||||
|
async loadInitData() {
|
||||||
|
try {
|
||||||
|
const res = await getInitData();
|
||||||
|
set((state) => {
|
||||||
|
state.initData = res;
|
||||||
|
});
|
||||||
|
} catch (error) {}
|
||||||
|
},
|
||||||
loading: false,
|
loading: false,
|
||||||
setLoading: (val: boolean) => {
|
setLoading: (val: boolean) => {
|
||||||
set((state) => {
|
set((state) => {
|
||||||
|
@@ -25,10 +25,6 @@ svg {
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#__next {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-scrollbar {
|
::-webkit-scrollbar {
|
||||||
width: 8px;
|
width: 8px;
|
||||||
height: 8px;
|
height: 8px;
|
||||||
@@ -65,16 +61,26 @@ textarea::placeholder {
|
|||||||
font-size: 0.85em;
|
font-size: 0.85em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||||
|
-webkit-focus-ring-color: rgba(0, 0, 0, 0);
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#__next {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
#nprogress .bar {
|
||||||
|
background: '#85b1ff' !important; //自定义颜色
|
||||||
|
}
|
||||||
|
|
||||||
.textEllipsis {
|
.textEllipsis {
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
.grecaptcha-badge {
|
||||||
* {
|
display: none !important;
|
||||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
|
||||||
-webkit-focus-ring-color: rgba(0, 0, 0, 0);
|
|
||||||
outline: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 900px) {
|
@media (max-width: 900px) {
|
||||||
@@ -93,7 +99,3 @@ textarea::placeholder {
|
|||||||
padding-bottom: env(safe-area-inset-bottom);
|
padding-bottom: env(safe-area-inset-bottom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#nprogress .bar {
|
|
||||||
background: '#85b1ff' !important; //自定义颜色
|
|
||||||
}
|
|
||||||
|
6
src/types/index.d.ts
vendored
6
src/types/index.d.ts
vendored
@@ -1,18 +1,16 @@
|
|||||||
import type { Mongoose } from 'mongoose';
|
import type { Mongoose } from 'mongoose';
|
||||||
import type { RedisClientType } from 'redis';
|
|
||||||
import type { Agent } from 'http';
|
import type { Agent } from 'http';
|
||||||
import type { Pool } from 'pg';
|
import type { Pool } from 'pg';
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
var mongodb: Mongoose | string | null;
|
var mongodb: Mongoose | string | null;
|
||||||
var redisClient: RedisClientType | null;
|
|
||||||
var pgClient: Pool | null;
|
var pgClient: Pool | null;
|
||||||
var generatingQA: boolean;
|
var generatingQA: boolean;
|
||||||
var generatingAbstract: boolean;
|
|
||||||
var generatingVector: boolean;
|
var generatingVector: boolean;
|
||||||
var QRCode: any;
|
|
||||||
var httpsAgent: Agent;
|
var httpsAgent: Agent;
|
||||||
var particlesJS: any;
|
var particlesJS: any;
|
||||||
|
var grecaptcha: any;
|
||||||
|
var QRCode: any;
|
||||||
|
|
||||||
interface Window {
|
interface Window {
|
||||||
['pdfjs-dist/build/pdf']: any;
|
['pdfjs-dist/build/pdf']: any;
|
||||||
|
33
src/utils/plugin/google.ts
Normal file
33
src/utils/plugin/google.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import axios from 'axios';
|
||||||
|
import { Obj2Query } from '../tools';
|
||||||
|
|
||||||
|
export const getClientToken = (googleVerKey: string) => {
|
||||||
|
if (!grecaptcha?.ready) return '';
|
||||||
|
return new Promise<string>((resolve, reject) => {
|
||||||
|
grecaptcha.ready(async () => {
|
||||||
|
try {
|
||||||
|
const token = await grecaptcha.execute(googleVerKey, {
|
||||||
|
action: 'submit'
|
||||||
|
});
|
||||||
|
resolve(token);
|
||||||
|
} catch (error) {
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// service run
|
||||||
|
export const authGoogleToken = async (data: {
|
||||||
|
secret: string;
|
||||||
|
response: string;
|
||||||
|
remoteip?: string;
|
||||||
|
}) => {
|
||||||
|
const res = await axios.post<{ score?: number }>(
|
||||||
|
`https://www.recaptcha.net/recaptcha/api/siteverify?${Obj2Query(data)}`
|
||||||
|
);
|
||||||
|
if (res.data.score && res.data.score >= 0.9) {
|
||||||
|
return Promise.resolve('');
|
||||||
|
}
|
||||||
|
return Promise.reject('非法环境');
|
||||||
|
};
|
Reference in New Issue
Block a user