Skip to content

Matsumiko/auvyn-apies

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

12 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Auvyn Apies

πŸŒ‰ Bridge Transaksi IP Center yang Simple & Powerful

Node.js Version License Maintenance

Backend bridge untuk transaksi pulsa, kuota, voucher game, dan produk digital lainnya ke IP Center.

✨ Features β€’ πŸš€ Quick Start β€’ πŸ“‘ API Docs β€’ βš™οΈ Configuration


πŸ“– Tentang

Auvyn Apies adalah bridge sederhana yang menghubungkan backend utama Anda (misal Cloudflare Worker) dengan IP Center (engine penyedia produk digital).

🎯 Kenapa Auvyn Apies?

  • Abstraksi Sempurna: Backend utama tidak perlu tahu detail rumit IP Center
  • API Clean: Komunikasi terstruktur dan mudah dipahami
  • Production Ready: Sudah include monitoring, logging, dan notifikasi
  • Secure: Built-in authentication dan sanitization

⚠️ Catatan Penting
Credential pada README ini hanya contoh dummy. Konfigurasi asli wajib via .env atau installer.


✨ Fitur Utama

πŸ” Security & Authentication

  • βœ… Signature SHA1 + Base64URL untuk transaksi IP Center
  • βœ… Secret-based authentication untuk semua endpoint /api/*
  • βœ… Callback Secret untuk validasi webhook ke backend
  • βœ… Payload sanitization untuk keamanan data

πŸ“Š Monitoring & Logging

  • βœ… Structured logging dengan Winston (success, pending, failed, report)
  • βœ… Notifikasi Telegram per kategori transaksi + report
  • βœ… Monitoring saldo otomatis + alert saldo rendah
  • βœ… Endpoint /report untuk webhook final dari IP Center

πŸ”Œ Integration

  • βœ… RESTful API yang simpel dan intuitif
  • βœ… Callback system event-driven
  • βœ… Support custom metadata untuk tracking
  • βœ… Multi-event types (transaction, balance, ticket)

πŸ› οΈ Operations

  • βœ… Instalasi satu perintah pakai setup.sh (PM2)
  • βœ… PM2 process manager (lebih tahan & gampang restart)
  • βœ… Script pembersih log otomatis cleanup-logs.sh
  • βœ… Script update cepat update.sh (PM2)

πŸ—οΈ Arsitektur

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Frontend / Web     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚
           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Backend Utama      β”‚
β”‚  (Cloudflare)       │──► POST /api/transaction (secret)
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚
           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Auvyn Apies       β”‚
β”‚   (VPS Server)      β”‚
β”‚                     β”‚
β”‚  β€’ Buat signature   β”‚
β”‚  β€’ Kirim ke Center  β”‚
β”‚  β€’ Parse response   β”‚
β”‚  β€’ Klasifikasi      β”‚
β”‚  β€’ Log & Notify     β”‚
β”‚  β€’ Callback         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚
           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   IP Center         β”‚
β”‚   (Otomax/SW)       β”‚
β”‚                     β”‚
β”‚  β€’ Proses transaksi β”‚
β”‚  β€’ Kirim report     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“‹ Flow Transaksi

  1. Request β†’ Backend utama call /api/transaction dengan product & dest
  2. Processing β†’ Auvyn Apies kirim request ke IP Center β†’ dapat respon awal (biasanya pending)
  3. Callback β†’ Auvyn Apies kirim callback sanitized event transaction.request ke backend
  4. Report β†’ IP Center kirim report final ke endpoint /report
  5. Final β†’ Auvyn Apies klasifikasi final, log, telegram, lalu callback event transaction.report

πŸš€ Quick Start

Instalasi (VPS)

Jalankan sebagai root:

bash <(curl -fsSL https://raw.githubusercontent.com/Matsumiko/auvyn-apies/main/setup.sh)

Mulai versi 1.2.x, installer memakai PM2 (bukan systemd). Cek status: pm2 ls β€’ Log: pm2 logs auvyn-apies β€’ Restart: pm2 restart auvyn-apies

πŸ“¦ Apa yang Dilakukan Installer?

  1. βœ… Install dependencies (curl, git, node.js)
  2. βœ… Clone/update repo ke /opt/auvyn-apies
  3. βœ… Install npm packages
  4. βœ… Setup .env interaktif
  5. βœ… Start app pakai PM2 + enable auto-start

βœ“ Verifikasi Service

# Check status
pm2 ls

# View logs real-time
pm2 logs auvyn-apies

# Restart
pm2 restart auvyn-apies

# Stop
pm2 stop auvyn-apies

πŸ“ Struktur Project

auvyn-apies/
β”œβ”€β”€ πŸ“„ server.js              # Entry point
β”œβ”€β”€ πŸ“„ package.json           # Dependencies
β”œβ”€β”€ πŸ”§ setup.sh              # Installer script
β”œβ”€β”€ πŸ”§ update.sh             # Update script
β”œβ”€β”€ πŸ”§ cleanup-logs.sh       # Log cleanup script
β”œβ”€β”€ πŸ“„ .env.example          # Environment template
β”œβ”€β”€ πŸ“ logs/                 # Log files
β”‚   β”œβ”€β”€ combined.log
β”‚   β”œβ”€β”€ error.log
β”‚   β”œβ”€β”€ trx-success.log
β”‚   β”œβ”€β”€ trx-pending.log
β”‚   β”œβ”€β”€ trx-failed.log
β”‚   └── report.log
└── πŸ“ src/
    β”œβ”€β”€ config.js            # Configuration loader
    β”œβ”€β”€ logger.js            # Winston logger
    β”œβ”€β”€ telegram.js          # Telegram notifications
    β”œβ”€β”€ callback.js          # Callback handler
    β”œβ”€β”€ store.js             # Data store
    β”œβ”€β”€ ipCenter.js          # IP Center integration
    β”œβ”€β”€ server.js            # Express server
    β”œβ”€β”€ middleware/
    β”‚   └── auth.js          # Authentication middleware
    └── routes/
        β”œβ”€β”€ api.js           # API routes
        └── report.js        # Report webhook

βš™οΈ Konfigurasi

Buat file .env di root project atau isi lewat installer:

# Server Configuration
PORT=5882

# IP Center Credentials
CENTER_URL=http://10.0.0.1:6969
MEMBER_ID=AG000001
PIN=0000
PASSWORD=MyStrongPassword123
SIGN_PREFIX=ENGINE

# API Security
AUVYN_SECRET=super-secret-random-string

# Callback Configuration
CALLBACK_URL=https://worker.example.com/auvyn/callback
CALLBACK_SECRET=another-secret-or-same-as-above

# Logging & Monitoring
LOGS_DIR=./logs
BALANCE_LOW_LIMIT=50000

# Telegram Notifications (Optional)
TG_SUCCESS_BOT_TOKEN=
TG_SUCCESS_CHAT_ID=
TG_PENDING_BOT_TOKEN=
TG_PENDING_CHAT_ID=
TG_FAILED_BOT_TOKEN=
TG_FAILED_CHAT_ID=
TG_SYSTEM_BOT_TOKEN=
TG_SYSTEM_CHAT_ID=

πŸ“ Penjelasan Parameter

Parameter Required Deskripsi
PORT βœ… Port server (default: 5882)
CENTER_URL βœ… Base URL IP Center
MEMBER_ID βœ… ID agen provider
PIN βœ… PIN agen
PASSWORD βœ… Password IP Center
SIGN_PREFIX βœ… Prefix signature (ikuti aturan provider)
AUVYN_SECRET βœ… Secret untuk akses endpoint /api/*
CALLBACK_URL βšͺ URL backend utama untuk menerima callback
CALLBACK_SECRET βšͺ Secret callback (default: sama dengan AUVYN_SECRET)
LOGS_DIR βœ… Direktori penyimpanan log (default: ./logs)
BALANCE_LOW_LIMIT βœ… Batas alert saldo rendah dalam Rupiah (e.g., 50000)
TG_*_BOT_TOKEN βšͺ Token bot Telegram per kategori
TG_*_CHAT_ID βšͺ Chat ID Telegram per kategori

πŸ“‘ API Endpoints

πŸ”‘ Authentication Required
Semua endpoint /api/* wajib menyertakan header:

x-auvyn-secret: <AUVYN_SECRET>

πŸ₯ Health Check

GET /

Response:

{
  "ok": true,
  "name": "auvyn-apies",
  "message": "IP center bridge online",
  "time": "2025-01-01T00:00:00.000Z"
}

πŸ“ Ping

Test koneksi API dengan endpoint ini.

POST /api/ping
x-auvyn-secret: <your-secret>

Response:

{
  "ok": true,
  "message": "pong"
}

πŸ’³ Transaction (Request Awal)

Endpoint utama untuk memproses transaksi produk digital.

POST /api/transaction
Content-Type: application/json
x-auvyn-secret: <your-secret>

Request Body:

{
  "product": "PFF",
  "dest": "085727035336",
  "qty": 1,
  "refID": "AVN1234567890",
  "meta": {
    "orderId": "INV-123",
    "source": "kuota-worker",
    "client_id": "avn_cl_xxxxx" 
  }
}

Multi-client callback routing Jika kamu pakai fitur clients/webhooks, pastikan request /api/transaction menyertakan meta.client_id supaya callback diarahkan ke webhook milik client tersebut.

Response (Internal - ke Backend Utama):

{
  "ok": true,
  "statusCode": 200,
  "refID": "AVN1736425720255",
  "product": "PFF",
  "dest": "085727035336",
  "qty": 1,
  "raw": "[INTERNAL DATA]",
  "balanceInfo": {
    "remaining": 77827622
  },
  "category": "pending",
  "providerResult": {
    "state": "PENDING",
    "code": "PENDING_AKAN_DIPROSES"
  },
  "meta": {
    "orderId": "INV-123"
  }
}

Category Types:

  • success β†’ Transaksi berhasil
  • pending β†’ Transaksi sedang diproses
  • failed β†’ Transaksi gagal

⚠️ Penting
Response dari /api/transaction adalah payload internal untuk backend utama.
Jika akan diteruskan ke frontend publik, lakukan filtering di backend utama.


πŸ’° Check Balance

Cek saldo member di IP Center.

POST /api/balance
Content-Type: application/json
x-auvyn-secret: <your-secret>

Request Body (Optional):

{
  "memberId": "AG000001",
  "meta": {
    "source": "manual-check"
  }
}

Response:

{
  "ok": true,
  "balance": 12345678,
  "memberId": "AG000001"
}

🎫 Ticket M-Bal

Request tiket deposit (M-Bal) ke IP Center.

POST /api/ticket-mbal
Content-Type: application/json
x-auvyn-secret: <your-secret>

Request Body:

{
  "amount": 25000000,
  "memberId": "AG000001"
}

Response:

{
  "ok": true,
  "ticket": "TICKET123456",
  "amount": 25000000,
  "memberId": "AG000001"
}

πŸ“¬ Report Webhook (Final Report)

Endpoint untuk menerima laporan final dari IP Center.

ALL /report

Behavior:

  • Menerima semua HTTP method (GET, POST, PUT, dll)
  • Log raw report ke logs/report.log
  • Klasifikasi status final transaksi
  • Kirim notifikasi Telegram
  • Callback event transaction.report ke backend utama

πŸ’‘ Info
Endpoint ini biasanya di-hit langsung oleh IP Center setelah transaksi selesai diproses.


πŸ”” Callback System (Sanitized)

Jika CALLBACK_URL di-set, Auvyn Apies akan mengirim callback ke backend utama setiap kali ada event.

πŸ“€ Header Callback

POST <CALLBACK_URL>
Content-Type: application/json
x-auvyn-callback-secret: <CALLBACK_SECRET>
x-auvyn-event: <event-type>

🎭 Event Types

  • transaction.request β†’ Respon awal transaksi dari IP Center
  • transaction.report β†’ Laporan final transaksi
  • balance.check β†’ Hasil cek saldo
  • balance.ticket β†’ Hasil request tiket M-Bal

🧩 Managed Webhooks (Multi-Client)

Selain callback legacy via CALLBACK_URL, versi ini mendukung webhook per client yang dikelola dari endpoint admin.

Event yang dipakai untuk webhook client:

  • invoice.paid (category=success)
  • invoice.failed (category=failed)
  • invoice.pending (category=pending)

Event di atas diturunkan otomatis dari event internal transaction.request dan transaction.report.

Routing: webhook client ditentukan dari meta.client_id pada request /api/transaction.

πŸ›‘οΈ Payload Sanitization

Yang dibuang / disensor sebelum callback:

  • centerUrl β†’ URL IP Center
  • sign β†’ Signature hash
  • memberID β†’ ID member
  • Bagian sensitif pada raw (HRG, M-Bal, SN/Ref, dll)

βœ… Contoh Callback Aman

{
  "ok": true,
  "statusCode": 200,
  "refID": "AVN1736425720255",
  "product": "PFF",
  "dest": "085727035336",
  "qty": 1,
  "category": "success",
  "raw": "[REDACTED]",
  "providerResult": {
    "state": "SUCCESS",
    "code": "SUKSES",
    "sn": "[REDACTED]",
    "raw": "[REDACTED]"
  },
  "meta": {
    "orderId": "INV-123"
  }
}

πŸ” Keamanan
Payload callback sudah di-sanitize untuk melindungi data sensitif.
Backend utama hanya menerima informasi yang aman untuk diproses.


πŸ‘‘ Admin & Client Management

πŸ” Admin Auth Header

Semua endpoint /admin/* wajib menyertakan:

x-admin-secret: <ADMIN_SECRET>
x-admin-pin: <ADMIN_PIN>
x-admin-keys: <ADMIN_KEYS>

πŸ”Ž List Clients

GET /admin/client/list-clients

πŸ”Ž List Webhooks

GET /admin/client/list-webhook

βž• Add Client (+ Webhook default)

POST /admin/client/add-clients
Content-Type: application/json

{
  "client_name": "fadzpay",
  "url": "https://domain.com/api/v1/callback/webhook",
  "events": ["invoice.paid","invoice.failed","invoice.pending"]
}

Response akan mengembalikan client_secret, client_pin, client_keys dan secret_callback (ditampilkan sekali). Simpan segera.

❌ Delete Client

POST /admin/client/del-clients
Content-Type: application/json

{ "client_id": "avn_cl_xxxxx" }

πŸ§‘β€πŸ’Ό Client Auth Header

Semua endpoint /client/* wajib menyertakan:

x-client-secret: <CLIENT_SECRET>
x-client-pin: <CLIENT_PIN>
x-client-keys: <CLIENT_KEYS>

πŸ”„ Rotate Secret Callback

POST /client/rotate/secret-callback

πŸ”„ Rotate URL/Events Callback

POST /client/rotate/url-callback
Content-Type: application/json

{
  "webhook_id": "avn_wh_xxxxx",
  "url": "https://domain.com/new-callback",
  "events": ["invoice.paid","invoice.failed","invoice.pending"]
}

πŸ“Š Logging & Monitoring

πŸ“„ File Log

File Isi
combined.log Semua aktivitas aplikasi
error.log Error & exception
trx-success.log Transaksi sukses
trx-pending.log Transaksi pending
trx-failed.log Transaksi gagal
report.log Webhook /report dari IP Center

πŸ“± Notifikasi Telegram

Auvyn Apies mendukung 4 kategori bot Telegram yang terpisah:

Bot Fungsi
SUCCESS Notifikasi transaksi berhasil
PENDING Notifikasi transaksi pending
FAILED Notifikasi transaksi gagal
SYSTEM Alert saldo rendah, report, error

πŸ’‘ Pro Tip
Payload Telegram tetap full internal (aman karena hanya dikirim ke bot pribadi kamu).
Berbeda dengan callback ke backend yang sudah di-sanitize.


🧹 Maintenance

Cleanup Log

Bersihkan log lama untuk menghemat disk space.

cd /opt/auvyn-apies
./cleanup-logs.sh

# Atau custom retention
KEEP_DAYS=14 ./cleanup-logs.sh

⏰ Cron Otomatis

Setup cron job untuk cleanup otomatis setiap hari jam 3 pagi:

crontab -e

Tambahkan line ini:

0 3 * * * /bin/bash /opt/auvyn-apies/cleanup-logs.sh >> /var/log/cleanup-auvyn.log 2>&1

πŸ”„ Update / Upgrade

Kalau ada update di repository, jalankan:

sudo /opt/auvyn-apies/update.sh

πŸ“¦ Fungsi update.sh

  1. βœ… Auto stash kalau ada perubahan lokal
  2. βœ… Pull update terbaru dari GitHub
  3. βœ… Install dependency kalau ada perubahan
  4. βœ… Restart app via PM2 (pm2 restart auvyn-apies)
  5. βœ… File .env tidak ditimpa

πŸš€ One-liner Update

bash <(curl -fsSL https://raw.githubusercontent.com/Matsumiko/auvyn-apies/main/update.sh)

πŸ”§ Troubleshooting

❌ Git pull gagal karena local changes

Error:

error: Your local changes would be overwritten by merge

Solusi Cepat:

cd /opt/auvyn-apies
git stash
git pull --ff-only
git stash pop
pm2 restart auvyn-apies

Atau langsung pakai update.sh karena sudah auto-stash.


❌ Callback tidak sampai

Checklist:

  • βœ… Cek CALLBACK_URL sudah benar
  • βœ… Pastikan backend utama bisa diakses dari VPS
  • βœ… Verifikasi CALLBACK_SECRET cocok di kedua sisi
  • βœ… Check firewall/security group
  • βœ… Lihat log combined.log untuk error

❌ Notifikasi Telegram tidak masuk

Checklist:

  • βœ… Pastikan token bot benar
  • βœ… Bot sudah join grup/chat
  • βœ… Chat ID benar
  • βœ… Bot punya permission untuk send message
  • βœ… Cek log error.log untuk detail error

Test Manual:

curl -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" \
  -d "chat_id=<CHAT_ID>" \
  -d "text=Test from Auvyn Apies"

❌ Service tidak start

Debug:

# Lihat status detail
pm2 ls

# Lihat log error
pm2 logs auvyn-apies --lines 50

# Test manual run
cd /opt/auvyn-apies
node server.js

❌ Port sudah digunakan

Error:

Error: listen EADDRINUSE: address already in use :::5882

Solusi:

# Cari process yang pakai port
sudo lsof -i :5882

# Kill process
sudo kill -9 <PID>

# Atau ubah PORT di .env

🀝 Contributing

Contributions are welcome! Kalau kamu punya ide atau perbaikan:

  1. Fork repository ini
  2. Buat branch baru (git checkout -b feature/amazing-feature)
  3. Commit changes (git commit -m 'Add amazing feature')
  4. Push ke branch (git push origin feature/amazing-feature)
  5. Buat Pull Request

πŸ“œ License

MIT License - lihat file LICENSE untuk detail.


πŸ’¬ Support

Punya pertanyaan atau butuh bantuan?


⭐ Support Project

Project ini dibuat untuk membantu seller produk digital Indonesia.
Kalau bermanfaat, jangan lupa kasih star ⭐

Made with ❀️ by Indonesian Developers

⬆ Back to Top


CURL Examples

Ada contoh lengkap request curl di file (jalankan dengan , lalu edit host/secret sesuai kebutuhan).

About

Bridge untuk transaksi pulsa/kuota/voucher ke IP Center dengan logging, notifikasi Telegram & callback otomatis

Topics

Resources

Stars

Watchers

Forks

Contributors