@serve.zone/dcrouter 13.5.0 → 13.7.1
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 +1705 -1365
- 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 +3 -0
- package/dist_ts/opsserver/classes.opsserver.js +7 -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 +3 -0
- package/dist_ts/opsserver/handlers/index.js +4 -1
- 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 +3 -0
- package/dist_ts_interfaces/requests/index.js +4 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/appstate.d.ts +72 -0
- package/dist_ts_web/appstate.js +308 -6
- package/dist_ts_web/elements/access/ops-view-apitokens.js +1 -1
- package/dist_ts_web/elements/access/ops-view-users.js +1 -1
- 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 +1 -1
- 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 +14 -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 +4 -2
- 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 +6 -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 +4 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate.ts +403 -5
- package/ts_web/elements/access/ops-view-apitokens.ts +1 -1
- package/ts_web/elements/access/ops-view-users.ts +1 -1
- 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 +1 -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 +14 -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 +3 -1
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
import { DnsProviderDoc, DomainDoc, DnsRecordDoc } from '../db/documents/index.js';
|
|
3
|
+
import type { IDcRouterOptions } from '../classes.dcrouter.js';
|
|
4
|
+
import type { IDnsProviderClient } from './providers/interfaces.js';
|
|
5
|
+
import type { TDnsRecordType, TDnsRecordSource } from '../../dist_ts_interfaces/data/dns-record.js';
|
|
6
|
+
import type { TDnsProviderType, TDnsProviderCredentials, IDnsProviderPublic, IProviderDomainListing } from '../../dist_ts_interfaces/data/dns-provider.js';
|
|
7
|
+
/**
|
|
8
|
+
* DnsManager — owns runtime DNS state on top of the embedded DnsServer.
|
|
9
|
+
*
|
|
10
|
+
* Responsibilities:
|
|
11
|
+
* - Load Domain/DnsRecord docs from the DB on start
|
|
12
|
+
* - First-boot seeding from legacy constructor config (dnsScopes/dnsRecords/dnsNsDomains)
|
|
13
|
+
* - Register manual-domain records with smartdns.DnsServer at startup
|
|
14
|
+
* - Provide CRUD methods used by OpsServer handlers (manual domains hit smartdns,
|
|
15
|
+
* provider domains hit the provider API)
|
|
16
|
+
* - Expose a provider lookup used by the ACME DNS-01 wiring in setupSmartProxy()
|
|
17
|
+
*
|
|
18
|
+
* Provider-managed domains are NEVER served from the embedded DnsServer — the
|
|
19
|
+
* provider stays authoritative. We only mirror their records locally for the UI
|
|
20
|
+
* and to track providerRecordIds for updates / deletes.
|
|
21
|
+
*/
|
|
22
|
+
export declare class DnsManager {
|
|
23
|
+
private options;
|
|
24
|
+
/**
|
|
25
|
+
* Reference to the active smartdns DnsServer (set by DcRouter once it exists).
|
|
26
|
+
* May be undefined if dnsScopes/dnsNsDomains aren't configured.
|
|
27
|
+
*/
|
|
28
|
+
dnsServer?: plugins.smartdns.dnsServerMod.DnsServer;
|
|
29
|
+
/**
|
|
30
|
+
* Cached provider clients, keyed by DnsProviderDoc.id.
|
|
31
|
+
* Created lazily when a provider is first needed.
|
|
32
|
+
*/
|
|
33
|
+
private providerClients;
|
|
34
|
+
constructor(options: IDcRouterOptions);
|
|
35
|
+
/**
|
|
36
|
+
* Called from DcRouter after DcRouterDb is up. Performs first-boot seeding
|
|
37
|
+
* from legacy constructor config if (and only if) the DB is empty.
|
|
38
|
+
*/
|
|
39
|
+
start(): Promise<void>;
|
|
40
|
+
stop(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Wire the embedded DnsServer instance after it has been created by
|
|
43
|
+
* DcRouter.setupDnsWithSocketHandler(). After this, manual records loaded
|
|
44
|
+
* from the DB are registered with the server.
|
|
45
|
+
*/
|
|
46
|
+
attachDnsServer(dnsServer: plugins.smartdns.dnsServerMod.DnsServer): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* If no DomainDocs exist yet but the constructor has legacy DNS fields,
|
|
49
|
+
* seed them as `source: 'manual'` records. On subsequent boots (DB has
|
|
50
|
+
* entries), constructor config is ignored with a warning.
|
|
51
|
+
*/
|
|
52
|
+
private seedFromConstructorConfigIfEmpty;
|
|
53
|
+
private findParentDomain;
|
|
54
|
+
/**
|
|
55
|
+
* Register all manual-domain records from the DB with the embedded DnsServer.
|
|
56
|
+
* Called once after attachDnsServer().
|
|
57
|
+
*/
|
|
58
|
+
private applyManualDomainsToDnsServer;
|
|
59
|
+
/**
|
|
60
|
+
* Register a single record with the embedded DnsServer. The handler closure
|
|
61
|
+
* captures the record fields, so updates require a re-register cycle.
|
|
62
|
+
*/
|
|
63
|
+
private registerRecordWithDnsServer;
|
|
64
|
+
private parseRecordData;
|
|
65
|
+
/**
|
|
66
|
+
* Get the provider client for a given DnsProviderDoc id, instantiating
|
|
67
|
+
* (and caching) it on first use.
|
|
68
|
+
*/
|
|
69
|
+
getProviderClientById(providerId: string): Promise<IDnsProviderClient | null>;
|
|
70
|
+
/**
|
|
71
|
+
* Find the IDnsProviderClient that owns the given FQDN (by walking up its
|
|
72
|
+
* labels to find a matching DomainDoc with `source === 'provider'`).
|
|
73
|
+
* Returns null if no provider claims this FQDN.
|
|
74
|
+
*
|
|
75
|
+
* Used by:
|
|
76
|
+
* - SmartAcme DNS-01 wiring in setupSmartProxy()
|
|
77
|
+
* - DnsRecordHandler when creating provider records
|
|
78
|
+
*/
|
|
79
|
+
getProviderClientForDomain(fqdn: string): Promise<IDnsProviderClient | null>;
|
|
80
|
+
/**
|
|
81
|
+
* True if any cloudflare provider exists in the DB. Used by setupSmartProxy()
|
|
82
|
+
* to decide whether to wire SmartAcme with a DNS-01 handler.
|
|
83
|
+
*/
|
|
84
|
+
hasAcmeCapableProvider(): Promise<boolean>;
|
|
85
|
+
/**
|
|
86
|
+
* Build an IConvenientDnsProvider that dispatches each ACME challenge to
|
|
87
|
+
* the right provider client (whichever provider type owns the parent zone),
|
|
88
|
+
* based on the challenge's hostName. Provider-agnostic — uses the IDnsProviderClient
|
|
89
|
+
* interface, so any registered provider implementation works.
|
|
90
|
+
* Returned object plugs directly into smartacme's Dns01Handler.
|
|
91
|
+
*/
|
|
92
|
+
buildAcmeConvenientDnsProvider(): plugins.tsclass.network.IConvenientDnsProvider;
|
|
93
|
+
listProviders(): Promise<IDnsProviderPublic[]>;
|
|
94
|
+
getProvider(id: string): Promise<IDnsProviderPublic | null>;
|
|
95
|
+
createProvider(args: {
|
|
96
|
+
name: string;
|
|
97
|
+
type: TDnsProviderType;
|
|
98
|
+
credentials: TDnsProviderCredentials;
|
|
99
|
+
createdBy: string;
|
|
100
|
+
}): Promise<string>;
|
|
101
|
+
updateProvider(id: string, args: {
|
|
102
|
+
name?: string;
|
|
103
|
+
credentials?: TDnsProviderCredentials;
|
|
104
|
+
}): Promise<boolean>;
|
|
105
|
+
deleteProvider(id: string, force: boolean): Promise<{
|
|
106
|
+
success: boolean;
|
|
107
|
+
message?: string;
|
|
108
|
+
}>;
|
|
109
|
+
testProvider(id: string): Promise<{
|
|
110
|
+
ok: boolean;
|
|
111
|
+
error?: string;
|
|
112
|
+
testedAt: number;
|
|
113
|
+
}>;
|
|
114
|
+
listProviderDomains(providerId: string): Promise<IProviderDomainListing[]>;
|
|
115
|
+
listDomains(): Promise<DomainDoc[]>;
|
|
116
|
+
getDomain(id: string): Promise<DomainDoc | null>;
|
|
117
|
+
/**
|
|
118
|
+
* Create a manual (authoritative) domain. dcrouter will serve DNS records
|
|
119
|
+
* for this domain via the embedded smartdns.DnsServer.
|
|
120
|
+
*/
|
|
121
|
+
createManualDomain(args: {
|
|
122
|
+
name: string;
|
|
123
|
+
description?: string;
|
|
124
|
+
createdBy: string;
|
|
125
|
+
}): Promise<string>;
|
|
126
|
+
/**
|
|
127
|
+
* Import one or more domains from a provider, pulling all of their DNS
|
|
128
|
+
* records into local DnsRecordDocs.
|
|
129
|
+
*/
|
|
130
|
+
importDomainsFromProvider(args: {
|
|
131
|
+
providerId: string;
|
|
132
|
+
domainNames: string[];
|
|
133
|
+
createdBy: string;
|
|
134
|
+
}): Promise<string[]>;
|
|
135
|
+
updateDomain(id: string, args: {
|
|
136
|
+
description?: string;
|
|
137
|
+
}): Promise<boolean>;
|
|
138
|
+
/**
|
|
139
|
+
* Delete a domain and all of its DNS records. For provider domains, only
|
|
140
|
+
* removes the local mirror — does NOT touch the provider.
|
|
141
|
+
* For manual domains, also unregisters records from the embedded DnsServer.
|
|
142
|
+
*
|
|
143
|
+
* Note: smartdns has no public unregister-by-name API in the version pinned
|
|
144
|
+
* here, so manual record deletes only take effect after a restart. The DB
|
|
145
|
+
* is the source of truth and the next start will not register the deleted
|
|
146
|
+
* record.
|
|
147
|
+
*/
|
|
148
|
+
deleteDomain(id: string): Promise<boolean>;
|
|
149
|
+
/**
|
|
150
|
+
* Force-resync a provider-managed domain: re-pull all records from the
|
|
151
|
+
* provider API, replacing the cached DnsRecordDocs.
|
|
152
|
+
*/
|
|
153
|
+
syncDomain(id: string): Promise<{
|
|
154
|
+
success: boolean;
|
|
155
|
+
recordCount?: number;
|
|
156
|
+
message?: string;
|
|
157
|
+
}>;
|
|
158
|
+
listRecordsForDomain(domainId: string): Promise<DnsRecordDoc[]>;
|
|
159
|
+
getRecord(id: string): Promise<DnsRecordDoc | null>;
|
|
160
|
+
createRecord(args: {
|
|
161
|
+
domainId: string;
|
|
162
|
+
name: string;
|
|
163
|
+
type: TDnsRecordType;
|
|
164
|
+
value: string;
|
|
165
|
+
ttl?: number;
|
|
166
|
+
proxied?: boolean;
|
|
167
|
+
createdBy: string;
|
|
168
|
+
}): Promise<{
|
|
169
|
+
success: boolean;
|
|
170
|
+
id?: string;
|
|
171
|
+
message?: string;
|
|
172
|
+
}>;
|
|
173
|
+
updateRecord(args: {
|
|
174
|
+
id: string;
|
|
175
|
+
name?: string;
|
|
176
|
+
value?: string;
|
|
177
|
+
ttl?: number;
|
|
178
|
+
proxied?: boolean;
|
|
179
|
+
}): Promise<{
|
|
180
|
+
success: boolean;
|
|
181
|
+
message?: string;
|
|
182
|
+
}>;
|
|
183
|
+
deleteRecord(id: string): Promise<{
|
|
184
|
+
success: boolean;
|
|
185
|
+
message?: string;
|
|
186
|
+
}>;
|
|
187
|
+
private createSyncedRecord;
|
|
188
|
+
/**
|
|
189
|
+
* Convert a DnsProviderDoc to its public, secret-stripped representation
|
|
190
|
+
* for the OpsServer API.
|
|
191
|
+
*/
|
|
192
|
+
toPublicProvider(doc: DnsProviderDoc): IDnsProviderPublic;
|
|
193
|
+
/**
|
|
194
|
+
* Convert a DomainDoc to its plain interface representation.
|
|
195
|
+
*/
|
|
196
|
+
toPublicDomain(doc: DomainDoc): {
|
|
197
|
+
id: string;
|
|
198
|
+
name: string;
|
|
199
|
+
source: 'manual' | 'provider';
|
|
200
|
+
providerId?: string;
|
|
201
|
+
authoritative: boolean;
|
|
202
|
+
nameservers?: string[];
|
|
203
|
+
externalZoneId?: string;
|
|
204
|
+
lastSyncedAt?: number;
|
|
205
|
+
description?: string;
|
|
206
|
+
createdAt: number;
|
|
207
|
+
updatedAt: number;
|
|
208
|
+
createdBy: string;
|
|
209
|
+
};
|
|
210
|
+
/**
|
|
211
|
+
* Convert a DnsRecordDoc to its plain interface representation.
|
|
212
|
+
*/
|
|
213
|
+
toPublicRecord(doc: DnsRecordDoc): {
|
|
214
|
+
id: string;
|
|
215
|
+
domainId: string;
|
|
216
|
+
name: string;
|
|
217
|
+
type: TDnsRecordType;
|
|
218
|
+
value: string;
|
|
219
|
+
ttl: number;
|
|
220
|
+
proxied?: boolean;
|
|
221
|
+
source: TDnsRecordSource;
|
|
222
|
+
providerRecordId?: string;
|
|
223
|
+
createdAt: number;
|
|
224
|
+
updatedAt: number;
|
|
225
|
+
createdBy: string;
|
|
226
|
+
};
|
|
227
|
+
}
|