@serve.zone/dcrouter 12.10.0 → 13.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist_serve/bundle.js +1873 -1850
  2. package/dist_ts/00_commitinfo_data.js +2 -2
  3. package/dist_ts/classes.dcrouter.d.ts +5 -4
  4. package/dist_ts/classes.dcrouter.js +25 -49
  5. package/dist_ts/config/classes.reference-resolver.d.ts +7 -7
  6. package/dist_ts/config/classes.reference-resolver.js +27 -27
  7. package/dist_ts/config/classes.route-config-manager.d.ts +2 -2
  8. package/dist_ts/config/classes.route-config-manager.js +12 -15
  9. package/dist_ts/config/classes.target-profile-manager.d.ts +63 -0
  10. package/dist_ts/config/classes.target-profile-manager.js +295 -0
  11. package/dist_ts/config/index.d.ts +1 -0
  12. package/dist_ts/config/index.js +2 -1
  13. package/dist_ts/db/documents/{classes.security-profile.doc.d.ts → classes.source-profile.doc.d.ts} +4 -4
  14. package/dist_ts/db/documents/{classes.security-profile.doc.js → classes.source-profile.doc.js} +9 -9
  15. package/dist_ts/db/documents/classes.target-profile.doc.d.ts +17 -0
  16. package/dist_ts/db/documents/classes.target-profile.doc.js +124 -0
  17. package/dist_ts/db/documents/classes.vpn-client.doc.d.ts +1 -1
  18. package/dist_ts/db/documents/classes.vpn-client.doc.js +8 -8
  19. package/dist_ts/db/documents/index.d.ts +2 -1
  20. package/dist_ts/db/documents/index.js +3 -2
  21. package/dist_ts/opsserver/classes.opsserver.d.ts +2 -1
  22. package/dist_ts/opsserver/classes.opsserver.js +5 -3
  23. package/dist_ts/opsserver/handlers/index.d.ts +2 -1
  24. package/dist_ts/opsserver/handlers/index.js +3 -2
  25. package/dist_ts/opsserver/handlers/{security-profile.handler.d.ts → source-profile.handler.d.ts} +1 -1
  26. package/dist_ts/opsserver/handlers/{security-profile.handler.js → source-profile.handler.js} +20 -20
  27. package/dist_ts/opsserver/handlers/target-profile.handler.d.ts +10 -0
  28. package/dist_ts/opsserver/handlers/target-profile.handler.js +115 -0
  29. package/dist_ts/opsserver/handlers/vpn.handler.js +5 -5
  30. package/dist_ts/vpn/classes.vpn-manager.d.ts +6 -10
  31. package/dist_ts/vpn/classes.vpn-manager.js +11 -34
  32. package/dist_ts_interfaces/data/index.d.ts +1 -0
  33. package/dist_ts_interfaces/data/index.js +2 -1
  34. package/dist_ts_interfaces/data/remoteingress.d.ts +4 -15
  35. package/dist_ts_interfaces/data/route-management.d.ts +9 -6
  36. package/dist_ts_interfaces/data/target-profile.d.ts +28 -0
  37. package/dist_ts_interfaces/data/target-profile.js +2 -0
  38. package/dist_ts_interfaces/data/vpn.d.ts +2 -1
  39. package/dist_ts_interfaces/requests/index.d.ts +2 -1
  40. package/dist_ts_interfaces/requests/index.js +3 -2
  41. package/dist_ts_interfaces/requests/{security-profiles.d.ts → source-profiles.d.ts} +21 -21
  42. package/dist_ts_interfaces/requests/source-profiles.js +2 -0
  43. package/dist_ts_interfaces/requests/target-profiles.d.ts +103 -0
  44. package/dist_ts_interfaces/requests/target-profiles.js +2 -0
  45. package/dist_ts_interfaces/requests/vpn.d.ts +2 -2
  46. package/dist_ts_web/00_commitinfo_data.js +2 -2
  47. package/dist_ts_web/appstate.d.ts +36 -3
  48. package/dist_ts_web/appstate.js +127 -10
  49. package/dist_ts_web/elements/index.d.ts +2 -1
  50. package/dist_ts_web/elements/index.js +3 -2
  51. package/dist_ts_web/elements/ops-dashboard.js +10 -4
  52. package/dist_ts_web/elements/ops-view-routes.js +8 -8
  53. package/dist_ts_web/elements/{ops-view-securityprofiles.d.ts → ops-view-sourceprofiles.d.ts} +2 -2
  54. package/dist_ts_web/elements/{ops-view-securityprofiles.js → ops-view-sourceprofiles.js} +12 -12
  55. package/dist_ts_web/elements/ops-view-targetprofiles.d.ts +19 -0
  56. package/dist_ts_web/elements/ops-view-targetprofiles.js +412 -0
  57. package/dist_ts_web/elements/ops-view-vpn.js +13 -13
  58. package/dist_ts_web/router.d.ts +1 -1
  59. package/dist_ts_web/router.js +2 -2
  60. package/package.json +3 -3
  61. package/ts/00_commitinfo_data.ts +1 -1
  62. package/ts/classes.dcrouter.ts +33 -50
  63. package/ts/config/classes.reference-resolver.ts +34 -34
  64. package/ts/config/classes.route-config-manager.ts +9 -12
  65. package/ts/config/classes.target-profile-manager.ts +348 -0
  66. package/ts/config/index.ts +2 -1
  67. package/ts/db/documents/{classes.security-profile.doc.ts → classes.source-profile.doc.ts} +7 -7
  68. package/ts/db/documents/classes.target-profile.doc.ts +52 -0
  69. package/ts/db/documents/classes.vpn-client.doc.ts +1 -1
  70. package/ts/db/documents/index.ts +2 -1
  71. package/ts/opsserver/classes.opsserver.ts +4 -2
  72. package/ts/opsserver/handlers/index.ts +2 -1
  73. package/ts/opsserver/handlers/{security-profile.handler.ts → source-profile.handler.ts} +25 -25
  74. package/ts/opsserver/handlers/target-profile.handler.ts +155 -0
  75. package/ts/opsserver/handlers/vpn.handler.ts +4 -4
  76. package/ts/vpn/classes.vpn-manager.ts +14 -38
  77. package/ts_web/00_commitinfo_data.ts +1 -1
  78. package/ts_web/appstate.ts +180 -17
  79. package/ts_web/elements/index.ts +2 -1
  80. package/ts_web/elements/ops-dashboard.ts +9 -3
  81. package/ts_web/elements/ops-view-routes.ts +7 -7
  82. package/ts_web/elements/{ops-view-securityprofiles.ts → ops-view-sourceprofiles.ts} +13 -13
  83. package/ts_web/elements/ops-view-targetprofiles.ts +379 -0
  84. package/ts_web/elements/ops-view-vpn.ts +12 -12
  85. package/ts_web/router.ts +1 -1
  86. package/dist_ts_interfaces/requests/security-profiles.js +0 -2
