8900 commited on
Commit
b1d0b42
·
verified ·
1 Parent(s): 7684a29

Update setup-hf-config.mjs

Browse files
Files changed (1) hide show
  1. setup-hf-config.mjs +107 -26
setup-hf-config.mjs CHANGED
@@ -1,50 +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
  var gatewayToken = envStr("OPENCLAW_GATEWAY_TOKEN");
11
  var gatewayPassword = envStr("OPENCLAW_GATEWAY_PASSWORD");
 
 
 
 
12
 
 
13
  var defaultModel = envStr("OPENCLAW_HF_DEFAULT_MODEL") || "google/gemini-2.0-flash";
14
 
15
- var providerKeys = Object.keys(process.env).filter(k =>
16
- k.match(/(_API_KEY|_SECRET_KEY|_ACCESS_TOKEN|_BOT_TOKEN|_AUTH_TOKEN|_APP_KEY)$/)
17
- ).sort();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
 
19
  var config = {
20
  gateway: {
21
- auth: gatewayToken ? { mode: "token", token: gatewayToken } : { mode: "password", password: gatewayPassword },
22
- controlUi: { allowInsecureAuth: true, allowedOrigins: ["*"], dangerouslyDisableDeviceAuth: true, dangerouslyAllowHostHeaderOriginFallback: true },
23
- trustedProxies: []
24
  },
25
- agents: { defaults: { model: defaultModel } },
26
- env: { vars: {} }
27
  };
 
28
 
29
- for (let pk of providerKeys) config.env.vars[pk] = (process.env[pk] || "").trim();
30
-
31
- // Telegram config - **标准字段** only
32
- if (process.env.TELEGRAM_BOT_TOKEN) {
33
- config.channels = {
34
- telegram: {
35
- enabled: true,
36
- accounts: {
37
- main: {
38
- botToken: process.env.TELEGRAM_BOT_TOKEN,
39
- apiRoot: "https://api.telegram.org"
40
- }
41
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  }
43
- };
 
 
 
 
 
44
  }
45
 
46
- fs.mkdirSync(STATE_DIR, { recursive: true });
47
- if (fs.existsSync(CONFIG_PATH)) fs.copyFileSync(CONFIG_PATH, CONFIG_PATH + ".bak");
48
- fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), "utf-8");
 
 
 
 
49
 
50
- console.log("[setup] Done. Config at", CONFIG_PATH);
 
 
 
 
 
 
 
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); });