@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,27 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- import type { AdminHandler } from '../handlers/admin.handler.js';
3
- import * as interfaces from '../../../dist_ts_interfaces/index.js';
4
- /**
5
- * Helper function to use identity guards in handlers
6
- *
7
- * @example
8
- * // In a handler:
9
- * await passGuards(toolsArg, this.opsServerRef.adminHandler.validIdentityGuard, dataArg);
10
- */
11
- export declare function passGuards<T extends {
12
- identity?: any;
13
- }>(toolsArg: any, guard: plugins.smartguard.Guard<T>, dataArg: T): Promise<void>;
14
- /**
15
- * Helper to check admin identity in handlers and middleware.
16
- * Accepts both optional and required identity for flexibility.
17
- */
18
- export declare function requireAdminIdentity(adminHandler: AdminHandler, dataArg: {
19
- identity?: interfaces.data.IIdentity;
20
- }): Promise<void>;
21
- /**
22
- * Helper to check valid identity in handlers and middleware.
23
- * Accepts both optional and required identity for flexibility.
24
- */
25
- export declare function requireValidIdentity(adminHandler: AdminHandler, dataArg: {
26
- identity?: interfaces.data.IIdentity;
27
- }): Promise<void>;
@@ -1,43 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- import * as interfaces from '../../../dist_ts_interfaces/index.js';
3
- /**
4
- * Helper function to use identity guards in handlers
5
- *
6
- * @example
7
- * // In a handler:
8
- * await passGuards(toolsArg, this.opsServerRef.adminHandler.validIdentityGuard, dataArg);
9
- */
10
- export async function passGuards(toolsArg, guard, dataArg) {
11
- const result = await guard.exec(dataArg);
12
- if (!result) {
13
- const failedHint = await guard.getFailedHint(dataArg);
14
- throw new plugins.typedrequest.TypedResponseError(failedHint || 'Guard check failed');
15
- }
16
- }
17
- /**
18
- * Helper to check admin identity in handlers and middleware.
19
- * Accepts both optional and required identity for flexibility.
20
- */
21
- export async function requireAdminIdentity(adminHandler, dataArg) {
22
- if (!dataArg.identity) {
23
- throw new plugins.typedrequest.TypedResponseError('No identity provided');
24
- }
25
- const passed = await adminHandler.adminIdentityGuard.exec({ identity: dataArg.identity });
26
- if (!passed) {
27
- throw new plugins.typedrequest.TypedResponseError('Admin access required');
28
- }
29
- }
30
- /**
31
- * Helper to check valid identity in handlers and middleware.
32
- * Accepts both optional and required identity for flexibility.
33
- */
34
- export async function requireValidIdentity(adminHandler, dataArg) {
35
- if (!dataArg.identity) {
36
- throw new plugins.typedrequest.TypedResponseError('No identity provided');
37
- }
38
- const passed = await adminHandler.validIdentityGuard.exec({ identity: dataArg.identity });
39
- if (!passed) {
40
- throw new plugins.typedrequest.TypedResponseError('Valid identity required');
41
- }
42
- }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvb3Bzc2VydmVyL2hlbHBlcnMvZ3VhcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FDOUIsUUFBYSxFQUNiLEtBQWtDLEVBQ2xDLE9BQVU7SUFFVixNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxVQUFVLEdBQUcsTUFBTSxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELE1BQU0sSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7QUFDSCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsWUFBMEIsRUFDMUIsT0FBaUQ7SUFFakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUM3RSxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLFlBQTBCLEVBQzFCLE9BQWlEO0lBRWpELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzFGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDL0UsQ0FBQztBQUNILENBQUMifQ==
@@ -1 +0,0 @@
1
- export * from './classes.opsserver.js';
@@ -1,2 +0,0 @@
1
- export * from './classes.opsserver.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9vcHNzZXJ2ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQyJ9
@@ -1,26 +0,0 @@
1
- export declare const packageDir: string;
2
- export declare const distServe: string;
3
- export declare const dcrouterHomeDir: string;
4
- export declare const dataDir: string;
5
- export declare const defaultTsmDbPath: string;
6
- export declare const dnsRecordsDir: string;
7
- /**
8
- * Resolve all data paths from a given baseDir.
9
- * When no baseDir is provided, falls back to ~/.serve.zone/dcrouter.
10
- * Specific overrides (e.g. DATA_DIR env) take precedence.
11
- */
12
- export declare function resolvePaths(baseDir?: string): {
13
- dcrouterHomeDir: string;
14
- dataDir: string;
15
- defaultTsmDbPath: string;
16
- defaultStoragePath: string;
17
- dnsRecordsDir: string;
18
- };
19
- /**
20
- * Ensure only the data directories that are actually used exist.
21
- */
22
- export declare function ensureDataDirectories(resolvedPaths: ReturnType<typeof resolvePaths>): void;
23
- /**
24
- * Legacy wrapper — delegates to ensureDataDirectories with module-level defaults.
25
- */
26
- export declare function ensureDirectories(): void;
package/dist_ts/paths.js DELETED
@@ -1,45 +0,0 @@
1
- import * as plugins from './plugins.js';
2
- // Code/asset paths (not affected by baseDir)
3
- export const packageDir = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '../');
4
- export const distServe = plugins.path.join(packageDir, './dist_serve');
5
- // Default base for all dcrouter data (always user-writable)
6
- export const dcrouterHomeDir = plugins.path.join(plugins.os.homedir(), '.serve.zone', 'dcrouter');
7
- // Configure data directory with environment variable or default to ~/.serve.zone/dcrouter/data
8
- const DEFAULT_DATA_PATH = plugins.path.join(dcrouterHomeDir, 'data');
9
- export const dataDir = process.env.DATA_DIR
10
- ? process.env.DATA_DIR
11
- : DEFAULT_DATA_PATH;
12
- // Default TsmDB path for CacheDb
13
- export const defaultTsmDbPath = plugins.path.join(dcrouterHomeDir, 'tsmdb');
14
- // DNS records directory (only surviving MTA directory reference)
15
- export const dnsRecordsDir = plugins.path.join(dataDir, 'dns');
16
- /**
17
- * Resolve all data paths from a given baseDir.
18
- * When no baseDir is provided, falls back to ~/.serve.zone/dcrouter.
19
- * Specific overrides (e.g. DATA_DIR env) take precedence.
20
- */
21
- export function resolvePaths(baseDir) {
22
- const root = baseDir ?? plugins.path.join(plugins.os.homedir(), '.serve.zone', 'dcrouter');
23
- const resolvedDataDir = process.env.DATA_DIR ?? plugins.path.join(root, 'data');
24
- return {
25
- dcrouterHomeDir: root,
26
- dataDir: resolvedDataDir,
27
- defaultTsmDbPath: plugins.path.join(root, 'tsmdb'),
28
- defaultStoragePath: plugins.path.join(root, 'storage'),
29
- dnsRecordsDir: plugins.path.join(resolvedDataDir, 'dns'),
30
- };
31
- }
32
- /**
33
- * Ensure only the data directories that are actually used exist.
34
- */
35
- export function ensureDataDirectories(resolvedPaths) {
36
- plugins.fsUtils.ensureDirSync(resolvedPaths.dataDir);
37
- plugins.fsUtils.ensureDirSync(resolvedPaths.dnsRecordsDir);
38
- }
39
- /**
40
- * Legacy wrapper — delegates to ensureDataDirectories with module-level defaults.
41
- */
42
- export function ensureDirectories() {
43
- ensureDataDirectories(resolvePaths());
44
- }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4Qyw2Q0FBNkM7QUFDN0MsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUN6QyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUMvRCxLQUFLLENBQ04sQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFFdkUsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUVsRywrRkFBK0Y7QUFDL0YsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckUsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUTtJQUN6QyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRO0lBQ3RCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztBQUV0QixpQ0FBaUM7QUFDakMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRTVFLGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRS9EOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQWdCO0lBQzNDLE1BQU0sSUFBSSxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzRixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEYsT0FBTztRQUNMLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7UUFDbEQsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztRQUN0RCxhQUFhLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQztLQUN6RCxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLGFBQThDO0lBQ2xGLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRCxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQjtJQUMvQixxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLENBQUMifQ==
@@ -1,81 +0,0 @@
1
- import * as dns from 'dns';
2
- import * as fs from 'fs';
3
- import * as crypto from 'crypto';
4
- import * as http from 'http';
5
- import * as net from 'net';
6
- import * as os from 'os';
7
- import * as path from 'path';
8
- import * as tls from 'tls';
9
- import * as util from 'util';
10
- export { dns, fs, crypto, http, net, os, path, tls, util, };
11
- import * as servezoneInterfaces from '@serve.zone/interfaces';
12
- import * as remoteingress from '@serve.zone/remoteingress';
13
- export { servezoneInterfaces, remoteingress, };
14
- import * as typedrequest from '@api.global/typedrequest';
15
- import * as typedserver from '@api.global/typedserver';
16
- import * as typedsocket from '@api.global/typedsocket';
17
- export { typedrequest, typedserver, typedsocket, };
18
- import * as projectinfo from '@push.rocks/projectinfo';
19
- import * as qenv from '@push.rocks/qenv';
20
- import * as smartacme from '@push.rocks/smartacme';
21
- import * as smartdata from '@push.rocks/smartdata';
22
- import * as smartdns from '@push.rocks/smartdns';
23
- import * as smartfs from '@push.rocks/smartfs';
24
- import * as smartguard from '@push.rocks/smartguard';
25
- import * as smartjwt from '@push.rocks/smartjwt';
26
- import * as smartlog from '@push.rocks/smartlog';
27
- import * as smartmetrics from '@push.rocks/smartmetrics';
28
- import * as smartmta from '@push.rocks/smartmta';
29
- import * as smartdb from '@push.rocks/smartdb';
30
- import * as smartnetwork from '@push.rocks/smartnetwork';
31
- import * as smartpath from '@push.rocks/smartpath';
32
- import * as smartproxy from '@push.rocks/smartproxy';
33
- import * as smartpromise from '@push.rocks/smartpromise';
34
- import * as smartvpn from '@push.rocks/smartvpn';
35
- import * as smartradius from '@push.rocks/smartradius';
36
- import * as smartrequest from '@push.rocks/smartrequest';
37
- import * as smartrx from '@push.rocks/smartrx';
38
- import * as smartunique from '@push.rocks/smartunique';
39
- import * as taskbuffer from '@push.rocks/taskbuffer';
40
- export { projectinfo, qenv, smartacme, smartdata, smartdns, smartfs, smartguard, smartjwt, smartlog, smartmetrics, smartdb, smartmta, smartnetwork, smartpath, smartproxy, smartpromise, smartradius, smartrequest, smartrx, smartunique, smartvpn, taskbuffer };
41
- export type TLogLevel = 'error' | 'warn' | 'info' | 'success' | 'debug';
42
- import * as cloudflare from '@apiclient.xyz/cloudflare';
43
- export { cloudflare, };
44
- import * as tsclass from '@tsclass/tsclass';
45
- export { tsclass, };
46
- import * as uuid from 'uuid';
47
- export { uuid, };
48
- export declare const fsUtils: {
49
- /**
50
- * Ensure a directory exists, creating it recursively if needed (sync)
51
- */
52
- ensureDirSync: (dirPath: string) => void;
53
- /**
54
- * Ensure a directory exists, creating it recursively if needed (async)
55
- */
56
- ensureDir: (dirPath: string) => Promise<void>;
57
- /**
58
- * Write JSON content to a file synchronously
59
- */
60
- toFsSync: (content: any, filePath: string) => void;
61
- /**
62
- * Write JSON content to a file asynchronously
63
- */
64
- toFs: (content: any, filePath: string) => Promise<void>;
65
- /**
66
- * Check if a file or directory exists
67
- */
68
- fileExistsSync: (filePath: string) => boolean;
69
- /**
70
- * Check if a file or directory exists (async)
71
- */
72
- fileExists: (filePath: string) => Promise<boolean>;
73
- /**
74
- * Read a JSON file synchronously
75
- */
76
- toObjectSync: <T = any>(filePath: string) => T;
77
- /**
78
- * Read a JSON file asynchronously
79
- */
80
- toObject: <T = any>(filePath: string) => Promise<T>;
81
- };
@@ -1,115 +0,0 @@
1
- // node native
2
- import * as dns from 'dns';
3
- import * as fs from 'fs';
4
- import * as crypto from 'crypto';
5
- import * as http from 'http';
6
- import * as net from 'net';
7
- import * as os from 'os';
8
- import * as path from 'path';
9
- import * as tls from 'tls';
10
- import * as util from 'util';
11
- export { dns, fs, crypto, http, net, os, path, tls, util, };
12
- // @serve.zone scope
13
- import * as servezoneInterfaces from '@serve.zone/interfaces';
14
- import * as remoteingress from '@serve.zone/remoteingress';
15
- export { servezoneInterfaces, remoteingress, };
16
- // @api.global scope
17
- import * as typedrequest from '@api.global/typedrequest';
18
- import * as typedserver from '@api.global/typedserver';
19
- import * as typedsocket from '@api.global/typedsocket';
20
- export { typedrequest, typedserver, typedsocket, };
21
- // @push.rocks scope
22
- import * as projectinfo from '@push.rocks/projectinfo';
23
- import * as qenv from '@push.rocks/qenv';
24
- import * as smartacme from '@push.rocks/smartacme';
25
- import * as smartdata from '@push.rocks/smartdata';
26
- import * as smartdns from '@push.rocks/smartdns';
27
- import * as smartfs from '@push.rocks/smartfs';
28
- import * as smartguard from '@push.rocks/smartguard';
29
- import * as smartjwt from '@push.rocks/smartjwt';
30
- import * as smartlog from '@push.rocks/smartlog';
31
- import * as smartmetrics from '@push.rocks/smartmetrics';
32
- import * as smartmta from '@push.rocks/smartmta';
33
- import * as smartdb from '@push.rocks/smartdb';
34
- import * as smartnetwork from '@push.rocks/smartnetwork';
35
- import * as smartpath from '@push.rocks/smartpath';
36
- import * as smartproxy from '@push.rocks/smartproxy';
37
- import * as smartpromise from '@push.rocks/smartpromise';
38
- import * as smartvpn from '@push.rocks/smartvpn';
39
- import * as smartradius from '@push.rocks/smartradius';
40
- import * as smartrequest from '@push.rocks/smartrequest';
41
- import * as smartrx from '@push.rocks/smartrx';
42
- import * as smartunique from '@push.rocks/smartunique';
43
- import * as taskbuffer from '@push.rocks/taskbuffer';
44
- export { projectinfo, qenv, smartacme, smartdata, smartdns, smartfs, smartguard, smartjwt, smartlog, smartmetrics, smartdb, smartmta, smartnetwork, smartpath, smartproxy, smartpromise, smartradius, smartrequest, smartrx, smartunique, smartvpn, taskbuffer };
45
- // apiclient.xyz scope
46
- import * as cloudflare from '@apiclient.xyz/cloudflare';
47
- export { cloudflare, };
48
- // tsclass scope
49
- import * as tsclass from '@tsclass/tsclass';
50
- export { tsclass, };
51
- // third party
52
- import * as uuid from 'uuid';
53
- export { uuid, };
54
- // Filesystem utilities
55
- export const fsUtils = {
56
- /**
57
- * Ensure a directory exists, creating it recursively if needed (sync)
58
- */
59
- ensureDirSync: (dirPath) => {
60
- fs.mkdirSync(dirPath, { recursive: true });
61
- },
62
- /**
63
- * Ensure a directory exists, creating it recursively if needed (async)
64
- */
65
- ensureDir: async (dirPath) => {
66
- await fs.promises.mkdir(dirPath, { recursive: true });
67
- },
68
- /**
69
- * Write JSON content to a file synchronously
70
- */
71
- toFsSync: (content, filePath) => {
72
- const data = typeof content === 'string' ? content : JSON.stringify(content, null, 2);
73
- fs.writeFileSync(filePath, data);
74
- },
75
- /**
76
- * Write JSON content to a file asynchronously
77
- */
78
- toFs: async (content, filePath) => {
79
- const data = typeof content === 'string' ? content : JSON.stringify(content, null, 2);
80
- await fs.promises.writeFile(filePath, data);
81
- },
82
- /**
83
- * Check if a file or directory exists
84
- */
85
- fileExistsSync: (filePath) => {
86
- return fs.existsSync(filePath);
87
- },
88
- /**
89
- * Check if a file or directory exists (async)
90
- */
91
- fileExists: async (filePath) => {
92
- try {
93
- await fs.promises.access(filePath);
94
- return true;
95
- }
96
- catch {
97
- return false;
98
- }
99
- },
100
- /**
101
- * Read a JSON file synchronously
102
- */
103
- toObjectSync: (filePath) => {
104
- const content = fs.readFileSync(filePath, 'utf8');
105
- return JSON.parse(content);
106
- },
107
- /**
108
- * Read a JSON file asynchronously
109
- */
110
- toObject: async (filePath) => {
111
- const content = await fs.promises.readFile(filePath, 'utf8');
112
- return JSON.parse(content);
113
- },
114
- };
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUNkLE9BQU8sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQzNCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQzNCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQzNCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFDTCxHQUFHLEVBQ0gsRUFBRSxFQUNGLE1BQU0sRUFDTixJQUFJLEVBQ0osR0FBRyxFQUNILEVBQUUsRUFDRixJQUFJLEVBQ0osR0FBRyxFQUNILElBQUksR0FDTCxDQUFBO0FBRUQsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxtQkFBbUIsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssYUFBYSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsYUFBYSxHQUNkLENBQUE7QUFFRCxvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsT0FBTyxFQUNMLFlBQVksRUFDWixXQUFXLEVBQ1gsV0FBVyxHQUNaLENBQUE7QUFFRCxvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLFdBQVcsTUFBTSx5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
@@ -1,231 +0,0 @@
1
- import type { StorageManager } from '../storage/index.js';
2
- /**
3
- * RADIUS accounting session
4
- */
5
- export interface IAccountingSession {
6
- /** Unique session ID from RADIUS */
7
- sessionId: string;
8
- /** Username (often MAC address for MAB) */
9
- username: string;
10
- /** MAC address of the device */
11
- macAddress?: string;
12
- /** NAS IP address (switch/AP) */
13
- nasIpAddress: string;
14
- /** NAS port (physical or virtual) */
15
- nasPort?: number;
16
- /** NAS port type */
17
- nasPortType?: string;
18
- /** NAS identifier (name) */
19
- nasIdentifier?: string;
20
- /** Assigned VLAN */
21
- vlanId?: number;
22
- /** Assigned IP address (if any) */
23
- framedIpAddress?: string;
24
- /** Called station ID (usually BSSID for wireless) */
25
- calledStationId?: string;
26
- /** Calling station ID (usually client MAC) */
27
- callingStationId?: string;
28
- /** Session start time */
29
- startTime: number;
30
- /** Session end time (0 if active) */
31
- endTime: number;
32
- /** Last update time (interim accounting) */
33
- lastUpdateTime: number;
34
- /** Session status */
35
- status: 'active' | 'stopped' | 'terminated';
36
- /** Termination cause (if stopped) */
37
- terminateCause?: string;
38
- /** Input octets (bytes received by NAS from client) */
39
- inputOctets: number;
40
- /** Output octets (bytes sent by NAS to client) */
41
- outputOctets: number;
42
- /** Input packets */
43
- inputPackets: number;
44
- /** Output packets */
45
- outputPackets: number;
46
- /** Session duration in seconds */
47
- sessionTime: number;
48
- /** Service type */
49
- serviceType?: string;
50
- }
51
- /**
52
- * Accounting summary for a time period
53
- */
54
- export interface IAccountingSummary {
55
- /** Time period start */
56
- periodStart: number;
57
- /** Time period end */
58
- periodEnd: number;
59
- /** Total sessions */
60
- totalSessions: number;
61
- /** Active sessions */
62
- activeSessions: number;
63
- /** Total input bytes */
64
- totalInputBytes: number;
65
- /** Total output bytes */
66
- totalOutputBytes: number;
67
- /** Total session time (seconds) */
68
- totalSessionTime: number;
69
- /** Average session duration (seconds) */
70
- averageSessionDuration: number;
71
- /** Unique users/devices */
72
- uniqueUsers: number;
73
- /** Sessions by VLAN */
74
- sessionsByVlan: Record<number, number>;
75
- /** Top users by traffic */
76
- topUsersByTraffic: Array<{
77
- username: string;
78
- totalBytes: number;
79
- }>;
80
- }
81
- /**
82
- * Accounting manager configuration
83
- */
84
- export interface IAccountingManagerConfig {
85
- /** Storage key prefix */
86
- storagePrefix?: string;
87
- /** Session retention period in days (default: 30) */
88
- retentionDays?: number;
89
- /** Enable detailed session logging */
90
- detailedLogging?: boolean;
91
- /** Maximum active sessions to track in memory */
92
- maxActiveSessions?: number;
93
- /** Stale session timeout in hours — sessions with no update for this long are evicted (default: 24) */
94
- staleSessionTimeoutHours?: number;
95
- }
96
- /**
97
- * Manages RADIUS accounting data including:
98
- * - Session tracking (start/stop/interim)
99
- * - Data usage tracking (bytes in/out)
100
- * - Session history and retention
101
- * - Billing reports and summaries
102
- */
103
- export declare class AccountingManager {
104
- private activeSessions;
105
- private config;
106
- private storageManager?;
107
- private staleSessionSweepTimer?;
108
- private stats;
109
- constructor(config?: IAccountingManagerConfig, storageManager?: StorageManager);
110
- /**
111
- * Initialize the accounting manager
112
- */
113
- initialize(): Promise<void>;
114
- /**
115
- * Stop the accounting manager and clean up timers
116
- */
117
- stop(): void;
118
- /**
119
- * Sweep stale active sessions that have not received any update
120
- * within the configured timeout. These are orphaned sessions where
121
- * the Stop packet was never received.
122
- */
123
- private sweepStaleSessions;
124
- /**
125
- * Handle accounting start request
126
- */
127
- handleAccountingStart(data: {
128
- sessionId: string;
129
- username: string;
130
- macAddress?: string;
131
- nasIpAddress: string;
132
- nasPort?: number;
133
- nasPortType?: string;
134
- nasIdentifier?: string;
135
- vlanId?: number;
136
- framedIpAddress?: string;
137
- calledStationId?: string;
138
- callingStationId?: string;
139
- serviceType?: string;
140
- }): Promise<void>;
141
- /**
142
- * Handle accounting interim update request
143
- */
144
- handleAccountingUpdate(data: {
145
- sessionId: string;
146
- inputOctets?: number;
147
- outputOctets?: number;
148
- inputPackets?: number;
149
- outputPackets?: number;
150
- sessionTime?: number;
151
- }): Promise<void>;
152
- /**
153
- * Handle accounting stop request
154
- */
155
- handleAccountingStop(data: {
156
- sessionId: string;
157
- terminateCause?: string;
158
- inputOctets?: number;
159
- outputOctets?: number;
160
- inputPackets?: number;
161
- outputPackets?: number;
162
- sessionTime?: number;
163
- }): Promise<void>;
164
- /**
165
- * Get an active session by ID
166
- */
167
- getSession(sessionId: string): IAccountingSession | undefined;
168
- /**
169
- * Get all active sessions
170
- */
171
- getActiveSessions(): IAccountingSession[];
172
- /**
173
- * Get active sessions by username
174
- */
175
- getSessionsByUsername(username: string): IAccountingSession[];
176
- /**
177
- * Get active sessions by NAS IP
178
- */
179
- getSessionsByNas(nasIpAddress: string): IAccountingSession[];
180
- /**
181
- * Get active sessions by VLAN
182
- */
183
- getSessionsByVlan(vlanId: number): IAccountingSession[];
184
- /**
185
- * Get accounting summary for a time period
186
- */
187
- getSummary(startTime: number, endTime: number): Promise<IAccountingSummary>;
188
- /**
189
- * Get statistics
190
- */
191
- getStats(): {
192
- activeSessions: number;
193
- totalSessionsStarted: number;
194
- totalSessionsStopped: number;
195
- totalInputBytes: number;
196
- totalOutputBytes: number;
197
- interimUpdatesReceived: number;
198
- };
199
- /**
200
- * Disconnect a session (admin action)
201
- */
202
- disconnectSession(sessionId: string, reason?: string): Promise<boolean>;
203
- /**
204
- * Clean up old archived sessions based on retention policy
205
- */
206
- cleanupOldSessions(): Promise<number>;
207
- /**
208
- * Find the oldest active session
209
- */
210
- private findOldestSession;
211
- /**
212
- * Evict a session from memory
213
- */
214
- private evictSession;
215
- /**
216
- * Load active sessions from storage
217
- */
218
- private loadActiveSessions;
219
- /**
220
- * Persist a session to storage
221
- */
222
- private persistSession;
223
- /**
224
- * Archive a completed session
225
- */
226
- private archiveSession;
227
- /**
228
- * Get archived sessions for a time period
229
- */
230
- private getArchivedSessions;
231
- }