@serve.zone/dcrouter 15.0.2 → 15.0.3

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 (70) 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_web/00_commitinfo_data.js +1 -1
  5. package/dist_ts_web/appstate/acme.d.ts +17 -0
  6. package/dist_ts_web/appstate/acme.js +64 -0
  7. package/dist_ts_web/appstate/certificates.d.ts +37 -0
  8. package/dist_ts_web/appstate/certificates.js +107 -0
  9. package/dist_ts_web/appstate/config.d.ts +9 -0
  10. package/dist_ts_web/appstate/config.js +35 -0
  11. package/dist_ts_web/appstate/domains.d.ts +80 -0
  12. package/dist_ts_web/appstate/domains.js +324 -0
  13. package/dist_ts_web/appstate/email-domains.d.ts +25 -0
  14. package/dist_ts_web/appstate/email-domains.js +104 -0
  15. package/dist_ts_web/appstate/email-ops.d.ts +10 -0
  16. package/dist_ts_web/appstate/email-ops.js +40 -0
  17. package/dist_ts_web/appstate/login.d.ts +30 -0
  18. package/dist_ts_web/appstate/login.js +83 -0
  19. package/dist_ts_web/appstate/logs.d.ts +16 -0
  20. package/dist_ts_web/appstate/logs.js +27 -0
  21. package/dist_ts_web/appstate/network.d.ts +50 -0
  22. package/dist_ts_web/appstate/network.js +122 -0
  23. package/dist_ts_web/appstate/profiles-targets.d.ts +45 -0
  24. package/dist_ts_web/appstate/profiles-targets.js +173 -0
  25. package/dist_ts_web/appstate/remoteingress.d.ts +47 -0
  26. package/dist_ts_web/appstate/remoteingress.js +204 -0
  27. package/dist_ts_web/appstate/routes.d.ts +76 -0
  28. package/dist_ts_web/appstate/routes.js +316 -0
  29. package/dist_ts_web/appstate/runtime.d.ts +1 -0
  30. package/dist_ts_web/appstate/runtime.js +276 -0
  31. package/dist_ts_web/appstate/security.d.ts +29 -0
  32. package/dist_ts_web/appstate/security.js +167 -0
  33. package/dist_ts_web/appstate/shared.d.ts +3 -0
  34. package/dist_ts_web/appstate/shared.js +13 -0
  35. package/dist_ts_web/appstate/stats.d.ts +15 -0
  36. package/dist_ts_web/appstate/stats.js +59 -0
  37. package/dist_ts_web/appstate/target-profiles.d.ts +37 -0
  38. package/dist_ts_web/appstate/target-profiles.js +118 -0
  39. package/dist_ts_web/appstate/ui.d.ts +11 -0
  40. package/dist_ts_web/appstate/ui.js +55 -0
  41. package/dist_ts_web/appstate/users.d.ts +27 -0
  42. package/dist_ts_web/appstate/users.js +85 -0
  43. package/dist_ts_web/appstate/vpn.d.ts +44 -0
  44. package/dist_ts_web/appstate/vpn.js +148 -0
  45. package/dist_ts_web/appstate.d.ts +20 -568
  46. package/dist_ts_web/appstate.js +24 -2418
  47. package/package.json +1 -1
  48. package/ts/00_commitinfo_data.ts +1 -1
  49. package/ts_web/00_commitinfo_data.ts +1 -1
  50. package/ts_web/appstate/acme.ts +93 -0
  51. package/ts_web/appstate/certificates.ts +159 -0
  52. package/ts_web/appstate/config.ts +49 -0
  53. package/ts_web/appstate/domains.ts +429 -0
  54. package/ts_web/appstate/email-domains.ts +155 -0
  55. package/ts_web/appstate/email-ops.ts +57 -0
  56. package/ts_web/appstate/login.ts +128 -0
  57. package/ts_web/appstate/logs.ts +50 -0
  58. package/ts_web/appstate/network.ts +161 -0
  59. package/ts_web/appstate/profiles-targets.ts +240 -0
  60. package/ts_web/appstate/remoteingress.ts +300 -0
  61. package/ts_web/appstate/routes.ts +447 -0
  62. package/ts_web/appstate/runtime.ts +308 -0
  63. package/ts_web/appstate/security.ts +229 -0
  64. package/ts_web/appstate/shared.ts +15 -0
  65. package/ts_web/appstate/stats.ts +79 -0
  66. package/ts_web/appstate/target-profiles.ts +164 -0
  67. package/ts_web/appstate/ui.ts +75 -0
  68. package/ts_web/appstate/users.ts +133 -0
  69. package/ts_web/appstate/vpn.ts +234 -0
  70. package/ts_web/appstate.ts +24 -3403
