JavaScript Wrapper

v0.0.11

nxgate adalah wrapper resmi untuk Node.js (v20.11.0 ke atas). Mendukung TypeScript, ESM, CJS, dan async/await. Cocok untuk backend Node.js yang butuh verifikasi lisensi sederhana.

Instalasi

terminal
# npm
npm install nxgate
# yarn
yarn add nxgate
# pnpm
pnpm add nxgate
Dependency: axios — otomatis terinstall. Node.js minimum v20.11.0.

Penggunaan Dasar

src/license.ts
1// CommonJS
2const NxGate = require('nxgate').default;
3const { ValidationType } = require('nxgate');
4
5// ESM / TypeScript
6import NxGate, { ValidationType } from 'nxgate';
7
8async function checkLicense() {
9 const gate = new NxGate('YOUR_USER_ID');
10
11 const result = await gate.verify('XXXX-XXXX-XXXX-XXXX');
12
13 if (result === ValidationType.VALID) {
14 console.log('Lisensi valid!');
15 } else {
16 console.log('Lisensi tidak valid. Alasan:', result);
17 }
18}
19
20checkLicense().catch(console.error);

Penggunaan Lanjutan

Gunakan constructor 2 argumen untuk mengaktifkan RSA challenge otomatis, lalu gunakan verify(key, scope?, metadata?) dengan full switch-case pada ValidationType:

src/license.advanced.ts
1import NxGate, { ValidationType } from 'nxgate';
2
3const gate = new NxGate('YOUR_USER_ID', 'YOUR_PUBLIC_RSA_KEY'); // RSA challenge otomatis aktif
4
5// Verifikasi dengan scope dan metadata
6const result = await gate.verify(
7 'XXXX-XXXX-XXXX-XXXX',
8 'production', // scope (opsional)
9 'hostname=my-server' // metadata string (opsional)
10);
11
12switch (result) {
13 case ValidationType.VALID:
14 console.log('✓ Lisensi valid');
15 break;
16 case ValidationType.NOT_FOUND:
17 console.error('✗ License key tidak ditemukan');
18 break;
19 case ValidationType.NOT_ACTIVE:
20 console.error('✗ License belum diaktifkan');
21 break;
22 case ValidationType.EXPIRED:
23 console.error('✗ License sudah expired');
24 break;
25 case ValidationType.LICENSE_SCOPE_FAILED:
26 console.error('✗ Scope tidak cocok');
27 break;
28 case ValidationType.IP_LIMIT_EXCEEDED:
29 console.error('✗ Batas IP terlampaui');
30 break;
31 case ValidationType.RATE_LIMIT_EXCEEDED:
32 console.warn('âš  Rate limit, coba lagi nanti');
33 break;
34 case ValidationType.FAILED_CHALLENGE:
35 console.error('✗ RSA challenge gagal — public key salah?');
36 break;
37 case ValidationType.CONNECTION_ERROR:
38 console.error('✗ Tidak dapat terhubung ke server NxGate');
39 break;
40 case ValidationType.SERVER_ERROR:
41 console.error('✗ Server NxGate mengembalikan response invalid');
42 break;
43}

verifySimple()

Jika hanya butuh boolean tanpa perlu tahu alasan kegagalannya:

src/license.simple.ts
1import NxGate from 'nxgate';
2
3const gate = new NxGate('YOUR_USER_ID');
4
5// Return boolean — true jika VALID, false untuk semua hasil lain
6const isValid = await gate.verifySimple('XXXX-XXXX-XXXX-XXXX');
7const isValidScoped = await gate.verifySimple('XXXX-XXXX-XXXX-XXXX', 'production');

Custom Server & Debug

src/license.custom.ts
1import NxGate, { ValidationType } from 'nxgate';
2
3const gate = new NxGate('YOUR_USER_ID')
4 .setValidationServer('https://your-self-hosted-server.com')
5 .debug(); // print log request/response ke console
6
7const result = await gate.verify('XXXX-XXXX-XXXX-XXXX');

API Reference

MethodReturnDeskripsi
new NxGate(userId, rsaKey?)NxGateBuat instance. RSA challenge aktif jika rsaKey diberikan.
.setValidationServer(url)NxGateGanti URL server (untuk self-hosted). Default: api.nxgate.noxlydev.xyz
.setPublicRsaKey(key)NxGateSet public RSA key setelah konstruksi.
.useChallenges()NxGateAktifkan RSA challenge secara manual.
.debug()NxGatePrint log request & response ke console.
.verify(key, scope?, meta?)Promise<ValidationType>Verifikasi license key. Return enum ValidationType.
.verifySimple(key, scope?, meta?)Promise<boolean>Shorthand — true jika VALID, false untuk semua lainnya.

Tidak ada offline cache

JS wrapper tidak memiliki fitur offline grace period atau heartbeat seperti HardenedNxGate di Java. Jika server NxGate tidak bisa dihubungi, hasil langsung CONNECTION_ERROR. Pastikan implementasi kamu menangani kondisi ini dengan baik.

Tips

Wrapper ini cocok untuk backend Node.js yang kamu kontrol sendiri. Jangan gunakan di sisi client/browser karena userId dan RSA key akan terekspos. Untuk plugin Minecraft, gunakan HardenedNxGate dari Java library.