antigravity-tc 1.1.0 → 1.1.1

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/README.md CHANGED
@@ -91,6 +91,7 @@ Lokasi default **mengikuti OS tempat package di-install** — tanpa konfigurasi
91
91
 
92
92
  | Isi | Keterangan |
93
93
  | --- | --- |
94
+ | `.env` | Konfigurasi — dibuat otomatis dari `env.example` saat pertama kali jalan |
94
95
  | `logs/donation-logs.sqlite` | Log donasi (auto-migrasi dari instalasi lama) |
95
96
  | `bin/cloudflared` | Binary tunnel (auto-download per OS) |
96
97
  | `logs/launcher.log` | Log saat auto-start |
@@ -2,12 +2,12 @@
2
2
  // Hard reset password admin ATC kembali ke default.
3
3
  // Pakai: antigravity-tc-reset-password [--yes]
4
4
 
5
- const path = require('path');
6
5
  const http = require('http');
7
6
  const readline = require('readline');
8
7
 
9
- // .env selalu dibaca dari folder aplikasi (konsisten dengan index.js).
10
- require('dotenv').config({ path: path.join(__dirname, '..', '.env'), quiet: true });
8
+ // .env hidup di ~/.antigravity-tc/.env (konsisten dengan index.js).
9
+ const { ENV_PATH, ensureEnvFile } = require('../src/paths');
10
+ require('dotenv').config({ path: ensureEnvFile(), quiet: true });
11
11
 
12
12
  const { getConfig } = require('../src/config');
13
13
 
@@ -56,7 +56,7 @@ async function main() {
56
56
  console.log('bukan dari dashboard — reset di sini tidak akan mengubahnya.');
57
57
  console.log('');
58
58
  console.log('Solusi : hapus/ubah baris APP_PASSWORD di .env, lalu restart aplikasi.');
59
- console.log(`Lokasi : ${path.join(__dirname, '..', '.env')}`);
59
+ console.log(`Lokasi : ${ENV_PATH}`);
60
60
  process.exit(0);
61
61
  }
62
62
 
package/dev.md CHANGED
@@ -18,7 +18,7 @@ cp env.example .env # lalu isi nilai
18
18
  npm run build:web # build frontend sekali sebelum jalan dari source
