@serve.zone/dcrouter 11.13.0 → 11.14.0

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 (201) hide show
  1. package/dist_serve/bundle.js +2 -2
  2. package/package.json +1 -1
  3. package/readme.md +107 -3
  4. package/ts/00_commitinfo_data.ts +1 -1
  5. package/ts_web/00_commitinfo_data.ts +1 -1
  6. package/ts_web/readme.md +17 -0
  7. package/ts_web/router.ts +1 -1
  8. package/dist_ts/00_commitinfo_data.d.ts +0 -8
  9. package/dist_ts/00_commitinfo_data.js +0 -9
  10. package/dist_ts/cache/classes.cache.cleaner.d.ts +0 -47
  11. package/dist_ts/cache/classes.cache.cleaner.js +0 -130
  12. package/dist_ts/cache/classes.cached.document.d.ts +0 -76
  13. package/dist_ts/cache/classes.cached.document.js +0 -100
  14. package/dist_ts/cache/classes.cachedb.d.ts +0 -60
  15. package/dist_ts/cache/classes.cachedb.js +0 -126
  16. package/dist_ts/cache/documents/classes.cached.email.d.ts +0 -125
  17. package/dist_ts/cache/documents/classes.cached.email.js +0 -337
  18. package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +0 -119
  19. package/dist_ts/cache/documents/classes.cached.ip.reputation.js +0 -323
  20. package/dist_ts/cache/documents/index.d.ts +0 -2
  21. package/dist_ts/cache/documents/index.js +0 -3
  22. package/dist_ts/cache/index.d.ts +0 -4
  23. package/dist_ts/cache/index.js +0 -7
  24. package/dist_ts/classes.cert-provision-scheduler.d.ts +0 -54
  25. package/dist_ts/classes.cert-provision-scheduler.js +0 -118
  26. package/dist_ts/classes.dcrouter.d.ts +0 -386
  27. package/dist_ts/classes.dcrouter.js +0 -1682
  28. package/dist_ts/classes.storage-cert-manager.d.ts +0 -18
  29. package/dist_ts/classes.storage-cert-manager.js +0 -43
  30. package/dist_ts/config/classes.api-token-manager.d.ts +0 -46
  31. package/dist_ts/config/classes.api-token-manager.js +0 -150
  32. package/dist_ts/config/classes.route-config-manager.d.ts +0 -38
  33. package/dist_ts/config/classes.route-config-manager.js +0 -256
  34. package/dist_ts/config/index.d.ts +0 -3
  35. package/dist_ts/config/index.js +0 -5
  36. package/dist_ts/config/validator.d.ts +0 -104
  37. package/dist_ts/config/validator.js +0 -152
  38. package/dist_ts/errors/base.errors.d.ts +0 -224
  39. package/dist_ts/errors/base.errors.js +0 -320
  40. package/dist_ts/errors/error-handler.d.ts +0 -98
  41. package/dist_ts/errors/error-handler.js +0 -282
  42. package/dist_ts/errors/error.codes.d.ts +0 -115
  43. package/dist_ts/errors/error.codes.js +0 -136
  44. package/dist_ts/errors/index.d.ts +0 -54
  45. package/dist_ts/errors/index.js +0 -136
  46. package/dist_ts/errors/reputation.errors.d.ts +0 -183
  47. package/dist_ts/errors/reputation.errors.js +0 -292
  48. package/dist_ts/http3/http3-route-augmentation.d.ts +0 -50
  49. package/dist_ts/http3/http3-route-augmentation.js +0 -98
  50. package/dist_ts/http3/index.d.ts +0 -1
  51. package/dist_ts/http3/index.js +0 -2
  52. package/dist_ts/index.d.ts +0 -8
  53. package/dist_ts/index.js +0 -29
  54. package/dist_ts/logger.d.ts +0 -21
  55. package/dist_ts/logger.js +0 -81
  56. package/dist_ts/monitoring/classes.metricscache.d.ts +0 -32
  57. package/dist_ts/monitoring/classes.metricscache.js +0 -63
  58. package/dist_ts/monitoring/classes.metricsmanager.d.ts +0 -184
  59. package/dist_ts/monitoring/classes.metricsmanager.js +0 -744
  60. package/dist_ts/monitoring/index.d.ts +0 -1
  61. package/dist_ts/monitoring/index.js +0 -2
  62. package/dist_ts/opsserver/classes.opsserver.d.ts +0 -38
  63. package/dist_ts/opsserver/classes.opsserver.js +0 -87
  64. package/dist_ts/opsserver/handlers/admin.handler.d.ts +0 -31
  65. package/dist_ts/opsserver/handlers/admin.handler.js +0 -180
  66. package/dist_ts/opsserver/handlers/api-token.handler.d.ts +0 -6
  67. package/dist_ts/opsserver/handlers/api-token.handler.js +0 -62
  68. package/dist_ts/opsserver/handlers/certificate.handler.d.ts +0 -32
  69. package/dist_ts/opsserver/handlers/certificate.handler.js +0 -421
  70. package/dist_ts/opsserver/handlers/config.handler.d.ts +0 -7
  71. package/dist_ts/opsserver/handlers/config.handler.js +0 -192
  72. package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +0 -30
  73. package/dist_ts/opsserver/handlers/email-ops.handler.js +0 -227
  74. package/dist_ts/opsserver/handlers/index.d.ts +0 -12
  75. package/dist_ts/opsserver/handlers/index.js +0 -13
  76. package/dist_ts/opsserver/handlers/logs.handler.d.ts +0 -25
  77. package/dist_ts/opsserver/handlers/logs.handler.js +0 -256
  78. package/dist_ts/opsserver/handlers/radius.handler.d.ts +0 -6
  79. package/dist_ts/opsserver/handlers/radius.handler.js +0 -295
  80. package/dist_ts/opsserver/handlers/remoteingress.handler.d.ts +0 -6
  81. package/dist_ts/opsserver/handlers/remoteingress.handler.js +0 -156
  82. package/dist_ts/opsserver/handlers/route-management.handler.d.ts +0 -14
  83. package/dist_ts/opsserver/handlers/route-management.handler.js +0 -117
  84. package/dist_ts/opsserver/handlers/security.handler.d.ts +0 -9
  85. package/dist_ts/opsserver/handlers/security.handler.js +0 -233
  86. package/dist_ts/opsserver/handlers/stats.handler.d.ts +0 -11
  87. package/dist_ts/opsserver/handlers/stats.handler.js +0 -403
  88. package/dist_ts/opsserver/handlers/vpn.handler.d.ts +0 -6
  89. package/dist_ts/opsserver/handlers/vpn.handler.js +0 -199
  90. package/dist_ts/opsserver/helpers/guards.d.ts +0 -27
  91. package/dist_ts/opsserver/helpers/guards.js +0 -43
  92. package/dist_ts/opsserver/index.d.ts +0 -1
  93. package/dist_ts/opsserver/index.js +0 -2
  94. package/dist_ts/paths.d.ts +0 -26
  95. package/dist_ts/paths.js +0 -45
  96. package/dist_ts/plugins.d.ts +0 -81
  97. package/dist_ts/plugins.js +0 -115
  98. package/dist_ts/radius/classes.accounting.manager.d.ts +0 -231
  99. package/dist_ts/radius/classes.accounting.manager.js +0 -462
  100. package/dist_ts/radius/classes.radius.server.d.ts +0 -171
  101. package/dist_ts/radius/classes.radius.server.js +0 -386
  102. package/dist_ts/radius/classes.vlan.manager.d.ts +0 -128
  103. package/dist_ts/radius/classes.vlan.manager.js +0 -279
  104. package/dist_ts/radius/index.d.ts +0 -13
  105. package/dist_ts/radius/index.js +0 -14
  106. package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +0 -94
  107. package/dist_ts/remoteingress/classes.remoteingress-manager.js +0 -271
  108. package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +0 -59
  109. package/dist_ts/remoteingress/classes.tunnel-manager.js +0 -165
  110. package/dist_ts/remoteingress/index.d.ts +0 -2
  111. package/dist_ts/remoteingress/index.js +0 -3
  112. package/dist_ts/security/classes.contentscanner.d.ts +0 -164
  113. package/dist_ts/security/classes.contentscanner.js +0 -642
  114. package/dist_ts/security/classes.ipreputationchecker.d.ts +0 -160
  115. package/dist_ts/security/classes.ipreputationchecker.js +0 -537
  116. package/dist_ts/security/classes.securitylogger.d.ts +0 -144
  117. package/dist_ts/security/classes.securitylogger.js +0 -235
  118. package/dist_ts/security/index.d.ts +0 -3
  119. package/dist_ts/security/index.js +0 -4
  120. package/dist_ts/sms/classes.smsservice.d.ts +0 -15
  121. package/dist_ts/sms/classes.smsservice.js +0 -72
  122. package/dist_ts/sms/config/sms.config.d.ts +0 -93
  123. package/dist_ts/sms/config/sms.config.js +0 -2
  124. package/dist_ts/sms/config/sms.schema.d.ts +0 -5
  125. package/dist_ts/sms/config/sms.schema.js +0 -121
  126. package/dist_ts/sms/index.d.ts +0 -1
  127. package/dist_ts/sms/index.js +0 -2
  128. package/dist_ts/storage/classes.storagemanager.d.ts +0 -83
  129. package/dist_ts/storage/classes.storagemanager.js +0 -348
  130. package/dist_ts/storage/index.d.ts +0 -1
  131. package/dist_ts/storage/index.js +0 -3
  132. package/dist_ts/vpn/classes.vpn-manager.d.ts +0 -113
  133. package/dist_ts/vpn/classes.vpn-manager.js +0 -297
  134. package/dist_ts/vpn/index.d.ts +0 -1
  135. package/dist_ts/vpn/index.js +0 -2
  136. package/dist_ts_apiclient/classes.apitoken.d.ts +0 -41
  137. package/dist_ts_apiclient/classes.apitoken.js +0 -115
  138. package/dist_ts_apiclient/classes.certificate.d.ts +0 -57
  139. package/dist_ts_apiclient/classes.certificate.js +0 -69
  140. package/dist_ts_apiclient/classes.config.d.ts +0 -7
  141. package/dist_ts_apiclient/classes.config.js +0 -11
  142. package/dist_ts_apiclient/classes.dcrouterapiclient.d.ts +0 -41
  143. package/dist_ts_apiclient/classes.dcrouterapiclient.js +0 -81
  144. package/dist_ts_apiclient/classes.email.d.ts +0 -30
  145. package/dist_ts_apiclient/classes.email.js +0 -52
  146. package/dist_ts_apiclient/classes.logs.d.ts +0 -21
  147. package/dist_ts_apiclient/classes.logs.js +0 -14
  148. package/dist_ts_apiclient/classes.radius.d.ts +0 -59
  149. package/dist_ts_apiclient/classes.radius.js +0 -95
  150. package/dist_ts_apiclient/classes.remoteingress.d.ts +0 -54
  151. package/dist_ts_apiclient/classes.remoteingress.js +0 -136
  152. package/dist_ts_apiclient/classes.route.d.ts +0 -42
  153. package/dist_ts_apiclient/classes.route.js +0 -154
  154. package/dist_ts_apiclient/classes.stats.d.ts +0 -47
  155. package/dist_ts_apiclient/classes.stats.js +0 -38
  156. package/dist_ts_apiclient/index.d.ts +0 -10
  157. package/dist_ts_apiclient/index.js +0 -14
  158. package/dist_ts_apiclient/plugins.d.ts +0 -3
  159. package/dist_ts_apiclient/plugins.js +0 -5
  160. package/dist_ts_web/00_commitinfo_data.d.ts +0 -8
  161. package/dist_ts_web/00_commitinfo_data.js +0 -9
  162. package/dist_ts_web/appstate.d.ts +0 -238
  163. package/dist_ts_web/appstate.js +0 -1174
  164. package/dist_ts_web/elements/index.d.ts +0 -13
  165. package/dist_ts_web/elements/index.js +0 -14
  166. package/dist_ts_web/elements/ops-dashboard.d.ts +0 -23
  167. package/dist_ts_web/elements/ops-dashboard.js +0 -323
  168. package/dist_ts_web/elements/ops-view-apitokens.d.ts +0 -13
  169. package/dist_ts_web/elements/ops-view-apitokens.js +0 -371
  170. package/dist_ts_web/elements/ops-view-certificates.d.ts +0 -22
  171. package/dist_ts_web/elements/ops-view-certificates.js +0 -528
  172. package/dist_ts_web/elements/ops-view-config.d.ts +0 -19
  173. package/dist_ts_web/elements/ops-view-config.js +0 -339
  174. package/dist_ts_web/elements/ops-view-emails.d.ts +0 -21
  175. package/dist_ts_web/elements/ops-view-emails.js +0 -165
  176. package/dist_ts_web/elements/ops-view-logs.d.ts +0 -13
  177. package/dist_ts_web/elements/ops-view-logs.js +0 -159
  178. package/dist_ts_web/elements/ops-view-network.d.ts +0 -71
  179. package/dist_ts_web/elements/ops-view-network.js +0 -764
  180. package/dist_ts_web/elements/ops-view-overview.d.ts +0 -22
  181. package/dist_ts_web/elements/ops-view-overview.js +0 -456
  182. package/dist_ts_web/elements/ops-view-remoteingress.d.ts +0 -20
  183. package/dist_ts_web/elements/ops-view-remoteingress.js +0 -494
  184. package/dist_ts_web/elements/ops-view-routes.d.ts +0 -12
  185. package/dist_ts_web/elements/ops-view-routes.js +0 -404
  186. package/dist_ts_web/elements/ops-view-security.d.ts +0 -21
  187. package/dist_ts_web/elements/ops-view-security.js +0 -574
  188. package/dist_ts_web/elements/ops-view-vpn.d.ts +0 -14
  189. package/dist_ts_web/elements/ops-view-vpn.js +0 -369
  190. package/dist_ts_web/elements/shared/css.d.ts +0 -1
  191. package/dist_ts_web/elements/shared/css.js +0 -10
  192. package/dist_ts_web/elements/shared/index.d.ts +0 -2
  193. package/dist_ts_web/elements/shared/index.js +0 -3
  194. package/dist_ts_web/elements/shared/ops-sectionheading.d.ts +0 -5
  195. package/dist_ts_web/elements/shared/ops-sectionheading.js +0 -82
  196. package/dist_ts_web/index.d.ts +0 -1
  197. package/dist_ts_web/index.js +0 -10
  198. package/dist_ts_web/plugins.d.ts +0 -6
  199. package/dist_ts_web/plugins.js +0 -11
  200. package/dist_ts_web/router.d.ts +0 -19
  201. package/dist_ts_web/router.js +0 -91
