@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.
Files changed (136) hide show
  1. package/dist_serve/bundle.js +1705 -1365
  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 +3 -0
  26. package/dist_ts/opsserver/classes.opsserver.js +7 -1
  27. package/dist_ts/opsserver/handlers/config.handler.js +11 -2
  28. package/dist_ts/opsserver/handlers/dns-provider.handler.d.ts +16 -0
  29. package/dist_ts/opsserver/handlers/dns-provider.handler.js +119 -0
  30. package/dist_ts/opsserver/handlers/dns-record.handler.d.ts +13 -0
  31. package/dist_ts/opsserver/handlers/dns-record.handler.js +98 -0
  32. package/dist_ts/opsserver/handlers/domain.handler.d.ts +13 -0
  33. package/dist_ts/opsserver/handlers/domain.handler.js +124 -0
  34. package/dist_ts/opsserver/handlers/index.d.ts +3 -0
  35. package/dist_ts/opsserver/handlers/index.js +4 -1
  36. package/dist_ts_interfaces/data/dns-provider.d.ts +112 -0
  37. package/dist_ts_interfaces/data/dns-provider.js +27 -0
  38. package/dist_ts_interfaces/data/dns-record.d.ts +40 -0
  39. package/dist_ts_interfaces/data/dns-record.js +2 -0
  40. package/dist_ts_interfaces/data/domain.d.ts +34 -0
  41. package/dist_ts_interfaces/data/domain.js +2 -0
  42. package/dist_ts_interfaces/data/index.d.ts +3 -0
  43. package/dist_ts_interfaces/data/index.js +4 -1
  44. package/dist_ts_interfaces/data/route-management.d.ts +1 -1
  45. package/dist_ts_interfaces/requests/dns-providers.d.ts +117 -0
  46. package/dist_ts_interfaces/requests/dns-providers.js +2 -0
  47. package/dist_ts_interfaces/requests/dns-records.d.ts +89 -0
  48. package/dist_ts_interfaces/requests/dns-records.js +2 -0
  49. package/dist_ts_interfaces/requests/domains.d.ts +118 -0
  50. package/dist_ts_interfaces/requests/domains.js +2 -0
  51. package/dist_ts_interfaces/requests/index.d.ts +3 -0
  52. package/dist_ts_interfaces/requests/index.js +4 -1
  53. package/dist_ts_web/00_commitinfo_data.js +1 -1
  54. package/dist_ts_web/appstate.d.ts +72 -0
  55. package/dist_ts_web/appstate.js +308 -6
  56. package/dist_ts_web/elements/access/ops-view-apitokens.js +1 -1
  57. package/dist_ts_web/elements/access/ops-view-users.js +1 -1
  58. package/dist_ts_web/elements/domains/dns-provider-form.d.ts +58 -0
  59. package/dist_ts_web/elements/domains/dns-provider-form.js +268 -0
  60. package/dist_ts_web/elements/domains/index.d.ts +5 -0
  61. package/dist_ts_web/elements/domains/index.js +6 -0
  62. package/dist_ts_web/elements/{ops-view-certificates.d.ts → domains/ops-view-certificates.d.ts} +1 -1
  63. package/dist_ts_web/elements/{ops-view-certificates.js → domains/ops-view-certificates.js} +5 -5
  64. package/dist_ts_web/elements/domains/ops-view-dns.d.ts +17 -0
  65. package/dist_ts_web/elements/domains/ops-view-dns.js +304 -0
  66. package/dist_ts_web/elements/domains/ops-view-domains.d.ts +18 -0
  67. package/dist_ts_web/elements/domains/ops-view-domains.js +361 -0
  68. package/dist_ts_web/elements/domains/ops-view-providers.d.ts +21 -0
  69. package/dist_ts_web/elements/domains/ops-view-providers.js +316 -0
  70. package/dist_ts_web/elements/email/ops-view-email-security.js +1 -1
  71. package/dist_ts_web/elements/email/ops-view-emails.js +1 -1
  72. package/dist_ts_web/elements/index.d.ts +1 -1
  73. package/dist_ts_web/elements/index.js +2 -2
  74. package/dist_ts_web/elements/network/ops-view-network-activity.js +1 -1
  75. package/dist_ts_web/elements/network/ops-view-networktargets.js +1 -1
  76. package/dist_ts_web/elements/network/ops-view-remoteingress.js +1 -1
  77. package/dist_ts_web/elements/network/ops-view-routes.js +1 -1
  78. package/dist_ts_web/elements/network/ops-view-sourceprofiles.js +1 -1
  79. package/dist_ts_web/elements/network/ops-view-targetprofiles.js +1 -1
  80. package/dist_ts_web/elements/network/ops-view-vpn.js +1 -1
  81. package/dist_ts_web/elements/ops-dashboard.js +14 -5
  82. package/dist_ts_web/elements/ops-view-logs.js +1 -1
  83. package/dist_ts_web/elements/overview/ops-view-config.js +3 -3
  84. package/dist_ts_web/elements/overview/ops-view-overview.js +1 -1
  85. package/dist_ts_web/elements/security/ops-view-security-authentication.js +1 -1
  86. package/dist_ts_web/elements/security/ops-view-security-blocked.js +1 -1
  87. package/dist_ts_web/elements/security/ops-view-security-overview.js +1 -1
  88. package/dist_ts_web/router.d.ts +1 -1
  89. package/dist_ts_web/router.js +4 -2
  90. package/package.json +2 -2
  91. package/ts/00_commitinfo_data.ts +1 -1
  92. package/ts/classes.dcrouter.ts +46 -17
  93. package/ts/db/documents/classes.dns-provider.doc.ts +63 -0
  94. package/ts/db/documents/classes.dns-record.doc.ts +62 -0
  95. package/ts/db/documents/classes.domain.doc.ts +66 -0
  96. package/ts/db/documents/index.ts +5 -0
  97. package/ts/dns/index.ts +2 -0
  98. package/ts/dns/manager.dns.ts +869 -0
  99. package/ts/dns/providers/cloudflare.provider.ts +131 -0
  100. package/ts/dns/providers/factory.ts +48 -0
  101. package/ts/dns/providers/index.ts +3 -0
  102. package/ts/dns/providers/interfaces.ts +67 -0
  103. package/ts/opsserver/classes.opsserver.ts +6 -0
  104. package/ts/opsserver/handlers/config.handler.ts +10 -1
  105. package/ts/opsserver/handlers/dns-provider.handler.ts +159 -0
  106. package/ts/opsserver/handlers/dns-record.handler.ts +127 -0
  107. package/ts/opsserver/handlers/domain.handler.ts +161 -0
  108. package/ts/opsserver/handlers/index.ts +4 -1
  109. package/ts_web/00_commitinfo_data.ts +1 -1
  110. package/ts_web/appstate.ts +403 -5
  111. package/ts_web/elements/access/ops-view-apitokens.ts +1 -1
  112. package/ts_web/elements/access/ops-view-users.ts +1 -1
  113. package/ts_web/elements/domains/dns-provider-form.ts +216 -0
  114. package/ts_web/elements/domains/index.ts +5 -0
  115. package/ts_web/elements/{ops-view-certificates.ts → domains/ops-view-certificates.ts} +4 -4
  116. package/ts_web/elements/domains/ops-view-dns.ts +273 -0
  117. package/ts_web/elements/domains/ops-view-domains.ts +335 -0
  118. package/ts_web/elements/domains/ops-view-providers.ts +284 -0
  119. package/ts_web/elements/email/ops-view-email-security.ts +1 -1
  120. package/ts_web/elements/email/ops-view-emails.ts +1 -1
  121. package/ts_web/elements/index.ts +1 -1
  122. package/ts_web/elements/network/ops-view-network-activity.ts +1 -1
  123. package/ts_web/elements/network/ops-view-networktargets.ts +1 -1
  124. package/ts_web/elements/network/ops-view-remoteingress.ts +1 -1
  125. package/ts_web/elements/network/ops-view-routes.ts +1 -1
  126. package/ts_web/elements/network/ops-view-sourceprofiles.ts +1 -1
  127. package/ts_web/elements/network/ops-view-targetprofiles.ts +1 -1
  128. package/ts_web/elements/network/ops-view-vpn.ts +1 -1
  129. package/ts_web/elements/ops-dashboard.ts +14 -4
  130. package/ts_web/elements/ops-view-logs.ts +1 -1
  131. package/ts_web/elements/overview/ops-view-config.ts +2 -2
  132. package/ts_web/elements/overview/ops-view-overview.ts +1 -1
  133. package/ts_web/elements/security/ops-view-security-authentication.ts +1 -1
  134. package/ts_web/elements/security/ops-view-security-blocked.ts +1 -1
  135. package/ts_web/elements/security/ops-view-security-overview.ts +1 -1
  136. 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
+ }