8900 commited on
Commit
bc321a1
·
verified ·
1 Parent(s): d95609e

Update setup-hf-config.mjs

Browse files
Files changed (1) hide show
  1. setup-hf-config.mjs +116 -47
setup-hf-config.mjs CHANGED
@@ -1,62 +1,131 @@
1
  import fs from "node:fs";
2
  import path from "node:path";
 
3
 
4
  var HOME = process.env.OPENCLAW_HOME || process.env.HOME || "/home/user";
5
  var STATE_DIR = path.join(HOME, ".openclaw");
6
  var CONFIG_PATH = path.join(STATE_DIR, "openclaw.json");
 
7
 
 
 
 
 
 
 
 
8
  function envStr(key) { return (process.env[key] || "").trim(); }
9
 
10
- // --- 1. 基础配置(保证你能正常登录和连接TG) ---
11
  var gatewayToken = envStr("OPENCLAW_GATEWAY_TOKEN");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  var config = {
13
- gateway: {
14
- auth: gatewayToken ? { mode: "token", token: gatewayToken } : { mode: "password", password: "123" },
15
- controlUi: { allowInsecureAuth: true, allowedOrigins: ["*"], dangerouslyDisableDeviceAuth: true, dangerouslyAllowHostHeaderOriginFallback: true },
16
- trustedProxies: ["10.16.0.0/12", "10.20.0.0/12", "172.17.0.1"]
17
- },
18
- agents: { defaults: { model: "openai/gpt-4o-mini" } },
19
- env: { vars: {} }
20
  };
 
21
 
22
- if (process.env.TELEGRAM_BOT_TOKEN) {
23
- config.channels = { telegram: { enabled: true, accounts: { main: { botToken: process.env.TELEGRAM_BOT_TOKEN, apiRoot: "https://api.telegram.org" } } } };
24
- }
 
25
 