@@ -1,113 +0,0 @@
1
- import * as plugins from '../plugins.js';
2
- import type { StorageManager } from '../storage/classes.storagemanager.js';
3
- export interface IVpnManagerConfig {
4
- /** VPN subnet CIDR (default: '10.8.0.0/24') */
5
- subnet?: string;
6
- /** WireGuard UDP listen port (default: 51820) */
7
- wgListenPort?: number;
8
- /** DNS servers pushed to VPN clients */
9
- dns?: string[];
10
- /** Server endpoint hostname for client configs (e.g. 'vpn.example.com') */
11
- serverEndpoint?: string;
12
- /** Override forwarding mode. Default: auto-detect (tun if root, socket otherwise) */
13
- forwardingMode?: 'tun' | 'socket';
14
- }
15
- interface IPersistedClient {
16
- clientId: string;
17
- enabled: boolean;
18
- tags?: string[];
19
- description?: string;
20
- assignedIp?: string;
21
- noisePublicKey: string;
22
- wgPublicKey: string;
23
- createdAt: number;
24
- updatedAt: number;
25
- expiresAt?: string;
26
- }
27
- /**
28
- * Manages the SmartVPN server lifecycle and VPN client CRUD.
29
- * Persists server keys and client registrations via StorageManager.
30
- */
31
- export declare class VpnManager {
32
- private storageManager;
33
- private config;
34
- private vpnServer?;
35
- private clients;
36
- private serverKeys?;
37
- private _forwardingMode;
38
- constructor(storageManager: StorageManager, config: IVpnManagerConfig);
39
- /** The effective forwarding mode (tun or socket). */
40
- get forwardingMode(): 'tun' | 'socket';
41
- /** The VPN subnet CIDR. */
42
- getSubnet(): string;
43
- /** Whether the VPN server is running. */
44
- get running(): boolean;
45
- /**
46
- * Start the VPN server.
47
- * Loads or generates server keys, loads persisted clients, starts VpnServer.
48
- */
49
- start(): Promise<void>;
50
- /**
51
- * Stop the VPN server.
52
- */
53
- stop(): Promise<void>;
54
- /**
55
- * Create a new VPN client. Returns the config bundle (secrets only shown once).
56
- */
57
- createClient(opts: {
58
- clientId: string;
59
- tags?: string[];
60
- description?: string;
61
- }): Promise<plugins.smartvpn.IClientConfigBundle>;
62
- /**
63
- * Remove a VPN client.
64
- */
65
- removeClient(clientId: string): Promise<void>;
66
- /**
67
- * List all registered clients (without secrets).
68
- */
69
- listClients(): IPersistedClient[];
70
- /**
71
- * Enable a client.
72
- */
73
- enableClient(clientId: string): Promise<void>;
74
- /**
75
- * Disable a client.
76
- */
77
- disableClient(clientId: string): Promise<void>;
78
- /**
79
- * Rotate a client's keys. Returns the new config bundle.
80
- */
81
- rotateClientKey(clientId: string): Promise<plugins.smartvpn.IClientConfigBundle>;
82
- /**
83
- * Export a client config (without secrets).
84
- */
85
- exportClientConfig(clientId: string, format: 'smartvpn' | 'wireguard'): Promise<string>;
86
- /**
87
- * Get server status.
88
- */
89
- getStatus(): Promise<plugins.smartvpn.IVpnStatus | null>;
90
- /**
91
- * Get server statistics.
92
- */
93
- getStatistics(): Promise<plugins.smartvpn.IVpnServerStatistics | null>;
94
- /**
95
- * List currently connected clients.
96
- */
97
- getConnectedClients(): Promise<plugins.smartvpn.IVpnClientInfo[]>;
98
- /**
99
- * Get telemetry for a specific client.
100
- */
101
- getClientTelemetry(clientId: string): Promise<plugins.smartvpn.IVpnClientTelemetry | null>;
102
- /**
103
- * Get server public keys (for display/info).
104
- */
105
- getServerPublicKeys(): {
106
- noisePublicKey: string;
107
- wgPublicKey: string;
108
- } | null;
109
- private loadOrGenerateServerKeys;
110
- private loadPersistedClients;
111
- private persistClient;
112
- }
113
- export {};
@@ -1,297 +0,0 @@
1
- import * as plugins from '../plugins.js';
2
- import { logger } from '../logger.js';
3
- const STORAGE_PREFIX_KEYS = '/vpn/server-keys';
4
- const STORAGE_PREFIX_CLIENTS = '/vpn/clients/';
5
- /**
6
- * Manages the SmartVPN server lifecycle and VPN client CRUD.
7
- * Persists server keys and client registrations via StorageManager.
8
- */
9
- export class VpnManager {
10
- storageManager;
11
- config;
12
- vpnServer;
13
- clients = new Map();
14
- serverKeys;
15
- _forwardingMode;
16
- constructor(storageManager, config) {
17
- this.storageManager = storageManager;
18
- this.config = config;
19
- // Auto-detect forwarding mode: tun if root, socket otherwise
20
- this._forwardingMode = config.forwardingMode
21
- ?? (process.getuid?.() === 0 ? 'tun' : 'socket');
22
- }
23
- /** The effective forwarding mode (tun or socket). */
24
- get forwardingMode() {
25
- return this._forwardingMode;
26
- }
27
- /** The VPN subnet CIDR. */
28
- getSubnet() {
29
- return this.config.subnet || '10.8.0.0/24';
30
- }
31
- /** Whether the VPN server is running. */
32
- get running() {
33
- return this.vpnServer?.running ?? false;
34
- }
35
- /**
36
- * Start the VPN server.
37
- * Loads or generates server keys, loads persisted clients, starts VpnServer.
38
- */
39
- async start() {
40
- // Load or generate server keys
41
- this.serverKeys = await this.loadOrGenerateServerKeys();
42
- // Load persisted clients
43
- await this.loadPersistedClients();
44
- // Build client entries for the daemon
45
- const clientEntries = [];
46
- for (const client of this.clients.values()) {
47
- clientEntries.push({
48
- clientId: client.clientId,
49
- publicKey: client.noisePublicKey,
50
- wgPublicKey: client.wgPublicKey,
51
- enabled: client.enabled,
52
- tags: client.tags,
53
- description: client.description,
54
- assignedIp: client.assignedIp,
55
- expiresAt: client.expiresAt,
56
- });
57
- }
58
- const subnet = this.getSubnet();
59
- const wgListenPort = this.config.wgListenPort ?? 51820;
60
- // Create and start VpnServer
61
- this.vpnServer = new plugins.smartvpn.VpnServer({
62
- transport: { transport: 'stdio' },
63
- });
64
- const serverConfig = {
65
- listenAddr: '0.0.0.0:0', // WS listener not strictly needed but required field
66
- privateKey: this.serverKeys.noisePrivateKey,
67
- publicKey: this.serverKeys.noisePublicKey,
68
- subnet,
69
- dns: this.config.dns,
70
- forwardingMode: this._forwardingMode,
71
- transportMode: 'all',
72
- wgPrivateKey: this.serverKeys.wgPrivateKey,
73
- wgListenPort,
74
- clients: clientEntries,
75
- socketForwardProxyProtocol: this._forwardingMode === 'socket',
76
- };
77
- await this.vpnServer.start(serverConfig);
78
- logger.log('info', `VPN server started: mode=${this._forwardingMode}, subnet=${subnet}, wg=:${wgListenPort}, clients=${this.clients.size}`);
79
- }
80
- /**
81
- * Stop the VPN server.
82
- */
83
- async stop() {
84
- if (this.vpnServer) {
85
- try {
86
- await this.vpnServer.stopServer();
87
- }
88
- catch {
89
- // Ignore stop errors
90
- }
91
- this.vpnServer.stop();
92
- this.vpnServer = undefined;
93
- }
94
- logger.log('info', 'VPN server stopped');
95
- }
96
- // ── Client CRUD ────────────────────────────────────────────────────────
97
- /**
98
- * Create a new VPN client. Returns the config bundle (secrets only shown once).
99
- */
100
- async createClient(opts) {
101
- if (!this.vpnServer) {
102
- throw new Error('VPN server not running');
103
- }
104
- const bundle = await this.vpnServer.createClient({
105
- clientId: opts.clientId,
106
- tags: opts.tags,
107
- description: opts.description,
108
- });
109
- // Update WireGuard config endpoint if serverEndpoint is configured
110
- if (this.config.serverEndpoint && bundle.wireguardConfig) {
111
- const wgPort = this.config.wgListenPort ?? 51820;
112
- bundle.wireguardConfig = bundle.wireguardConfig.replace(/Endpoint\s*=\s*.+/, `Endpoint = ${this.config.serverEndpoint}:${wgPort}`);
113
- }
114
- // Persist client entry (without private keys)
115
- const persisted = {
116
- clientId: bundle.entry.clientId,
117
- enabled: bundle.entry.enabled ?? true,
118
- tags: bundle.entry.tags,
119
- description: bundle.entry.description,
120
- assignedIp: bundle.entry.assignedIp,
121
- noisePublicKey: bundle.entry.publicKey,
122
- wgPublicKey: bundle.entry.wgPublicKey || '',
123
- createdAt: Date.now(),
124
- updatedAt: Date.now(),
125
- expiresAt: bundle.entry.expiresAt,
126
- };
127
- this.clients.set(persisted.clientId, persisted);
128
- await this.persistClient(persisted);
129
- return bundle;
130
- }
131
- /**
132
- * Remove a VPN client.
133
- */
134
- async removeClient(clientId) {
135
- if (!this.vpnServer) {
136
- throw new Error('VPN server not running');
137
- }
138
- await this.vpnServer.removeClient(clientId);
139
- this.clients.delete(clientId);
140
- await this.storageManager.delete(`${STORAGE_PREFIX_CLIENTS}${clientId}`);
141
- }
142
- /**
143
- * List all registered clients (without secrets).
144
- */
145
- listClients() {
146
- return [...this.clients.values()];
147
- }
148
- /**
149
- * Enable a client.
150
- */
151
- async enableClient(clientId) {
152
- if (!this.vpnServer)
153
- throw new Error('VPN server not running');
154
- await this.vpnServer.enableClient(clientId);
155
- const client = this.clients.get(clientId);
156
- if (client) {
157
- client.enabled = true;
158
- client.updatedAt = Date.now();
159
- await this.persistClient(client);
160
- }
161
- }
162
- /**
163
- * Disable a client.
164
- */
165
- async disableClient(clientId) {
166
- if (!this.vpnServer)
167
- throw new Error('VPN server not running');
168
- await this.vpnServer.disableClient(clientId);
169
- const client = this.clients.get(clientId);
170
- if (client) {
171
- client.enabled = false;
172
- client.updatedAt = Date.now();
173
- await this.persistClient(client);
174
- }
175
- }
176
- /**
177
- * Rotate a client's keys. Returns the new config bundle.
178
- */
179
- async rotateClientKey(clientId) {
180
- if (!this.vpnServer)
181
- throw new Error('VPN server not running');
182
- const bundle = await this.vpnServer.rotateClientKey(clientId);
183
- // Update endpoint in WireGuard config
184
- if (this.config.serverEndpoint && bundle.wireguardConfig) {
185
- const wgPort = this.config.wgListenPort ?? 51820;
186
- bundle.wireguardConfig = bundle.wireguardConfig.replace(/Endpoint\s*=\s*.+/, `Endpoint = ${this.config.serverEndpoint}:${wgPort}`);
187
- }
188
- // Update persisted entry with new public keys
189
- const client = this.clients.get(clientId);
190
- if (client) {
191
- client.noisePublicKey = bundle.entry.publicKey;
192
- client.wgPublicKey = bundle.entry.wgPublicKey || '';
193
- client.updatedAt = Date.now();
194
- await this.persistClient(client);
195
- }
196
- return bundle;
197
- }
198
- /**
199
- * Export a client config (without secrets).
200
- */
201
- async exportClientConfig(clientId, format) {
202
- if (!this.vpnServer)
203
- throw new Error('VPN server not running');
204
- let config = await this.vpnServer.exportClientConfig(clientId, format);
205
- // Update endpoint in WireGuard config
206
- if (format === 'wireguard' && this.config.serverEndpoint) {
207
- const wgPort = this.config.wgListenPort ?? 51820;
208
- config = config.replace(/Endpoint\s*=\s*.+/, `Endpoint = ${this.config.serverEndpoint}:${wgPort}`);
209
- }
210
- return config;
211
- }
212
- // ── Status and telemetry ───────────────────────────────────────────────
213
- /**
214
- * Get server status.
215
- */
216
- async getStatus() {
217
- if (!this.vpnServer)
218
- return null;
219
- return this.vpnServer.getStatus();
220
- }
221
- /**
222
- * Get server statistics.
223
- */
224
- async getStatistics() {
225
- if (!this.vpnServer)
226
- return null;
227
- return this.vpnServer.getStatistics();
228
- }
229
- /**
230
- * List currently connected clients.
231
- */
232
- async getConnectedClients() {
233
- if (!this.vpnServer)
234
- return [];
235
- return this.vpnServer.listClients();
236
- }
237
- /**
238
- * Get telemetry for a specific client.
239
- */
240
- async getClientTelemetry(clientId) {
241
- if (!this.vpnServer)
242
- return null;
243
- return this.vpnServer.getClientTelemetry(clientId);
244
- }
245
- /**
246
- * Get server public keys (for display/info).
247
- */
248
- getServerPublicKeys() {
249
- if (!this.serverKeys)
250
- return null;
251
- return {
252
- noisePublicKey: this.serverKeys.noisePublicKey,
253
- wgPublicKey: this.serverKeys.wgPublicKey,
254
- };
255
- }
256
- // ── Private helpers ────────────────────────────────────────────────────
257
- async loadOrGenerateServerKeys() {
258
- const stored = await this.storageManager.getJSON(STORAGE_PREFIX_KEYS);
259
- if (stored?.noisePrivateKey && stored?.wgPrivateKey) {
260
- logger.log('info', 'Loaded VPN server keys from storage');
261
- return stored;
262
- }
263
- // Generate new keys via the daemon
264
- const tempServer = new plugins.smartvpn.VpnServer({
265
- transport: { transport: 'stdio' },
266
- });
267
- await tempServer.start();
268
- const noiseKeys = await tempServer.generateKeypair();
269
- const wgKeys = await tempServer.generateWgKeypair();
270
- tempServer.stop();
271
- const keys = {
272
- noisePrivateKey: noiseKeys.privateKey,
273
- noisePublicKey: noiseKeys.publicKey,
274
- wgPrivateKey: wgKeys.privateKey,
275
- wgPublicKey: wgKeys.publicKey,
276
- };
277
- await this.storageManager.setJSON(STORAGE_PREFIX_KEYS, keys);
278
- logger.log('info', 'Generated and persisted new VPN server keys');
279
- return keys;
280
- }
281
- async loadPersistedClients() {
282
- const keys = await this.storageManager.list(STORAGE_PREFIX_CLIENTS);
283
- for (const key of keys) {
284
- const client = await this.storageManager.getJSON(key);
285
- if (client) {
286
- this.clients.set(client.clientId, client);
287
- }
288
- }
289
- if (this.clients.size > 0) {
290
- logger.log('info', `Loaded ${this.clients.size} persisted VPN client(s)`);
291
- }
292
- }
293
- async persistClient(client) {
294
- await this.storageManager.setJSON(`${STORAGE_PREFIX_CLIENTS}${client.clientId}`, client);
295
- }
296
- }
297
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy52cG4tbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3Zwbi9jbGFzc2VzLnZwbi1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdEMsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQztBQUMvQyxNQUFNLHNCQUFzQixHQUFHLGVBQWUsQ0FBQztBQW1DL0M7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFDYixjQUFjLENBQWlCO0lBQy9CLE1BQU0sQ0FBb0I7SUFDMUIsU0FBUyxDQUE4QjtJQUN2QyxPQUFPLEdBQWtDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkQsVUFBVSxDQUF3QjtJQUNsQyxlQUFlLENBQW1CO0lBRTFDLFlBQVksY0FBOEIsRUFBRSxNQUF5QjtRQUNuRSxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQiw2REFBNkQ7UUFDN0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsY0FBYztlQUN2QyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQscURBQXFEO0lBQ3JELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELDJCQUEyQjtJQUNwQixTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxhQUFhLENBQUM7SUFDN0MsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMs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
@@ -1 +0,0 @@
1
- export * from './classes.vpn-manager.js';
@@ -1,2 +0,0 @@
1
- export * from './classes.vpn-manager.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy92cG4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQkFBMEIsQ0FBQyJ9
@@ -1,41 +0,0 @@
1
- import * as interfaces from '../dist_ts_interfaces/index.js';
2
- import type { DcRouterApiClient } from './classes.dcrouterapiclient.js';
3
- export declare class ApiToken {
4
- private clientRef;
5
- id: string;
6
- name: string;
7
- scopes: interfaces.data.TApiTokenScope[];
8
- createdAt: number;
9
- expiresAt: number | null;
10
- lastUsedAt: number | null;
11
- enabled: boolean;
12
- /** Only set on creation or roll. Not persisted on server side. */
13
- tokenValue?: string;
14
- constructor(clientRef: DcRouterApiClient, data: interfaces.data.IApiTokenInfo, tokenValue?: string);
15
- revoke(): Promise<void>;
16
- roll(): Promise<string>;
17
- toggle(enabled: boolean): Promise<void>;
18
- }
19
- export declare class ApiTokenBuilder {
20
- private clientRef;
21
- private tokenName;
22
- private tokenScopes;
23
- private tokenExpiresInDays?;
24
- constructor(clientRef: DcRouterApiClient);
25
- setName(name: string): this;
26
- setScopes(scopes: interfaces.data.TApiTokenScope[]): this;
27
- addScope(scope: interfaces.data.TApiTokenScope): this;
28
- setExpiresInDays(days: number | null): this;
29
- save(): Promise<ApiToken>;
30
- }
31
- export declare class ApiTokenManager {
32
- private clientRef;
33
- constructor(clientRef: DcRouterApiClient);
34
- list(): Promise<ApiToken[]>;
35
- create(options: {
36
- name: string;
37
- scopes: interfaces.data.TApiTokenScope[];
38
- expiresInDays?: number | null;
39
- }): Promise<ApiToken>;
40
- build(): ApiTokenBuilder;
41
- }
@@ -1,115 +0,0 @@
1
- import * as interfaces from '../dist_ts_interfaces/index.js';
2
- export class ApiToken {
3
- clientRef;
4
- // Data from IApiTokenInfo
5
- id;
6
- name;
7
- scopes;
8
- createdAt;
9
- expiresAt;
10
- lastUsedAt;
11
- enabled;
12
- /** Only set on creation or roll. Not persisted on server side. */
13
- tokenValue;
14
- constructor(clientRef, data, tokenValue) {
15
- this.clientRef = clientRef;
16
- this.id = data.id;
17
- this.name = data.name;
18
- this.scopes = data.scopes;
19
- this.createdAt = data.createdAt;
20
- this.expiresAt = data.expiresAt;
21
- this.lastUsedAt = data.lastUsedAt;
22
- this.enabled = data.enabled;
23
- this.tokenValue = tokenValue;
24
- }
25
- async revoke() {
26
- const response = await this.clientRef.request('revokeApiToken', this.clientRef.buildRequestPayload({ id: this.id }));
27
- if (!response.success) {
28
- throw new Error(response.message || 'Failed to revoke token');
29
- }
30
- }
31
- async roll() {
32
- const response = await this.clientRef.request('rollApiToken', this.clientRef.buildRequestPayload({ id: this.id }));
33
- if (!response.success) {
34
- throw new Error(response.message || 'Failed to roll token');
35
- }
36
- this.tokenValue = response.tokenValue;
37
- return response.tokenValue;
38
- }
39
- async toggle(enabled) {
40
- const response = await this.clientRef.request('toggleApiToken', this.clientRef.buildRequestPayload({ id: this.id, enabled }));
41
- if (!response.success) {
42
- throw new Error(response.message || 'Failed to toggle token');
43
- }
44
- this.enabled = enabled;
45
- }
46
- }
47
- export class ApiTokenBuilder {
48
- clientRef;
49
- tokenName = '';
50
- tokenScopes = [];
51
- tokenExpiresInDays;
52
- constructor(clientRef) {
53
- this.clientRef = clientRef;
54
- }
55
- setName(name) {
56
- this.tokenName = name;
57
- return this;
58
- }
59
- setScopes(scopes) {
60
- this.tokenScopes = scopes;
61
- return this;
62
- }
63
- addScope(scope) {
64
- if (!this.tokenScopes.includes(scope)) {
65
- this.tokenScopes.push(scope);
66
- }
67
- return this;
68
- }
69
- setExpiresInDays(days) {
70
- this.tokenExpiresInDays = days;
71
- return this;
72
- }
73
- async save() {
74
- const response = await this.clientRef.request('createApiToken', this.clientRef.buildRequestPayload({
75
- name: this.tokenName,
76
- scopes: this.tokenScopes,
77
- expiresInDays: this.tokenExpiresInDays,
78
- }));
79
- if (!response.success) {
80
- throw new Error(response.message || 'Failed to create API token');
81
- }
82
- return new ApiToken(this.clientRef, {
83
- id: response.tokenId,
84
- name: this.tokenName,
85
- scopes: this.tokenScopes,
86
- createdAt: Date.now(),
87
- expiresAt: this.tokenExpiresInDays
88
- ? Date.now() + this.tokenExpiresInDays * 24 * 60 * 60 * 1000
89
- : null,
90
- lastUsedAt: null,
91
- enabled: true,
92
- }, response.tokenValue);
93
- }
94
- }
95
- export class ApiTokenManager {
96
- clientRef;
97
- constructor(clientRef) {
98
- this.clientRef = clientRef;
99
- }
100
- async list() {
101
- const response = await this.clientRef.request('listApiTokens', this.clientRef.buildRequestPayload());
102
- return response.tokens.map((t) => new ApiToken(this.clientRef, t));
103
- }
104
- async create(options) {
105
- return this.build()
106
- .setName(options.name)
107
- .setScopes(options.scopes)
108
- .setExpiresInDays(options.expiresInDays ?? null)
109
- .save();
110
- }
111
- build() {
112
- return new ApiTokenBuilder(this.clientRef);
113
- }
114
- }
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hcGl0b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX2FwaWNsaWVudC9jbGFzc2VzLmFwaXRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxVQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFHeEQsTUFBTSxPQUFPLFFBQVE7SUFDWCxTQUFTLENBQW9CO0lBRXJDLDBCQUEwQjtJQUNuQixFQUFFLENBQVM7SUFDWCxJQUFJLENBQVM7SUFDYixNQUFNLENBQW1DO0lBQ3pDLFNBQVMsQ0FBUztJQUNsQixTQUFTLENBQWdCO0lBQ3pCLFVBQVUsQ0FBZ0I7SUFDMUIsT0FBTyxDQUFVO0lBRXhCLGtFQUFrRTtJQUMzRCxVQUFVLENBQVU7SUFFM0IsWUFBWSxTQUE0QixFQUFFLElBQW1DLEVBQUUsVUFBbUI7UUFDaEcsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTTtRQUNqQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUMzQyxnQkFBZ0IsRUFDaEIsSUFB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
@@ -1,57 +0,0 @@
1
- import * as interfaces from '../dist_ts_interfaces/index.js';
2
- import type { DcRouterApiClient } from './classes.dcrouterapiclient.js';
3
- export declare class Certificate {
4
- private clientRef;
5
- domain: string;
6
- routeNames: string[];
7
- status: interfaces.requests.TCertificateStatus;
8
- source: interfaces.requests.TCertificateSource;
9
- tlsMode: 'terminate' | 'terminate-and-reencrypt' | 'passthrough';
10
- expiryDate?: string;
11
- issuer?: string;
12
- issuedAt?: string;
13
- error?: string;
14
- canReprovision: boolean;
15
- backoffInfo?: {
16
- failures: number;
17
- retryAfter?: string;
18
- lastError?: string;
19
- };
20
- constructor(clientRef: DcRouterApiClient, data: interfaces.requests.ICertificateInfo);
21
- reprovision(): Promise<void>;
22
- delete(): Promise<void>;
23
- export(): Promise<{
24
- id: string;
25
- domainName: string;
26
- created: number;
27
- validUntil: number;
28
- privateKey: string;
29
- publicKey: string;
30
- csr: string;
31
- } | undefined>;
32
- }
33
- export interface ICertificateSummary {
34
- total: number;
35
- valid: number;
36
- expiring: number;
37
- expired: number;
38
- failed: number;
39
- unknown: number;
40
- }
41
- export declare class CertificateManager {
42
- private clientRef;
43
- constructor(clientRef: DcRouterApiClient);
44
- list(): Promise<{
45
- certificates: Certificate[];
46
- summary: ICertificateSummary;
47
- }>;
48
- import(cert: {
49
- id: string;
50
- domainName: string;
51
- created: number;
52
- validUntil: number;
53
- privateKey: string;
54
- publicKey: string;
55
- csr: string;
56
- }): Promise<void>;
57
- }