19
19
  ```
20
20
 
21
- File `.env` **selalu dibaca dari folder aplikasi** (bukan cwd) jadi kredensial tetap terbaca walau dijalankan dari direktori lain (npm link / LaunchAgent).
21
+ File `.env` hidup di **`~/.antigravity-tc/.env`** (bukan folder project/cwd). Saat pertama kali jalan, app otomatis membuatnya dari `env.example` atau memigrasi `.env` lama di folder project bila ada. Override lokal saat development tetap bisa dengan mengedit file itu.
22
22
 
23
23
  ### Variabel `.env`
24
24
 
package/env.example CHANGED
@@ -8,5 +8,5 @@ DB_PATH=
8
8
  # OAUTH_CLIENT_ID=
9
9
  # OAUTH_CLIENT_SECRET=
10
10
 
11
- # Options: tab (default), new_tab, or popup
11
+ # Options: popup (default), new_tab, or new-tab
12
12
  OAUTH_METHOD=popup
package/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  const path = require('path');
3
- // .env selalu dibaca dari folder aplikasi (bukan cwd) supaya kredensial OAuth
4
- // tetap tersedia saat dijalankan via npm link / LaunchAgent dari folder mana pun.
5
- require('dotenv').config({ path: path.join(__dirname, '.env'), quiet: true });
3
+ // .env hidup di ~/.antigravity-tc/.env (dibuat otomatis dari env.example saat
4
+ // pertama kali jalan) bukan di folder project/cwd.
5
+ require('dotenv').config({ path: require('./src/paths').ensureEnvFile(), quiet: true });
6
6
 
7
7
  const fs = require('fs');
8
8
  const os = require('os');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antigravity-tc",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Antigravity Token Collector — tray app untuk mengumpulkan & mengelola donasi token Antigravity ke 9Router",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -37,7 +37,7 @@
37
37
  "vite"
38
38
  ],
39
39
  "author": "hifzi",
40
- "repository": {
40
+ "repository": {
41
41
  "type": "git",
42
42
  "url": "https://github.com/hifzi/antigravity-tc"
43
43
  },
package/server.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  const path = require('path');
3
- // .env dari folder aplikasi (bukan cwd) wajib dimuat sebelum konstanta env
4
- // di bawah dibaca, agar refresh token tetap jalan saat app dijalankan dari luar.
5
- require('dotenv').config({ path: path.join(__dirname, '.env'), quiet: true });
3
+ // .env hidup di ~/.antigravity-tc/.env (dibuat otomatis dari env.example saat
4
+ // pertama kali jalan) wajib dimuat sebelum konstanta env di bawah dibaca.
5
+ require('dotenv').config({ path: require('./src/paths').ensureEnvFile(), quiet: true });
6
6
 
7
7
  const http = require('http');
8
8
  const https = require('https');
@@ -56,7 +56,7 @@ const OAUTH_CLIENT_ID = process.env.OAUTH_CLIENT_ID || decodeBuiltin(BUILTIN_OAU
56
56
  const OAUTH_CLIENT_SECRET = process.env.OAUTH_CLIENT_SECRET || decodeBuiltin(BUILTIN_OAUTH_CLIENT_SECRET_ENC);
57
57
  const OAUTH_METHOD = ['popup', 'new_tab', 'new-tab'].includes(String(process.env.OAUTH_METHOD || '').toLowerCase())
58
58
  ? (String(process.env.OAUTH_METHOD).toLowerCase() === 'popup' ? 'popup' : 'tab')
59
- : 'tab';
59
+ : 'popup';
60
60
  const CONFIGURED_APP_ORIGIN = new URL(APP_URL).origin;
61
61
 
62
62
  const OAUTH_SCOPE = [
package/src/paths.js CHANGED
@@ -5,6 +5,31 @@ const fs = require('fs');
5
5
  const APP_DIR = path.join(os.homedir(), '.antigravity-tc');
6
6
  const LOGS_DIR = path.join(APP_DIR, 'logs');
7
7
  const BIN_DIR = path.join(APP_DIR, 'bin');
8
+ const ENV_PATH = path.join(APP_DIR, '.env');
9
+ const ENV_EXAMPLE_PATH = path.join(__dirname, '..', 'env.example');
10
+ const LEGACY_ENV_PATH = path.join(__dirname, '..', '.env');
11
+
12
+ // .env hidup di ~/.antigravity-tc/.env. Saat pertama kali jalan:
13
+ // 1) jika sudah ada → pakai apa adanya;
14
+ // 2) jika ada .env lama di folder project → migrasi (copy) satu kali;
15
+ // 3) jika belum ada sama sekali → salin dari env.example.
16
+ function ensureEnvFile() {
17
+ if (fs.existsSync(ENV_PATH)) return ENV_PATH;
18
+ try {
19
+ ensureAppDirs();
20
+ if (fs.existsSync(LEGACY_ENV_PATH)) {
21
+ fs.copyFileSync(LEGACY_ENV_PATH, ENV_PATH);
22
+ console.log(`[env] Migrasi .env lama → ${ENV_PATH}`);
23
+ } else if (fs.existsSync(ENV_EXAMPLE_PATH)) {
24
+ fs.copyFileSync(ENV_EXAMPLE_PATH, ENV_PATH);
25
+ console.log(`[env] Membuat ${ENV_PATH} dari env.example — silakan sesuaikan bila perlu.`);
26
+ } else {
27
+ fs.writeFileSync(ENV_PATH, 'PORT=3456\nAPP_PASSWORD=\n');
28
+ console.log(`[env] Membuat ${ENV_PATH}`);
29
+ }
30
+ } catch (e) {}
31
+ return ENV_PATH;
32
+ }
8
33
 
9
34
  // Default lokasi database 9Router mengikuti OS tempat app di-install:
10
35
  // - Windows : %APPDATA%/9router/db/data.sqlite
@@ -51,9 +76,12 @@ module.exports = {
51
76
  APP_DIR,
52
77
  LOGS_DIR,
53
78
  BIN_DIR,
79
+ ENV_PATH,
80
+ ENV_EXAMPLE_PATH,
54
81
  LOG_DB_PATH: path.join(LOGS_DIR, 'donation-logs.sqlite'),
55
82
  DEFAULT_9ROUTER_DB,
56
83
  CLOUDFLARED_BIN: path.join(BIN_DIR, process.platform === 'win32' ? 'cloudflared.exe' : 'cloudflared'),
57
84
  ensureAppDirs,
85
+ ensureEnvFile,
58
86
  migrateLegacyLogDb,
59
87
  };