26
- fs.mkdirSync(STATE_DIR, { recursive: true });
27
- fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), "utf-8");
28
-
29
-
30
- // --- 2. 🚀 终极杀招:暴力写入底层 auth-profiles.json 强制替换域名! ---
31
- var agentDir = path.join(STATE_DIR, "agents", "main", "agent");
32
- fs.mkdirSync(agentDir, { recursive: true });
33
- var authProfilePath = path.join(agentDir, "auth-profiles.json");
34
-
35
- // 自动读取你在 HF Secrets 里设置的 G4F 网址和密码
36
- var customBaseUrl = envStr("OPENAI_BASE_URL");
37
- var customPassword = envStr("OPENAI_API_KEY") || "sk-woyaobaipiao2026";
38
-
39
- if (customBaseUrl) {
40
- var authProfiles = {
41
- "profiles": {
42
- "openai:default": {
43
- "type": "token",
44
- "provider": "openai",
45
- "token": customPassword,
46
- "apiRoot": customBaseUrl, // 强制修改 OpenAI 根域名
47
- "baseURL": customBaseUrl // 双保险,防止不同版本参数名不同
48
- },
49
- "openai-codex:default": {
50
- "type": "token",
51
- "provider": "openai-codex",
52
- "token": customPassword,
53
- "apiRoot": customBaseUrl,
54
- "baseURL": customBaseUrl
55
- }
56
- }
57
- };
58
- fs.writeFileSync(authProfilePath, JSON.stringify(authProfiles, null, 2), "utf-8");
59
- console.log("[setup] 成功!底层域名已强制修改为: " + customBaseUrl);
60
  } else {
61
- console.log("[setup] 警告:没有在环境变量找到 OPENAI_BASE_URL");
62
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import fs from "node:fs";
2
  import path from "node:path";
3
+ import https from "node:https";
4
 
5
  var HOME = process.env.OPENCLAW_HOME || process.env.HOME || "/home/user";
6
  var STATE_DIR = path.join(HOME, ".openclaw");
7
  var CONFIG_PATH = path.join(STATE_DIR, "openclaw.json");
8
+ var SPACE_HOST = (process.env.SPACE_HOST || "").trim();
9
 
10
+ console.log("[setup] Starting… HOME=" + HOME);
11
+
12
+ // -- helpers --
13
+ function parseList(val) {
14
+ if (!val || !val.trim()) return [];
15
+ return val.split(",").map(function(s){ return s.trim(); }).filter(Boolean);
16
+ }
17
  function envStr(key) { return (process.env[key] || "").trim(); }
18
 
19
+ // -- auth --
20
  var gatewayToken = envStr("OPENCLAW_GATEWAY_TOKEN");
21
+ var gatewayPassword = envStr("OPENCLAW_GATEWAY_PASSWORD");
22
+ if (!gatewayToken && !gatewayPassword) {
23
+ console.error("[setup] FATAL: set OPENCLAW_GATEWAY_TOKEN or OPENCLAW_GATEWAY_PASSWORD in Secrets");
24
+ process.exit(0);
25
+ }
26
+
27
+ // -- default model --
28
+ var defaultModel = envStr("OPENCLAW_HF_DEFAULT_MODEL") || "google/gemini-2.0-flash";
29
+
30
+ // -- dynamic provider key detection --
31
+ var EXCLUDE_PREFIXES = [
32
+ "OPENCLAW_", "SPACE_", "SYSTEM_", "HF_",
33
+ "NODE_", "PATH", "HOME", "USER", "PWD", "LANG", "LC_",
34
+ "npm_", "HOSTNAME", "SHELL", "TERM", "SHLVL"
35
+ ];
36
+ var INCLUDE_SUFFIXES = [
37
+ "_API_KEY", "_SECRET_KEY", "_ACCESS_TOKEN",
38
+ "_BOT_TOKEN", "_AUTH_TOKEN", "_APP_KEY"
39
+ ];
40
+ function isProviderKey(k){
41
+ for (let i=0;i<EXCLUDE_PREFIXES.length;i++){ if(k.indexOf(EXCLUDE_PREFIXES[i])===0) return false; }
42
+ for (let i=0;i<INCLUDE_SUFFIXES.length;i++){
43
+ let s=INCLUDE_SUFFIXES[i];
44
+ if(k.length>s.length && k.indexOf(s)===k.length-s.length) return true;
45
+ }
46
+ return false;
47
+ }
48
+
49
+ var allKeys = Object.keys(process.env);
50
+ var providerKeys = allKeys.filter(k => isProviderKey(k) && envStr(k));
51
+ providerKeys.sort();
52
+ console.log("[setup] Detected provider keys ("+providerKeys.length+"):");
53
+ providerKeys.forEach(k=>console.log(" + "+k));
54
+
55
+ // -- trusted proxies --
56
+ var envProxies = parseList(envStr("OPENCLAW_GATEWAY_TRUSTED_PROXIES"));
57
+ var trustedProxies = envProxies.length>0 ? envProxies : [
58
+ "10.16.0.0/12","10.20.0.0/12",
59
+ "10.16.4.123","10.16.7.92","10.16.18.232",
60
+ "10.16.34.155","10.16.43.133","10.16.1.206",
61
+ "10.16.37.110","10.16.43.246",
62
+ "10.20.1.9","10.20.1.222",
63
+ "10.20.26.157","10.20.31.87",
64
+ "10.20.0.1","172.17.0.1"
65
+ ];
66
+
67
+ // -- build config --
68
  var config = {
69
+ gateway: {
70
+ auth: gatewayToken ? { mode:"token", token:gatewayToken } : { mode:"password", password:gatewayPassword },
71
+ controlUi: { allowInsecureAuth:true, allowedOrigins:["*"], dangerouslyDisableDeviceAuth:true, dangerouslyAllowHostHeaderOriginFallback:true },
72
+ trustedProxies: trustedProxies
73
+ },
74
+ agents: { defaults:{ model:defaultModel } },
75
+ env: { vars:{} }
76
  };
77
+ providerKeys.forEach(pk=>{ config.env.vars[pk] = envStr(pk); });
78
 
79
+ // -- Telegram webhook setup --
80
+ async function setupTelegram(){
81
+ var token = envStr("TELEGRAM_BOT_TOKEN");
82
+ if(!token){ console.log("[setup] Telegram: disabled (no TELEGRAM_BOT_TOKEN)"); return; }
83
 
84
+ if(SPACE_HOST){
85
+ var webhookUrl = "https://" + SPACE_HOST + "/tg-webhook";
86
+ var r = await new Promise(resolve=>{
87
+ var data = JSON.stringify({ url:webhookUrl, drop_pending_updates:true, max_connections:10 });
88
+ var req = https.request({
89
+ hostname: "api.telegram.org",
90
+ path: "/bot"+token+"/setWebhook",
91
+ method: "POST",
92
+ headers: { "Content-Type":"application/json", "Content-Length": Buffer.byteLength(data) }
93
+ }, res=>{
94
+ let buf="";
95
+ res.on("data",c=>buf+=c);
96
+ res.on("end", ()=>{ try{ resolve(JSON.parse(buf)) } catch(e){ resolve(null) } });
97
+ });
98
+ req.on("error", ()=>resolve(null));
99
+ req.setTimeout(8000, ()=>{ req.destroy(); resolve(null); });
100
+ req.write(data);
101
+ req.end();
102
+ });
103
+ if(r && r.ok) console.log("[setup] Telegram: webhook registered -> "+webhookUrl);
104
+ else {
105
+ console.log("[setup] Telegram: auto-registration failed (HF outbound blocked)");
106
+ console.log("[setup] Telegram: open this URL in your browser once:");
107
+ console.log(" https://api.telegram.org/bot"+token+"/setWebhook?url="+webhookUrl+"&drop_pending_updates=true");
108
+ }
 
 
 
 
 
 
 
 
 
109
  } else {
110
+ console.log("[setup] Telegram: set SPACE_HOST in Variables for auto webhook registration");
111
+ }
112
+
113
+ config.channels = { telegram:{ enabled:true, accounts:{ main:{ botToken:token, apiRoot:"https://api.telegram.org" } } } };
114
+ console.log("[setup] Telegram: configured");
115
+ }
116
+
117
+ (async function main(){
118
+ await setupTelegram();
119
+ try{
120
+ fs.mkdirSync(STATE_DIR,{recursive:true});
121
+ if(fs.existsSync(CONFIG_PATH)) fs.copyFileSync(CONFIG_PATH, CONFIG_PATH+".bak");
122
+ fs.writeFileSync(CONFIG_PATH, JSON.stringify(config,null,2),"utf-8");
123
+ }catch(e){ console.error("[setup] Write failed: "+e.message); process.exit(0); }
124
+
125
+ console.log("[setup] Done.");
126
+ console.log("[setup] auth = "+(gatewayToken?"token":"password"));
127
+ console.log("[setup] model = "+defaultModel);
128
+ console.log("[setup] proxies = "+trustedProxies.length);
129
+ console.log("[setup] env.vars = "+providerKeys.length);
130
+ console.log("[setup] config = "+CONFIG_PATH);
131
+ })().catch(e=>{ console.error("[setup] Fatal: "+e.message); process.exit(0); });