@serve.zone/dcrouter 13.17.0 → 13.17.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_serve/bundle.js +3 -3
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/acme/index.d.ts +1 -0
- package/dist_ts/acme/index.js +2 -0
- package/dist_ts/acme/manager.acme-config.d.ts +48 -0
- package/dist_ts/acme/manager.acme-config.js +156 -0
- package/dist_ts/classes.cert-provision-scheduler.d.ts +52 -0
- package/dist_ts/classes.cert-provision-scheduler.js +138 -0
- package/dist_ts/classes.dcrouter.d.ts +401 -0
- package/dist_ts/classes.dcrouter.js +1852 -0
- package/dist_ts/classes.storage-cert-manager.d.ts +15 -0
- package/dist_ts/classes.storage-cert-manager.js +53 -0
- package/dist_ts/config/classes.api-token-manager.d.ts +44 -0
- package/dist_ts/config/classes.api-token-manager.js +180 -0
- package/dist_ts/config/classes.db-seeder.d.ts +25 -0
- package/dist_ts/config/classes.db-seeder.js +69 -0
- package/dist_ts/config/classes.reference-resolver.d.ts +80 -0
- package/dist_ts/config/classes.reference-resolver.js +483 -0
- package/dist_ts/config/classes.route-config-manager.d.ts +54 -0
- package/dist_ts/config/classes.route-config-manager.js +370 -0
- package/dist_ts/config/classes.target-profile-manager.d.ts +82 -0
- package/dist_ts/config/classes.target-profile-manager.js +349 -0
- package/dist_ts/config/index.d.ts +6 -0
- package/dist_ts/config/index.js +8 -0
- package/dist_ts/config/validator.d.ts +104 -0
- package/dist_ts/config/validator.js +152 -0
- package/dist_ts/db/classes.cache.cleaner.d.ts +47 -0
- package/dist_ts/db/classes.cache.cleaner.js +130 -0
- package/dist_ts/db/classes.cached.document.d.ts +76 -0
- package/dist_ts/db/classes.cached.document.js +100 -0
- package/dist_ts/db/classes.dcrouter-db.d.ts +70 -0
- package/dist_ts/db/classes.dcrouter-db.js +146 -0
- package/dist_ts/db/documents/classes.accounting-session.doc.d.ts +32 -0
- package/dist_ts/db/documents/classes.accounting-session.doc.js +214 -0
- package/dist_ts/db/documents/classes.acme-cert.doc.d.ts +13 -0
- package/dist_ts/db/documents/classes.acme-cert.doc.js +109 -0
- package/dist_ts/db/documents/classes.acme-config.doc.d.ts +22 -0
- package/dist_ts/db/documents/classes.acme-config.doc.js +121 -0
- package/dist_ts/db/documents/classes.api-token.doc.d.ts +18 -0
- package/dist_ts/db/documents/classes.api-token.doc.js +127 -0
- package/dist_ts/db/documents/classes.cached.email.d.ts +125 -0
- package/dist_ts/db/documents/classes.cached.email.js +337 -0
- package/dist_ts/db/documents/classes.cached.ip.reputation.d.ts +119 -0
- package/dist_ts/db/documents/classes.cached.ip.reputation.js +323 -0
- package/dist_ts/db/documents/classes.cert-backoff.doc.d.ts +11 -0
- package/dist_ts/db/documents/classes.cert-backoff.doc.js +97 -0
- package/dist_ts/db/documents/classes.dns-provider.doc.d.ts +22 -0
- package/dist_ts/db/documents/classes.dns-provider.doc.js +134 -0
- package/dist_ts/db/documents/classes.dns-record.doc.d.ts +21 -0
- package/dist_ts/db/documents/classes.dns-record.doc.js +143 -0
- package/dist_ts/db/documents/classes.domain.doc.d.ts +22 -0
- package/dist_ts/db/documents/classes.domain.doc.js +146 -0
- package/dist_ts/db/documents/classes.email-domain.doc.d.ts +17 -0
- package/dist_ts/db/documents/classes.email-domain.doc.js +124 -0
- package/dist_ts/db/documents/classes.network-target.doc.d.ts +15 -0
- package/dist_ts/db/documents/classes.network-target.doc.js +118 -0
- package/dist_ts/db/documents/classes.proxy-cert.doc.d.ts +12 -0
- package/dist_ts/db/documents/classes.proxy-cert.doc.js +103 -0
- package/dist_ts/db/documents/classes.remote-ingress-edge.doc.d.ts +17 -0
- package/dist_ts/db/documents/classes.remote-ingress-edge.doc.js +130 -0
- package/dist_ts/db/documents/classes.route.doc.d.ts +18 -0
- package/dist_ts/db/documents/classes.route.doc.js +121 -0
- package/dist_ts/db/documents/classes.source-profile.doc.d.ts +15 -0
- package/dist_ts/db/documents/classes.source-profile.doc.js +115 -0
- package/dist_ts/db/documents/classes.target-profile.doc.d.ts +16 -0
- package/dist_ts/db/documents/classes.target-profile.doc.js +121 -0
- package/dist_ts/db/documents/classes.vlan-mappings.doc.d.ts +15 -0
- package/dist_ts/db/documents/classes.vlan-mappings.doc.js +77 -0
- package/dist_ts/db/documents/classes.vpn-client.doc.d.ts +23 -0
- package/dist_ts/db/documents/classes.vpn-client.doc.js +172 -0
- package/dist_ts/db/documents/classes.vpn-server-keys.doc.d.ts +10 -0
- package/dist_ts/db/documents/classes.vpn-server-keys.doc.js +94 -0
- package/dist_ts/db/documents/index.d.ts +20 -0
- package/dist_ts/db/documents/index.js +30 -0
- package/dist_ts/db/index.d.ts +4 -0
- package/dist_ts/db/index.js +9 -0
- package/dist_ts/dns/index.d.ts +2 -0
- package/dist_ts/dns/index.js +3 -0
- package/dist_ts/dns/manager.dns.d.ts +267 -0
- package/dist_ts/dns/manager.dns.js +906 -0
- package/dist_ts/dns/providers/cloudflare.provider.d.ts +21 -0
- package/dist_ts/dns/providers/cloudflare.provider.js +106 -0
- package/dist_ts/dns/providers/factory.d.ts +23 -0
- package/dist_ts/dns/providers/factory.js +47 -0
- package/dist_ts/dns/providers/index.d.ts +3 -0
- package/dist_ts/dns/providers/index.js +4 -0
- package/dist_ts/dns/providers/interfaces.d.ts +54 -0
- package/dist_ts/dns/providers/interfaces.js +2 -0
- package/dist_ts/email/classes.email-domain.manager.d.ts +46 -0
- package/dist_ts/email/classes.email-domain.manager.js +276 -0
- package/dist_ts/email/index.d.ts +1 -0
- package/dist_ts/email/index.js +2 -0
- package/dist_ts/errors/base.errors.d.ts +224 -0
- package/dist_ts/errors/base.errors.js +320 -0
- package/dist_ts/errors/error-handler.d.ts +98 -0
- package/dist_ts/errors/error-handler.js +282 -0
- package/dist_ts/errors/error.codes.d.ts +115 -0
- package/dist_ts/errors/error.codes.js +136 -0
- package/dist_ts/errors/index.d.ts +54 -0
- package/dist_ts/errors/index.js +136 -0
- package/dist_ts/errors/reputation.errors.d.ts +183 -0
- package/dist_ts/errors/reputation.errors.js +292 -0
- package/dist_ts/http3/http3-route-augmentation.d.ts +50 -0
- package/dist_ts/http3/http3-route-augmentation.js +98 -0
- package/dist_ts/http3/index.d.ts +1 -0
- package/dist_ts/http3/index.js +2 -0
- package/dist_ts/index.d.ts +8 -0
- package/dist_ts/index.js +29 -0
- package/dist_ts/logger.d.ts +21 -0
- package/dist_ts/logger.js +81 -0
- package/dist_ts/monitoring/classes.metricscache.d.ts +32 -0
- package/dist_ts/monitoring/classes.metricscache.js +63 -0
- package/dist_ts/monitoring/classes.metricsmanager.d.ts +235 -0
- package/dist_ts/monitoring/classes.metricsmanager.js +875 -0
- package/dist_ts/monitoring/index.d.ts +1 -0
- package/dist_ts/monitoring/index.js +2 -0
- package/dist_ts/opsserver/classes.opsserver.d.ts +47 -0
- package/dist_ts/opsserver/classes.opsserver.js +105 -0
- package/dist_ts/opsserver/handlers/acme-config.handler.d.ts +16 -0
- package/dist_ts/opsserver/handlers/acme-config.handler.js +77 -0
- package/dist_ts/opsserver/handlers/admin.handler.d.ts +40 -0
- package/dist_ts/opsserver/handlers/admin.handler.js +191 -0
- package/dist_ts/opsserver/handlers/api-token.handler.d.ts +6 -0
- package/dist_ts/opsserver/handlers/api-token.handler.js +62 -0
- package/dist_ts/opsserver/handlers/certificate.handler.d.ts +77 -0
- package/dist_ts/opsserver/handlers/certificate.handler.js +574 -0
- package/dist_ts/opsserver/handlers/config.handler.d.ts +7 -0
- package/dist_ts/opsserver/handlers/config.handler.js +200 -0
- package/dist_ts/opsserver/handlers/dns-provider.handler.d.ts +16 -0
- package/dist_ts/opsserver/handlers/dns-provider.handler.js +156 -0
- package/dist_ts/opsserver/handlers/dns-record.handler.d.ts +13 -0
- package/dist_ts/opsserver/handlers/dns-record.handler.js +98 -0
- package/dist_ts/opsserver/handlers/domain.handler.d.ts +13 -0
- package/dist_ts/opsserver/handlers/domain.handler.js +137 -0
- package/dist_ts/opsserver/handlers/email-domain.handler.d.ts +16 -0
- package/dist_ts/opsserver/handlers/email-domain.handler.js +150 -0
- package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +30 -0
- package/dist_ts/opsserver/handlers/email-ops.handler.js +227 -0
- package/dist_ts/opsserver/handlers/index.d.ts +21 -0
- package/dist_ts/opsserver/handlers/index.js +22 -0
- package/dist_ts/opsserver/handlers/logs.handler.d.ts +25 -0
- package/dist_ts/opsserver/handlers/logs.handler.js +264 -0
- package/dist_ts/opsserver/handlers/network-target.handler.d.ts +10 -0
- package/dist_ts/opsserver/handlers/network-target.handler.js +117 -0
- package/dist_ts/opsserver/handlers/radius.handler.d.ts +6 -0
- package/dist_ts/opsserver/handlers/radius.handler.js +295 -0
- package/dist_ts/opsserver/handlers/remoteingress.handler.d.ts +6 -0
- package/dist_ts/opsserver/handlers/remoteingress.handler.js +156 -0
- package/dist_ts/opsserver/handlers/route-management.handler.d.ts +14 -0
- package/dist_ts/opsserver/handlers/route-management.handler.js +98 -0
- package/dist_ts/opsserver/handlers/security.handler.d.ts +9 -0
- package/dist_ts/opsserver/handlers/security.handler.js +237 -0
- package/dist_ts/opsserver/handlers/source-profile.handler.d.ts +10 -0
- package/dist_ts/opsserver/handlers/source-profile.handler.js +119 -0
- package/dist_ts/opsserver/handlers/stats.handler.d.ts +11 -0
- package/dist_ts/opsserver/handlers/stats.handler.js +461 -0
- package/dist_ts/opsserver/handlers/target-profile.handler.d.ts +10 -0
- package/dist_ts/opsserver/handlers/target-profile.handler.js +117 -0
- package/dist_ts/opsserver/handlers/users.handler.d.ts +12 -0
- package/dist_ts/opsserver/handlers/users.handler.js +24 -0
- package/dist_ts/opsserver/handlers/vpn.handler.d.ts +6 -0
- package/dist_ts/opsserver/handlers/vpn.handler.js +262 -0
- package/dist_ts/opsserver/helpers/guards.d.ts +27 -0
- package/dist_ts/opsserver/helpers/guards.js +43 -0
- package/dist_ts/opsserver/index.d.ts +1 -0
- package/dist_ts/opsserver/index.js +2 -0
- package/dist_ts/paths.d.ts +25 -0
- package/dist_ts/paths.js +44 -0
- package/dist_ts/plugins.d.ts +81 -0
- package/dist_ts/plugins.js +115 -0
- package/dist_ts/radius/classes.accounting.manager.d.ts +223 -0
- package/dist_ts/radius/classes.accounting.manager.js +449 -0
- package/dist_ts/radius/classes.radius.server.d.ts +169 -0
- package/dist_ts/radius/classes.radius.server.js +384 -0
- package/dist_ts/radius/classes.vlan.manager.d.ts +124 -0
- package/dist_ts/radius/classes.vlan.manager.js +272 -0
- package/dist_ts/radius/index.d.ts +13 -0
- package/dist_ts/radius/index.js +14 -0
- package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +92 -0
- package/dist_ts/remoteingress/classes.remoteingress-manager.js +291 -0
- package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +59 -0
- package/dist_ts/remoteingress/classes.tunnel-manager.js +165 -0
- package/dist_ts/remoteingress/index.d.ts +2 -0
- package/dist_ts/remoteingress/index.js +3 -0
- package/dist_ts/security/classes.contentscanner.d.ts +164 -0
- package/dist_ts/security/classes.contentscanner.js +642 -0
- package/dist_ts/security/classes.ipreputationchecker.d.ts +145 -0
- package/dist_ts/security/classes.ipreputationchecker.js +458 -0
- package/dist_ts/security/classes.securitylogger.d.ts +144 -0
- package/dist_ts/security/classes.securitylogger.js +235 -0
- package/dist_ts/security/index.d.ts +3 -0
- package/dist_ts/security/index.js +4 -0
- package/dist_ts/sms/classes.smsservice.d.ts +15 -0
- package/dist_ts/sms/classes.smsservice.js +72 -0
- package/dist_ts/sms/config/sms.config.d.ts +93 -0
- package/dist_ts/sms/config/sms.config.js +2 -0
- package/dist_ts/sms/config/sms.schema.d.ts +5 -0
- package/dist_ts/sms/config/sms.schema.js +121 -0
- package/dist_ts/sms/index.d.ts +1 -0
- package/dist_ts/sms/index.js +2 -0
- package/dist_ts/vpn/classes.vpn-manager.d.ts +159 -0
- package/dist_ts/vpn/classes.vpn-manager.js +459 -0
- package/dist_ts/vpn/index.d.ts +1 -0
- package/dist_ts/vpn/index.js +2 -0
- package/dist_ts_apiclient/classes.apitoken.d.ts +41 -0
- package/dist_ts_apiclient/classes.apitoken.js +115 -0
- package/dist_ts_apiclient/classes.certificate.d.ts +57 -0
- package/dist_ts_apiclient/classes.certificate.js +69 -0
- package/dist_ts_apiclient/classes.config.d.ts +7 -0
- package/dist_ts_apiclient/classes.config.js +11 -0
- package/dist_ts_apiclient/classes.dcrouterapiclient.d.ts +41 -0
- package/dist_ts_apiclient/classes.dcrouterapiclient.js +81 -0
- package/dist_ts_apiclient/classes.email.d.ts +30 -0
- package/dist_ts_apiclient/classes.email.js +52 -0
- package/dist_ts_apiclient/classes.logs.d.ts +21 -0
- package/dist_ts_apiclient/classes.logs.js +14 -0
- package/dist_ts_apiclient/classes.radius.d.ts +59 -0
- package/dist_ts_apiclient/classes.radius.js +95 -0
- package/dist_ts_apiclient/classes.remoteingress.d.ts +54 -0
- package/dist_ts_apiclient/classes.remoteingress.js +136 -0
- package/dist_ts_apiclient/classes.route.d.ts +39 -0
- package/dist_ts_apiclient/classes.route.js +125 -0
- package/dist_ts_apiclient/classes.stats.d.ts +47 -0
- package/dist_ts_apiclient/classes.stats.js +38 -0
- package/dist_ts_apiclient/index.d.ts +10 -0
- package/dist_ts_apiclient/index.js +14 -0
- package/dist_ts_apiclient/plugins.d.ts +3 -0
- package/dist_ts_apiclient/plugins.js +5 -0
- package/dist_ts_interfaces/data/acme-config.d.ts +25 -0
- package/dist_ts_interfaces/data/acme-config.js +2 -0
- package/dist_ts_interfaces/data/auth.d.ts +8 -0
- package/dist_ts_interfaces/data/auth.js +2 -0
- package/dist_ts_interfaces/data/dns-provider.d.ts +136 -0
- package/dist_ts_interfaces/data/dns-provider.js +41 -0
- package/dist_ts_interfaces/data/dns-record.d.ts +42 -0
- package/dist_ts_interfaces/data/dns-record.js +2 -0
- package/dist_ts_interfaces/data/domain.d.ts +35 -0
- package/dist_ts_interfaces/data/domain.js +2 -0
- package/dist_ts_interfaces/data/email-domain.d.ts +70 -0
- package/dist_ts_interfaces/data/email-domain.js +2 -0
- package/dist_ts_interfaces/data/index.d.ts +11 -0
- package/dist_ts_interfaces/data/index.js +12 -0
- package/dist_ts_interfaces/data/remoteingress.d.ts +60 -0
- package/dist_ts_interfaces/data/remoteingress.js +2 -0
- package/dist_ts_interfaces/data/route-management.d.ts +110 -0
- package/dist_ts_interfaces/data/route-management.js +2 -0
- package/dist_ts_interfaces/data/stats.d.ts +239 -0
- package/dist_ts_interfaces/data/stats.js +2 -0
- package/dist_ts_interfaces/data/target-profile.d.ts +28 -0
- package/dist_ts_interfaces/data/target-profile.js +2 -0
- package/dist_ts_interfaces/data/vpn.d.ts +61 -0
- package/dist_ts_interfaces/data/vpn.js +2 -0
- package/dist_ts_interfaces/index.d.ts +5 -0
- package/dist_ts_interfaces/index.js +8 -0
- package/dist_ts_interfaces/plugins.d.ts +2 -0
- package/dist_ts_interfaces/plugins.js +4 -0
- package/dist_ts_interfaces/requests/acme-config.d.ts +42 -0
- package/dist_ts_interfaces/requests/acme-config.js +2 -0
- package/dist_ts_interfaces/requests/admin.d.ts +31 -0
- package/dist_ts_interfaces/requests/admin.js +3 -0
- package/dist_ts_interfaces/requests/api-tokens.d.ts +79 -0
- package/dist_ts_interfaces/requests/api-tokens.js +2 -0
- package/dist_ts_interfaces/requests/certificate.d.ts +111 -0
- package/dist_ts_interfaces/requests/certificate.js +3 -0
- package/dist_ts_interfaces/requests/combined.stats.d.ts +28 -0
- package/dist_ts_interfaces/requests/combined.stats.js +2 -0
- package/dist_ts_interfaces/requests/config.d.ts +90 -0
- package/dist_ts_interfaces/requests/config.js +3 -0
- package/dist_ts_interfaces/requests/dns-providers.d.ts +117 -0
- package/dist_ts_interfaces/requests/dns-providers.js +2 -0
- package/dist_ts_interfaces/requests/dns-records.d.ts +89 -0
- package/dist_ts_interfaces/requests/dns-records.js +2 -0
- package/dist_ts_interfaces/requests/domains.d.ts +142 -0
- package/dist_ts_interfaces/requests/domains.js +2 -0
- package/dist_ts_interfaces/requests/email-domains.d.ts +142 -0
- package/dist_ts_interfaces/requests/email-domains.js +2 -0
- package/dist_ts_interfaces/requests/email-ops.d.ts +82 -0
- package/dist_ts_interfaces/requests/email-ops.js +3 -0
- package/dist_ts_interfaces/requests/index.d.ts +21 -0
- package/dist_ts_interfaces/requests/index.js +22 -0
- package/dist_ts_interfaces/requests/logs.d.ts +41 -0
- package/dist_ts_interfaces/requests/logs.js +4 -0
- package/dist_ts_interfaces/requests/network-targets.d.ts +102 -0
- package/dist_ts_interfaces/requests/network-targets.js +2 -0
- package/dist_ts_interfaces/requests/radius.d.ts +268 -0
- package/dist_ts_interfaces/requests/radius.js +3 -0
- package/dist_ts_interfaces/requests/remoteingress.d.ts +108 -0
- package/dist_ts_interfaces/requests/remoteingress.js +3 -0
- package/dist_ts_interfaces/requests/route-management.d.ts +85 -0
- package/dist_ts_interfaces/requests/route-management.js +2 -0
- package/dist_ts_interfaces/requests/source-profiles.d.ts +102 -0
- package/dist_ts_interfaces/requests/source-profiles.js +2 -0
- package/dist_ts_interfaces/requests/stats.d.ts +177 -0
- package/dist_ts_interfaces/requests/stats.js +4 -0
- package/dist_ts_interfaces/requests/target-profiles.d.ts +103 -0
- package/dist_ts_interfaces/requests/target-profiles.js +2 -0
- package/dist_ts_interfaces/requests/users.d.ts +19 -0
- package/dist_ts_interfaces/requests/users.js +3 -0
- package/dist_ts_interfaces/requests/vpn.d.ts +177 -0
- package/dist_ts_interfaces/requests/vpn.js +3 -0
- package/dist_ts_migrations/index.d.ts +28 -0
- package/dist_ts_migrations/index.js +82 -0
- package/dist_ts_oci_container/index.d.ts +8 -0
- package/dist_ts_oci_container/index.js +110 -0
- package/dist_ts_oci_container/plugins.d.ts +3 -0
- package/dist_ts_oci_container/plugins.js +4 -0
- package/dist_ts_web/00_commitinfo_data.d.ts +8 -0
- package/dist_ts_web/00_commitinfo_data.js +9 -0
- package/dist_ts_web/appstate.d.ts +478 -0
- package/dist_ts_web/appstate.js +1968 -0
- package/dist_ts_web/elements/access/index.d.ts +2 -0
- package/dist_ts_web/elements/access/index.js +3 -0
- package/dist_ts_web/elements/access/ops-view-apitokens.d.ts +13 -0
- package/dist_ts_web/elements/access/ops-view-apitokens.js +372 -0
- package/dist_ts_web/elements/access/ops-view-users.d.ts +11 -0
- package/dist_ts_web/elements/access/ops-view-users.js +190 -0
- package/dist_ts_web/elements/domains/dns-provider-form.d.ts +60 -0
- package/dist_ts_web/elements/domains/dns-provider-form.js +259 -0
- package/dist_ts_web/elements/domains/index.d.ts +5 -0
- package/dist_ts_web/elements/domains/index.js +6 -0
- package/dist_ts_web/elements/domains/ops-view-certificates.d.ts +25 -0
- package/dist_ts_web/elements/domains/ops-view-certificates.js +669 -0
- package/dist_ts_web/elements/domains/ops-view-dns.d.ts +17 -0
- package/dist_ts_web/elements/domains/ops-view-dns.js +305 -0
- package/dist_ts_web/elements/domains/ops-view-domains.d.ts +19 -0
- package/dist_ts_web/elements/domains/ops-view-domains.js +456 -0
- package/dist_ts_web/elements/domains/ops-view-providers.d.ts +21 -0
- package/dist_ts_web/elements/domains/ops-view-providers.js +330 -0
- package/dist_ts_web/elements/email/index.d.ts +3 -0
- package/dist_ts_web/elements/email/index.js +4 -0
- package/dist_ts_web/elements/email/ops-view-email-domains.d.ts +19 -0
- package/dist_ts_web/elements/email/ops-view-email-domains.js +410 -0
- package/dist_ts_web/elements/email/ops-view-email-security.d.ts +14 -0
- package/dist_ts_web/elements/email/ops-view-email-security.js +178 -0
- package/dist_ts_web/elements/email/ops-view-emails.d.ts +21 -0
- package/dist_ts_web/elements/email/ops-view-emails.js +165 -0
- package/dist_ts_web/elements/index.d.ts +9 -0
- package/dist_ts_web/elements/index.js +10 -0
- package/dist_ts_web/elements/network/index.d.ts +7 -0
- package/dist_ts_web/elements/network/index.js +8 -0
- package/dist_ts_web/elements/network/ops-view-network-activity.d.ts +60 -0
- package/dist_ts_web/elements/network/ops-view-network-activity.js +754 -0
- package/dist_ts_web/elements/network/ops-view-networktargets.d.ts +17 -0
- package/dist_ts_web/elements/network/ops-view-networktargets.js +255 -0
- package/dist_ts_web/elements/network/ops-view-remoteingress.d.ts +20 -0
- package/dist_ts_web/elements/network/ops-view-remoteingress.js +497 -0
- package/dist_ts_web/elements/network/ops-view-routes.d.ts +17 -0
- package/dist_ts_web/elements/network/ops-view-routes.js +700 -0
- package/dist_ts_web/elements/network/ops-view-sourceprofiles.d.ts +17 -0
- package/dist_ts_web/elements/network/ops-view-sourceprofiles.js +278 -0
- package/dist_ts_web/elements/network/ops-view-targetprofiles.d.ts +21 -0
- package/dist_ts_web/elements/network/ops-view-targetprofiles.js +420 -0
- package/dist_ts_web/elements/network/ops-view-vpn.d.ts +31 -0
- package/dist_ts_web/elements/network/ops-view-vpn.js +873 -0
- package/dist_ts_web/elements/ops-dashboard.d.ts +31 -0
- package/dist_ts_web/elements/ops-dashboard.js +405 -0
- package/dist_ts_web/elements/ops-view-logs.d.ts +13 -0
- package/dist_ts_web/elements/ops-view-logs.js +159 -0
- package/dist_ts_web/elements/overview/index.d.ts +2 -0
- package/dist_ts_web/elements/overview/index.js +3 -0
- package/dist_ts_web/elements/overview/ops-view-config.d.ts +19 -0
- package/dist_ts_web/elements/overview/ops-view-config.js +339 -0
- package/dist_ts_web/elements/overview/ops-view-overview.d.ts +24 -0
- package/dist_ts_web/elements/overview/ops-view-overview.js +545 -0
- package/dist_ts_web/elements/security/index.d.ts +3 -0
- package/dist_ts_web/elements/security/index.js +4 -0
- package/dist_ts_web/elements/security/ops-view-security-authentication.d.ts +13 -0
- package/dist_ts_web/elements/security/ops-view-security-authentication.js +157 -0
- package/dist_ts_web/elements/security/ops-view-security-blocked.d.ts +15 -0
- package/dist_ts_web/elements/security/ops-view-security-blocked.js +153 -0
- package/dist_ts_web/elements/security/ops-view-security-overview.d.ts +16 -0
- package/dist_ts_web/elements/security/ops-view-security-overview.js +205 -0
- package/dist_ts_web/elements/shared/css.d.ts +1 -0
- package/dist_ts_web/elements/shared/css.js +10 -0
- package/dist_ts_web/elements/shared/index.d.ts +1 -0
- package/dist_ts_web/elements/shared/index.js +2 -0
- package/dist_ts_web/index.d.ts +1 -0
- package/dist_ts_web/index.js +10 -0
- package/dist_ts_web/plugins.d.ts +7 -0
- package/dist_ts_web/plugins.js +13 -0
- package/dist_ts_web/router.d.ts +21 -0
- package/dist_ts_web/router.js +151 -0
- package/package.json +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/monitoring/classes.metricsmanager.ts +0 -25
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/network/ops-view-routes.ts +9 -1
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
import { logger } from '../logger.js';
|
|
3
|
+
import { AccountingSessionDoc } from '../db/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Manages RADIUS accounting data including:
|
|
6
|
+
* - Session tracking (start/stop/interim)
|
|
7
|
+
* - Data usage tracking (bytes in/out)
|
|
8
|
+
* - Session history and retention
|
|
9
|
+
* - Billing reports and summaries
|
|
10
|
+
*/
|
|
11
|
+
export class AccountingManager {
|
|
12
|
+
activeSessions = new Map();
|
|
13
|
+
config;
|
|
14
|
+
staleSessionSweepTimer;
|
|
15
|
+
// Counters for statistics
|
|
16
|
+
stats = {
|
|
17
|
+
totalSessionsStarted: 0,
|
|
18
|
+
totalSessionsStopped: 0,
|
|
19
|
+
totalInputBytes: 0,
|
|
20
|
+
totalOutputBytes: 0,
|
|
21
|
+
interimUpdatesReceived: 0,
|
|
22
|
+
};
|
|
23
|
+
constructor(config) {
|
|
24
|
+
this.config = {
|
|
25
|
+
retentionDays: config?.retentionDays ?? 30,
|
|
26
|
+
detailedLogging: config?.detailedLogging ?? false,
|
|
27
|
+
maxActiveSessions: config?.maxActiveSessions ?? 10000,
|
|
28
|
+
staleSessionTimeoutHours: config?.staleSessionTimeoutHours ?? 24,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Initialize the accounting manager
|
|
33
|
+
*/
|
|
34
|
+
async initialize() {
|
|
35
|
+
await this.loadActiveSessions();
|
|
36
|
+
// Start periodic sweep to evict stale sessions (every 15 minutes)
|
|
37
|
+
this.staleSessionSweepTimer = setInterval(() => {
|
|
38
|
+
this.sweepStaleSessions();
|
|
39
|
+
}, 15 * 60 * 1000);
|
|
40
|
+
// Allow the process to exit even if the timer is pending
|
|
41
|
+
if (this.staleSessionSweepTimer.unref) {
|
|
42
|
+
this.staleSessionSweepTimer.unref();
|
|
43
|
+
}
|
|
44
|
+
logger.log('info', `AccountingManager initialized with ${this.activeSessions.size} active sessions`);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Stop the accounting manager and clean up timers
|
|
48
|
+
*/
|
|
49
|
+
stop() {
|
|
50
|
+
if (this.staleSessionSweepTimer) {
|
|
51
|
+
clearInterval(this.staleSessionSweepTimer);
|
|
52
|
+
this.staleSessionSweepTimer = undefined;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Sweep stale active sessions that have not received any update
|
|
57
|
+
* within the configured timeout. These are orphaned sessions where
|
|
58
|
+
* the Stop packet was never received.
|
|
59
|
+
*/
|
|
60
|
+
sweepStaleSessions() {
|
|
61
|
+
const timeoutMs = this.config.staleSessionTimeoutHours * 60 * 60 * 1000;
|
|
62
|
+
const cutoff = Date.now() - timeoutMs;
|
|
63
|
+
let swept = 0;
|
|
64
|
+
for (const [sessionId, session] of this.activeSessions) {
|
|
65
|
+
if (session.lastUpdateTime < cutoff) {
|
|
66
|
+
session.status = 'terminated';
|
|
67
|
+
session.terminateCause = 'StaleSessionTimeout';
|
|
68
|
+
session.endTime = Date.now();
|
|
69
|
+
session.sessionTime = Math.floor((session.endTime - session.startTime) / 1000);
|
|
70
|
+
this.persistSession(session).catch(() => { });
|
|
71
|
+
this.activeSessions.delete(sessionId);
|
|
72
|
+
swept++;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (swept > 0) {
|
|
76
|
+
logger.log('info', `Swept ${swept} stale RADIUS sessions (no update for ${this.config.staleSessionTimeoutHours}h)`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Handle accounting start request
|
|
81
|
+
*/
|
|
82
|
+
async handleAccountingStart(data) {
|
|
83
|
+
const now = Date.now();
|
|
84
|
+
const session = {
|
|
85
|
+
sessionId: data.sessionId,
|
|
86
|
+
username: data.username,
|
|
87
|
+
macAddress: data.macAddress,
|
|
88
|
+
nasIpAddress: data.nasIpAddress,
|
|
89
|
+
nasPort: data.nasPort,
|
|
90
|
+
nasPortType: data.nasPortType,
|
|
91
|
+
nasIdentifier: data.nasIdentifier,
|
|
92
|
+
vlanId: data.vlanId,
|
|
93
|
+
framedIpAddress: data.framedIpAddress,
|
|
94
|
+
calledStationId: data.calledStationId,
|
|
95
|
+
callingStationId: data.callingStationId,
|
|
96
|
+
serviceType: data.serviceType,
|
|
97
|
+
startTime: now,
|
|
98
|
+
endTime: 0,
|
|
99
|
+
lastUpdateTime: now,
|
|
100
|
+
status: 'active',
|
|
101
|
+
inputOctets: 0,
|
|
102
|
+
outputOctets: 0,
|
|
103
|
+
inputPackets: 0,
|
|
104
|
+
outputPackets: 0,
|
|
105
|
+
sessionTime: 0,
|
|
106
|
+
};
|
|
107
|
+
// Check if we're at capacity
|
|
108
|
+
if (this.activeSessions.size >= this.config.maxActiveSessions) {
|
|
109
|
+
// Remove oldest session
|
|
110
|
+
const oldest = this.findOldestSession();
|
|
111
|
+
if (oldest) {
|
|
112
|
+
await this.evictSession(oldest);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
this.activeSessions.set(data.sessionId, session);
|
|
116
|
+
this.stats.totalSessionsStarted++;
|
|
117
|
+
if (this.config.detailedLogging) {
|
|
118
|
+
logger.log('info', `Accounting Start: session=${data.sessionId}, user=${data.username}, NAS=${data.nasIpAddress}`);
|
|
119
|
+
}
|
|
120
|
+
// Persist session
|
|
121
|
+
await this.persistSession(session);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Handle accounting interim update request
|
|
125
|
+
*/
|
|
126
|
+
async handleAccountingUpdate(data) {
|
|
127
|
+
const session = this.activeSessions.get(data.sessionId);
|
|
128
|
+
if (!session) {
|
|
129
|
+
logger.log('warn', `Interim update for unknown session: ${data.sessionId}`);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
// Update session metrics
|
|
133
|
+
if (data.inputOctets !== undefined) {
|
|
134
|
+
session.inputOctets = data.inputOctets;
|
|
135
|
+
}
|
|
136
|
+
if (data.outputOctets !== undefined) {
|
|
137
|
+
session.outputOctets = data.outputOctets;
|
|
138
|
+
}
|
|
139
|
+
if (data.inputPackets !== undefined) {
|
|
140
|
+
session.inputPackets = data.inputPackets;
|
|
141
|
+
}
|
|
142
|
+
if (data.outputPackets !== undefined) {
|
|
143
|
+
session.outputPackets = data.outputPackets;
|
|
144
|
+
}
|
|
145
|
+
if (data.sessionTime !== undefined) {
|
|
146
|
+
session.sessionTime = data.sessionTime;
|
|
147
|
+
}
|
|
148
|
+
session.lastUpdateTime = Date.now();
|
|
149
|
+
this.stats.interimUpdatesReceived++;
|
|
150
|
+
if (this.config.detailedLogging) {
|
|
151
|
+
logger.log('debug', `Accounting Interim: session=${data.sessionId}, in=${data.inputOctets}, out=${data.outputOctets}`);
|
|
152
|
+
}
|
|
153
|
+
// Update persisted session
|
|
154
|
+
await this.persistSession(session);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Handle accounting stop request
|
|
158
|
+
*/
|
|
159
|
+
async handleAccountingStop(data) {
|
|
160
|
+
const session = this.activeSessions.get(data.sessionId);
|
|
161
|
+
if (!session) {
|
|
162
|
+
logger.log('warn', `Stop for unknown session: ${data.sessionId}`);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// Update final metrics
|
|
166
|
+
if (data.inputOctets !== undefined) {
|
|
167
|
+
session.inputOctets = data.inputOctets;
|
|
168
|
+
}
|
|
169
|
+
if (data.outputOctets !== undefined) {
|
|
170
|
+
session.outputOctets = data.outputOctets;
|
|
171
|
+
}
|
|
172
|
+
if (data.inputPackets !== undefined) {
|
|
173
|
+
session.inputPackets = data.inputPackets;
|
|
174
|
+
}
|
|
175
|
+
if (data.outputPackets !== undefined) {
|
|
176
|
+
session.outputPackets = data.outputPackets;
|
|
177
|
+
}
|
|
178
|
+
if (data.sessionTime !== undefined) {
|
|
179
|
+
session.sessionTime = data.sessionTime;
|
|
180
|
+
}
|
|
181
|
+
session.endTime = Date.now();
|
|
182
|
+
session.lastUpdateTime = session.endTime;
|
|
183
|
+
session.status = 'stopped';
|
|
184
|
+
session.terminateCause = data.terminateCause;
|
|
185
|
+
// Update global stats
|
|
186
|
+
this.stats.totalSessionsStopped++;
|
|
187
|
+
this.stats.totalInputBytes += session.inputOctets;
|
|
188
|
+
this.stats.totalOutputBytes += session.outputOctets;
|
|
189
|
+
if (this.config.detailedLogging) {
|
|
190
|
+
logger.log('info', `Accounting Stop: session=${data.sessionId}, duration=${session.sessionTime}s, in=${session.inputOctets}, out=${session.outputOctets}`);
|
|
191
|
+
}
|
|
192
|
+
// Update status in the database (single collection, no active->archive move needed)
|
|
193
|
+
await this.persistSession(session);
|
|
194
|
+
// Remove from active sessions
|
|
195
|
+
this.activeSessions.delete(data.sessionId);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Get an active session by ID
|
|
199
|
+
*/
|
|
200
|
+
getSession(sessionId) {
|
|
201
|
+
return this.activeSessions.get(sessionId);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get all active sessions
|
|
205
|
+
*/
|
|
206
|
+
getActiveSessions() {
|
|
207
|
+
return Array.from(this.activeSessions.values());
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get active sessions by username
|
|
211
|
+
*/
|
|
212
|
+
getSessionsByUsername(username) {
|
|
213
|
+
return Array.from(this.activeSessions.values()).filter(s => s.username === username);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Get active sessions by NAS IP
|
|
217
|
+
*/
|
|
218
|
+
getSessionsByNas(nasIpAddress) {
|
|
219
|
+
return Array.from(this.activeSessions.values()).filter(s => s.nasIpAddress === nasIpAddress);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Get active sessions by VLAN
|
|
223
|
+
*/
|
|
224
|
+
getSessionsByVlan(vlanId) {
|
|
225
|
+
return Array.from(this.activeSessions.values()).filter(s => s.vlanId === vlanId);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get accounting summary for a time period
|
|
229
|
+
*/
|
|
230
|
+
async getSummary(startTime, endTime) {
|
|
231
|
+
// Get archived sessions for the time period
|
|
232
|
+
const archivedSessions = await this.getArchivedSessions(startTime, endTime);
|
|
233
|
+
// Combine with active sessions that started within the period
|
|
234
|
+
const activeSessions = Array.from(this.activeSessions.values()).filter(s => s.startTime >= startTime && s.startTime <= endTime);
|
|
235
|
+
const allSessions = [...archivedSessions, ...activeSessions];
|
|
236
|
+
// Calculate summary
|
|
237
|
+
let totalInputBytes = 0;
|
|
238
|
+
let totalOutputBytes = 0;
|
|
239
|
+
let totalSessionTime = 0;
|
|
240
|
+
const uniqueUsers = new Set();
|
|
241
|
+
const sessionsByVlan = {};
|
|
242
|
+
const userTraffic = {};
|
|
243
|
+
for (const session of allSessions) {
|
|
244
|
+
totalInputBytes += session.inputOctets;
|
|
245
|
+
totalOutputBytes += session.outputOctets;
|
|
246
|
+
totalSessionTime += session.sessionTime;
|
|
247
|
+
uniqueUsers.add(session.username);
|
|
248
|
+
if (session.vlanId !== undefined) {
|
|
249
|
+
sessionsByVlan[session.vlanId] = (sessionsByVlan[session.vlanId] || 0) + 1;
|
|
250
|
+
}
|
|
251
|
+
const userBytes = session.inputOctets + session.outputOctets;
|
|
252
|
+
userTraffic[session.username] = (userTraffic[session.username] || 0) + userBytes;
|
|
253
|
+
}
|
|
254
|
+
// Top users by traffic
|
|
255
|
+
const topUsersByTraffic = Object.entries(userTraffic)
|
|
256
|
+
.sort((a, b) => b[1] - a[1])
|
|
257
|
+
.slice(0, 10)
|
|
258
|
+
.map(([username, totalBytes]) => ({ username, totalBytes }));
|
|
259
|
+
return {
|
|
260
|
+
periodStart: startTime,
|
|
261
|
+
periodEnd: endTime,
|
|
262
|
+
totalSessions: allSessions.length,
|
|
263
|
+
activeSessions: activeSessions.length,
|
|
264
|
+
totalInputBytes,
|
|
265
|
+
totalOutputBytes,
|
|
266
|
+
totalSessionTime,
|
|
267
|
+
averageSessionDuration: allSessions.length > 0 ? totalSessionTime / allSessions.length : 0,
|
|
268
|
+
uniqueUsers: uniqueUsers.size,
|
|
269
|
+
sessionsByVlan,
|
|
270
|
+
topUsersByTraffic,
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Get statistics
|
|
275
|
+
*/
|
|
276
|
+
getStats() {
|
|
277
|
+
return {
|
|
278
|
+
activeSessions: this.activeSessions.size,
|
|
279
|
+
...this.stats,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Disconnect a session (admin action)
|
|
284
|
+
*/
|
|
285
|
+
async disconnectSession(sessionId, reason = 'AdminReset') {
|
|
286
|
+
const session = this.activeSessions.get(sessionId);
|
|
287
|
+
if (!session) {
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
await this.handleAccountingStop({
|
|
291
|
+
sessionId,
|
|
292
|
+
terminateCause: reason,
|
|
293
|
+
sessionTime: Math.floor((Date.now() - session.startTime) / 1000),
|
|
294
|
+
});
|
|
295
|
+
return true;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Clean up old archived sessions based on retention policy
|
|
299
|
+
*/
|
|
300
|
+
async cleanupOldSessions() {
|
|
301
|
+
const cutoffTime = Date.now() - this.config.retentionDays * 24 * 60 * 60 * 1000;
|
|
302
|
+
let deletedCount = 0;
|
|
303
|
+
try {
|
|
304
|
+
const oldDocs = await AccountingSessionDoc.findStoppedBefore(cutoffTime);
|
|
305
|
+
for (const doc of oldDocs) {
|
|
306
|
+
try {
|
|
307
|
+
await doc.delete();
|
|
308
|
+
deletedCount++;
|
|
309
|
+
}
|
|
310
|
+
catch (error) {
|
|
311
|
+
// Ignore individual errors
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
if (deletedCount > 0) {
|
|
315
|
+
logger.log('info', `Cleaned up ${deletedCount} old accounting sessions`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
logger.log('error', `Failed to cleanup old sessions: ${error.message}`);
|
|
320
|
+
}
|
|
321
|
+
return deletedCount;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Find the oldest active session
|
|
325
|
+
*/
|
|
326
|
+
findOldestSession() {
|
|
327
|
+
let oldestTime = Infinity;
|
|
328
|
+
let oldestSessionId = null;
|
|
329
|
+
for (const [sessionId, session] of this.activeSessions) {
|
|
330
|
+
if (session.lastUpdateTime < oldestTime) {
|
|
331
|
+
oldestTime = session.lastUpdateTime;
|
|
332
|
+
oldestSessionId = sessionId;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
return oldestSessionId;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Evict a session from memory
|
|
339
|
+
*/
|
|
340
|
+
async evictSession(sessionId) {
|
|
341
|
+
const session = this.activeSessions.get(sessionId);
|
|
342
|
+
if (session) {
|
|
343
|
+
session.status = 'terminated';
|
|
344
|
+
session.terminateCause = 'SessionEvicted';
|
|
345
|
+
session.endTime = Date.now();
|
|
346
|
+
await this.persistSession(session);
|
|
347
|
+
this.activeSessions.delete(sessionId);
|
|
348
|
+
logger.log('warn', `Evicted session ${sessionId} due to capacity limit`);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Load active sessions from database
|
|
353
|
+
*/
|
|
354
|
+
async loadActiveSessions() {
|
|
355
|
+
try {
|
|
356
|
+
const docs = await AccountingSessionDoc.findActive();
|
|
357
|
+
for (const doc of docs) {
|
|
358
|
+
const session = {
|
|
359
|
+
sessionId: doc.sessionId,
|
|
360
|
+
username: doc.username,
|
|
361
|
+
macAddress: doc.macAddress,
|
|
362
|
+
nasIpAddress: doc.nasIpAddress,
|
|
363
|
+
nasPort: doc.nasPort,
|
|
364
|
+
nasPortType: doc.nasPortType,
|
|
365
|
+
nasIdentifier: doc.nasIdentifier,
|
|
366
|
+
vlanId: doc.vlanId,
|
|
367
|
+
framedIpAddress: doc.framedIpAddress,
|
|
368
|
+
calledStationId: doc.calledStationId,
|
|
369
|
+
callingStationId: doc.callingStationId,
|
|
370
|
+
startTime: doc.startTime,
|
|
371
|
+
endTime: doc.endTime,
|
|
372
|
+
lastUpdateTime: doc.lastUpdateTime,
|
|
373
|
+
status: doc.status,
|
|
374
|
+
terminateCause: doc.terminateCause,
|
|
375
|
+
inputOctets: doc.inputOctets,
|
|
376
|
+
outputOctets: doc.outputOctets,
|
|
377
|
+
inputPackets: doc.inputPackets,
|
|
378
|
+
outputPackets: doc.outputPackets,
|
|
379
|
+
sessionTime: doc.sessionTime,
|
|
380
|
+
serviceType: doc.serviceType,
|
|
381
|
+
};
|
|
382
|
+
this.activeSessions.set(session.sessionId, session);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
catch (error) {
|
|
386
|
+
logger.log('warn', `Failed to load active sessions: ${error.message}`);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Persist a session to the database (create or update)
|
|
391
|
+
*/
|
|
392
|
+
async persistSession(session) {
|
|
393
|
+
try {
|
|
394
|
+
let doc = await AccountingSessionDoc.findBySessionId(session.sessionId);
|
|
395
|
+
if (!doc) {
|
|
396
|
+
doc = new AccountingSessionDoc();
|
|
397
|
+
}
|
|
398
|
+
Object.assign(doc, session);
|
|
399
|
+
await doc.save();
|
|
400
|
+
}
|
|
401
|
+
catch (error) {
|
|
402
|
+
logger.log('error', `Failed to persist session ${session.sessionId}: ${error.message}`);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Get archived (stopped/terminated) sessions for a time period
|
|
407
|
+
*/
|
|
408
|
+
async getArchivedSessions(startTime, endTime) {
|
|
409
|
+
const sessions = [];
|
|
410
|
+
try {
|
|
411
|
+
const docs = await AccountingSessionDoc.getInstances({
|
|
412
|
+
status: { $in: ['stopped', 'terminated'] },
|
|
413
|
+
endTime: { $gt: 0, $gte: startTime },
|
|
414
|
+
startTime: { $lte: endTime },
|
|
415
|
+
});
|
|
416
|
+
for (const doc of docs) {
|
|
417
|
+
sessions.push({
|
|
418
|
+
sessionId: doc.sessionId,
|
|
419
|
+
username: doc.username,
|
|
420
|
+
macAddress: doc.macAddress,
|
|
421
|
+
nasIpAddress: doc.nasIpAddress,
|
|
422
|
+
nasPort: doc.nasPort,
|
|
423
|
+
nasPortType: doc.nasPortType,
|
|
424
|
+
nasIdentifier: doc.nasIdentifier,
|
|
425
|
+
vlanId: doc.vlanId,
|
|
426
|
+
framedIpAddress: doc.framedIpAddress,
|
|
427
|
+
calledStationId: doc.calledStationId,
|
|
428
|
+
callingStationId: doc.callingStationId,
|
|
429
|
+
startTime: doc.startTime,
|
|
430
|
+
endTime: doc.endTime,
|
|
431
|
+
lastUpdateTime: doc.lastUpdateTime,
|
|
432
|
+
status: doc.status,
|
|
433
|
+
terminateCause: doc.terminateCause,
|
|
434
|
+
inputOctets: doc.inputOctets,
|
|
435
|
+
outputOctets: doc.outputOctets,
|
|
436
|
+
inputPackets: doc.inputPackets,
|
|
437
|
+
outputPackets: doc.outputPackets,
|
|
438
|
+
sessionTime: doc.sessionTime,
|
|
439
|
+
serviceType: doc.serviceType,
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
catch (error) {
|
|
444
|
+
logger.log('warn', `Failed to get archived sessions: ${error.message}`);
|
|
445
|
+
}
|
|
446
|
+
return sessions;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hY2NvdW50aW5nLm1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9yYWRpdXMvY2xhc3Nlcy5hY2NvdW50aW5nLm1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQThGdEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixjQUFjLEdBQW9DLElBQUksR0FBRyxFQUFFLENBQUM7SUFDNUQsTUFBTSxDQUFxQztJQUMzQyxzQkFBc0IsQ0FBa0M7SUFFaEUsMEJBQTBCO0lBQ2xCLEtBQUssR0FBRztRQUNkLG9CQUFvQixFQUFFLENBQUM7UUFDdkIsb0JBQW9CLEVBQUUsQ0FBQztRQUN2QixlQUFlLEVBQUUsQ0FBQztRQUNsQixnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLHNCQUFzQixFQUFFLENBQUM7S0FDMUIsQ0FBQztJQUVGLFlBQVksTUFBaUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLGFBQWEsRUFBRSxNQUFNLEVBQUUsYUFBYSxJQUFJLEVBQUU7WUFDMUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxlQUFlLElBQUksS0FBSztZQUNqRCxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLElBQUksS0FBSztZQUNyRCx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLElBQUksRUFBRTtTQUNqRSxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRWhDLGtFQUFrRTtRQUNsRSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFB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
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { VlanManager, type IMacVlanMapping, type IVlanManagerConfig } from './classes.vlan.manager.js';
|
|
2
|
+
import { AccountingManager, type IAccountingManagerConfig } from './classes.accounting.manager.js';
|
|
3
|
+
/**
|
|
4
|
+
* RADIUS client (NAS) configuration
|
|
5
|
+
*/
|
|
6
|
+
export interface IRadiusClient {
|
|
7
|
+
/** Client name for identification */
|
|
8
|
+
name: string;
|
|
9
|
+
/** IP address or CIDR range */
|
|
10
|
+
ipRange: string;
|
|
11
|
+
/** Shared secret for this client */
|
|
12
|
+
secret: string;
|
|
13
|
+
/** Optional description */
|
|
14
|
+
description?: string;
|
|
15
|
+
/** Whether this client is enabled */
|
|
16
|
+
enabled: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* RADIUS server configuration
|
|
20
|
+
*/
|
|
21
|
+
export interface IRadiusServerConfig {
|
|
22
|
+
/** Authentication port (default: 1812) */
|
|
23
|
+
authPort?: number;
|
|
24
|
+
/** Accounting port (default: 1813) */
|
|
25
|
+
acctPort?: number;
|
|
26
|
+
/** Bind address (default: 0.0.0.0) */
|
|
27
|
+
bindAddress?: string;
|
|
28
|
+
/** NAS clients configuration */
|
|
29
|
+
clients: IRadiusClient[];
|
|
30
|
+
/** VLAN assignment configuration */
|
|
31
|
+
vlanAssignment?: IVlanManagerConfig & {
|
|
32
|
+
/** Static MAC to VLAN mappings */
|
|
33
|
+
mappings?: Array<Omit<IMacVlanMapping, 'createdAt' | 'updatedAt'>>;
|
|
34
|
+
};
|
|
35
|
+
/** Accounting configuration */
|
|
36
|
+
accounting?: IAccountingManagerConfig & {
|
|
37
|
+
/** Whether accounting is enabled */
|
|
38
|
+
enabled: boolean;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* RADIUS authentication result
|
|
43
|
+
*/
|
|
44
|
+
export interface IRadiusAuthResult {
|
|
45
|
+
/** Whether authentication was successful */
|
|
46
|
+
success: boolean;
|
|
47
|
+
/** Reject reason (if not successful) */
|
|
48
|
+
rejectReason?: string;
|
|
49
|
+
/** Reply message to send to client */
|
|
50
|
+
replyMessage?: string;
|
|
51
|
+
/** Session timeout in seconds */
|
|
52
|
+
sessionTimeout?: number;
|
|
53
|
+
/** Idle timeout in seconds */
|
|
54
|
+
idleTimeout?: number;
|
|
55
|
+
/** VLAN to assign */
|
|
56
|
+
vlanId?: number;
|
|
57
|
+
/** Framed IP address to assign */
|
|
58
|
+
framedIpAddress?: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Authentication request data from RADIUS
|
|
62
|
+
*/
|
|
63
|
+
export interface IAuthRequestData {
|
|
64
|
+
username: string;
|
|
65
|
+
password?: string;
|
|
66
|
+
nasIpAddress: string;
|
|
67
|
+
nasPort?: number;
|
|
68
|
+
nasPortType?: string;
|
|
69
|
+
nasIdentifier?: string;
|
|
70
|
+
calledStationId?: string;
|
|
71
|
+
callingStationId?: string;
|
|
72
|
+
serviceType?: string;
|
|
73
|
+
framedMtu?: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* RADIUS Server wrapper that provides:
|
|
77
|
+
* - MAC Authentication Bypass (MAB) for network devices
|
|
78
|
+
* - VLAN assignment based on MAC address
|
|
79
|
+
* - Accounting for session tracking and billing
|
|
80
|
+
* - Integration with SmartProxy routing
|
|
81
|
+
*/
|
|
82
|
+
export declare class RadiusServer {
|
|
83
|
+
private radiusServer?;
|
|
84
|
+
private vlanManager;
|
|
85
|
+
private accountingManager;
|
|
86
|
+
private config;
|
|
87
|
+
private clientSecrets;
|
|
88
|
+
private running;
|
|
89
|
+
private stats;
|
|
90
|
+
constructor(config: IRadiusServerConfig);
|
|
91
|
+
/**
|
|
92
|
+
* Start the RADIUS server
|
|
93
|
+
*/
|
|
94
|
+
start(): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Stop the RADIUS server
|
|
97
|
+
*/
|
|
98
|
+
stop(): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Handle authentication request
|
|
101
|
+
*/
|
|
102
|
+
private handleAuthentication;
|
|
103
|
+
/**
|
|
104
|
+
* Handle accounting request
|
|
105
|
+
*/
|
|
106
|
+
private handleAccounting;
|
|
107
|
+
/**
|
|
108
|
+
* Perform MAC Authentication Bypass
|
|
109
|
+
*/
|
|
110
|
+
private performMabAuthentication;
|
|
111
|
+
/**
|
|
112
|
+
* Extract MAC address from authentication data
|
|
113
|
+
*/
|
|
114
|
+
private extractMacAddress;
|
|
115
|
+
/**
|
|
116
|
+
* Check if a string looks like a MAC address
|
|
117
|
+
*/
|
|
118
|
+
private looksLikeMac;
|
|
119
|
+
/**
|
|
120
|
+
* Normalize MAC address format
|
|
121
|
+
*/
|
|
122
|
+
private normalizeMac;
|
|
123
|
+
/**
|
|
124
|
+
* Build client secrets map from configuration
|
|
125
|
+
*/
|
|
126
|
+
private buildClientSecretsMap;
|
|
127
|
+
/**
|
|
128
|
+
* Get default secret for unknown clients
|
|
129
|
+
*/
|
|
130
|
+
private getDefaultSecret;
|
|
131
|
+
/**
|
|
132
|
+
* Add a RADIUS client
|
|
133
|
+
*/
|
|
134
|
+
addClient(client: IRadiusClient): Promise<void>;
|
|
135
|
+
/**
|
|
136
|
+
* Remove a RADIUS client
|
|
137
|
+
*/
|
|
138
|
+
removeClient(name: string): boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Get configured clients
|
|
141
|
+
*/
|
|
142
|
+
getClients(): IRadiusClient[];
|
|
143
|
+
/**
|
|
144
|
+
* Get VLAN manager for direct access to VLAN operations
|
|
145
|
+
*/
|
|
146
|
+
getVlanManager(): VlanManager;
|
|
147
|
+
/**
|
|
148
|
+
* Get accounting manager for direct access to accounting operations
|
|
149
|
+
*/
|
|
150
|
+
getAccountingManager(): AccountingManager;
|
|
151
|
+
/**
|
|
152
|
+
* Get server statistics
|
|
153
|
+
*/
|
|
154
|
+
getStats(): {
|
|
155
|
+
running: boolean;
|
|
156
|
+
uptime: number;
|
|
157
|
+
authRequests: number;
|
|
158
|
+
authAccepts: number;
|
|
159
|
+
authRejects: number;
|
|
160
|
+
accountingRequests: number;
|
|
161
|
+
activeSessions: number;
|
|
162
|
+
vlanMappings: number;
|
|
163
|
+
clients: number;
|
|
164
|
+
};
|
|
165
|
+
/**
|
|
166
|
+
* Check if server is running
|
|
167
|
+
*/
|
|
168
|
+
isRunning(): boolean;
|
|
169
|
+
}
|