@serve.zone/dcrouter 13.15.0 → 13.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_serve/bundle.js +510 -517
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.d.ts +3 -6
- package/dist_ts/classes.dcrouter.js +39 -53
- package/dist_ts/config/classes.reference-resolver.d.ts +8 -8
- package/dist_ts/config/classes.reference-resolver.js +6 -6
- package/dist_ts/config/classes.route-config-manager.d.ts +13 -13
- package/dist_ts/config/classes.route-config-manager.js +117 -144
- package/dist_ts/config/classes.target-profile-manager.d.ts +2 -2
- package/dist_ts/config/classes.target-profile-manager.js +7 -18
- package/dist_ts/db/documents/{classes.stored-route.doc.d.ts → classes.route.doc.d.ts} +6 -3
- package/dist_ts/db/documents/{classes.stored-route.doc.js → classes.route.doc.js} +21 -9
- package/dist_ts/db/documents/index.d.ts +1 -2
- package/dist_ts/db/documents/index.js +2 -3
- package/dist_ts/monitoring/classes.metricsmanager.js +86 -8
- package/dist_ts/opsserver/handlers/network-target.handler.js +3 -3
- package/dist_ts/opsserver/handlers/route-management.handler.js +3 -23
- package/dist_ts/opsserver/handlers/source-profile.handler.js +3 -3
- package/dist_ts_apiclient/classes.route.d.ts +2 -5
- package/dist_ts_apiclient/classes.route.js +13 -42
- package/dist_ts_interfaces/data/route-management.d.ts +8 -17
- package/dist_ts_interfaces/requests/route-management.d.ts +6 -37
- package/dist_ts_migrations/index.js +23 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/appstate.d.ts +0 -5
- package/dist_ts_web/appstate.js +1 -38
- package/dist_ts_web/elements/network/ops-view-routes.js +60 -110
- package/package.json +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +45 -55
- package/ts/config/classes.reference-resolver.ts +13 -13
- package/ts/config/classes.route-config-manager.ts +128 -146
- package/ts/config/classes.target-profile-manager.ts +7 -20
- package/ts/db/documents/{classes.stored-route.doc.ts → classes.route.doc.ts} +16 -5
- package/ts/db/documents/index.ts +1 -2
- package/ts/monitoring/classes.metricsmanager.ts +80 -7
- package/ts/opsserver/handlers/network-target.handler.ts +2 -2
- package/ts/opsserver/handlers/route-management.handler.ts +2 -34
- package/ts/opsserver/handlers/source-profile.handler.ts +2 -2
- package/ts_apiclient/classes.route.ts +12 -49
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate.ts +0 -52
- package/ts_web/elements/network/ops-view-routes.ts +65 -123
- package/dist_ts/db/documents/classes.route-override.doc.d.ts +0 -10
- package/dist_ts/db/documents/classes.route-override.doc.js +0 -91
- package/ts/db/documents/classes.route-override.doc.ts +0 -32
|
@@ -4,10 +4,9 @@ import type { DcRouterApiClient } from './classes.dcrouterapiclient.js';
|
|
|
4
4
|
export declare class Route {
|
|
5
5
|
private clientRef;
|
|
6
6
|
routeConfig: IRouteConfig;
|
|
7
|
-
|
|
7
|
+
id: string;
|
|
8
8
|
enabled: boolean;
|
|
9
|
-
|
|
10
|
-
storedRouteId?: string;
|
|
9
|
+
origin: 'config' | 'email' | 'dns' | 'api';
|
|
11
10
|
createdAt?: number;
|
|
12
11
|
updatedAt?: number;
|
|
13
12
|
get name(): string;
|
|
@@ -15,8 +14,6 @@ export declare class Route {
|
|
|
15
14
|
update(changes: Partial<IRouteConfig>): Promise<void>;
|
|
16
15
|
delete(): Promise<void>;
|
|
17
16
|
toggle(enabled: boolean): Promise<void>;
|
|
18
|
-
setOverride(enabled: boolean): Promise<void>;
|
|
19
|
-
removeOverride(): Promise<void>;
|
|
20
17
|
}
|
|
21
18
|
export declare class RouteBuilder {
|
|
22
19
|
private clientRef;
|
|
@@ -3,10 +3,9 @@ export class Route {
|
|
|
3
3
|
clientRef;
|
|
4
4
|
// Data from IMergedRoute
|
|
5
5
|
routeConfig;
|
|
6
|
-
|
|
6
|
+
id;
|
|
7
7
|
enabled;
|
|
8
|
-
|
|
9
|
-
storedRouteId;
|
|
8
|
+
origin;
|
|
10
9
|
createdAt;
|
|
11
10
|
updatedAt;
|
|
12
11
|
// Convenience accessors
|
|
@@ -16,56 +15,31 @@ export class Route {
|
|
|
16
15
|
constructor(clientRef, data) {
|
|
17
16
|
this.clientRef = clientRef;
|
|
18
17
|
this.routeConfig = data.route;
|
|
19
|
-
this.
|
|
18
|
+
this.id = data.id;
|
|
20
19
|
this.enabled = data.enabled;
|
|
21
|
-
this.
|
|
22
|
-
this.storedRouteId = data.storedRouteId;
|
|
20
|
+
this.origin = data.origin;
|
|
23
21
|
this.createdAt = data.createdAt;
|
|
24
22
|
this.updatedAt = data.updatedAt;
|
|
25
23
|
}
|
|
26
24
|
async update(changes) {
|
|
27
|
-
|
|
28
|
-
throw new Error('Cannot update a hardcoded route. Use setOverride() instead.');
|
|
29
|
-
}
|
|
30
|
-
const response = await this.clientRef.request('updateRoute', this.clientRef.buildRequestPayload({ id: this.storedRouteId, route: changes }));
|
|
25
|
+
const response = await this.clientRef.request('updateRoute', this.clientRef.buildRequestPayload({ id: this.id, route: changes }));
|
|
31
26
|
if (!response.success) {
|
|
32
27
|
throw new Error(response.message || 'Failed to update route');
|
|
33
28
|
}
|
|
34
29
|
}
|
|
35
30
|
async delete() {
|
|
36
|
-
|
|
37
|
-
throw new Error('Cannot delete a hardcoded route. Use setOverride() instead.');
|
|
38
|
-
}
|
|
39
|
-
const response = await this.clientRef.request('deleteRoute', this.clientRef.buildRequestPayload({ id: this.storedRouteId }));
|
|
31
|
+
const response = await this.clientRef.request('deleteRoute', this.clientRef.buildRequestPayload({ id: this.id }));
|
|
40
32
|
if (!response.success) {
|
|
41
33
|
throw new Error(response.message || 'Failed to delete route');
|
|
42
34
|
}
|
|
43
35
|
}
|
|
44
36
|
async toggle(enabled) {
|
|
45
|
-
|
|
46
|
-
throw new Error('Cannot toggle a hardcoded route. Use setOverride() instead.');
|
|
47
|
-
}
|
|
48
|
-
const response = await this.clientRef.request('toggleRoute', this.clientRef.buildRequestPayload({ id: this.storedRouteId, enabled }));
|
|
37
|
+
const response = await this.clientRef.request('toggleRoute', this.clientRef.buildRequestPayload({ id: this.id, enabled }));
|
|
49
38
|
if (!response.success) {
|
|
50
39
|
throw new Error(response.message || 'Failed to toggle route');
|
|
51
40
|
}
|
|
52
41
|
this.enabled = enabled;
|
|
53
42
|
}
|
|
54
|
-
async setOverride(enabled) {
|
|
55
|
-
const response = await this.clientRef.request('setRouteOverride', this.clientRef.buildRequestPayload({ routeName: this.name, enabled }));
|
|
56
|
-
if (!response.success) {
|
|
57
|
-
throw new Error(response.message || 'Failed to set route override');
|
|
58
|
-
}
|
|
59
|
-
this.overridden = true;
|
|
60
|
-
this.enabled = enabled;
|
|
61
|
-
}
|
|
62
|
-
async removeOverride() {
|
|
63
|
-
const response = await this.clientRef.request('removeRouteOverride', this.clientRef.buildRequestPayload({ routeName: this.name }));
|
|
64
|
-
if (!response.success) {
|
|
65
|
-
throw new Error(response.message || 'Failed to remove route override');
|
|
66
|
-
}
|
|
67
|
-
this.overridden = false;
|
|
68
|
-
}
|
|
69
43
|
}
|
|
70
44
|
export class RouteBuilder {
|
|
71
45
|
clientRef;
|
|
@@ -106,19 +80,17 @@ export class RouteBuilder {
|
|
|
106
80
|
throw new Error(response.message || 'Failed to create route');
|
|
107
81
|
}
|
|
108
82
|
// Return a Route instance by re-fetching the list
|
|
109
|
-
// The created route is programmatic, so we find it by storedRouteId
|
|
110
83
|
const { routes } = await new RouteManager(this.clientRef).list();
|
|
111
|
-
const created = routes.find((r) => r.
|
|
84
|
+
const created = routes.find((r) => r.id === response.routeId);
|
|
112
85
|
if (created) {
|
|
113
86
|
return created;
|
|
114
87
|
}
|
|
115
88
|
// Fallback: construct from known data
|
|
116
89
|
return new Route(this.clientRef, {
|
|
117
90
|
route: this.routeConfig,
|
|
118
|
-
|
|
91
|
+
id: response.routeId || '',
|
|
119
92
|
enabled: this.isEnabled,
|
|
120
|
-
|
|
121
|
-
storedRouteId: response.storedRouteId,
|
|
93
|
+
origin: 'api',
|
|
122
94
|
});
|
|
123
95
|
}
|
|
124
96
|
}
|
|
@@ -141,14 +113,13 @@ export class RouteManager {
|
|
|
141
113
|
}
|
|
142
114
|
return new Route(this.clientRef, {
|
|
143
115
|
route: routeConfig,
|
|
144
|
-
|
|
116
|
+
id: response.routeId || '',
|
|
145
117
|
enabled: enabled ?? true,
|
|
146
|
-
|
|
147
|
-
storedRouteId: response.storedRouteId,
|
|
118
|
+
origin: 'api',
|
|
148
119
|
});
|
|
149
120
|
}
|
|
150
121
|
build() {
|
|
151
122
|
return new RouteBuilder(this.clientRef);
|
|
152
123
|
}
|
|
153
124
|
}
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yb3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX2FwaWNsaWVudC9jbGFzc2VzLnJvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxVQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFJeEQsTUFBTSxPQUFPLEtBQUs7SUFDUixTQUFTLENBQW9CO0lBRXJDLHlCQUF5QjtJQUNsQixXQUFXLENBQWU7SUFDMUIsRUFBRSxDQUFTO0lBQ1gsT0FBTyxDQUFVO0lBQ2pCLE1BQU0sQ0FBcUM7SUFDM0MsU0FBUyxDQUFVO0lBQ25CLFNBQVMsQ0FBVTtJQUUxQix3QkFBd0I7SUFDeEIsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELFlBQVksU0FBNEIsRUFBRSxJQUFrQztRQUMxRSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUE4QjtRQUNoRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUMzQyxhQUFhLEVBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJ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
|
|
@@ -50,23 +50,22 @@ export interface IRouteMetadata {
|
|
|
50
50
|
lastResolvedAt?: number;
|
|
51
51
|
}
|
|
52
52
|
/**
|
|
53
|
-
* A
|
|
53
|
+
* A route entry returned by the route management API.
|
|
54
54
|
*/
|
|
55
55
|
export interface IMergedRoute {
|
|
56
56
|
route: IDcRouterRouteConfig;
|
|
57
|
-
|
|
57
|
+
id: string;
|
|
58
58
|
enabled: boolean;
|
|
59
|
-
|
|
60
|
-
storedRouteId?: string;
|
|
59
|
+
origin: 'config' | 'email' | 'dns' | 'api';
|
|
61
60
|
createdAt?: number;
|
|
62
61
|
updatedAt?: number;
|
|
63
62
|
metadata?: IRouteMetadata;
|
|
64
63
|
}
|
|
65
64
|
/**
|
|
66
|
-
* A warning generated during route
|
|
65
|
+
* A warning generated during route startup/apply.
|
|
67
66
|
*/
|
|
68
67
|
export interface IRouteWarning {
|
|
69
|
-
type: 'disabled-
|
|
68
|
+
type: 'disabled-route';
|
|
70
69
|
routeName: string;
|
|
71
70
|
message: string;
|
|
72
71
|
}
|
|
@@ -83,26 +82,18 @@ export interface IApiTokenInfo {
|
|
|
83
82
|
enabled: boolean;
|
|
84
83
|
}
|
|
85
84
|
/**
|
|
86
|
-
* A
|
|
85
|
+
* A route persisted in the database.
|
|
87
86
|
*/
|
|
88
|
-
export interface
|
|
87
|
+
export interface IRoute {
|
|
89
88
|
id: string;
|
|
90
89
|
route: IDcRouterRouteConfig;
|
|
91
90
|
enabled: boolean;
|
|
92
91
|
createdAt: number;
|
|
93
92
|
updatedAt: number;
|
|
94
93
|
createdBy: string;
|
|
94
|
+
origin: 'config' | 'email' | 'dns' | 'api';
|
|
95
95
|
metadata?: IRouteMetadata;
|
|
96
96
|
}
|
|
97
|
-
/**
|
|
98
|
-
* An override for a hardcoded route, stored in /config-api/overrides/{routeName}.json
|
|
99
|
-
*/
|
|
100
|
-
export interface IRouteOverride {
|
|
101
|
-
routeName: string;
|
|
102
|
-
enabled: boolean;
|
|
103
|
-
updatedAt: number;
|
|
104
|
-
updatedBy: string;
|
|
105
|
-
}
|
|
106
97
|
/**
|
|
107
98
|
* A stored API token, stored in /config-api/tokens/{id}.json
|
|
108
99
|
*/
|
|
@@ -3,7 +3,7 @@ import type * as authInterfaces from '../data/auth.js';
|
|
|
3
3
|
import type { IMergedRoute, IRouteWarning, IRouteMetadata } from '../data/route-management.js';
|
|
4
4
|
import type { IDcRouterRouteConfig } from '../data/remoteingress.js';
|
|
5
5
|
/**
|
|
6
|
-
* Get all
|
|
6
|
+
* Get all routes with warnings.
|
|
7
7
|
*/
|
|
8
8
|
export interface IReq_GetMergedRoutes extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_GetMergedRoutes> {
|
|
9
9
|
method: 'getMergedRoutes';
|
|
@@ -17,7 +17,7 @@ export interface IReq_GetMergedRoutes extends plugins.typedrequestInterfaces.imp
|
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
|
-
* Create a new
|
|
20
|
+
* Create a new route.
|
|
21
21
|
*/
|
|
22
22
|
export interface IReq_CreateRoute extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_CreateRoute> {
|
|
23
23
|
method: 'createRoute';
|
|
@@ -30,12 +30,12 @@ export interface IReq_CreateRoute extends plugins.typedrequestInterfaces.impleme
|
|
|
30
30
|
};
|
|
31
31
|
response: {
|
|
32
32
|
success: boolean;
|
|
33
|
-
|
|
33
|
+
routeId?: string;
|
|
34
34
|
message?: string;
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
|
-
* Update a
|
|
38
|
+
* Update a route.
|
|
39
39
|
*/
|
|
40
40
|
export interface IReq_UpdateRoute extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_UpdateRoute> {
|
|
41
41
|
method: 'updateRoute';
|
|
@@ -53,7 +53,7 @@ export interface IReq_UpdateRoute extends plugins.typedrequestInterfaces.impleme
|
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
|
-
* Delete a
|
|
56
|
+
* Delete a route.
|
|
57
57
|
*/
|
|
58
58
|
export interface IReq_DeleteRoute extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_DeleteRoute> {
|
|
59
59
|
method: 'deleteRoute';
|
|
@@ -68,38 +68,7 @@ export interface IReq_DeleteRoute extends plugins.typedrequestInterfaces.impleme
|
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
71
|
-
*
|
|
72
|
-
*/
|
|
73
|
-
export interface IReq_SetRouteOverride extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_SetRouteOverride> {
|
|
74
|
-
method: 'setRouteOverride';
|
|
75
|
-
request: {
|
|
76
|
-
identity?: authInterfaces.IIdentity;
|
|
77
|
-
apiToken?: string;
|
|
78
|
-
routeName: string;
|
|
79
|
-
enabled: boolean;
|
|
80
|
-
};
|
|
81
|
-
response: {
|
|
82
|
-
success: boolean;
|
|
83
|
-
message?: string;
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Remove an override from a hardcoded route (restore default behavior).
|
|
88
|
-
*/
|
|
89
|
-
export interface IReq_RemoveRouteOverride extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_RemoveRouteOverride> {
|
|
90
|
-
method: 'removeRouteOverride';
|
|
91
|
-
request: {
|
|
92
|
-
identity?: authInterfaces.IIdentity;
|
|
93
|
-
apiToken?: string;
|
|
94
|
-
routeName: string;
|
|
95
|
-
};
|
|
96
|
-
response: {
|
|
97
|
-
success: boolean;
|
|
98
|
-
message?: string;
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Toggle a programmatic route on/off by id.
|
|
71
|
+
* Toggle a route on/off by id.
|
|
103
72
|
*/
|
|
104
73
|
export interface IReq_ToggleRoute extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_ToggleRoute> {
|
|
105
74
|
method: 'toggleRoute';
|
|
@@ -54,7 +54,29 @@ export async function createMigrationRunner(db, targetVersion) {
|
|
|
54
54
|
const collection = ctx.mongo.collection('dnsrecorddoc');
|
|
55
55
|
const result = await collection.updateMany({ source: 'manual' }, { $set: { source: 'local' } });
|
|
56
56
|
ctx.log.log('info', `rename-record-source-manual-to-local: migrated ${result.modifiedCount} record(s)`);
|
|
57
|
+
})
|
|
58
|
+
.step('unify-routes-rename-collection')
|
|
59
|
+
.from('13.8.2').to('13.16.0')
|
|
60
|
+
.description('Rename storedroutedoc → routedoc, add origin field, drop routeoverridedoc')
|
|
61
|
+
.up(async (ctx) => {
|
|
62
|
+
const db = ctx.mongo;
|
|
63
|
+
// 1. Rename storedroutedoc → routedoc
|
|
64
|
+
const collections = await db.listCollections({ name: 'storedroutedoc' }).toArray();
|
|
65
|
+
if (collections.length > 0) {
|
|
66
|
+
await db.renameCollection('storedroutedoc', 'routedoc');
|
|
67
|
+
ctx.log.log('info', 'Renamed storedroutedoc → routedoc');
|
|
68
|
+
}
|
|
69
|
+
// 2. Set origin='api' on all migrated docs (they were API-created)
|
|
70
|
+
const routeCol = db.collection('routedoc');
|
|
71
|
+
const result = await routeCol.updateMany({ origin: { $exists: false } }, { $set: { origin: 'api' } });
|
|
72
|
+
ctx.log.log('info', `Set origin='api' on ${result.modifiedCount} migrated route(s)`);
|
|
73
|
+
// 3. Drop routeoverridedoc collection
|
|
74
|
+
const overrideCollections = await db.listCollections({ name: 'routeoverridedoc' }).toArray();
|
|
75
|
+
if (overrideCollections.length > 0) {
|
|
76
|
+
await db.collection('routeoverridedoc').drop();
|
|
77
|
+
ctx.log.log('info', 'Dropped routeoverridedoc collection');
|
|
78
|
+
}
|
|
57
79
|
});
|
|
58
80
|
return migration;
|
|
59
81
|
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19taWdyYXRpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhCQUE4QjtBQXVCOUI7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHFCQUFxQixDQUN6QyxFQUFXLEVBQ1gsYUFBcUI7SUFFckIsTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUN0RCxNQUFNLFNBQVMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUM7UUFDdEMsYUFBYTtRQUNiLEVBQUUsRUFBRSxFQUFTO1FBQ2Isb0ZBQW9GO1FBQ3BGLG1CQUFtQixFQUFFLGFBQWE7S0FDbkMsQ0FBQyxDQUFDO0lBRUgsd0VBQXdFO0lBQ3hFLG9EQUFvRDtJQUNwRCxTQUFTO1NBQ04sSUFBSSxDQUFDLGtDQUFrQyxDQUFDO1NBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDO1NBQzVCLFdBQVcsQ0FBQyw4REFBOEQsQ0FBQztTQUMzRSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2hCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFNLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0QsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQy9CLE1BQU0sT0FBTyxHQUFHLENBQUUsR0FBVyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFD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
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/dcrouter',
|
|
6
|
-
version: '13.
|
|
6
|
+
version: '13.16.0',
|
|
7
7
|
description: 'A multifaceted routing service handling mail and SMS delivery functions.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
|
|
@@ -437,11 +437,6 @@ export declare const toggleRouteAction: plugins.deesElement.domtools.plugins.sma
|
|
|
437
437
|
id: string;
|
|
438
438
|
enabled: boolean;
|
|
439
439
|
}>;
|
|
440
|
-
export declare const setRouteOverrideAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, {
|
|
441
|
-
routeName: string;
|
|
442
|
-
enabled: boolean;
|
|
443
|
-
}>;
|
|
444
|
-
export declare const removeRouteOverrideAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, string>;
|
|
445
440
|
export declare const fetchApiTokensAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IRouteManagementState, unknown>;
|
|
446
441
|
export declare const fetchUsersAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IUsersState, unknown>;
|
|
447
442
|
export declare function createApiToken(name: string, scopes: interfaces.data.TApiTokenScope[], expiresInDays?: number | null): Promise<{
|