@@ -0,0 +1,204 @@
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 remoteIngressStatePart = await appState.getStatePart('remoteIngress', {
6
+ edges: [],
7
+ statuses: [],
8
+ hubSettings: null,
9
+ selectedEdgeId: null,
10
+ newEdgeId: null,
11
+ isLoading: false,
12
+ error: null,
13
+ lastUpdated: 0,
14
+ }, 'soft');
15
+ // Remote Ingress Standalone Functions
16
+ // ============================================================================
17
+ export async function fetchConnectionToken(edgeId) {
18
+ const context = getActionContext();
19
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'getRemoteIngressConnectionToken');
20
+ return request.fire({ identity: context.identity, edgeId });
21
+ }
22
+ // ============================================================================
23
+ // Remote Ingress Actions
24
+ // ============================================================================
25
+ export const fetchRemoteIngressAction = remoteIngressStatePart.createAction(async (statePartArg) => {
26
+ const context = getActionContext();
27
+ const currentState = statePartArg.getState();
28
+ if (!context.identity)
29
+ return currentState;
30
+ try {
31
+ const edgesRequest = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'getRemoteIngresses');
32
+ const statusRequest = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'getRemoteIngressStatus');
33
+ const hubSettingsRequest = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'getRemoteIngressHubSettings');
34
+ const [edgesResponse, statusResponse, hubSettingsResponse] = await Promise.all([
35
+ edgesRequest.fire({ identity: context.identity }),
36
+ statusRequest.fire({ identity: context.identity }),
37
+ hubSettingsRequest.fire({ identity: context.identity }),
38
+ ]);
39
+ return {
40
+ ...currentState,
41
+ edges: edgesResponse.edges,
42
+ statuses: statusResponse.statuses,
43
+ hubSettings: hubSettingsResponse.settings,
44
+ isLoading: false,
45
+ error: null,
46
+ lastUpdated: Date.now(),
47
+ };
48
+ }
49
+ catch (error) {
50
+ return {
51
+ ...currentState,
52
+ isLoading: false,
53
+ error: error instanceof Error ? error.message : 'Failed to fetch remote ingress data',
54
+ };
55
+ }
56
+ });
57
+ export const createRemoteIngressAction = remoteIngressStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
58
+ const context = getActionContext();
59
+ const currentState = statePartArg.getState();
60
+ try {
61
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'createRemoteIngress');
62
+ const response = await request.fire({
63
+ identity: context.identity,
64
+ name: dataArg.name,
65
+ listenPorts: dataArg.listenPorts,
66
+ autoDerivePorts: dataArg.autoDerivePorts,
67
+ performance: dataArg.performance,
68
+ tags: dataArg.tags,
69
+ });
70
+ if (response.success) {
71
+ // Refresh the list
72
+ await actionContext.dispatch(fetchRemoteIngressAction, null);
73
+ return {
74
+ ...statePartArg.getState(),
75
+ newEdgeId: response.edge.id,
76
+ };
77
+ }
78
+ return currentState;
79
+ }
80
+ catch (error) {
81
+ return {
82
+ ...currentState,
83
+ error: error instanceof Error ? error.message : 'Failed to create edge',
84
+ };
85
+ }
86
+ });
87
+ export const deleteRemoteIngressAction = remoteIngressStatePart.createAction(async (statePartArg, edgeId, actionContext) => {
88
+ const context = getActionContext();
89
+ const currentState = statePartArg.getState();
90
+ try {
91
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'deleteRemoteIngress');
92
+ await request.fire({
93
+ identity: context.identity,
94
+ id: edgeId,
95
+ });
96
+ return await actionContext.dispatch(fetchRemoteIngressAction, null);
97
+ }
98
+ catch (error) {
99
+ return {
100
+ ...currentState,
101
+ error: error instanceof Error ? error.message : 'Failed to delete edge',
102
+ };
103
+ }
104
+ });
105
+ export const updateRemoteIngressAction = remoteIngressStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
106
+ const context = getActionContext();
107
+ const currentState = statePartArg.getState();
108
+ try {
109
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'updateRemoteIngress');
110
+ await request.fire({
111
+ identity: context.identity,
112
+ id: dataArg.id,
113
+ name: dataArg.name,
114
+ listenPorts: dataArg.listenPorts,
115
+ autoDerivePorts: dataArg.autoDerivePorts,
116
+ performance: dataArg.performance,
117
+ tags: dataArg.tags,
118
+ });
119
+ return await actionContext.dispatch(fetchRemoteIngressAction, null);
120
+ }
121
+ catch (error) {
122
+ return {
123
+ ...currentState,
124
+ error: error instanceof Error ? error.message : 'Failed to update edge',
125
+ };
126
+ }
127
+ });
128
+ export const updateRemoteIngressHubSettingsAction = remoteIngressStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
129
+ const context = getActionContext();
130
+ const currentState = statePartArg.getState();
131
+ try {
132
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'updateRemoteIngressHubSettings');
133
+ const response = await request.fire({
134
+ identity: context.identity,
135
+ enabled: dataArg.enabled,
136
+ tunnelPort: dataArg.tunnelPort,
137
+ hubDomain: dataArg.hubDomain,
138
+ performance: dataArg.performance,
139
+ });
140
+ if (!response.success) {
141
+ return {
142
+ ...currentState,
143
+ error: response.message || 'Failed to update RemoteIngress hub settings',
144
+ };
145
+ }
146
+ return await actionContext.dispatch(fetchRemoteIngressAction, null);
147
+ }
148
+ catch (error) {
149
+ return {
150
+ ...currentState,
151
+ error: error instanceof Error ? error.message : 'Failed to update RemoteIngress hub settings',
152
+ };
153
+ }
154
+ });
155
+ export const regenerateRemoteIngressSecretAction = remoteIngressStatePart.createAction(async (statePartArg, edgeId) => {
156
+ const context = getActionContext();
157
+ const currentState = statePartArg.getState();
158
+ try {
159
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'regenerateRemoteIngressSecret');
160
+ const response = await request.fire({
161
+ identity: context.identity,
162
+ id: edgeId,
163
+ });
164
+ if (response.success) {
165
+ return {
166
+ ...currentState,
167
+ newEdgeId: edgeId,
168
+ };
169
+ }
170
+ return currentState;
171
+ }
172
+ catch (error) {
173
+ return {
174
+ ...currentState,
175
+ error: error instanceof Error ? error.message : 'Failed to regenerate secret',
176
+ };
177
+ }
178
+ });
179
+ export const clearNewEdgeIdAction = remoteIngressStatePart.createAction(async (statePartArg) => {
180
+ return {
181
+ ...statePartArg.getState(),
182
+ newEdgeId: null,
183
+ };
184
+ });
185
+ export const toggleRemoteIngressAction = remoteIngressStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
186
+ const context = getActionContext();
187
+ const currentState = statePartArg.getState();
188
+ try {
189
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'updateRemoteIngress');
190
+ await request.fire({
191
+ identity: context.identity,
192
+ id: dataArg.id,
193
+ enabled: dataArg.enabled,
194
+ });
195
+ return await actionContext.dispatch(fetchRemoteIngressAction, null);
196
+ }
197
+ catch (error) {
198
+ return {
199
+ ...currentState,
200
+ error: error instanceof Error ? error.message : 'Failed to toggle edge',
201
+ };
202
+ }
203
+ });
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlaW5ncmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzX3dlYi9hcHBzdGF0ZS9yZW1vdGVpbmdyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxVQUFVLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFpQjlDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLE1BQU0sUUFBUSxDQUFDLFlBQVksQ0FDL0QsZUFBZSxFQUNmO0lBQ0UsS0FBSyxFQUFFLEVBQUU7SUFDVCxRQUFRLEVBQUUsRUFBRTtJQUNaLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLFNBQVMsRUFBRSxJQUFJO0lBQ2YsU0FBUyxFQUFFLEtBQUs7SUFDaEIsS0FBSyxFQUFFLElBQUk7SUFDWCxXQUFXLEVBQUUsQ0FBQztDQUNmLEVBQ0QsTUFBTSxDQUNQLENBQUM7QUFFRixzQ0FBc0M7QUFDdEMsK0VBQStFO0FBRS9FLE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQUMsTUFBYztJQUN2RCxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FFcEUsZUFBZSxFQUFFLGlDQUFpQyxDQUFDLENBQUM7SUFDdEQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsK0VBQStFO0FBQy9FLHlCQUF5QjtBQUN6QiwrRUFBK0U7QUFFL0Us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
@@ -0,0 +1,76 @@
1
+ import * as plugins from '../plugins.js';
2
+ import * as interfaces from '../../dist_ts_interfaces/index.js';
3
+ export interface IRouteManagementState {
4
+ mergedRoutes: interfaces.data.IMergedRoute[];
5
+ warnings: interfaces.data.IRouteWarning[];
6
+ httpRedirects: interfaces.data.IHttpRedirectInfo[];
7
+ apiTokens: interfaces.data.IApiTokenInfo[];
8
+ gatewayClients: interfaces.data.IGatewayClient[];
9
+ isLoading: boolean;
10
+ error: string | null;
11
+ lastUpdated: number;
12
+ }
13
+ export declare const routeManagementStatePart: plugins.deesElement.domtools.plugins.smartstate.StatePart<string, IRouteManagementState>;
14
+ export declare const fetchMergedRoutesAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, unknown>;
15
+ export declare const fetchHttpRedirectsAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, unknown>;
16
+ export declare const createRouteAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, {
17
+ route: any;
18
+ enabled?: boolean;
19
+ metadata?: any;
20
+ }>;
21
+ export declare const updateRouteAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, {
22
+ id: string;
23
+ route?: any;
24
+ enabled?: boolean;
25
+ metadata?: any;
26
+ }>;
27
+ export declare const deleteRouteAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, string>;
28
+ export declare const toggleRouteAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, {
29
+ id: string;
30
+ enabled: boolean;
31
+ }>;
32
+ export declare const fetchApiTokensAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, unknown>;
33
+ export declare const fetchGatewayClientsAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, unknown>;
34
+ export declare function createGatewayClient(data: {
35
+ id?: string;
36
+ type: interfaces.data.IGatewayClient['type'];
37
+ name: string;
38
+ description?: string;
39
+ hostnamePatterns?: string[];
40
+ allowedRouteTargets?: interfaces.data.IGatewayClient['allowedRouteTargets'];
41
+ }): Promise<{
42
+ success: boolean;
43
+ gatewayClient?: interfaces.data.IGatewayClient;
44
+ message?: string;
45
+ }>;
46
+ export declare const updateGatewayClientAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, {
47
+ id: string;
48
+ name?: string;
49
+ description?: string;
50
+ hostnamePatterns?: string[];
51
+ allowedRouteTargets?: interfaces.data.IGatewayClient["allowedRouteTargets"];
52
+ enabled?: boolean;
53
+ }>;
54
+ export declare const deleteGatewayClientAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, string>;
55
+ export declare function createGatewayClientToken(gatewayClientId: string, name?: string, expiresInDays?: number | null): Promise<{
56
+ success: boolean;
57
+ tokenId?: string;
58
+ tokenValue?: string;
59
+ message?: string;
60
+ }>;
61
+ export declare function createApiToken(name: string, scopes: interfaces.data.TApiTokenScope[], expiresInDays?: number | null, policy?: any): Promise<{
62
+ success: boolean;
63
+ tokenId?: string;
64
+ tokenValue?: string;
65
+ message?: string;
66
+ }>;
67
+ export declare function rollApiToken(id: string): Promise<{
68
+ success: boolean;
69
+ tokenValue?: string;
70
+ message?: string;
71
+ }>;
72
+ export declare const revokeApiTokenAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, string>;
73
+ export declare const toggleApiTokenAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, {
74
+ id: string;
75
+ enabled: boolean;
76
+ }>;
@@ -0,0 +1,316 @@
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 routeManagementStatePart = await appState.getStatePart('routeManagement', {
6
+ mergedRoutes: [],
7
+ warnings: [],
8
+ httpRedirects: [],
9
+ apiTokens: [],
10
+ gatewayClients: [],
11
+ isLoading: false,
12
+ error: null,
13
+ lastUpdated: 0,
14
+ }, 'soft');
15
+ // Route Management Actions
16
+ // ============================================================================
17
+ export const fetchMergedRoutesAction = routeManagementStatePart.createAction(async (statePartArg) => {
18
+ const context = getActionContext();
19
+ const currentState = statePartArg.getState();
20
+ if (!context.identity)
21
+ return currentState;
22
+ try {
23
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'getMergedRoutes');
24
+ const response = await request.fire({
25
+ identity: context.identity,
26
+ });
27
+ return {
28
+ ...currentState,
29
+ mergedRoutes: response.routes,
30
+ warnings: response.warnings,
31
+ isLoading: false,
32
+ error: null,
33
+ lastUpdated: Date.now(),
34
+ };
35
+ }
36
+ catch (error) {
37
+ return {
38
+ ...currentState,
39
+ isLoading: false,
40
+ error: error instanceof Error ? error.message : 'Failed to fetch routes',
41
+ };
42
+ }
43
+ });
44
+ export const fetchHttpRedirectsAction = routeManagementStatePart.createAction(async (statePartArg) => {
45
+ const context = getActionContext();
46
+ const currentState = statePartArg.getState();
47
+ if (!context.identity)
48
+ return currentState;
49
+ try {
50
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'getHttpRedirects');
51
+ const response = await request.fire({
52
+ identity: context.identity,
53
+ });
54
+ return {
55
+ ...currentState,
56
+ httpRedirects: response.redirects,
57
+ isLoading: false,
58
+ error: null,
59
+ lastUpdated: Date.now(),
60
+ };
61
+ }
62
+ catch (error) {
63
+ return {
64
+ ...currentState,
65
+ isLoading: false,
66
+ error: error instanceof Error ? error.message : 'Failed to fetch HTTP redirects',
67
+ };
68
+ }
69
+ });
70
+ export const createRouteAction = routeManagementStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
71
+ const context = getActionContext();
72
+ const currentState = statePartArg.getState();
73
+ try {
74
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'createRoute');
75
+ await request.fire({
76
+ identity: context.identity,
77
+ route: dataArg.route,
78
+ enabled: dataArg.enabled,
79
+ metadata: dataArg.metadata,
80
+ });
81
+ return await actionContext.dispatch(fetchMergedRoutesAction, null);
82
+ }
83
+ catch (error) {
84
+ return {
85
+ ...currentState,
86
+ error: error instanceof Error ? error.message : 'Failed to create route',
87
+ };
88
+ }
89
+ });
90
+ export const updateRouteAction = routeManagementStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
91
+ const context = getActionContext();
92
+ const currentState = statePartArg.getState();
93
+ try {
94
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'updateRoute');
95
+ const response = await request.fire({
96
+ identity: context.identity,
97
+ id: dataArg.id,
98
+ route: dataArg.route,
99
+ enabled: dataArg.enabled,
100
+ metadata: dataArg.metadata,
101
+ });
102
+ if (!response.success) {
103
+ throw new Error(response.message || 'Failed to update route');
104
+ }
105
+ return await actionContext.dispatch(fetchMergedRoutesAction, null);
106
+ }
107
+ catch (error) {
108
+ return {
109
+ ...currentState,
110
+ error: error instanceof Error ? error.message : 'Failed to update route',
111
+ };
112
+ }
113
+ });
114
+ export const deleteRouteAction = routeManagementStatePart.createAction(async (statePartArg, routeId, actionContext) => {
115
+ const context = getActionContext();
116
+ const currentState = statePartArg.getState();
117
+ try {
118
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'deleteRoute');
119
+ const response = await request.fire({
120
+ identity: context.identity,
121
+ id: routeId,
122
+ });
123
+ if (!response.success) {
124
+ throw new Error(response.message || 'Failed to delete route');
125
+ }
126
+ return await actionContext.dispatch(fetchMergedRoutesAction, null);
127
+ }
128
+ catch (error) {
129
+ return {
130
+ ...currentState,
131
+ error: error instanceof Error ? error.message : 'Failed to delete route',
132
+ };
133
+ }
134
+ });
135
+ export const toggleRouteAction = routeManagementStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
136
+ const context = getActionContext();
137
+ const currentState = statePartArg.getState();
138
+ try {
139
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'toggleRoute');
140
+ const response = await request.fire({
141
+ identity: context.identity,
142
+ id: dataArg.id,
143
+ enabled: dataArg.enabled,
144
+ });
145
+ if (!response.success) {
146
+ throw new Error(response.message || 'Failed to toggle route');
147
+ }
148
+ return await actionContext.dispatch(fetchMergedRoutesAction, null);
149
+ }
150
+ catch (error) {
151
+ return {
152
+ ...currentState,
153
+ error: error instanceof Error ? error.message : 'Failed to toggle route',
154
+ };
155
+ }
156
+ });
157
+ // ============================================================================
158
+ // API Token Actions
159
+ // ============================================================================
160
+ export const fetchApiTokensAction = routeManagementStatePart.createAction(async (statePartArg) => {
161
+ const context = getActionContext();
162
+ const currentState = statePartArg.getState();
163
+ if (!context.identity)
164
+ return currentState;
165
+ try {
166
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'listApiTokens');
167
+ const response = await request.fire({
168
+ identity: context.identity,
169
+ });
170
+ return {
171
+ ...currentState,
172
+ apiTokens: response.tokens,
173
+ };
174
+ }
175
+ catch (error) {
176
+ return {
177
+ ...currentState,
178
+ error: error instanceof Error ? error.message : 'Failed to fetch tokens',
179
+ };
180
+ }
181
+ });
182
+ export const fetchGatewayClientsAction = routeManagementStatePart.createAction(async (statePartArg) => {
183
+ const context = getActionContext();
184
+ const currentState = statePartArg.getState();
185
+ if (!context.identity)
186
+ return currentState;
187
+ try {
188
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'listGatewayClients');
189
+ const response = await request.fire({ identity: context.identity });
190
+ return {
191
+ ...currentState,
192
+ gatewayClients: response.gatewayClients,
193
+ error: null,
194
+ lastUpdated: Date.now(),
195
+ };
196
+ }
197
+ catch (error) {
198
+ return {
199
+ ...currentState,
200
+ error: error instanceof Error ? error.message : 'Failed to fetch gateway clients',
201
+ };
202
+ }
203
+ });
204
+ export async function createGatewayClient(data) {
205
+ const context = getActionContext();
206
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'createGatewayClient');
207
+ return request.fire({
208
+ identity: context.identity,
209
+ capabilities: {
210
+ readDomains: true,
211
+ readDnsRecords: true,
212
+ syncRoutes: true,
213
+ syncDnsRecords: false,
214
+ requestCertificates: false,
215
+ },
216
+ ...data,
217
+ });
218
+ }
219
+ export const updateGatewayClientAction = routeManagementStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
220
+ const context = getActionContext();
221
+ const currentState = statePartArg.getState();
222
+ try {
223
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'updateGatewayClient');
224
+ await request.fire({ identity: context.identity, ...dataArg });
225
+ return await actionContext.dispatch(fetchGatewayClientsAction, null);
226
+ }
227
+ catch (error) {
228
+ return {
229
+ ...currentState,
230
+ error: error instanceof Error ? error.message : 'Failed to update gateway client',
231
+ };
232
+ }
233
+ });
234
+ export const deleteGatewayClientAction = routeManagementStatePart.createAction(async (statePartArg, gatewayClientId, actionContext) => {
235
+ const context = getActionContext();
236
+ const currentState = statePartArg.getState();
237
+ try {
238
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'deleteGatewayClient');
239
+ await request.fire({ identity: context.identity, id: gatewayClientId });
240
+ return await actionContext.dispatch(fetchGatewayClientsAction, null);
241
+ }
242
+ catch (error) {
243
+ return {
244
+ ...currentState,
245
+ error: error instanceof Error ? error.message : 'Failed to delete gateway client',
246
+ };
247
+ }
248
+ });
249
+ export async function createGatewayClientToken(gatewayClientId, name, expiresInDays) {
250
+ const context = getActionContext();
251
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'createGatewayClientToken');
252
+ return request.fire({
253
+ identity: context.identity,
254
+ gatewayClientId,
255
+ name,
256
+ expiresInDays,
257
+ });
258
+ }
259
+ // Users
260
+ export async function createApiToken(name, scopes, expiresInDays, policy) {
261
+ const context = getActionContext();
262
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'createApiToken');
263
+ return request.fire({
264
+ identity: context.identity,
265
+ name,
266
+ scopes,
267
+ policy,
268
+ expiresInDays,
269
+ });
270
+ }
271
+ export async function rollApiToken(id) {
272
+ const context = getActionContext();
273
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'rollApiToken');
274
+ return request.fire({
275
+ identity: context.identity,
276
+ id,
277
+ });
278
+ }
279
+ export const revokeApiTokenAction = routeManagementStatePart.createAction(async (statePartArg, tokenId, actionContext) => {
280
+ const context = getActionContext();
281
+ const currentState = statePartArg.getState();
282
+ try {
283
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'revokeApiToken');
284
+ await request.fire({
285
+ identity: context.identity,
286
+ id: tokenId,
287
+ });
288
+ return await actionContext.dispatch(fetchApiTokensAction, null);
289
+ }
290
+ catch (error) {
291
+ return {
292
+ ...currentState,
293
+ error: error instanceof Error ? error.message : 'Failed to revoke token',
294
+ };
295
+ }
296
+ });
297
+ export const toggleApiTokenAction = routeManagementStatePart.createAction(async (statePartArg, dataArg, actionContext) => {
298
+ const context = getActionContext();
299
+ const currentState = statePartArg.getState();
300
+ try {
301
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'toggleApiToken');
302
+ await request.fire({
303
+ identity: context.identity,
304
+ id: dataArg.id,
305
+ enabled: dataArg.enabled,
306
+ });
307
+ return await actionContext.dispatch(fetchApiTokensAction, null);
308
+ }
309
+ catch (error) {
310
+ return {
311
+ ...currentState,
312
+ error: error instanceof Error ? error.message : 'Failed to toggle token',
313
+ };
314
+ }
315
+ });
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfd2ViL2FwcHN0YXRlL3JvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssVUFBVSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBaUI5QyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLFFBQVEsQ0FBQyxZQUFZLENBQ2pFLGlCQUFpQixFQUNqQjtJQUNFLFlBQVksRUFBRSxFQUFFO0lBQ2hCLFFBQVEsRUFBRSxFQUFFO0lBQ1osYUFBYSxFQUFFLEVBQUU7SUFDakIsU0FBUyxFQUFFLEVBQUU7SUFDYixjQUFjLEVBQUUsRUFBRTtJQUNsQixTQUFTLEVBQUUsS0FBSztJQUNoQixLQUFLLEVBQUUsSUFBSTtJQUNYLFdBQVcsRUFBRSxDQUFDO0NBQ2YsRUFDRCxNQUFNLENBQ1AsQ0FBQztBQUVGLDJCQUEyQjtBQUMzQiwrRUFBK0U7QUFFL0UsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsd0JBQXdCLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQWtDLEVBQUU7SUFDbEksTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUNuQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFHLENBQUM7SUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFFM0MsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUVwRSxlQUFlLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUV0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDbEMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1NBQzNCLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxHQUFHLFlBQVk7WUFDZixZQUFZLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDN0IsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO1lBQzNCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLEtBQUssRUFBRSxJQUFJO1lBQ1gsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7U0FDekUsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFrQyxFQUFFO0lBQ25JLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDbkMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRyxDQUFDO0lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtRQUFFLE9BQU8sWUFBWSxDQUFDO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FFcEUsZUFBZSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2xDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtTQUMzQixDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0wsR0FBRyxZQUFZO1lBQ2YsYUFBYSxFQUFFLFFBQVEsQ0FBQyxTQUFTO1lBQ2pDLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLEtBQUssRUFBRSxJQUFJO1lBQ1gsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0M7U0FDakYsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDLFlBQVksQ0FJbkUsS0FBSyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFrQyxFQUFFO0lBQ2hGLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDbkMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRyxDQUFDO0lBRTlDLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FFcEUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRWxDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztZQUNqQixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVM7WUFDM0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ3BCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7U0FDM0IsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLGFBQWMsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUFDLE9BQU8sS0FBYyxFQUFFLENBQUM7UUFDeEIsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7U0FDekUsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDLFlBQVksQ0FLbkUsS0FBSyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFrQyxFQUFFO0lBQ2hGLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDbkMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRyxDQUFDO0lBRTlDLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FFcEUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRWxDLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztZQUNsQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVM7WUFDM0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ2QsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ3BCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7U0FDM0IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksd0JBQXdCLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsT0FBTyxNQUFNLGFBQWMsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUFDLE9BQU8sS0FBYyxFQUFFLENBQUM7UUFDeEIsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7U0FDekUsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDLFlBQVksQ0FDcEUsS0FBSyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFrQyxFQUFFO0lBQzdFLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDbkMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRyxDQUFDO0lBRTlDLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FFcEUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRWxDLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztZQUNsQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVM7WUFDM0IsRUFBRSxFQUFFLE9BQU87U0FDWixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sSUFBSSx3QkFBd0IsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxPQUFPLE1BQU0sYUFBYyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztRQUN4QixPQUFPO1lBQ0wsR0FBRyxZQUFZO1lBQ2YsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtTQUN6RSxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsd0JBQXdCLENBQUMsWUFBWSxDQUduRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQWtDLEVBQUU7SUFDaEYsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUNuQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFHLENBQUM7SUFFOUMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUVwRSxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFbEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2xDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUztZQUMzQixFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDZCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87U0FDekIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksd0JBQXdCLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsT0FBTyxNQUFNLGFBQWMsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUFDLE9BQU8sS0FBYyxFQUFFLENBQUM7UUFDeEIsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7U0FDekUsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILCtFQUErRTtBQUMvRSxvQkFBb0I7QUFDcEIsK0VBQStFO0FBRS9FLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFrQyxFQUFFO0lBQy9ILE1BQU0sT0FBTyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDbkMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRyxDQUFDO0lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtRQUFFLE9BQU8sWUFBWSxDQUFDO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FFcEUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRXBDLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztZQUNsQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7U0FDM0IsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLFNBQVMsRUFBRSxRQUFRLENBQUMsTUFBTTtTQUMzQixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPO1lBQ0wsR0FBRyxZQUFZO1lBQ2YsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtTQUN6RSxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsd0JBQXdCLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQWtDLEVBQUU7SUFDcEksTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUNuQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFHLENBQUM7SUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFFM0MsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUVwRSxlQUFlLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUN6QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEUsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLGNBQWMsRUFBRSxRQUFRLENBQUMsY0FBYztZQUN2QyxLQUFLLEVBQUUsSUFBSTtZQUNYLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU87WUFDTCxHQUFHLFlBQVk7WUFDZixLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsaUNBQWlDO1NBQ2xGLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUFDLElBT3pDO0lBQ0MsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUNuQyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBRXBFLGVBQWUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzFDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztRQUNsQixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVM7UUFDM0IsWUFBWSxFQUFFO1lBQ1osV0FBVyxFQUFFLElBQUk7WUFDakIsY0FBYyxFQUFFLElBQUk7WUFDcEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsY0FBYyxFQUFFLEtBQUs7WUFDckIsbUJBQW1CLEVBQUUsS0FBSztTQUMzQjtRQUNELEdBQUcsSUFBSTtLQUNSLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyx3QkFBd0IsQ0FBQyxZQUFZLENBTzNFLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBa0MsRUFBRTtJQUNoRixNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25DLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUcsQ0FBQztJQUM5QyxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBRXBFLGVBQWUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNoRSxPQUFPLE1BQU0sYUFBYyxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU87WUFDTCxHQUFHLFlBQVk7WUFDZixLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsaUNBQWlDO1NBQ2xGLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyx3QkFBd0IsQ0FBQyxZQUFZLENBQzVFLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBa0MsRUFBRTtJQUNyRixNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25DLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUcsQ0FBQztJQUM5QyxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBRXBFLGVBQWUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sTUFBTSxhQUFjLENBQUMsUUFBUSxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7U0FDbEYsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxLQUFLLFVBQVUsd0JBQXdCLENBQzVDLGVBQXVCLEVBQ3ZCLElBQWEsRUFDYixhQUE2QjtJQUU3QixNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FFcEUsZUFBZSxFQUFFLDBCQUEwQixDQUFDLENBQUM7SUFDL0MsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ2xCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUztRQUMzQixlQUFlO1FBQ2YsSUFBSTtRQUNKLGFBQWE7S0FDZCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsUUFBUTtBQUVSLE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUNsQyxJQUFZLEVBQ1osTUFBd0MsRUFDeEMsYUFBNkIsRUFDN0IsTUFBWTtJQUVaLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUVwRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUVyQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDbEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFTO1FBQzNCLElBQUk7UUFDSixNQUFNO1FBQ04sTUFBTTtRQUNOLGFBQWE7S0FDZCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsRUFBVTtJQUMzQyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FFcEUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBRW5DLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztRQUNsQixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVM7UUFDM0IsRUFBRTtLQUNILENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyx3QkFBd0IsQ0FBQyxZQUFZLENBQ3ZFLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBa0MsRUFBRTtJQUM3RSxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25DLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUcsQ0FBQztJQUU5QyxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBRXBFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXJDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztZQUNqQixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVM7WUFDM0IsRUFBRSxFQUFFLE9BQU87U0FDWixDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sYUFBYyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztRQUN4QixPQUFPO1lBQ0wsR0FBRyxZQUFZO1lBQ2YsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtTQUN6RSxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsd0JBQXdCLENBQUMsWUFBWSxDQUd0RSxLQUFLLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQWtDLEVBQUU7SUFDaEYsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUNuQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFHLENBQUM7SUFFOUMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUVwRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUVyQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDakIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFTO1lBQzNCLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNkLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztTQUN6QixDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sYUFBYyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztRQUN4QixPQUFPO1lBQ0wsR0FBRyxZQUFZO1lBQ2YsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtTQUN6RSxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDIn0=
@@ -0,0 +1 @@
1
+ export {};