@@ -0,0 +1,295 @@
1
+ import * as plugins from '../plugins.js';
2
+ import { logger } from '../logger.js';
3
+ import { TargetProfileDoc, VpnClientDoc } from '../db/index.js';
4
+ /**
5
+ * Manages TargetProfiles (target-side: what can be accessed).
6
+ * TargetProfiles define what resources a VPN client can reach:
7
+ * domains, specific IP:port targets, and/or direct route references.
8
+ */
9
+ export class TargetProfileManager {
10
+ profiles = new Map();
11
+ // =========================================================================
12
+ // Lifecycle
13
+ // =========================================================================
14
+ async initialize() {
15
+ await this.loadProfiles();
16
+ }
17
+ // =========================================================================
18
+ // CRUD
19
+ // =========================================================================
20
+ async createProfile(data) {
21
+ const id = plugins.uuid.v4();
22
+ const now = Date.now();
23
+ const profile = {
24
+ id,
25
+ name: data.name,
26
+ description: data.description,
27
+ domains: data.domains,
28
+ targets: data.targets,
29
+ routeRefs: data.routeRefs,
30
+ createdAt: now,
31
+ updatedAt: now,
32
+ createdBy: data.createdBy,
33
+ };
34
+ this.profiles.set(id, profile);
35
+ await this.persistProfile(profile);
36
+ logger.log('info', `Created target profile '${profile.name}' (${id})`);
37
+ return id;
38
+ }
39
+ async updateProfile(id, patch) {
40
+ const profile = this.profiles.get(id);
41
+ if (!profile) {
42
+ throw new Error(`Target profile '${id}' not found`);
43
+ }
44
+ if (patch.name !== undefined)
45
+ profile.name = patch.name;
46
+ if (patch.description !== undefined)
47
+ profile.description = patch.description;
48
+ if (patch.domains !== undefined)
49
+ profile.domains = patch.domains;
50
+ if (patch.targets !== undefined)
51
+ profile.targets = patch.targets;
52
+ if (patch.routeRefs !== undefined)
53
+ profile.routeRefs = patch.routeRefs;
54
+ profile.updatedAt = Date.now();
55
+ await this.persistProfile(profile);
56
+ logger.log('info', `Updated target profile '${profile.name}' (${id})`);
57
+ }
58
+ async deleteProfile(id, force) {
59
+ const profile = this.profiles.get(id);
60
+ if (!profile) {
61
+ return { success: false, message: `Target profile '${id}' not found` };
62
+ }
63
+ // Check if any VPN clients reference this profile
64
+ const clients = await VpnClientDoc.findAll();
65
+ const referencingClients = clients.filter((c) => c.targetProfileIds?.includes(id));
66
+ if (referencingClients.length > 0 && !force) {
67
+ return {
68
+ success: false,
69
+ message: `Profile '${profile.name}' is in use by ${referencingClients.length} VPN client(s). Use force=true to delete.`,
70
+ };
71
+ }
72
+ // Delete from DB
73
+ const doc = await TargetProfileDoc.findById(id);
74
+ if (doc)
75
+ await doc.delete();
76
+ this.profiles.delete(id);
77
+ if (referencingClients.length > 0) {
78
+ // Remove profile ref from clients
79
+ for (const client of referencingClients) {
80
+ client.targetProfileIds = client.targetProfileIds?.filter((pid) => pid !== id);
81
+ client.updatedAt = Date.now();
82
+ await client.save();
83
+ }
84
+ logger.log('warn', `Force-deleted target profile '${profile.name}'; removed refs from ${referencingClients.length} client(s)`);
85
+ }
86
+ else {
87
+ logger.log('info', `Deleted target profile '${profile.name}' (${id})`);
88
+ }
89
+ return { success: true };
90
+ }
91
+ getProfile(id) {
92
+ return this.profiles.get(id);
93
+ }
94
+ listProfiles() {
95
+ return [...this.profiles.values()];
96
+ }
97
+ /**
98
+ * Get which VPN clients reference a target profile.
99
+ */
100
+ async getProfileUsage(profileId) {
101
+ const clients = await VpnClientDoc.findAll();
102
+ return clients
103
+ .filter((c) => c.targetProfileIds?.includes(profileId))
104
+ .map((c) => ({ clientId: c.clientId, description: c.description }));
105
+ }
106
+ // =========================================================================
107
+ // Core matching: route → client IPs
108
+ // =========================================================================
109
+ /**
110
+ * For a vpnOnly route, find all enabled VPN clients whose assigned TargetProfile
111
+ * matches the route. Returns their assigned IPs for injection into ipAllowList.
112
+ */
113
+ getMatchingClientIps(route, routeId, clients) {
114
+ const ips = [];
115
+ for (const client of clients) {
116
+ if (!client.enabled || !client.assignedIp)
117
+ continue;
118
+ if (!client.targetProfileIds?.length)
119
+ continue;
120
+ // Check if any of the client's profiles match this route
121
+ const matches = client.targetProfileIds.some((profileId) => {
122
+ const profile = this.profiles.get(profileId);
123
+ if (!profile)
124
+ return false;
125
+ return this.routeMatchesProfile(route, routeId, profile);
126
+ });
127
+ if (matches) {
128
+ ips.push(client.assignedIp);
129
+ }
130
+ }
131
+ return ips;
132
+ }
133
+ /**
134
+ * For a given client (by its targetProfileIds), compute the set of
135
+ * domains and target IPs it can access. Used for WireGuard AllowedIPs.
136
+ */
137
+ getClientAccessSpec(targetProfileIds, allRoutes, storedRoutes) {
138
+ const domains = new Set();
139
+ const targetIps = new Set();
140
+ // Collect all access specifiers from assigned profiles
141
+ for (const profileId of targetProfileIds) {
142
+ const profile = this.profiles.get(profileId);
143
+ if (!profile)
144
+ continue;
145
+ // Direct domain entries
146
+ if (profile.domains?.length) {
147
+ for (const d of profile.domains) {
148
+ domains.add(d);
149
+ }
150
+ }
151
+ // Direct target IP entries
152
+ if (profile.targets?.length) {
153
+ for (const t of profile.targets) {
154
+ targetIps.add(t.host);
155
+ }
156
+ }
157
+ // Route references: scan constructor routes
158
+ for (const route of allRoutes) {
159
+ if (this.routeMatchesProfile(route, undefined, profile)) {
160
+ const routeDomains = route.match?.domains;
161
+ if (Array.isArray(routeDomains)) {
162
+ for (const d of routeDomains) {
163
+ domains.add(d);
164
+ }
165
+ }
166
+ }
167
+ }
168
+ // Route references: scan stored routes
169
+ for (const [storedId, stored] of storedRoutes) {
170
+ if (!stored.enabled)
171
+ continue;
172
+ if (this.routeMatchesProfile(stored.route, storedId, profile)) {
173
+ const routeDomains = stored.route.match?.domains;
174
+ if (Array.isArray(routeDomains)) {
175
+ for (const d of routeDomains) {
176
+ domains.add(d);
177
+ }
178
+ }
179
+ }
180
+ }
181
+ }
182
+ return {
183
+ domains: [...domains],
184
+ targetIps: [...targetIps],
185
+ };
186
+ }
187
+ // =========================================================================
188
+ // Private: matching logic
189
+ // =========================================================================
190
+ /**
191
+ * Check if a route matches a profile. A profile matches if ANY condition is true:
192
+ * 1. Profile's routeRefs contains the route's name or stored route id
193
+ * 2. Profile's domains overlaps with route.match.domains (wildcard matching)
194
+ * 3. Profile's targets overlaps with route.action.targets (host + port match)
195
+ */
196
+ routeMatchesProfile(route, routeId, profile) {
197
+ // 1. Route reference match
198
+ if (profile.routeRefs?.length) {
199
+ if (routeId && profile.routeRefs.includes(routeId))
200
+ return true;
201
+ if (route.name && profile.routeRefs.includes(route.name))
202
+ return true;
203
+ }
204
+ // 2. Domain match
205
+ if (profile.domains?.length) {
206
+ const routeDomains = route.match?.domains || [];
207
+ for (const profileDomain of profile.domains) {
208
+ for (const routeDomain of routeDomains) {
209
+ if (this.domainMatchesPattern(routeDomain, profileDomain))
210
+ return true;
211
+ }
212
+ }
213
+ }
214
+ // 3. Target match (host + port)
215
+ if (profile.targets?.length) {
216
+ const routeTargets = route.action?.targets;
217
+ if (Array.isArray(routeTargets)) {
218
+ for (const profileTarget of profile.targets) {
219
+ for (const routeTarget of routeTargets) {
220
+ const routeHost = routeTarget.host;
221
+ const routePort = routeTarget.port;
222
+ if (routeHost === profileTarget.host && routePort === profileTarget.port) {
223
+ return true;
224
+ }
225
+ }
226
+ }
227
+ }
228
+ }
229
+ return false;
230
+ }
231
+ /**
232
+ * Check if a domain matches a pattern.
233
+ * - '*.example.com' matches 'sub.example.com', 'a.b.example.com'
234
+ * - 'example.com' matches only 'example.com'
235
+ */
236
+ domainMatchesPattern(domain, pattern) {
237
+ if (pattern === domain)
238
+ return true;
239
+ if (pattern.startsWith('*.')) {
240
+ const suffix = pattern.slice(1); // '.example.com'
241
+ return domain.endsWith(suffix) && domain.length > suffix.length;
242
+ }
243
+ return false;
244
+ }
245
+ // =========================================================================
246
+ // Private: persistence
247
+ // =========================================================================
248
+ async loadProfiles() {
249
+ const docs = await TargetProfileDoc.findAll();
250
+ for (const doc of docs) {
251
+ if (doc.id) {
252
+ this.profiles.set(doc.id, {
253
+ id: doc.id,
254
+ name: doc.name,
255
+ description: doc.description,
256
+ domains: doc.domains,
257
+ targets: doc.targets,
258
+ routeRefs: doc.routeRefs,
259
+ createdAt: doc.createdAt,
260
+ updatedAt: doc.updatedAt,
261
+ createdBy: doc.createdBy,
262
+ });
263
+ }
264
+ }
265
+ if (this.profiles.size > 0) {
266
+ logger.log('info', `Loaded ${this.profiles.size} target profile(s) from storage`);
267
+ }
268
+ }
269
+ async persistProfile(profile) {
270
+ const existingDoc = await TargetProfileDoc.findById(profile.id);
271
+ if (existingDoc) {
272
+ existingDoc.name = profile.name;
273
+ existingDoc.description = profile.description;
274
+ existingDoc.domains = profile.domains;
275
+ existingDoc.targets = profile.targets;
276
+ existingDoc.routeRefs = profile.routeRefs;
277
+ existingDoc.updatedAt = profile.updatedAt;
278
+ await existingDoc.save();
279
+ }
280
+ else {
281
+ const doc = new TargetProfileDoc();
282
+ doc.id = profile.id;
283
+ doc.name = profile.name;
284
+ doc.description = profile.description;
285
+ doc.domains = profile.domains;
286
+ doc.targets = profile.targets;
287
+ doc.routeRefs = profile.routeRefs;
288
+ doc.createdAt = profile.createdAt;
289
+ doc.updatedAt = profile.updatedAt;
290
+ doc.createdBy = profile.createdBy;
291
+ await doc.save();
292
+ }
293
+ }
294
+ }
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50YXJnZXQtcHJvZmlsZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvY29uZmlnL2NsYXNzZXMudGFyZ2V0LXByb2ZpbGUtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUtoRTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLG9CQUFvQjtJQUN2QixRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUM7SUFFckQsNEVBQTRFO0lBQzVFLFlBQVk7SUFDWiw0RUFBNEU7SUFFckUsS0FBSyxDQUFDLFVBQVU7UUFDckIsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxPQUFPO0lBQ1AsNEVBQTRFO0lBRXJFLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFPMUI7UUFDQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUV2QixNQUFNLE9BQU8sR0FBbUI7WUFDOUIsRUFBRTtZQUNGLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixTQUFTLEVBQUUsR0FBRztZQUNkLFNBQVMsRUFBRSxHQUFHO1lBQ2QsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFC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
@@ -3,3 +3,4 @@ export { RouteConfigManager } from './classes.route-config-manager.js';
3
3
  export { ApiTokenManager } from './classes.api-token-manager.js';
