@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.
Files changed (2) hide show
  1. package/dist/index.js +42 -25
  2. 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('使用 test.ipw.cn');
10
- const 响应 = await axios请求({
10
+ console.log('使用 v6.ip.zxinc.org');
11
+ let 响应 = await axios请求({
11
12
  method: 'GET',
12
- url: 'https://test.ipw.cn/api/ip/myip?json',
13
+ url: 'https://v6.ip.zxinc.org/info.php?type=json',
13
14
  });
14
- if (响应.IPVersion == 'IPv6')
15
- console.log('成功获取本机ipv6地址: %O', 响应.IPVersion);
16
- return 响应.IP;
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
- const 响应 = await axios请求({ method: 'GET', url: 'https://api6.ipify.org/?format=json' });
24
- console.log('成功获取本机ipv6地址: %O', 响应.ip);
25
- return 响应.ip;
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
- console.log('无法通过网络获取ipv6地址,尝试调用系统接口...');
31
- const 结果 = execSync("ip -6 addr show | grep inet6 | awk '{print $2}' | cut -d/ -f1 | grep -v '::1' | head -n 1")
32
- .toString()
33
- .trim();
34
- if (结果) {
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
- const 列表 = await cf句柄.dns.records.list({ zone_id: 区域id });
45
- var 目标 = 列表.result.filter((a) => a.name == 域名)[0];
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
- const 令牌 = process.env['CLOUDFLARE_API_TOKEN'];
85
- const 区域id = process.env['CLOUDFLARE_ZONE_ID'];
86
- const 域名 = process.env['DOMAIN'];
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
- const cloudflare = new Cloudflare({ apiToken: 令牌 });
93
- const ipv6地址 = await 获取IPv6地址();
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.11",
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",