Sfoglia il codice sorgente

✨ feat(tokens): add cherryConfig support for URL generation and base64 encoding

CaIon 5 mesi fa
parent
commit
9546a47f2b
3 ha cambiato i file con 25 aggiunte e 4 eliminazioni
  1. 5 0
      common/str.go
  2. 4 1
      setting/chat.go
  3. 16 3
      web/src/components/table/TokensTable.js

+ 5 - 0
common/str.go

@@ -1,6 +1,7 @@
 package common
 
 import (
+	"encoding/base64"
 	"encoding/json"
 	"math/rand"
 	"strconv"
@@ -68,3 +69,7 @@ func StringToByteSlice(s string) []byte {
 	tmp2 := [3]uintptr{tmp1[0], tmp1[1], tmp1[1]}
 	return *(*[]byte)(unsafe.Pointer(&tmp2))
 }
+
+func EncodeBase64(str string) string {
+	return base64.StdEncoding.EncodeToString([]byte(str))
+}

+ 4 - 1
setting/chat.go

@@ -6,8 +6,11 @@ import (
 )
 
 var Chats = []map[string]string{
+	//{
+	//	"ChatGPT Next Web 官方示例": "https://app.nextchat.dev/#/?settings={\"key\":\"{key}\",\"url\":\"{address}\"}",
+	//},
 	{
-		"ChatGPT Next Web 官方示例": "https://app.nextchat.dev/#/?settings={\"key\":\"{key}\",\"url\":\"{address}\"}",
+		"Cherry Studio": "cherrystudio://providers/api-keys?v=1&data={cherryConfig}",
 	},
 	{
 		"Lobe Chat 官方示例": "https://chat-preview.lobehub.com/?settings={\"keyVaults\":{\"openai\":{\"apiKey\":\"{key}\",\"baseURL\":\"{address}/v1\"}}}",

+ 16 - 3
web/src/components/table/TokensTable.js

@@ -432,9 +432,22 @@ const TokensTable = () => {
     if (serverAddress === '') {
       serverAddress = window.location.origin;
     }
-    let encodedServerAddress = encodeURIComponent(serverAddress);
-    url = url.replaceAll('{address}', encodedServerAddress);
-    url = url.replaceAll('{key}', 'sk-' + record.key);
+    if (url.includes('{cherryConfig}') === true) {
+      let cherryConfig = {
+        id: 'new-api',
+        baseUrl: serverAddress,
+        apiKey: 'sk-' + record.key,
+      }
+      // 替换 {cherryConfig} 为base64编码的JSON字符串
+      let encodedConfig = encodeURIComponent(
+        btoa(JSON.stringify(cherryConfig))
+      );
+      url = url.replaceAll('{cherryConfig}', encodedConfig);
+    } else {
+      let encodedServerAddress = encodeURIComponent(serverAddress);
+      url = url.replaceAll('{address}', encodedServerAddress);
+      url = url.replaceAll('{key}', 'sk-' + record.key);
+    }
 
     window.open(url, '_blank');
   };