4
4
  export { ReferenceResolver } from './classes.reference-resolver.js';
5
5
  export { DbSeeder } from './classes.db-seeder.js';
6
+ export { TargetProfileManager } from './classes.target-profile-manager.js';
@@ -4,4 +4,5 @@ export { RouteConfigManager } from './classes.route-config-manager.js';
4
4
  export { ApiTokenManager } from './classes.api-token-manager.js';
5
5
  export { ReferenceResolver } from './classes.reference-resolver.js';
6
6
  export { DbSeeder } from './classes.db-seeder.js';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb25maWcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQyJ9
7
+ export { TargetProfileManager } from './classes.target-profile-manager.js';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb25maWcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQyJ9
@@ -1,6 +1,6 @@
1
1
  import * as plugins from '../../plugins.js';
2
2
  import type { IRouteSecurity } from '../../../dist_ts_interfaces/data/route-management.js';
3
- export declare class SecurityProfileDoc extends plugins.smartdata.SmartDataDbDoc<SecurityProfileDoc, SecurityProfileDoc> {
3
+ export declare class SourceProfileDoc extends plugins.smartdata.SmartDataDbDoc<SourceProfileDoc, SourceProfileDoc> {
4
4
  id: string;
5
5
  name: string;
6
6
  description?: string;
@@ -10,7 +10,7 @@ export declare class SecurityProfileDoc extends plugins.smartdata.SmartDataDbDoc
10
10
  updatedAt: number;
11
11
  createdBy: string;
12
12
  constructor();
13
- static findById(id: string): Promise<SecurityProfileDoc | null>;
14
- static findByName(name: string): Promise<SecurityProfileDoc | null>;
15
- static findAll(): Promise<SecurityProfileDoc[]>;
13
+ static findById(id: string): Promise<SourceProfileDoc | null>;
14
+ static findByName(name: string): Promise<SourceProfileDoc | null>;
15
+ static findAll(): Promise<SourceProfileDoc[]>;
16
16
  }
@@ -35,7 +35,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
35
35
  import * as plugins from '../../plugins.js';
36
36
  import { DcRouterDb } from '../classes.dcrouter-db.js';
37
37
  const getDb = () => DcRouterDb.getInstance().getDb();
38
- let SecurityProfileDoc = (() => {
38
+ let SourceProfileDoc = (() => {
39
39
  let _classDecorators = [plugins.smartdata.Collection(() => getDb())];
40
40
  let _classDescriptor;
41
41
  let _classExtraInitializers = [];
@@ -65,7 +65,7 @@ let SecurityProfileDoc = (() => {
65
65
  let _createdBy_decorators;
66
66
  let _createdBy_initializers = [];
67
67
  let _createdBy_extraInitializers = [];
68
- var SecurityProfileDoc = class extends _classSuper {
68
+ var SourceProfileDoc = class extends _classSuper {
69
69
  static { _classThis = this; }
70
70
  static {
71
71
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
@@ -86,7 +86,7 @@ let SecurityProfileDoc = (() => {
86
86
  __esDecorate(null, null, _updatedAt_decorators, { kind: "field", name: "updatedAt", static: false, private: false, access: { has: obj => "updatedAt" in obj, get: obj => obj.updatedAt, set: (obj, value) => { obj.updatedAt = value; } }, metadata: _metadata }, _updatedAt_initializers, _updatedAt_extraInitializers);
87
87
  __esDecorate(null, null, _createdBy_decorators, { kind: "field", name: "createdBy", static: false, private: false, access: { has: obj => "createdBy" in obj, get: obj => obj.createdBy, set: (obj, value) => { obj.createdBy = value; } }, metadata: _metadata }, _createdBy_initializers, _createdBy_extraInitializers);
88
88
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
89
- SecurityProfileDoc = _classThis = _classDescriptor.value;
89
+ SourceProfileDoc = _classThis = _classDescriptor.value;
90
90
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
91
91
  __runInitializers(_classThis, _classExtraInitializers);
92
92
  }
@@ -103,16 +103,16 @@ let SecurityProfileDoc = (() => {
103
103
  __runInitializers(this, _createdBy_extraInitializers);
104
104
  }
105
105
  static async findById(id) {
106
- return await SecurityProfileDoc.getInstance({ id });
106
+ return await SourceProfileDoc.getInstance({ id });
107
107
  }
108
108
  static async findByName(name) {
109
- return await SecurityProfileDoc.getInstance({ name });
109
+ return await SourceProfileDoc.getInstance({ name });
110
110
  }
111
111
  static async findAll() {
112
- return await SecurityProfileDoc.getInstances({});
112
+ return await SourceProfileDoc.getInstances({});
113
113
  }
114
114
  };
115
- return SecurityProfileDoc = _classThis;
115
+ return SourceProfileDoc = _classThis;
116
116
  })();
117
- export { SecurityProfileDoc };
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zZWN1cml0eS1wcm9maWxlLmRvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL2RiL2RvY3VtZW50cy9jbGFzc2VzLnNlY3VyaXR5LXByb2ZpbGUuZG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd2RCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFHeEMsa0JBQWtCOzRCQUQ5QixPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7OztzQkFDSixPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBQXhDLFNBQVEsV0FBd0U7Ozs7OEJBQzdHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQ3ZCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2dDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTt1Q0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7b0NBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFOzJDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtxQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7cUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtZQXBCekIsd0pBQU8sRUFBRSw2QkFBRixFQUFFLCtFQUFVO1lBR25CLDhKQUFPLElBQUksNkJBQUosSUFBSSxtRkFBYztZQUd6QixtTEFBTyxXQUFXLDZCQUFYLFdBQVcsaUdBQVU7WUFHNUIsMEtBQU8sUUFBUSw2QkFBUixRQUFRLDJGQUFrQjtZQUdqQywrTEFBTyxlQUFlLDZCQUFmLGVBQWUseUdBQVk7WUFHbEMsNktBQU8sU0FBUyw2QkFBVCxTQUFTLDZGQUFVO1lBRzFCLDZLQUFPLFNBQVMsNkJBQVQsU0FBUyw2RkFBVTtZQUcxQiw2S0FBTyxTQUFTLDZCQUFULFNBQVMsNkZBQVU7WUF4QjVCLDZLQXlDQzs7O1lBekNZLHVEQUFrQjs7UUFHdEIsRUFBRSxxREFBVTtRQUdaLElBQUksZ0dBQVcsRUFBRSxHQUFDO1FBR2xCLFdBQVcsa0hBQVU7UUFHckIsUUFBUSxzSEFBa0I7UUFHMUIsZUFBZSwwSEFBWTtRQUczQixTQUFTLDJIQUFVO1FBR25CLFNBQVMscUhBQVU7UUFHbkIsU0FBUyxxSEFBVTtRQUUxQjtZQUNFLEtBQUssRUFBRSxDQUFDOztTQUNUO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBVTtZQUNyQyxPQUFPLE1BQU0sa0JBQWtCLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBWTtZQUN6QyxPQUFPLE1BQU0sa0JBQWtCLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQ3pCLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQzs7OztTQXhDVSxrQkFBa0IifQ==
117
+ export { SourceProfileDoc };
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zb3VyY2UtcHJvZmlsZS5kb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvY2xhc3Nlcy5zb3VyY2UtcHJvZmlsZS5kb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3ZELE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUd4QyxnQkFBZ0I7NEJBRDVCLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDOzs7O3NCQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQ0FBeEMsU0FBUSxXQUFvRTs7Ozs4QkFDdkcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFDdkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0NBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3VDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtvQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7MkNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtxQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7cUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBcEJ6Qix3SkFBTyxFQUFFLDZCQUFGLEVBQUUsK0VBQVU7WUFHbkIsOEpBQU8sSUFBSSw2QkFBSixJQUFJLG1GQUFjO1lBR3pCLG1MQUFPLFdBQVcsNkJBQVgsV0FBVyxpR0FBVTtZQUc1QiwwS0FBTyxRQUFRLDZCQUFSLFFBQVEsMkZBQWtCO1lBR2pDLCtMQUFPLGVBQWUsNkJBQWYsZUFBZSx5R0FBWTtZQUdsQyw2S0FBTyxTQUFTLDZCQUFULFNBQVMsNkZBQVU7WUFHMUIsNktBQU8sU0FBUyw2QkFBVCxTQUFTLDZGQUFVO1lBRzFCLDZLQUFPLFNBQVMsNkJBQVQsU0FBUyw2RkFBVTtZQXhCNUIsNktBeUNDOzs7WUF6Q1ksdURBQWdCOztRQUdwQixFQUFFLHFEQUFVO1FBR1osSUFBSSxnR0FBVyxFQUFFLEdBQUM7UUFHbEIsV0FBVyxrSEFBVTtRQUdyQixRQUFRLHNIQUFrQjtRQUcxQixlQUFlLDBIQUFZO1FBRzNCLFNBQVMsMkhBQVU7UUFHbkIsU0FBUyxxSEFBVTtRQUduQixTQUFTLHFIQUFVO1FBRTFCO1lBQ0UsS0FBSyxFQUFFLENBQUM7O1NBQ1Q7UUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFVO1lBQ3JDLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFZO1lBQ3pDLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU87WUFDekIsT0FBTyxNQUFNLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDOzs7O1NBeENVLGdCQUFnQiJ9
@@ -0,0 +1,17 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import type { ITargetProfileTarget } from '../../../dist_ts_interfaces/data/target-profile.js';
3
+ export declare class TargetProfileDoc extends plugins.smartdata.SmartDataDbDoc<TargetProfileDoc, TargetProfileDoc> {
4
+ id: string;
5
+ name: string;
6
+ description?: string;
7
+ domains?: string[];
8
+ targets?: ITargetProfileTarget[];
9
+ routeRefs?: string[];
10
+ createdAt: number;
11
+ updatedAt: number;
12
+ createdBy: string;
13
+ constructor();
14
+ static findById(id: string): Promise<TargetProfileDoc | null>;
15
+ static findByName(name: string): Promise<TargetProfileDoc | null>;
16
+ static findAll(): Promise<TargetProfileDoc[]>;
17
+ }
@@ -0,0 +1,124 @@
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ import * as plugins from '../../plugins.js';
36
+ import { DcRouterDb } from '../classes.dcrouter-db.js';
37
+ const getDb = () => DcRouterDb.getInstance().getDb();
38
+ let TargetProfileDoc = (() => {
39
+ let _classDecorators = [plugins.smartdata.Collection(() => getDb())];
40
+ let _classDescriptor;
41
+ let _classExtraInitializers = [];
42
+ let _classThis;
43
+ let _classSuper = plugins.smartdata.SmartDataDbDoc;
44
+ let _id_decorators;
45
+ let _id_initializers = [];
46
+ let _id_extraInitializers = [];
47
+ let _name_decorators;
48
+ let _name_initializers = [];
49
+ let _name_extraInitializers = [];
50
+ let _description_decorators;
51
+ let _description_initializers = [];
52
+ let _description_extraInitializers = [];
53
+ let _domains_decorators;
54
+ let _domains_initializers = [];
55
+ let _domains_extraInitializers = [];
56
+ let _targets_decorators;
57
+ let _targets_initializers = [];
58
+ let _targets_extraInitializers = [];
59
+ let _routeRefs_decorators;
60
+ let _routeRefs_initializers = [];
61
+ let _routeRefs_extraInitializers = [];
62
+ let _createdAt_decorators;
63
+ let _createdAt_initializers = [];
64
+ let _createdAt_extraInitializers = [];
65
+ let _updatedAt_decorators;
66
+ let _updatedAt_initializers = [];
67
+ let _updatedAt_extraInitializers = [];
68
+ let _createdBy_decorators;
69
+ let _createdBy_initializers = [];
70
+ let _createdBy_extraInitializers = [];
71
+ var TargetProfileDoc = class extends _classSuper {
72
+ static { _classThis = this; }
73
+ static {
74
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
75
+ _id_decorators = [plugins.smartdata.unI(), plugins.smartdata.svDb()];
76
+ _name_decorators = [plugins.smartdata.svDb()];
77
+ _description_decorators = [plugins.smartdata.svDb()];
78
+ _domains_decorators = [plugins.smartdata.svDb()];
79
+ _targets_decorators = [plugins.smartdata.svDb()];
80
+ _routeRefs_decorators = [plugins.smartdata.svDb()];
81
+ _createdAt_decorators = [plugins.smartdata.svDb()];
82
+ _updatedAt_decorators = [plugins.smartdata.svDb()];
83
+ _createdBy_decorators = [plugins.smartdata.svDb()];
84
+ __esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
85
+ __esDecorate(null, null, _name_decorators, { kind: "field", name: "name", static: false, private: false, access: { has: obj => "name" in obj, get: obj => obj.name, set: (obj, value) => { obj.name = value; } }, metadata: _metadata }, _name_initializers, _name_extraInitializers);
86
+ __esDecorate(null, null, _description_decorators, { kind: "field", name: "description", static: false, private: false, access: { has: obj => "description" in obj, get: obj => obj.description, set: (obj, value) => { obj.description = value; } }, metadata: _metadata }, _description_initializers, _description_extraInitializers);
87
+ __esDecorate(null, null, _domains_decorators, { kind: "field", name: "domains", static: false, private: false, access: { has: obj => "domains" in obj, get: obj => obj.domains, set: (obj, value) => { obj.domains = value; } }, metadata: _metadata }, _domains_initializers, _domains_extraInitializers);
88
+ __esDecorate(null, null, _targets_decorators, { kind: "field", name: "targets", static: false, private: false, access: { has: obj => "targets" in obj, get: obj => obj.targets, set: (obj, value) => { obj.targets = value; } }, metadata: _metadata }, _targets_initializers, _targets_extraInitializers);
89
+ __esDecorate(null, null, _routeRefs_decorators, { kind: "field", name: "routeRefs", static: false, private: false, access: { has: obj => "routeRefs" in obj, get: obj => obj.routeRefs, set: (obj, value) => { obj.routeRefs = value; } }, metadata: _metadata }, _routeRefs_initializers, _routeRefs_extraInitializers);
90
+ __esDecorate(null, null, _createdAt_decorators, { kind: "field", name: "createdAt", static: false, private: false, access: { has: obj => "createdAt" in obj, get: obj => obj.createdAt, set: (obj, value) => { obj.createdAt = value; } }, metadata: _metadata }, _createdAt_initializers, _createdAt_extraInitializers);
91
+ __esDecorate(null, null, _updatedAt_decorators, { kind: "field", name: "updatedAt", static: false, private: false, access: { has: obj => "updatedAt" in obj, get: obj => obj.updatedAt, set: (obj, value) => { obj.updatedAt = value; } }, metadata: _metadata }, _updatedAt_initializers, _updatedAt_extraInitializers);
92
+ __esDecorate(null, null, _createdBy_decorators, { kind: "field", name: "createdBy", static: false, private: false, access: { has: obj => "createdBy" in obj, get: obj => obj.createdBy, set: (obj, value) => { obj.createdBy = value; } }, metadata: _metadata }, _createdBy_initializers, _createdBy_extraInitializers);
93
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
94
+ TargetProfileDoc = _classThis = _classDescriptor.value;
95
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
96
+ __runInitializers(_classThis, _classExtraInitializers);
97
+ }
98
+ id = __runInitializers(this, _id_initializers, void 0);
99
+ name = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _name_initializers, ''));
100
+ description = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _description_initializers, void 0));
101
+ domains = (__runInitializers(this, _description_extraInitializers), __runInitializers(this, _domains_initializers, void 0));
102
+ targets = (__runInitializers(this, _domains_extraInitializers), __runInitializers(this, _targets_initializers, void 0));
103
+ routeRefs = (__runInitializers(this, _targets_extraInitializers), __runInitializers(this, _routeRefs_initializers, void 0));
104
+ createdAt = (__runInitializers(this, _routeRefs_extraInitializers), __runInitializers(this, _createdAt_initializers, void 0));
105
+ updatedAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _updatedAt_initializers, void 0));
106
+ createdBy = (__runInitializers(this, _updatedAt_extraInitializers), __runInitializers(this, _createdBy_initializers, void 0));
107
+ constructor() {
108
+ super();
109
+ __runInitializers(this, _createdBy_extraInitializers);
110
+ }
111
+ static async findById(id) {
112
+ return await TargetProfileDoc.getInstance({ id });
113
+ }
114
+ static async findByName(name) {
115
+ return await TargetProfileDoc.getInstance({ name });
116
+ }
117
+ static async findAll() {
118
+ return await TargetProfileDoc.getInstances({});
119
+ }
120
+ };
121
+ return TargetProfileDoc = _classThis;
122
+ })();
123
+ export { TargetProfileDoc };
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50YXJnZXQtcHJvZmlsZS5kb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvY2xhc3Nlcy50YXJnZXQtcHJvZmlsZS5kb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3ZELE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUd4QyxnQkFBZ0I7NEJBRDVCLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDOzs7O3NCQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQ0FBeEMsU0FBUSxXQUFvRTs7Ozs4QkFDdkcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFDdkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0NBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3VDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTttQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7bUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtxQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7cUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtZQXZCekIsd0pBQU8sRUFBRSw2QkFBRixFQUFFLCtFQUFVO1lBR25CLDhKQUFPLElBQUksNkJBQUosSUFBSSxtRkFBYztZQUd6QixtTEFBTyxXQUFXLDZCQUFYLFdBQVcsaUdBQVU7WUFHNUIsdUtBQU8sT0FBTyw2QkFBUCxPQUFPLHlGQUFZO1lBRzFCLHVLQUFPLE9BQU8sNkJBQVAsT0FBTyx5RkFBMEI7WUFHeEMsNktBQU8sU0FBUyw2QkFBVCxTQUFTLDZGQUFZO1lBRzVCLDZLQUFPLFNBQVMsNkJBQVQsU0FBUyw2RkFBVTtZQUcxQiw2S0FBTyxTQUFTLDZCQUFULFNBQVMsNkZBQVU7WUFHMUIsNktBQU8sU0FBUyw2QkFBVCxTQUFTLDZGQUFVO1lBM0I1Qiw2S0E0Q0M7OztZQTVDWSx1REFBZ0I7O1FBR3BCLEVBQUUscURBQVU7UUFHWixJQUFJLGdHQUFXLEVBQUUsR0FBQztRQUdsQixXQUFXLGtIQUFVO1FBR3JCLE9BQU8scUhBQVk7UUFHbkIsT0FBTyxpSEFBMEI7UUFHakMsU0FBUyxtSEFBWTtRQUdyQixTQUFTLHFIQUFVO1FBR25CLFNBQVMscUhBQVU7UUFHbkIsU0FBUyxxSEFBVTtRQUUxQjtZQUNFLEtBQUssRUFBRSxDQUFDOztTQUNUO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBVTtZQUNyQyxPQUFPLE1BQU0sZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBWTtZQUN6QyxPQUFPLE1BQU0sZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQ3pCLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsQ0FBQzs7OztTQTNDVSxnQkFBZ0IifQ==
@@ -2,7 +2,7 @@ import * as plugins from '../../plugins.js';
2
2
  export declare class VpnClientDoc extends plugins.smartdata.SmartDataDbDoc<VpnClientDoc, VpnClientDoc> {
3
3
  clientId: string;
4
4
  enabled: boolean;
5
- serverDefinedClientTags?: string[];
5
+ targetProfileIds?: string[];
6
6
  description?: string;
7
7
  assignedIp?: string;
8
8
  noisePublicKey: string;
@@ -47,9 +47,9 @@ let VpnClientDoc = (() => {
47
47
  let _enabled_decorators;
48
48
  let _enabled_initializers = [];
49
49
  let _enabled_extraInitializers = [];
50
- let _serverDefinedClientTags_decorators;
51
- let _serverDefinedClientTags_initializers = [];
52
- let _serverDefinedClientTags_extraInitializers = [];
50
+ let _targetProfileIds_decorators;
51
+ let _targetProfileIds_initializers = [];
52
+ let _targetProfileIds_extraInitializers = [];
53
53
  let _description_decorators;
54
54
  let _description_initializers = [];
55
55
  let _description_extraInitializers = [];
@@ -104,7 +104,7 @@ let VpnClientDoc = (() => {
104
104
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
105
105
  _clientId_decorators = [plugins.smartdata.unI(), plugins.smartdata.svDb()];
106
106
  _enabled_decorators = [plugins.smartdata.svDb()];
107
- _serverDefinedClientTags_decorators = [plugins.smartdata.svDb()];
107
+ _targetProfileIds_decorators = [plugins.smartdata.svDb()];
108
108
  _description_decorators = [plugins.smartdata.svDb()];
109
109
  _assignedIp_decorators = [plugins.smartdata.svDb()];
110
110
  _noisePublicKey_decorators = [plugins.smartdata.svDb()];
@@ -123,7 +123,7 @@ let VpnClientDoc = (() => {
123
123
  _vlanId_decorators = [plugins.smartdata.svDb()];
124
124
  __esDecorate(null, null, _clientId_decorators, { kind: "field", name: "clientId", static: false, private: false, access: { has: obj => "clientId" in obj, get: obj => obj.clientId, set: (obj, value) => { obj.clientId = value; } }, metadata: _metadata }, _clientId_initializers, _clientId_extraInitializers);
125
125
  __esDecorate(null, null, _enabled_decorators, { kind: "field", name: "enabled", static: false, private: false, access: { has: obj => "enabled" in obj, get: obj => obj.enabled, set: (obj, value) => { obj.enabled = value; } }, metadata: _metadata }, _enabled_initializers, _enabled_extraInitializers);
126
- __esDecorate(null, null, _serverDefinedClientTags_decorators, { kind: "field", name: "serverDefinedClientTags", static: false, private: false, access: { has: obj => "serverDefinedClientTags" in obj, get: obj => obj.serverDefinedClientTags, set: (obj, value) => { obj.serverDefinedClientTags = value; } }, metadata: _metadata }, _serverDefinedClientTags_initializers, _serverDefinedClientTags_extraInitializers);
126
+ __esDecorate(null, null, _targetProfileIds_decorators, { kind: "field", name: "targetProfileIds", static: false, private: false, access: { has: obj => "targetProfileIds" in obj, get: obj => obj.targetProfileIds, set: (obj, value) => { obj.targetProfileIds = value; } }, metadata: _metadata }, _targetProfileIds_initializers, _targetProfileIds_extraInitializers);
127
127
  __esDecorate(null, null, _description_decorators, { kind: "field", name: "description", static: false, private: false, access: { has: obj => "description" in obj, get: obj => obj.description, set: (obj, value) => { obj.description = value; } }, metadata: _metadata }, _description_initializers, _description_extraInitializers);
128
128
  __esDecorate(null, null, _assignedIp_decorators, { kind: "field", name: "assignedIp", static: false, private: false, access: { has: obj => "assignedIp" in obj, get: obj => obj.assignedIp, set: (obj, value) => { obj.assignedIp = value; } }, metadata: _metadata }, _assignedIp_initializers, _assignedIp_extraInitializers);
129
129
  __esDecorate(null, null, _noisePublicKey_decorators, { kind: "field", name: "noisePublicKey", static: false, private: false, access: { has: obj => "noisePublicKey" in obj, get: obj => obj.noisePublicKey, set: (obj, value) => { obj.noisePublicKey = value; } }, metadata: _metadata }, _noisePublicKey_initializers, _noisePublicKey_extraInitializers);
@@ -147,8 +147,8 @@ let VpnClientDoc = (() => {
147
147
  }
148
148
  clientId = __runInitializers(this, _clientId_initializers, void 0);
149
149
  enabled = (__runInitializers(this, _clientId_extraInitializers), __runInitializers(this, _enabled_initializers, void 0));
150
- serverDefinedClientTags = (__runInitializers(this, _enabled_extraInitializers), __runInitializers(this, _serverDefinedClientTags_initializers, void 0));
151
- description = (__runInitializers(this, _serverDefinedClientTags_extraInitializers), __runInitializers(this, _description_initializers, void 0));
150
+ targetProfileIds = (__runInitializers(this, _enabled_extraInitializers), __runInitializers(this, _targetProfileIds_initializers, void 0));
151
+ description = (__runInitializers(this, _targetProfileIds_extraInitializers), __runInitializers(this, _description_initializers, void 0));
152
152
  assignedIp = (__runInitializers(this, _description_extraInitializers), __runInitializers(this, _assignedIp_initializers, void 0));
153
153
  noisePublicKey = (__runInitializers(this, _assignedIp_extraInitializers), __runInitializers(this, _noisePublicKey_initializers, void 0));
154
154
  wgPublicKey = (__runInitializers(this, _noisePublicKey_extraInitializers), __runInitializers(this, _wgPublicKey_initializers, void 0));
@@ -181,4 +181,4 @@ let VpnClientDoc = (() => {
181
181
  return VpnClientDoc = _classThis;
182
182
  })();
183
183
  export { VpnClientDoc };
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy52cG4tY2xpZW50LmRvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL2RiL2RvY3VtZW50cy9jbGFzc2VzLnZwbi1jbGllbnQuZG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFHeEMsWUFBWTs0QkFEeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Ozs7c0JBQ1YsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzRCQUF4QyxTQUFRLFdBQTREOzs7O29DQUMzRixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUN2QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTttQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7bURBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3VDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtzQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7MENBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3VDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTt3Q0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7cUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxF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
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy52cG4tY2xpZW50LmRvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL2RiL2RvY3VtZW50cy9jbGFzc2VzLnZwbi1jbGllbnQuZG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFHeEMsWUFBWTs0QkFEeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Ozs7c0JBQ1YsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzRCQUF4QyxTQUFRLFdBQTREOzs7O29DQUMzRixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUN2QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTttQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7NENBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3VDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtzQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7MENBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3VDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTt3Q0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7cUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxF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