@lsby/cloudflare-ipv6-ddns 0.0.11 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +42 -25
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -2,47 +2,64 @@
|
|
|
2
2
|
import { execSync } from 'child_process';
|
|
3
3
|
import Cloudflare from 'cloudflare';
|
|
4
4
|
import dotenv from 'dotenv';
|
|
5
|
+
import { z } from 'zod';
|
|
5
6
|
import { axios请求 } from './tools/axios.js';
|
|
6
7
|
async function 获取IPv6地址() {
|
|
7
8
|
console.log('开始获取本机ipv6地址...');
|
|
8
9
|
try {
|
|
9
|
-
console.log('使用
|
|
10
|
-
|
|
10
|
+
console.log('使用 v6.ip.zxinc.org');
|
|
11
|
+
let 响应 = await axios请求({
|
|
11
12
|
method: 'GET',
|
|
12
|
-
url: 'https://
|
|
13
|
+
url: 'https://v6.ip.zxinc.org/info.php?type=json',
|
|
13
14
|
});
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return 响应.
|
|
15
|
+
let 结果 = z.object({ code: z.literal(0), data: z.object({ myip: z.string() }) }).parse(响应);
|
|
16
|
+
console.log('成功获取本机ipv6地址: %O', 结果.data.myip);
|
|
17
|
+
return 响应.myip;
|
|
17
18
|
}
|
|
18
|
-
catch (
|
|
19
|
-
console.log(
|
|
19
|
+
catch (错误) {
|
|
20
|
+
console.log(错误);
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
console.log('使用 v6.ident.me');
|
|
24
|
+
let 响应 = await axios请求({ method: 'GET', url: 'https://v6.ident.me/json' });
|
|
25
|
+
let 结果 = z.object({ ip: z.string() }).parse(响应);
|
|
26
|
+
console.log('成功获取本机ipv6地址: %O', 结果.ip);
|
|
27
|
+
return 结果.ip;
|
|
28
|
+
}
|
|
29
|
+
catch (错误) {
|
|
30
|
+
console.log(错误);
|
|
20
31
|
}
|
|
21
32
|
try {
|
|
22
33
|
console.log('使用 api6.ipify.org');
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
34
|
+
let 响应 = await axios请求({ method: 'GET', url: 'https://api6.ipify.org/?format=json' });
|
|
35
|
+
let 结果 = z.object({ ip: z.string() }).parse(响应);
|
|
36
|
+
console.log('成功获取本机ipv6地址: %O', 结果.ip);
|
|
37
|
+
return 结果.ip;
|
|
26
38
|
}
|
|
27
|
-
catch (
|
|
28
|
-
console.log(
|
|
39
|
+
catch (错误) {
|
|
40
|
+
console.log(错误);
|
|
29
41
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
42
|
+
try {
|
|
43
|
+
console.log('调用系统接口...');
|
|
44
|
+
let 结果 = execSync("ip -6 addr show | grep inet6 | awk '{print $2}' | cut -d/ -f1 | grep -v '::1' | head -n 1")
|
|
45
|
+
.toString()
|
|
46
|
+
.trim();
|
|
47
|
+
if (!结果)
|
|
48
|
+
throw new Error('使用系统接口获取ipv6地址失败');
|
|
35
49
|
console.log('成功获取本机ipv6地址: %O', 结果);
|
|
36
50
|
return 结果;
|
|
37
51
|
}
|
|
52
|
+
catch (错误) {
|
|
53
|
+
console.log(错误);
|
|
54
|
+
}
|
|
38
55
|
throw new Error('无法获得ipv6地址');
|
|
39
56
|
}
|
|
40
57
|
async function 增加或更新dns记录(cf句柄, 区域id, 域名, ip地址, 类型, 使用代理 = false, ttl = 1) {
|
|
41
58
|
console.log('开始增加或修改dns记录...');
|
|
42
59
|
console.log('传入信息: %o', { 区域id, 域名, ip地址, 类型, 使用代理, ttl });
|
|
43
60
|
console.log('查询dns记录列表...');
|
|
44
|
-
|
|
45
|
-
|
|
61
|
+
let 列表 = await cf句柄.dns.records.list({ zone_id: 区域id });
|
|
62
|
+
let 目标 = 列表.result.filter((a) => a.name == 域名)[0];
|
|
46
63
|
if (目标 == null) {
|
|
47
64
|
console.log('没有找到域名%O对应的记录, 将新增该记录...', 域名);
|
|
48
65
|
await cf句柄.dns.records.create({
|
|
@@ -81,16 +98,16 @@ async function 增加或更新dns记录(cf句柄, 区域id, 域名, ip地址,
|
|
|
81
98
|
async function main() {
|
|
82
99
|
console.log('开始运行...');
|
|
83
100
|
dotenv.config();
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
101
|
+
let 令牌 = process.env['CLOUDFLARE_API_TOKEN'];
|
|
102
|
+
let 区域id = process.env['CLOUDFLARE_ZONE_ID'];
|
|
103
|
+
let 域名 = process.env['DOMAIN'];
|
|
87
104
|
if (!令牌 || !区域id || !域名) {
|
|
88
105
|
console.log('未提供必要的环境变量:CLOUDFLARE_API_TOKEN, CLOUDFLARE_ZONE_ID, DOMAIN');
|
|
89
106
|
process.exit(1);
|
|
90
107
|
}
|
|
91
108
|
console.log('传入信息: 区域id: %o, 域名: %o', 区域id, 域名);
|
|
92
|
-
|
|
93
|
-
|
|
109
|
+
let cloudflare = new Cloudflare({ apiToken: 令牌 });
|
|
110
|
+
let ipv6地址 = await 获取IPv6地址();
|
|
94
111
|
await 增加或更新dns记录(cloudflare, 区域id, 域名, ipv6地址, 'AAAA');
|
|
95
112
|
}
|
|
96
113
|
await main().catch(console.log);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lsby/cloudflare-ipv6-ddns",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"lsby-cloudflare-ipv6-ddns": "dist/index.js"
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"axios": "^1.6.8",
|
|
13
13
|
"cloudflare": "3.1.0",
|
|
14
|
-
"dotenv": "^16.4.5"
|
|
14
|
+
"dotenv": "^16.4.5",
|
|
15
|
+
"zod": "^3.23.8"
|
|
15
16
|
},
|
|
16
17
|
"devDependencies": {
|
|
17
18
|
"@ianvs/prettier-plugin-sort-imports": "^4.2.1",
|