@serve.zone/dcrouter 15.0.2 → 15.0.4

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 (72) hide show
  1. package/deno.json +1 -1
  2. package/dist_serve/bundle.js +768 -768
  3. package/dist_ts/00_commitinfo_data.js +1 -1
  4. package/dist_ts/classes.dcrouter.js +9 -1
  5. package/dist_ts_web/00_commitinfo_data.js +1 -1
  6. package/dist_ts_web/appstate/acme.d.ts +17 -0
  7. package/dist_ts_web/appstate/acme.js +64 -0
  8. package/dist_ts_web/appstate/certificates.d.ts +37 -0
  9. package/dist_ts_web/appstate/certificates.js +107 -0
  10. package/dist_ts_web/appstate/config.d.ts +9 -0
  11. package/dist_ts_web/appstate/config.js +35 -0
  12. package/dist_ts_web/appstate/domains.d.ts +80 -0
  13. package/dist_ts_web/appstate/domains.js +324 -0
  14. package/dist_ts_web/appstate/email-domains.d.ts +25 -0
  15. package/dist_ts_web/appstate/email-domains.js +104 -0
  16. package/dist_ts_web/appstate/email-ops.d.ts +10 -0
  17. package/dist_ts_web/appstate/email-ops.js +40 -0
  18. package/dist_ts_web/appstate/login.d.ts +30 -0
  19. package/dist_ts_web/appstate/login.js +83 -0
  20. package/dist_ts_web/appstate/logs.d.ts +16 -0
  21. package/dist_ts_web/appstate/logs.js +27 -0
  22. package/dist_ts_web/appstate/network.d.ts +50 -0
  23. package/dist_ts_web/appstate/network.js +122 -0
  24. package/dist_ts_web/appstate/profiles-targets.d.ts +45 -0
  25. package/dist_ts_web/appstate/profiles-targets.js +173 -0
  26. package/dist_ts_web/appstate/remoteingress.d.ts +47 -0
  27. package/dist_ts_web/appstate/remoteingress.js +204 -0
  28. package/dist_ts_web/appstate/routes.d.ts +76 -0
  29. package/dist_ts_web/appstate/routes.js +316 -0
  30. package/dist_ts_web/appstate/runtime.d.ts +1 -0
  31. package/dist_ts_web/appstate/runtime.js +276 -0
  32. package/dist_ts_web/appstate/security.d.ts +29 -0
  33. package/dist_ts_web/appstate/security.js +167 -0
  34. package/dist_ts_web/appstate/shared.d.ts +3 -0
  35. package/dist_ts_web/appstate/shared.js +13 -0
  36. package/dist_ts_web/appstate/stats.d.ts +15 -0
  37. package/dist_ts_web/appstate/stats.js +59 -0
  38. package/dist_ts_web/appstate/target-profiles.d.ts +37 -0
  39. package/dist_ts_web/appstate/target-profiles.js +118 -0
  40. package/dist_ts_web/appstate/ui.d.ts +11 -0
  41. package/dist_ts_web/appstate/ui.js +55 -0
  42. package/dist_ts_web/appstate/users.d.ts +27 -0
  43. package/dist_ts_web/appstate/users.js +85 -0
  44. package/dist_ts_web/appstate/vpn.d.ts +44 -0
  45. package/dist_ts_web/appstate/vpn.js +148 -0
  46. package/dist_ts_web/appstate.d.ts +20 -568
  47. package/dist_ts_web/appstate.js +24 -2418
  48. package/package.json +3 -3
  49. package/ts/00_commitinfo_data.ts +1 -1
  50. package/ts/classes.dcrouter.ts +10 -0
  51. package/ts_web/00_commitinfo_data.ts +1 -1
  52. package/ts_web/appstate/acme.ts +93 -0
  53. package/ts_web/appstate/certificates.ts +159 -0
  54. package/ts_web/appstate/config.ts +49 -0
  55. package/ts_web/appstate/domains.ts +429 -0
  56. package/ts_web/appstate/email-domains.ts +155 -0
  57. package/ts_web/appstate/email-ops.ts +57 -0
  58. package/ts_web/appstate/login.ts +128 -0
  59. package/ts_web/appstate/logs.ts +50 -0
  60. package/ts_web/appstate/network.ts +161 -0
  61. package/ts_web/appstate/profiles-targets.ts +240 -0
  62. package/ts_web/appstate/remoteingress.ts +300 -0
  63. package/ts_web/appstate/routes.ts +447 -0
  64. package/ts_web/appstate/runtime.ts +308 -0
  65. package/ts_web/appstate/security.ts +229 -0
  66. package/ts_web/appstate/shared.ts +15 -0
  67. package/ts_web/appstate/stats.ts +79 -0
  68. package/ts_web/appstate/target-profiles.ts +164 -0
  69. package/ts_web/appstate/ui.ts +75 -0
  70. package/ts_web/appstate/users.ts +133 -0
  71. package/ts_web/appstate/vpn.ts +234 -0
  72. package/ts_web/appstate.ts +24 -3403
