@serve.zone/dcrouter 13.4.2 → 13.7.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 (148) hide show
  1. package/dist_serve/bundle.js +1779 -1375
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/classes.dcrouter.d.ts +2 -5
  4. package/dist_ts/classes.dcrouter.js +41 -10
  5. package/dist_ts/db/documents/classes.dns-provider.doc.d.ts +22 -0
  6. package/dist_ts/db/documents/classes.dns-provider.doc.js +134 -0
  7. package/dist_ts/db/documents/classes.dns-record.doc.d.ts +21 -0
  8. package/dist_ts/db/documents/classes.dns-record.doc.js +143 -0
  9. package/dist_ts/db/documents/classes.domain.doc.d.ts +22 -0
  10. package/dist_ts/db/documents/classes.domain.doc.js +146 -0
  11. package/dist_ts/db/documents/index.d.ts +3 -0
  12. package/dist_ts/db/documents/index.js +5 -1
  13. package/dist_ts/dns/index.d.ts +2 -0
  14. package/dist_ts/dns/index.js +3 -0
  15. package/dist_ts/dns/manager.dns.d.ts +227 -0
  16. package/dist_ts/dns/manager.dns.js +747 -0
  17. package/dist_ts/dns/providers/cloudflare.provider.d.ts +21 -0
  18. package/dist_ts/dns/providers/cloudflare.provider.js +106 -0
  19. package/dist_ts/dns/providers/factory.d.ts +23 -0
  20. package/dist_ts/dns/providers/factory.js +38 -0
  21. package/dist_ts/dns/providers/index.d.ts +3 -0
  22. package/dist_ts/dns/providers/index.js +4 -0
  23. package/dist_ts/dns/providers/interfaces.d.ts +54 -0
  24. package/dist_ts/dns/providers/interfaces.js +2 -0
  25. package/dist_ts/opsserver/classes.opsserver.d.ts +4 -0
  26. package/dist_ts/opsserver/classes.opsserver.js +9 -1
  27. package/dist_ts/opsserver/handlers/admin.handler.d.ts +9 -0
  28. package/dist_ts/opsserver/handlers/admin.handler.js +12 -1
  29. package/dist_ts/opsserver/handlers/config.handler.js +11 -2
  30. package/dist_ts/opsserver/handlers/dns-provider.handler.d.ts +16 -0
  31. package/dist_ts/opsserver/handlers/dns-provider.handler.js +119 -0
  32. package/dist_ts/opsserver/handlers/dns-record.handler.d.ts +13 -0
  33. package/dist_ts/opsserver/handlers/dns-record.handler.js +98 -0
  34. package/dist_ts/opsserver/handlers/domain.handler.d.ts +13 -0
  35. package/dist_ts/opsserver/handlers/domain.handler.js +124 -0
  36. package/dist_ts/opsserver/handlers/index.d.ts +4 -0
  37. package/dist_ts/opsserver/handlers/index.js +5 -1
  38. package/dist_ts/opsserver/handlers/users.handler.d.ts +12 -0
  39. package/dist_ts/opsserver/handlers/users.handler.js +24 -0
  40. package/dist_ts_interfaces/data/dns-provider.d.ts +112 -0
  41. package/dist_ts_interfaces/data/dns-provider.js +27 -0
  42. package/dist_ts_interfaces/data/dns-record.d.ts +40 -0
  43. package/dist_ts_interfaces/data/dns-record.js +2 -0
  44. package/dist_ts_interfaces/data/domain.d.ts +34 -0
  45. package/dist_ts_interfaces/data/domain.js +2 -0
  46. package/dist_ts_interfaces/data/index.d.ts +3 -0
  47. package/dist_ts_interfaces/data/index.js +4 -1
  48. package/dist_ts_interfaces/data/route-management.d.ts +1 -1
  49. package/dist_ts_interfaces/requests/dns-providers.d.ts +117 -0
  50. package/dist_ts_interfaces/requests/dns-providers.js +2 -0
  51. package/dist_ts_interfaces/requests/dns-records.d.ts +89 -0
  52. package/dist_ts_interfaces/requests/dns-records.js +2 -0
  53. package/dist_ts_interfaces/requests/domains.d.ts +118 -0
  54. package/dist_ts_interfaces/requests/domains.js +2 -0
  55. package/dist_ts_interfaces/requests/index.d.ts +4 -0
  56. package/dist_ts_interfaces/requests/index.js +5 -1
  57. package/dist_ts_interfaces/requests/users.d.ts +19 -0
  58. package/dist_ts_interfaces/requests/users.js +3 -0
  59. package/dist_ts_web/00_commitinfo_data.js +1 -1
  60. package/dist_ts_web/appstate.d.ts +85 -0
  61. package/dist_ts_web/appstate.js +339 -6
  62. package/dist_ts_web/elements/access/index.d.ts +1 -0
  63. package/dist_ts_web/elements/access/index.js +2 -1
  64. package/dist_ts_web/elements/access/ops-view-apitokens.js +1 -1
  65. package/dist_ts_web/elements/access/ops-view-users.d.ts +11 -0
  66. package/dist_ts_web/elements/access/ops-view-users.js +190 -0
  67. package/dist_ts_web/elements/domains/dns-provider-form.d.ts +58 -0
  68. package/dist_ts_web/elements/domains/dns-provider-form.js +268 -0
  69. package/dist_ts_web/elements/domains/index.d.ts +5 -0
  70. package/dist_ts_web/elements/domains/index.js +6 -0
  71. package/dist_ts_web/elements/{ops-view-certificates.d.ts → domains/ops-view-certificates.d.ts} +1 -1
  72. package/dist_ts_web/elements/{ops-view-certificates.js → domains/ops-view-certificates.js} +5 -5
  73. package/dist_ts_web/elements/domains/ops-view-dns.d.ts +17 -0
  74. package/dist_ts_web/elements/domains/ops-view-dns.js +304 -0
  75. package/dist_ts_web/elements/domains/ops-view-domains.d.ts +18 -0
  76. package/dist_ts_web/elements/domains/ops-view-domains.js +361 -0
  77. package/dist_ts_web/elements/domains/ops-view-providers.d.ts +21 -0
  78. package/dist_ts_web/elements/domains/ops-view-providers.js +316 -0
  79. package/dist_ts_web/elements/email/ops-view-email-security.js +1 -1
  80. package/dist_ts_web/elements/email/ops-view-emails.js +1 -1
  81. package/dist_ts_web/elements/index.d.ts +1 -1
  82. package/dist_ts_web/elements/index.js +2 -2
  83. package/dist_ts_web/elements/network/ops-view-network-activity.js +6 -2
  84. package/dist_ts_web/elements/network/ops-view-networktargets.js +1 -1
  85. package/dist_ts_web/elements/network/ops-view-remoteingress.js +1 -1
  86. package/dist_ts_web/elements/network/ops-view-routes.js +1 -1
  87. package/dist_ts_web/elements/network/ops-view-sourceprofiles.js +1 -1
  88. package/dist_ts_web/elements/network/ops-view-targetprofiles.js +1 -1
  89. package/dist_ts_web/elements/network/ops-view-vpn.js +1 -1
  90. package/dist_ts_web/elements/ops-dashboard.js +16 -5
  91. package/dist_ts_web/elements/ops-view-logs.js +1 -1
  92. package/dist_ts_web/elements/overview/ops-view-config.js +3 -3
  93. package/dist_ts_web/elements/overview/ops-view-overview.js +1 -1
  94. package/dist_ts_web/elements/security/ops-view-security-authentication.js +1 -1
  95. package/dist_ts_web/elements/security/ops-view-security-blocked.js +1 -1
  96. package/dist_ts_web/elements/security/ops-view-security-overview.js +1 -1
  97. package/dist_ts_web/router.d.ts +1 -1
  98. package/dist_ts_web/router.js +5 -3
  99. package/package.json +2 -2
  100. package/ts/00_commitinfo_data.ts +1 -1
  101. package/ts/classes.dcrouter.ts +46 -17
  102. package/ts/db/documents/classes.dns-provider.doc.ts +63 -0
  103. package/ts/db/documents/classes.dns-record.doc.ts +62 -0
  104. package/ts/db/documents/classes.domain.doc.ts +66 -0
  105. package/ts/db/documents/index.ts +5 -0
  106. package/ts/dns/index.ts +2 -0
  107. package/ts/dns/manager.dns.ts +869 -0
  108. package/ts/dns/providers/cloudflare.provider.ts +131 -0
  109. package/ts/dns/providers/factory.ts +48 -0
  110. package/ts/dns/providers/index.ts +3 -0
  111. package/ts/dns/providers/interfaces.ts +67 -0
  112. package/ts/opsserver/classes.opsserver.ts +8 -0
  113. package/ts/opsserver/handlers/admin.handler.ts +12 -0
  114. package/ts/opsserver/handlers/config.handler.ts +10 -1
  115. package/ts/opsserver/handlers/dns-provider.handler.ts +159 -0
  116. package/ts/opsserver/handlers/dns-record.handler.ts +127 -0
  117. package/ts/opsserver/handlers/domain.handler.ts +161 -0
  118. package/ts/opsserver/handlers/index.ts +5 -1
  119. package/ts/opsserver/handlers/users.handler.ts +30 -0
  120. package/ts_web/00_commitinfo_data.ts +1 -1
  121. package/ts_web/appstate.ts +460 -5
  122. package/ts_web/elements/access/index.ts +1 -0
  123. package/ts_web/elements/access/ops-view-apitokens.ts +1 -1
  124. package/ts_web/elements/access/ops-view-users.ts +140 -0
  125. package/ts_web/elements/domains/dns-provider-form.ts +216 -0
  126. package/ts_web/elements/domains/index.ts +5 -0
  127. package/ts_web/elements/{ops-view-certificates.ts → domains/ops-view-certificates.ts} +4 -4
  128. package/ts_web/elements/domains/ops-view-dns.ts +273 -0
  129. package/ts_web/elements/domains/ops-view-domains.ts +335 -0
  130. package/ts_web/elements/domains/ops-view-providers.ts +284 -0
  131. package/ts_web/elements/email/ops-view-email-security.ts +1 -1
  132. package/ts_web/elements/email/ops-view-emails.ts +1 -1
  133. package/ts_web/elements/index.ts +1 -1
  134. package/ts_web/elements/network/ops-view-network-activity.ts +5 -1
  135. package/ts_web/elements/network/ops-view-networktargets.ts +1 -1
  136. package/ts_web/elements/network/ops-view-remoteingress.ts +1 -1
  137. package/ts_web/elements/network/ops-view-routes.ts +1 -1
  138. package/ts_web/elements/network/ops-view-sourceprofiles.ts +1 -1
  139. package/ts_web/elements/network/ops-view-targetprofiles.ts +1 -1
  140. package/ts_web/elements/network/ops-view-vpn.ts +1 -1
  141. package/ts_web/elements/ops-dashboard.ts +16 -4
  142. package/ts_web/elements/ops-view-logs.ts +1 -1
  143. package/ts_web/elements/overview/ops-view-config.ts +2 -2
  144. package/ts_web/elements/overview/ops-view-overview.ts +1 -1
  145. package/ts_web/elements/security/ops-view-security-authentication.ts +1 -1
  146. package/ts_web/elements/security/ops-view-security-blocked.ts +1 -1
  147. package/ts_web/elements/security/ops-view-security-overview.ts +1 -1
  148. package/ts_web/router.ts +4 -2
