@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.
- package/dist_serve/bundle.js +1779 -1375
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.d.ts +2 -5
- package/dist_ts/classes.dcrouter.js +41 -10
- 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/index.d.ts +3 -0
- package/dist_ts/db/documents/index.js +5 -1
- 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 +227 -0
- package/dist_ts/dns/manager.dns.js +747 -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 +38 -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/opsserver/classes.opsserver.d.ts +4 -0
- package/dist_ts/opsserver/classes.opsserver.js +9 -1
- package/dist_ts/opsserver/handlers/admin.handler.d.ts +9 -0
- package/dist_ts/opsserver/handlers/admin.handler.js +12 -1
- package/dist_ts/opsserver/handlers/config.handler.js +11 -2
- package/dist_ts/opsserver/handlers/dns-provider.handler.d.ts +16 -0
- package/dist_ts/opsserver/handlers/dns-provider.handler.js +119 -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 +124 -0
- package/dist_ts/opsserver/handlers/index.d.ts +4 -0
- package/dist_ts/opsserver/handlers/index.js +5 -1
- package/dist_ts/opsserver/handlers/users.handler.d.ts +12 -0
- package/dist_ts/opsserver/handlers/users.handler.js +24 -0
- package/dist_ts_interfaces/data/dns-provider.d.ts +112 -0
- package/dist_ts_interfaces/data/dns-provider.js +27 -0
- package/dist_ts_interfaces/data/dns-record.d.ts +40 -0
- package/dist_ts_interfaces/data/dns-record.js +2 -0
- package/dist_ts_interfaces/data/domain.d.ts +34 -0
- package/dist_ts_interfaces/data/domain.js +2 -0
- package/dist_ts_interfaces/data/index.d.ts +3 -0
- package/dist_ts_interfaces/data/index.js +4 -1
- package/dist_ts_interfaces/data/route-management.d.ts +1 -1
- 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 +118 -0
- package/dist_ts_interfaces/requests/domains.js +2 -0
- package/dist_ts_interfaces/requests/index.d.ts +4 -0
- package/dist_ts_interfaces/requests/index.js +5 -1
- package/dist_ts_interfaces/requests/users.d.ts +19 -0
- package/dist_ts_interfaces/requests/users.js +3 -0
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/appstate.d.ts +85 -0
- package/dist_ts_web/appstate.js +339 -6
- package/dist_ts_web/elements/access/index.d.ts +1 -0
- package/dist_ts_web/elements/access/index.js +2 -1
- package/dist_ts_web/elements/access/ops-view-apitokens.js +1 -1
- 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 +58 -0
- package/dist_ts_web/elements/domains/dns-provider-form.js +268 -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/{ops-view-certificates.d.ts → domains/ops-view-certificates.d.ts} +1 -1
- package/dist_ts_web/elements/{ops-view-certificates.js → domains/ops-view-certificates.js} +5 -5
- package/dist_ts_web/elements/domains/ops-view-dns.d.ts +17 -0
- package/dist_ts_web/elements/domains/ops-view-dns.js +304 -0
- package/dist_ts_web/elements/domains/ops-view-domains.d.ts +18 -0
- package/dist_ts_web/elements/domains/ops-view-domains.js +361 -0
- package/dist_ts_web/elements/domains/ops-view-providers.d.ts +21 -0
- package/dist_ts_web/elements/domains/ops-view-providers.js +316 -0
- package/dist_ts_web/elements/email/ops-view-email-security.js +1 -1
- package/dist_ts_web/elements/email/ops-view-emails.js +1 -1
- package/dist_ts_web/elements/index.d.ts +1 -1
- package/dist_ts_web/elements/index.js +2 -2
- package/dist_ts_web/elements/network/ops-view-network-activity.js +6 -2
- package/dist_ts_web/elements/network/ops-view-networktargets.js +1 -1
- package/dist_ts_web/elements/network/ops-view-remoteingress.js +1 -1
- package/dist_ts_web/elements/network/ops-view-routes.js +1 -1
- package/dist_ts_web/elements/network/ops-view-sourceprofiles.js +1 -1
- package/dist_ts_web/elements/network/ops-view-targetprofiles.js +1 -1
- package/dist_ts_web/elements/network/ops-view-vpn.js +1 -1
- package/dist_ts_web/elements/ops-dashboard.js +16 -5
- package/dist_ts_web/elements/ops-view-logs.js +1 -1
- package/dist_ts_web/elements/overview/ops-view-config.js +3 -3
- package/dist_ts_web/elements/overview/ops-view-overview.js +1 -1
- package/dist_ts_web/elements/security/ops-view-security-authentication.js +1 -1
- package/dist_ts_web/elements/security/ops-view-security-blocked.js +1 -1
- package/dist_ts_web/elements/security/ops-view-security-overview.js +1 -1
- package/dist_ts_web/router.d.ts +1 -1
- package/dist_ts_web/router.js +5 -3
- package/package.json +2 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +46 -17
- package/ts/db/documents/classes.dns-provider.doc.ts +63 -0
- package/ts/db/documents/classes.dns-record.doc.ts +62 -0
- package/ts/db/documents/classes.domain.doc.ts +66 -0
- package/ts/db/documents/index.ts +5 -0
- package/ts/dns/index.ts +2 -0
- package/ts/dns/manager.dns.ts +869 -0
- package/ts/dns/providers/cloudflare.provider.ts +131 -0
- package/ts/dns/providers/factory.ts +48 -0
- package/ts/dns/providers/index.ts +3 -0
- package/ts/dns/providers/interfaces.ts +67 -0
- package/ts/opsserver/classes.opsserver.ts +8 -0
- package/ts/opsserver/handlers/admin.handler.ts +12 -0
- package/ts/opsserver/handlers/config.handler.ts +10 -1
- package/ts/opsserver/handlers/dns-provider.handler.ts +159 -0
- package/ts/opsserver/handlers/dns-record.handler.ts +127 -0
- package/ts/opsserver/handlers/domain.handler.ts +161 -0
- package/ts/opsserver/handlers/index.ts +5 -1
- package/ts/opsserver/handlers/users.handler.ts +30 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate.ts +460 -5
- package/ts_web/elements/access/index.ts +1 -0
- package/ts_web/elements/access/ops-view-apitokens.ts +1 -1
- package/ts_web/elements/access/ops-view-users.ts +140 -0
- package/ts_web/elements/domains/dns-provider-form.ts +216 -0
- package/ts_web/elements/domains/index.ts +5 -0
- package/ts_web/elements/{ops-view-certificates.ts → domains/ops-view-certificates.ts} +4 -4
- package/ts_web/elements/domains/ops-view-dns.ts +273 -0
- package/ts_web/elements/domains/ops-view-domains.ts +335 -0
- package/ts_web/elements/domains/ops-view-providers.ts +284 -0
- package/ts_web/elements/email/ops-view-email-security.ts +1 -1
- package/ts_web/elements/email/ops-view-emails.ts +1 -1
- package/ts_web/elements/index.ts +1 -1
- package/ts_web/elements/network/ops-view-network-activity.ts +5 -1
- package/ts_web/elements/network/ops-view-networktargets.ts +1 -1
- package/ts_web/elements/network/ops-view-remoteingress.ts +1 -1
- package/ts_web/elements/network/ops-view-routes.ts +1 -1
- package/ts_web/elements/network/ops-view-sourceprofiles.ts +1 -1
- package/ts_web/elements/network/ops-view-targetprofiles.ts +1 -1
- package/ts_web/elements/network/ops-view-vpn.ts +1 -1
- package/ts_web/elements/ops-dashboard.ts +16 -4
- package/ts_web/elements/ops-view-logs.ts +1 -1
- package/ts_web/elements/overview/ops-view-config.ts +2 -2
- package/ts_web/elements/overview/ops-view-overview.ts +1 -1
- package/ts_web/elements/security/ops-view-security-authentication.ts +1 -1
- package/ts_web/elements/security/ops-view-security-blocked.ts +1 -1
- package/ts_web/elements/security/ops-view-security-overview.ts +1 -1
- 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
|
+
}
|