@@ -0,0 +1,107 @@
1
+ import * as plugins from '../plugins.js';
2
+ import * as interfaces from '../../dist_ts_interfaces/index.js';
3
+ import { appState } from './shared.js';
4
+ import { getActionContext } from './login.js';
5
+ export const certificateStatePart = await appState.getStatePart('certificates', {
6
+ certificates: [],
7
+ summary: { total: 0, valid: 0, expiring: 0, expired: 0, failed: 0, unknown: 0 },
8
+ isLoading: false,
9
+ error: null,
10
+ lastUpdated: 0,
11
+ }, 'soft');
12
+ // Certificate Actions
13
+ // ============================================================================
14
+ export const fetchCertificateOverviewAction = certificateStatePart.createAction(async (statePartArg) => {
15
+ const context = getActionContext();
16
+ const currentState = statePartArg.getState();
17
+ if (!context.identity)
18
+ return currentState;
19
+ try {
20
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'getCertificateOverview');
21
+ const response = await request.fire({
22
+ identity: context.identity,
23
+ });
24
+ return {
25
+ certificates: response.certificates,
26
+ summary: response.summary,
27
+ isLoading: false,
28
+ error: null,
29
+ lastUpdated: Date.now(),
30
+ };
31
+ }
32
+ catch (error) {
33
+ return {
34
+ ...currentState,
35
+ isLoading: false,
36
+ error: error instanceof Error ? error.message : 'Failed to fetch certificate overview',
37
+ };
38
+ }
39
+ });
40
+ export const reprovisionCertificateAction = certificateStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
41
+ const context = getActionContext();
42
+ const currentState = statePartArg.getState();
43
+ try {
44
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'reprovisionCertificateDomain');
45
+ await request.fire({
46
+ identity: context.identity,
47
+ domain: dataArg.domain,
48
+ forceRenew: dataArg.forceRenew,
49
+ });
50
+ // Re-fetch overview after reprovisioning
51
+ return await actionContext.dispatch(fetchCertificateOverviewAction, null);
52
+ }
53
+ catch (error) {
54
+ return {
55
+ ...currentState,
56
+ error: error instanceof Error ? error.message : 'Failed to reprovision certificate',
57
+ };
58
+ }
59
+ });
60
+ export const deleteCertificateAction = certificateStatePart.createAction(async (statePartArg, domain, actionContext) => {
61
+ const context = getActionContext();
62
+ const currentState = statePartArg.getState();
63
+ try {
64
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'deleteCertificate');
65
+ await request.fire({
66
+ identity: context.identity,
67
+ domain,
68
+ });
69
+ // Re-fetch overview after deletion
70
+ return await actionContext.dispatch(fetchCertificateOverviewAction, null);
71
+ }
72
+ catch (error) {
73
+ return {
74
+ ...currentState,
75
+ error: error instanceof Error ? error.message : 'Failed to delete certificate',
76
+ };
77
+ }
78
+ });
79
+ export const importCertificateAction = certificateStatePart.createAction(async (statePartArg, cert, actionContext) => {
80
+ const context = getActionContext();
81
+ const currentState = statePartArg.getState();
82
+ try {
83
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'importCertificate');
84
+ await request.fire({
85
+ identity: context.identity,
86
+ cert,
87
+ });
88
+ // Re-fetch overview after import
89
+ return await actionContext.dispatch(fetchCertificateOverviewAction, null);
90
+ }
91
+ catch (error) {
92
+ return {
93
+ ...currentState,
94
+ error: error instanceof Error ? error.message : 'Failed to import certificate',
95
+ };
96
+ }
97
+ });
98
+ export async function fetchCertificateExport(domain) {
99
+ const context = getActionContext();
100
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'exportCertificate');
101
+ return request.fire({
102
+ identity: context.identity,
103
+ domain,
104
+ });
105
+ }
106
+ // ============================================================================
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydGlmaWNhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfd2ViL2FwcHN0YXRlL2NlcnRpZmljYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEtBQUssVUFBVSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBVTlDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sUUFBUSxDQUFDLFlBQVksQ0FDN0QsY0FBYyxFQUNkO0lBQ0UsWUFBWSxFQUFFLEVBQUU7SUFDaEIsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDL0UsU0FBUyxFQUFFLEtBQUs7SUFDaEIsS0FBSyxFQUFFLElBQUk7SUFDWCxXQUFXLEVBQUUsQ0FBQztDQUNmLEVBQ0QsTUFBTSxDQUNQLENBQUM7QUFFRixzQkFBc0I7QUFDdEIsK0VBQStFO0FBRS9FLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUE4QixFQUFFO0lBQ2pJLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDbkMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRyxDQUFDO0lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtRQUFFLE9BQU8sWUFBWSxDQUFDO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFB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
@@ -0,0 +1,9 @@
1
+ import * as plugins from '../plugins.js';
2
+ import * as interfaces from '../../dist_ts_interfaces/index.js';
3
+ export interface IConfigState {
4
+ config: interfaces.requests.IConfigData | null;
5
+ isLoading: boolean;
6
+ error: string | null;
7
+ }
8
+ export declare const configStatePart: plugins.deesElement.domtools.plugins.smartstate.StatePart<string, IConfigState>;
9
+ export declare const fetchConfigurationAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IConfigState, unknown>;
@@ -0,0 +1,35 @@
1
+ import * as plugins from '../plugins.js';
2
+ import * as interfaces from '../../dist_ts_interfaces/index.js';
3
+ import { appState } from './shared.js';
4
+ import { getActionContext } from './login.js';
5
+ export const configStatePart = await appState.getStatePart('config', {
6
+ config: null,
7
+ isLoading: false,
8
+ error: null,
9
+ });
10
+ // Fetch Configuration Action (read-only)
11
+ export const fetchConfigurationAction = configStatePart.createAction(async (statePartArg) => {
12
+ const context = getActionContext();
13
+ const currentState = statePartArg.getState();
14
+ if (!context.identity)
15
+ return currentState;
16
+ try {
17
+ const configRequest = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'getConfiguration');
18
+ const response = await configRequest.fire({
19
+ identity: context.identity,
20
+ });
21
+ return {
22
+ config: response.config,
23
+ isLoading: false,
24
+ error: null,
25
+ };
26
+ }
27
+ catch (error) {
28
+ return {
29
+ ...currentState,
30
+ isLoading: false,
31
+ error: error.message || 'Failed to fetch configuration',
32
+ };
33
+ }
34
+ });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfd2ViL2FwcHN0YXRlL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssVUFBVSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBUTlDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxZQUFZLENBQ3hELFFBQVEsRUFDUjtJQUNFLE1BQU0sRUFBRSxJQUFJO0lBQ1osU0FBUyxFQUFFLEtBQUs7SUFDaEIsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUNGLENBQUM7QUFFRix5Q0FBeUM7QUFDekMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUF5QixFQUFFO0lBQ2pILE1BQU0sT0FBTyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDbkMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRyxDQUFDO0lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtRQUFFLE9BQU8sWUFBWSxDQUFDO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FFMUUsZUFBZSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQ3hDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtTQUMzQixDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0wsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1lBQ3ZCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQWMsRUFBRSxDQUFDO1FBQ3hCLE9BQU87WUFDTCxHQUFHLFlBQVk7WUFDZixTQUFTLEVBQUUsS0FBSztZQUNoQixLQUFLLEVBQUcsS0FBZSxDQUFDLE9BQU8sSUFBSSwrQkFBK0I7U0FDbkUsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQyJ9
@@ -0,0 +1,80 @@
1
+ import * as plugins from '../plugins.js';
2
+ import * as interfaces from '../../dist_ts_interfaces/index.js';
3
+ export interface IDomainsState {
4
+ providers: interfaces.data.IDnsProviderPublic[];
5
+ domains: interfaces.data.IDomain[];
6
+ records: interfaces.data.IDnsRecord[];
7
+ /** id of the currently-selected domain in the DNS records subview. */
8
+ selectedDomainId: string | null;
9
+ isLoading: boolean;
10
+ error: string | null;
11
+ lastUpdated: number;
12
+ }
13
+ export declare const domainsStatePart: plugins.deesElement.domtools.plugins.smartstate.StatePart<string, IDomainsState>;
14
+ export declare const fetchDomainsAndProvidersAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IDomainsState, unknown>;
15
+ export declare const fetchDnsRecordsForDomainAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IDomainsState, {
16
+ domainId: string;
17
+ }>;
18
+ export declare const createDnsProviderAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IDomainsState, {
19
+ name: string;
20
+ type: interfaces.data.TDnsProviderType;
21
+ credentials: interfaces.data.TDnsProviderCredentials;
22
+ }>;
23
+ export declare const updateDnsProviderAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IDomainsState, {
24
+ id: string;
25
+ name?: string;
26
+ credentials?: interfaces.data.TDnsProviderCredentials;
27
+ }>;
28
+ export declare const deleteDnsProviderAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IDomainsState, {
29
+ id: string;
30
+ force?: boolean;
31
+ }>;
32
+ export declare const testDnsProviderAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IDomainsState, {
33
+ id: string;
34
+ }>;
35
+ /** One-shot fetch for the import-domain modal. Does NOT modify state. */
36
+ export declare function fetchProviderDomains(providerId: string): Promise<{
37
+ success: boolean;
38
+ domains?: interfaces.data.IProviderDomainListing[];
39
+ message?: string;
40
+ }>;
41
+ export declare const createDcrouterDomainAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IDomainsState, {
42
+ name: string;
43
+ description?: string;
44
+ }>;
45
+ export declare const importDomainsFromProviderAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IDomainsState, {
46
+ providerId: string;
47
+ domainNames: string[];
48
+ }>;
49
+ export declare const deleteDomainAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IDomainsState, {
50
+ id: string;
51
+ }>;
52
+ export declare const syncDomainAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IDomainsState, {
53
+ id: string;
54
+ }>;
55
+ export declare const migrateDomainAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IDomainsState, {
56
+ id: string;
57
+ targetSource: interfaces.data.TDomainSource;
58
+ targetProviderId?: string;
59
+ deleteExistingProviderRecords?: boolean;
60
+ }>;
61
+ export declare const createDnsRecordAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IDomainsState, {
62
+ domainId: string;
63
+ name: string;
64
+ type: interfaces.data.TDnsRecordType;
65
+ value: string;
66
+ ttl?: number;
67
+ proxied?: boolean;
68
+ }>;
69
+ export declare const updateDnsRecordAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IDomainsState, {
70
+ id: string;
71
+ domainId: string;
72
+ name?: string;
73
+ value?: string;
74
+ ttl?: number;
75
+ proxied?: boolean;
76
+ }>;
77
+ export declare const deleteDnsRecordAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IDomainsState, {
78
+ id: string;
79
+ domainId: string;
80
+ }>;
@@ -0,0 +1,324 @@
1
+ import * as plugins from '../plugins.js';
2
+ import * as interfaces from '../../dist_ts_interfaces/index.js';
3
+ import { appState } from './shared.js';
4
+ import { getActionContext } from './login.js';
5
+ export const domainsStatePart = await appState.getStatePart('domains', {
6
+ providers: [],
7
+ domains: [],
8
+ records: [],
9
+ selectedDomainId: null,
10
+ isLoading: false,
11
+ error: null,
12
+ lastUpdated: 0,
13
+ }, 'soft');
14
+ export const fetchDomainsAndProvidersAction = domainsStatePart.createAction(async (statePartArg) => {
15
+ const context = getActionContext();
16
+ const currentState = statePartArg.getState();
17
+ if (!context.identity)
18
+ return currentState;
19
+ try {
20
+ const providersRequest = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'getDnsProviders');
21
+ const domainsRequest = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'getDomains');
22
+ const [providersResponse, domainsResponse] = await Promise.all([
23
+ providersRequest.fire({ identity: context.identity }),
24
+ domainsRequest.fire({ identity: context.identity }),
25
+ ]);
26
+ return {
27
+ ...currentState,
28
+ providers: providersResponse.providers,
29
+ domains: domainsResponse.domains,
30
+ isLoading: false,
31
+ error: null,
32
+ lastUpdated: Date.now(),
33
+ };
34
+ }
35
+ catch (error) {
36
+ return {
37
+ ...currentState,
38
+ isLoading: false,
39
+ error: error instanceof Error ? error.message : 'Failed to fetch domains/providers',
40
+ };
41
+ }
42
+ });
43
+ export const fetchDnsRecordsForDomainAction = domainsStatePart.createAction(async (statePartArg, dataArg) => {
44
+ const context = getActionContext();
45
+ const currentState = statePartArg.getState();
46
+ if (!context.identity)
47
+ return currentState;
48
+ try {
49
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'getDnsRecords');
50
+ const response = await request.fire({
51
+ identity: context.identity,
52
+ domainId: dataArg.domainId,
53
+ });
54
+ return {
55
+ ...currentState,
56
+ records: response.records,
57
+ selectedDomainId: dataArg.domainId,
58
+ error: null,
59
+ };
60
+ }
61
+ catch (error) {
62
+ return {
63
+ ...currentState,
64
+ error: error instanceof Error ? error.message : 'Failed to fetch DNS records',
65
+ };
66
+ }
67
+ });
68
+ export const createDnsProviderAction = domainsStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
69
+ const context = getActionContext();
70
+ try {
71
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'createDnsProvider');
72
+ const response = await request.fire({
73
+ identity: context.identity,
74
+ name: dataArg.name,
75
+ type: dataArg.type,
76
+ credentials: dataArg.credentials,
77
+ });
78
+ if (!response.success) {
79
+ return {
80
+ ...statePartArg.getState(),
81
+ error: response.message || 'Failed to create provider',
82
+ };
83
+ }
84
+ return await actionContext.dispatch(fetchDomainsAndProvidersAction, null);
85
+ }
86
+ catch (error) {
87
+ return {
88
+ ...statePartArg.getState(),
89
+ error: error instanceof Error ? error.message : 'Failed to create provider',
90
+ };
91
+ }
92
+ });
93
+ export const updateDnsProviderAction = domainsStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
94
+ const context = getActionContext();
95
+ try {
96
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'updateDnsProvider');
97
+ const response = await request.fire({
98
+ identity: context.identity,
99
+ id: dataArg.id,
100
+ name: dataArg.name,
101
+ credentials: dataArg.credentials,
102
+ });
103
+ if (!response.success) {
104
+ return {
105
+ ...statePartArg.getState(),
106
+ error: response.message || 'Failed to update provider',
107
+ };
108
+ }
109
+ return await actionContext.dispatch(fetchDomainsAndProvidersAction, null);
110
+ }
111
+ catch (error) {
112
+ return {
113
+ ...statePartArg.getState(),
114
+ error: error instanceof Error ? error.message : 'Failed to update provider',
115
+ };
116
+ }
117
+ });
118
+ export const deleteDnsProviderAction = domainsStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
119
+ const context = getActionContext();
120
+ try {
121
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'deleteDnsProvider');
122
+ const response = await request.fire({
123
+ identity: context.identity,
124
+ id: dataArg.id,
125
+ force: dataArg.force,
126
+ });
127
+ if (!response.success) {
128
+ return {
129
+ ...statePartArg.getState(),
130
+ error: response.message || 'Failed to delete provider',
131
+ };
132
+ }
133
+ return await actionContext.dispatch(fetchDomainsAndProvidersAction, null);
134
+ }
135
+ catch (error) {
136
+ return {
137
+ ...statePartArg.getState(),
138
+ error: error instanceof Error ? error.message : 'Failed to delete provider',
139
+ };
140
+ }
141
+ });
142
+ export const testDnsProviderAction = domainsStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
143
+ const context = getActionContext();
144
+ try {
145
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'testDnsProvider');
146
+ await request.fire({ identity: context.identity, id: dataArg.id });
147
+ return await actionContext.dispatch(fetchDomainsAndProvidersAction, null);
148
+ }
149
+ catch (error) {
150
+ return {
151
+ ...statePartArg.getState(),
152
+ error: error instanceof Error ? error.message : 'Failed to test provider',
153
+ };
154
+ }
155
+ });
156
+ /** One-shot fetch for the import-domain modal. Does NOT modify state. */
157
+ export async function fetchProviderDomains(providerId) {
158
+ const context = getActionContext();
159
+ if (!context.identity)
160
+ return { success: false, message: 'Not authenticated' };
161
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'listProviderDomains');
162
+ return await request.fire({ identity: context.identity, providerId });
163
+ }
164
+ export const createDcrouterDomainAction = domainsStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
165
+ const context = getActionContext();
166
+ try {
167
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'createDomain');
168
+ const response = await request.fire({
169
+ identity: context.identity,
170
+ name: dataArg.name,
171
+ description: dataArg.description,
172
+ });
173
+ if (!response.success) {
174
+ return { ...statePartArg.getState(), error: response.message || 'Failed to create domain' };
175
+ }
176
+ return await actionContext.dispatch(fetchDomainsAndProvidersAction, null);
177
+ }
178
+ catch (error) {
179
+ return {
180
+ ...statePartArg.getState(),
181
+ error: error instanceof Error ? error.message : 'Failed to create domain',
182
+ };
183
+ }
184
+ });
185
+ export const importDomainsFromProviderAction = domainsStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
186
+ const context = getActionContext();
187
+ try {
188
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'importDomain');
189
+ const response = await request.fire({
190
+ identity: context.identity,
191
+ providerId: dataArg.providerId,
192
+ domainNames: dataArg.domainNames,
193
+ });
194
+ if (!response.success) {
195
+ return { ...statePartArg.getState(), error: response.message || 'Failed to import domains' };
196
+ }
197
+ return await actionContext.dispatch(fetchDomainsAndProvidersAction, null);
198
+ }
199
+ catch (error) {
200
+ return {
201
+ ...statePartArg.getState(),
202
+ error: error instanceof Error ? error.message : 'Failed to import domains',
203
+ };
204
+ }
205
+ });
206
+ export const deleteDomainAction = domainsStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
207
+ const context = getActionContext();
208
+ try {
209
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'deleteDomain');
210
+ const response = await request.fire({ identity: context.identity, id: dataArg.id });
211
+ if (!response.success) {
212
+ return { ...statePartArg.getState(), error: response.message || 'Failed to delete domain' };
213
+ }
214
+ return await actionContext.dispatch(fetchDomainsAndProvidersAction, null);
215
+ }
216
+ catch (error) {
217
+ return {
218
+ ...statePartArg.getState(),
219
+ error: error instanceof Error ? error.message : 'Failed to delete domain',
220
+ };
221
+ }
222
+ });
223
+ export const syncDomainAction = domainsStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
224
+ const context = getActionContext();
225
+ try {
226
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'syncDomain');
227
+ const response = await request.fire({ identity: context.identity, id: dataArg.id });
228
+ if (!response.success) {
229
+ return { ...statePartArg.getState(), error: response.message || 'Failed to sync domain' };
230
+ }
231
+ return await actionContext.dispatch(fetchDomainsAndProvidersAction, null);
232
+ }
233
+ catch (error) {
234
+ return {
235
+ ...statePartArg.getState(),
236
+ error: error instanceof Error ? error.message : 'Failed to sync domain',
237
+ };
238
+ }
239
+ });
240
+ export const migrateDomainAction = domainsStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
241
+ const context = getActionContext();
242
+ try {
243
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'migrateDomain');
244
+ const response = await request.fire({ identity: context.identity, ...dataArg });
245
+ if (!response.success) {
246
+ return { ...statePartArg.getState(), error: response.message || 'Migration failed' };
247
+ }
248
+ return await actionContext.dispatch(fetchDomainsAndProvidersAction, null);
249
+ }
250
+ catch (error) {
251
+ return {
252
+ ...statePartArg.getState(),
253
+ error: error instanceof Error ? error.message : 'Migration failed',
254
+ };
255
+ }
256
+ });
257
+ export const createDnsRecordAction = domainsStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
258
+ const context = getActionContext();
259
+ try {
260
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'createDnsRecord');
261
+ const response = await request.fire({
262
+ identity: context.identity,
263
+ domainId: dataArg.domainId,
264
+ name: dataArg.name,
265
+ type: dataArg.type,
266
+ value: dataArg.value,
267
+ ttl: dataArg.ttl,
268
+ proxied: dataArg.proxied,
269
+ });
270
+ if (!response.success) {
271
+ return { ...statePartArg.getState(), error: response.message || 'Failed to create record' };
272
+ }
273
+ return await actionContext.dispatch(fetchDnsRecordsForDomainAction, { domainId: dataArg.domainId });
274
+ }
275
+ catch (error) {
276
+ return {
277
+ ...statePartArg.getState(),
278
+ error: error instanceof Error ? error.message : 'Failed to create record',
279
+ };
280
+ }
281
+ });
282
+ export const updateDnsRecordAction = domainsStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
283
+ const context = getActionContext();
284
+ try {
285
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'updateDnsRecord');
286
+ const response = await request.fire({
287
+ identity: context.identity,
288
+ id: dataArg.id,
289
+ name: dataArg.name,
290
+ value: dataArg.value,
291
+ ttl: dataArg.ttl,
292
+ proxied: dataArg.proxied,
293
+ });
294
+ if (!response.success) {
295
+ return { ...statePartArg.getState(), error: response.message || 'Failed to update record' };
296
+ }
297
+ return await actionContext.dispatch(fetchDnsRecordsForDomainAction, { domainId: dataArg.domainId });
298
+ }
299
+ catch (error) {
300
+ return {
301
+ ...statePartArg.getState(),
302
+ error: error instanceof Error ? error.message : 'Failed to update record',
303
+ };
304
+ }
305
+ });
306
+ export const deleteDnsRecordAction = domainsStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
307
+ const context = getActionContext();
308
+ try {
309
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'deleteDnsRecord');
310
+ const response = await request.fire({ identity: context.identity, id: dataArg.id });
311
+ if (!response.success) {
312
+ return { ...statePartArg.getState(), error: response.message || 'Failed to delete record' };
313
+ }
314
+ return await actionContext.dispatch(fetchDnsRecordsForDomainAction, { domainId: dataArg.domainId });
315
+ }
316
+ catch (error) {
317
+ return {
318
+ ...statePartArg.getState(),
319
+ error: error instanceof Error ? error.message : 'Failed to delete record',
320
+ };
321
+ }
322
+ });
323
+ // ============================================================================
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWlucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzX3dlYi9hcHBzdGF0ZS9kb21haW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxVQUFVLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFpQjlDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sUUFBUSxDQUFDLFlBQVksQ0FDekQsU0FBUyxFQUNUO0lBQ0UsU0FBUyxFQUFFLEVBQUU7SUFDYixPQUFPLEVBQUUsRUFBRTtJQUNYLE9BQU8sRUFBRSxFQUFFO0lBQ1gsZ0JBQWdCLEVBQUUsSUFBSTtJQUN0QixTQUFTLEVBQUUsS0FBSztJQUNoQixLQUFLLEVBQUUsSUFBSTtJQUNYLFdBQVcsRUFBRSxDQUFDO0NBQ2YsRUFDRCxNQUFNLENBQ1AsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FDekUsS0FBSyxFQUFFLFlBQVksRUFBMEIsRUFBRTtJQUM3QyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25DLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUcsQ0FBQztJQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVE7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUUzQyxJQUFJLENBQUM7UUFDSCxNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FFN0UsZUFBZSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFD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
@@ -0,0 +1,25 @@
1
+ import * as plugins from '../plugins.js';
2
+ import * as interfaces from '../../dist_ts_interfaces/index.js';
3
+ export interface IEmailDomainsState {
4
+ domains: interfaces.data.IEmailDomain[];
5
+ settings: interfaces.data.IEmailServerSettings | null;
6
+ isLoading: boolean;
7
+ lastUpdated: number;
8
+ }
9
+ export declare const emailDomainsStatePart: plugins.deesElement.domtools.plugins.smartstate.StatePart<string, IEmailDomainsState>;
10
+ export declare const fetchEmailDomainsAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, unknown>;
11
+ export declare const createEmailDomainAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, {
12
+ linkedDomainId: string;
13
+ subdomain?: string;
14
+ dkimSelector?: string;
15
+ dkimKeySize?: number;
16
+ rotateKeys?: boolean;
17
+ rotationIntervalDays?: number;
18
+ }>;
19
+ export declare const updateEmailServerSettingsAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, interfaces.data.TEmailServerSettingsUpdate>;
20
+ export declare const deleteEmailDomainAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, string>;
21
+ export declare const validateEmailDomainAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, string>;
22
+ export declare const provisionEmailDomainDnsAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, string>;
23
+ export declare function fetchEmailDomainDnsRecords(id: string): Promise<{
24
+ records: interfaces.data.IEmailDnsRecord[];
25
+ }>;