@@ -0,0 +1,161 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import type { OpsServer } from '../classes.opsserver.js';
3
+ import * as interfaces from '../../../ts_interfaces/index.js';
4
+
5
+ /**
6
+ * CRUD handlers for DomainDoc.
7
+ */
8
+ export class DomainHandler {
9
+ public typedrouter = new plugins.typedrequest.TypedRouter();
10
+
11
+ constructor(private opsServerRef: OpsServer) {
12
+ this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
13
+ this.registerHandlers();
14
+ }
15
+
16
+ private async requireAuth(
17
+ request: { identity?: interfaces.data.IIdentity; apiToken?: string },
18
+ requiredScope?: interfaces.data.TApiTokenScope,
19
+ ): Promise<string> {
20
+ if (request.identity?.jwt) {
21
+ try {
22
+ const isAdmin = await this.opsServerRef.adminHandler.adminIdentityGuard.exec({
23
+ identity: request.identity,
24
+ });
25
+ if (isAdmin) return request.identity.userId;
26
+ } catch { /* fall through */ }
27
+ }
28
+
29
+ if (request.apiToken) {
30
+ const tokenManager = this.opsServerRef.dcRouterRef.apiTokenManager;
31
+ if (tokenManager) {
32
+ const token = await tokenManager.validateToken(request.apiToken);
33
+ if (token) {
34
+ if (!requiredScope || tokenManager.hasScope(token, requiredScope)) {
35
+ return token.createdBy;
36
+ }
37
+ throw new plugins.typedrequest.TypedResponseError('insufficient scope');
38
+ }
39
+ }
40
+ }
41
+
42
+ throw new plugins.typedrequest.TypedResponseError('unauthorized');
43
+ }
44
+
45
+ private registerHandlers(): void {
46
+ // Get all domains
47
+ this.typedrouter.addTypedHandler(
48
+ new plugins.typedrequest.TypedHandler<interfaces.requests.IReq_GetDomains>(
49
+ 'getDomains',
50
+ async (dataArg) => {
51
+ await this.requireAuth(dataArg, 'domains:read');
52
+ const dnsManager = this.opsServerRef.dcRouterRef.dnsManager;
53
+ if (!dnsManager) return { domains: [] };
54
+ const docs = await dnsManager.listDomains();
55
+ return { domains: docs.map((d) => dnsManager.toPublicDomain(d)) };
56
+ },
57
+ ),
58
+ );
59
+
60
+ // Get single domain
61
+ this.typedrouter.addTypedHandler(
62
+ new plugins.typedrequest.TypedHandler<interfaces.requests.IReq_GetDomain>(
63
+ 'getDomain',
64
+ async (dataArg) => {
65
+ await this.requireAuth(dataArg, 'domains:read');
66
+ const dnsManager = this.opsServerRef.dcRouterRef.dnsManager;
67
+ if (!dnsManager) return { domain: null };
68
+ const doc = await dnsManager.getDomain(dataArg.id);
69
+ return { domain: doc ? dnsManager.toPublicDomain(doc) : null };
70
+ },
71
+ ),
72
+ );
73
+
74
+ // Create manual domain
75
+ this.typedrouter.addTypedHandler(
76
+ new plugins.typedrequest.TypedHandler<interfaces.requests.IReq_CreateDomain>(
77
+ 'createDomain',
78
+ async (dataArg) => {
79
+ const userId = await this.requireAuth(dataArg, 'domains:write');
80
+ const dnsManager = this.opsServerRef.dcRouterRef.dnsManager;
81
+ if (!dnsManager) return { success: false, message: 'DnsManager not initialized' };
82
+ try {
83
+ const id = await dnsManager.createManualDomain({
84
+ name: dataArg.name,
85
+ description: dataArg.description,
86
+ createdBy: userId,
87
+ });
88
+ return { success: true, id };
89
+ } catch (err: unknown) {
90
+ return { success: false, message: (err as Error).message };
91
+ }
92
+ },
93
+ ),
94
+ );
95
+
96
+ // Import domains from a provider
97
+ this.typedrouter.addTypedHandler(
98
+ new plugins.typedrequest.TypedHandler<interfaces.requests.IReq_ImportDomain>(
99
+ 'importDomain',
100
+ async (dataArg) => {
101
+ const userId = await this.requireAuth(dataArg, 'domains:write');
102
+ const dnsManager = this.opsServerRef.dcRouterRef.dnsManager;
103
+ if (!dnsManager) return { success: false, message: 'DnsManager not initialized' };
104
+ try {
105
+ const importedIds = await dnsManager.importDomainsFromProvider({
106
+ providerId: dataArg.providerId,
107
+ domainNames: dataArg.domainNames,
108
+ createdBy: userId,
109
+ });
110
+ return { success: true, importedIds };
111
+ } catch (err: unknown) {
112
+ return { success: false, message: (err as Error).message };
113
+ }
114
+ },
115
+ ),
116
+ );
117
+
118
+ // Update domain metadata
119
+ this.typedrouter.addTypedHandler(
120
+ new plugins.typedrequest.TypedHandler<interfaces.requests.IReq_UpdateDomain>(
121
+ 'updateDomain',
122
+ async (dataArg) => {
123
+ await this.requireAuth(dataArg, 'domains:write');
124
+ const dnsManager = this.opsServerRef.dcRouterRef.dnsManager;
125
+ if (!dnsManager) return { success: false, message: 'DnsManager not initialized' };
126
+ const ok = await dnsManager.updateDomain(dataArg.id, {
127
+ description: dataArg.description,
128
+ });
129
+ return ok ? { success: true } : { success: false, message: 'Domain not found' };
130
+ },
131
+ ),
132
+ );
133
+
134
+ // Delete domain
135
+ this.typedrouter.addTypedHandler(
136
+ new plugins.typedrequest.TypedHandler<interfaces.requests.IReq_DeleteDomain>(
137
+ 'deleteDomain',
138
+ async (dataArg) => {
139
+ await this.requireAuth(dataArg, 'domains:write');
140
+ const dnsManager = this.opsServerRef.dcRouterRef.dnsManager;
141
+ if (!dnsManager) return { success: false, message: 'DnsManager not initialized' };
142
+ const ok = await dnsManager.deleteDomain(dataArg.id);
143
+ return ok ? { success: true } : { success: false, message: 'Domain not found' };
144
+ },
145
+ ),
146
+ );
147
+
148
+ // Force-resync provider domain
149
+ this.typedrouter.addTypedHandler(
150
+ new plugins.typedrequest.TypedHandler<interfaces.requests.IReq_SyncDomain>(
151
+ 'syncDomain',
152
+ async (dataArg) => {
153
+ await this.requireAuth(dataArg, 'domains:write');
154
+ const dnsManager = this.opsServerRef.dcRouterRef.dnsManager;
155
+ if (!dnsManager) return { success: false, message: 'DnsManager not initialized' };
156
+ return await dnsManager.syncDomain(dataArg.id);
157
+ },
158
+ ),
159
+ );
160
+ }
161
+ }
@@ -12,4 +12,8 @@ export * from './api-token.handler.js';
12
12
  export * from './vpn.handler.js';
13
13
  export * from './source-profile.handler.js';
14
14
  export * from './target-profile.handler.js';
15
- export * from './network-target.handler.js';
15
+ export * from './network-target.handler.js';
16
+ export * from './users.handler.js';
17
+ export * from './dns-provider.handler.js';
18
+ export * from './domain.handler.js';
19
+ export * from './dns-record.handler.js';
@@ -0,0 +1,30 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import type { OpsServer } from '../classes.opsserver.js';
3
+ import * as interfaces from '../../../ts_interfaces/index.js';
4
+
5
+ /**
6
+ * Read-only handler for OpsServer user accounts. Registers on adminRouter,
7
+ * so admin middleware enforces auth + role check before the handler runs.
8
+ * User data is owned by AdminHandler; this handler just exposes a safe
9
+ * projection of it via TypedRequest.
10
+ */
11
+ export class UsersHandler {
12
+ constructor(private opsServerRef: OpsServer) {
13
+ this.registerHandlers();
14
+ }
15
+
16
+ private registerHandlers(): void {
17
+ const router = this.opsServerRef.adminRouter;
18
+
19
+ // List users (admin-only, read-only)
20
+ router.addTypedHandler(
21
+ new plugins.typedrequest.TypedHandler<interfaces.requests.IReq_ListUsers>(
22
+ 'listUsers',
23
+ async (_dataArg) => {
24
+ const users = this.opsServerRef.adminHandler.listUsers();
25
+ return { users };
26
+ },
27
+ ),
28
+ );
29
+ }
30
+ }
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '13.4.2',
6
+ version: '13.7.0',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }