@serve.zone/gitops 2.13.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.
- package/.smartconfig.json +114 -0
- package/binary/gitops.ts +4 -0
- package/changelog.md +185 -0
- package/cli.child.js +4 -0
- package/cli.js +4 -0
- package/cli.ts.js +5 -0
- package/deno.json +10 -0
- package/dist_serve/bundle.js +36362 -0
- package/dist_serve/index.html +33 -0
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/cache/classes.cache.cleaner.d.ts +23 -0
- package/dist_ts/cache/classes.cache.cleaner.js +61 -0
- package/dist_ts/cache/classes.cached.document.d.ts +30 -0
- package/dist_ts/cache/classes.cached.document.js +101 -0
- package/dist_ts/cache/classes.cachedb.d.ts +22 -0
- package/dist_ts/cache/classes.cachedb.js +58 -0
- package/dist_ts/cache/classes.secrets.scan.service.d.ts +51 -0
- package/dist_ts/cache/classes.secrets.scan.service.js +237 -0
- package/dist_ts/cache/documents/classes.cached.project.d.ts +13 -0
- package/dist_ts/cache/documents/classes.cached.project.js +101 -0
- package/dist_ts/cache/documents/classes.cached.secret.d.ts +24 -0
- package/dist_ts/cache/documents/classes.cached.secret.js +158 -0
- package/dist_ts/cache/documents/index.d.ts +2 -0
- package/dist_ts/cache/documents/index.js +3 -0
- package/dist_ts/cache/index.d.ts +7 -0
- package/dist_ts/cache/index.js +6 -0
- package/dist_ts/classes/actionlog.d.ts +19 -0
- package/dist_ts/classes/actionlog.js +44 -0
- package/dist_ts/classes/connectionmanager.d.ts +57 -0
- package/dist_ts/classes/connectionmanager.js +247 -0
- package/dist_ts/classes/gitopsapp.d.ts +30 -0
- package/dist_ts/classes/gitopsapp.js +101 -0
- package/dist_ts/classes/jobmanager.d.ts +47 -0
- package/dist_ts/classes/jobmanager.js +301 -0
- package/dist_ts/classes/jobrunners/autobookstackdocs.runner.d.ts +29 -0
- package/dist_ts/classes/jobrunners/autobookstackdocs.runner.js +361 -0
- package/dist_ts/classes/jobrunners/base.jobrunner.d.ts +14 -0
- package/dist_ts/classes/jobrunners/base.jobrunner.js +3 -0
- package/dist_ts/classes/jobrunners/index.d.ts +5 -0
- package/dist_ts/classes/jobrunners/index.js +14 -0
- package/dist_ts/classes/managedsecrets.manager.d.ts +47 -0
- package/dist_ts/classes/managedsecrets.manager.js +247 -0
- package/dist_ts/classes/syncmanager.d.ts +189 -0
- package/dist_ts/classes/syncmanager.js +1787 -0
- package/dist_ts/index.d.ts +6 -0
- package/dist_ts/index.js +32 -0
- package/dist_ts/logging.d.ts +49 -0
- package/dist_ts/logging.js +134 -0
- package/dist_ts/opsserver/classes.opsserver.d.ts +25 -0
- package/dist_ts/opsserver/classes.opsserver.js +70 -0
- package/dist_ts/opsserver/handlers/actionlog.handler.d.ts +9 -0
- package/dist_ts/opsserver/handlers/actionlog.handler.js +24 -0
- package/dist_ts/opsserver/handlers/actions.handler.d.ts +9 -0
- package/dist_ts/opsserver/handlers/actions.handler.js +38 -0
- package/dist_ts/opsserver/handlers/admin.handler.d.ts +19 -0
- package/dist_ts/opsserver/handlers/admin.handler.js +96 -0
- package/dist_ts/opsserver/handlers/connections.handler.d.ts +10 -0
- package/dist_ts/opsserver/handlers/connections.handler.js +109 -0
- package/dist_ts/opsserver/handlers/groups.handler.d.ts +9 -0
- package/dist_ts/opsserver/handlers/groups.handler.js +24 -0
- package/dist_ts/opsserver/handlers/index.d.ts +13 -0
- package/dist_ts/opsserver/handlers/index.js +14 -0
- package/dist_ts/opsserver/handlers/jobs.handler.d.ts +16 -0
- package/dist_ts/opsserver/handlers/jobs.handler.js +146 -0
- package/dist_ts/opsserver/handlers/logs.handler.d.ts +9 -0
- package/dist_ts/opsserver/handlers/logs.handler.js +21 -0
- package/dist_ts/opsserver/handlers/managedsecrets.handler.d.ts +11 -0
- package/dist_ts/opsserver/handlers/managedsecrets.handler.js +110 -0
- package/dist_ts/opsserver/handlers/pipelines.handler.d.ts +31 -0
- package/dist_ts/opsserver/handlers/pipelines.handler.js +204 -0
- package/dist_ts/opsserver/handlers/projects.handler.d.ts +9 -0
- package/dist_ts/opsserver/handlers/projects.handler.js +24 -0
- package/dist_ts/opsserver/handlers/secrets.handler.d.ts +10 -0
- package/dist_ts/opsserver/handlers/secrets.handler.js +171 -0
- package/dist_ts/opsserver/handlers/sync.handler.d.ts +16 -0
- package/dist_ts/opsserver/handlers/sync.handler.js +166 -0
- package/dist_ts/opsserver/handlers/webhook.handler.d.ts +7 -0
- package/dist_ts/opsserver/handlers/webhook.handler.js +55 -0
- package/dist_ts/opsserver/helpers/guards.d.ts +5 -0
- package/dist_ts/opsserver/helpers/guards.js +12 -0
- package/dist_ts/opsserver/index.d.ts +1 -0
- package/dist_ts/opsserver/index.js +2 -0
- package/dist_ts/paths.d.ts +9 -0
- package/dist_ts/paths.js +13 -0
- package/dist_ts/plugins.d.ts +25 -0
- package/dist_ts/plugins.js +32 -0
- package/dist_ts/providers/classes.baseprovider.d.ts +51 -0
- package/dist_ts/providers/classes.baseprovider.js +17 -0
- package/dist_ts/providers/classes.giteaprovider.d.ts +40 -0
- package/dist_ts/providers/classes.giteaprovider.js +224 -0
- package/dist_ts/providers/classes.gitlabprovider.d.ts +39 -0
- package/dist_ts/providers/classes.gitlabprovider.js +207 -0
- package/dist_ts/providers/index.d.ts +3 -0
- package/dist_ts/providers/index.js +4 -0
- package/dist_ts/storage/classes.storagemanager.d.ts +33 -0
- package/dist_ts/storage/classes.storagemanager.js +135 -0
- package/dist_ts/storage/index.d.ts +2 -0
- package/dist_ts/storage/index.js +2 -0
- package/dist_ts/timers.d.ts +4 -0
- package/dist_ts/timers.js +24 -0
- package/dist_ts_bundled/bundle.d.ts +4 -0
- package/dist_ts_bundled/bundle.js +12 -0
- package/dist_ts_interfaces/data/actionlog.d.ts +12 -0
- package/dist_ts_interfaces/data/actionlog.js +2 -0
- package/dist_ts_interfaces/data/branch.d.ts +8 -0
- package/dist_ts_interfaces/data/branch.js +2 -0
- package/dist_ts_interfaces/data/connection.d.ts +12 -0
- package/dist_ts_interfaces/data/connection.js +2 -0
- package/dist_ts_interfaces/data/group.d.ts +10 -0
- package/dist_ts_interfaces/data/group.js +2 -0
- package/dist_ts_interfaces/data/identity.d.ts +7 -0
- package/dist_ts_interfaces/data/identity.js +2 -0
- package/dist_ts_interfaces/data/index.d.ts +11 -0
- package/dist_ts_interfaces/data/index.js +12 -0
- package/dist_ts_interfaces/data/job.d.ts +37 -0
- package/dist_ts_interfaces/data/job.js +2 -0
- package/dist_ts_interfaces/data/managedsecret.d.ts +37 -0
- package/dist_ts_interfaces/data/managedsecret.js +2 -0
- package/dist_ts_interfaces/data/pipeline.d.ts +22 -0
- package/dist_ts_interfaces/data/pipeline.js +2 -0
- package/dist_ts_interfaces/data/project.d.ts +12 -0
- package/dist_ts_interfaces/data/project.js +2 -0
- package/dist_ts_interfaces/data/secret.d.ts +11 -0
- package/dist_ts_interfaces/data/secret.js +2 -0
- package/dist_ts_interfaces/data/sync.d.ts +34 -0
- package/dist_ts_interfaces/data/sync.js +2 -0
- package/dist_ts_interfaces/index.d.ts +5 -0
- package/dist_ts_interfaces/index.js +8 -0
- package/dist_ts_interfaces/plugins.d.ts +2 -0
- package/dist_ts_interfaces/plugins.js +4 -0
- package/dist_ts_interfaces/requests/actionlog.d.ts +15 -0
- package/dist_ts_interfaces/requests/actionlog.js +3 -0
- package/dist_ts_interfaces/requests/actions.d.ts +31 -0
- package/dist_ts_interfaces/requests/actions.js +3 -0
- package/dist_ts_interfaces/requests/admin.d.ts +31 -0
- package/dist_ts_interfaces/requests/admin.js +3 -0
- package/dist_ts_interfaces/requests/connections.d.ts +71 -0
- package/dist_ts_interfaces/requests/connections.js +3 -0
- package/dist_ts_interfaces/requests/groups.d.ts +14 -0
- package/dist_ts_interfaces/requests/groups.js +3 -0
- package/dist_ts_interfaces/requests/index.d.ts +13 -0
- package/dist_ts_interfaces/requests/index.js +14 -0
- package/dist_ts_interfaces/requests/jobs.d.ts +86 -0
- package/dist_ts_interfaces/requests/jobs.js +3 -0
- package/dist_ts_interfaces/requests/logs.d.ts +14 -0
- package/dist_ts_interfaces/requests/logs.js +3 -0
- package/dist_ts_interfaces/requests/managedsecrets.d.ts +84 -0
- package/dist_ts_interfaces/requests/managedsecrets.js +3 -0
- package/dist_ts_interfaces/requests/pipelines.d.ts +55 -0
- package/dist_ts_interfaces/requests/pipelines.js +3 -0
- package/dist_ts_interfaces/requests/projects.d.ts +14 -0
- package/dist_ts_interfaces/requests/projects.js +3 -0
- package/dist_ts_interfaces/requests/secrets.d.ts +72 -0
- package/dist_ts_interfaces/requests/secrets.js +3 -0
- package/dist_ts_interfaces/requests/sync.d.ts +120 -0
- package/dist_ts_interfaces/requests/sync.js +3 -0
- package/dist_ts_interfaces/requests/webhook.d.ts +13 -0
- package/dist_ts_interfaces/requests/webhook.js +3 -0
- package/license +21 -0
- package/package.json +81 -0
- package/readme.md +177 -0
- package/readme.todo.md +3 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/cache/classes.cache.cleaner.ts +69 -0
- package/ts/cache/classes.cached.document.ts +57 -0
- package/ts/cache/classes.cachedb.ts +72 -0
- package/ts/cache/classes.secrets.scan.service.ts +267 -0
- package/ts/cache/documents/classes.cached.project.ts +32 -0
- package/ts/cache/documents/classes.cached.secret.ts +81 -0
- package/ts/cache/documents/index.ts +2 -0
- package/ts/cache/index.ts +7 -0
- package/ts/classes/actionlog.ts +57 -0
- package/ts/classes/connectionmanager.ts +263 -0
- package/ts/classes/gitopsapp.ts +128 -0
- package/ts/classes/jobmanager.ts +337 -0
- package/ts/classes/jobrunners/autobookstackdocs.runner.ts +435 -0
- package/ts/classes/jobrunners/base.jobrunner.ts +16 -0
- package/ts/classes/jobrunners/index.ts +17 -0
- package/ts/classes/managedsecrets.manager.ts +322 -0
- package/ts/classes/syncmanager.ts +2117 -0
- package/ts/index.ts +37 -0
- package/ts/logging.ts +162 -0
- package/ts/opsserver/classes.opsserver.ts +86 -0
- package/ts/opsserver/handlers/actionlog.handler.ts +30 -0
- package/ts/opsserver/handlers/actions.handler.ts +50 -0
- package/ts/opsserver/handlers/admin.handler.ts +122 -0
- package/ts/opsserver/handlers/connections.handler.ts +162 -0
- package/ts/opsserver/handlers/groups.handler.ts +32 -0
- package/ts/opsserver/handlers/index.ts +13 -0
- package/ts/opsserver/handlers/jobs.handler.ts +189 -0
- package/ts/opsserver/handlers/logs.handler.ts +29 -0
- package/ts/opsserver/handlers/managedsecrets.handler.ts +158 -0
- package/ts/opsserver/handlers/pipelines.handler.ts +281 -0
- package/ts/opsserver/handlers/projects.handler.ts +32 -0
- package/ts/opsserver/handlers/secrets.handler.ts +224 -0
- package/ts/opsserver/handlers/sync.handler.ts +224 -0
- package/ts/opsserver/handlers/webhook.handler.ts +62 -0
- package/ts/opsserver/helpers/guards.ts +16 -0
- package/ts/opsserver/index.ts +1 -0
- package/ts/paths.ts +19 -0
- package/ts/plugins.ts +38 -0
- package/ts/providers/classes.baseprovider.ts +99 -0
- package/ts/providers/classes.giteaprovider.ts +279 -0
- package/ts/providers/classes.gitlabprovider.ts +265 -0
- package/ts/providers/index.ts +3 -0
- package/ts/storage/classes.storagemanager.ts +144 -0
- package/ts/storage/index.ts +2 -0
- package/ts/timers.ts +34 -0
- package/ts_interfaces/data/actionlog.ts +13 -0
- package/ts_interfaces/data/branch.ts +9 -0
- package/ts_interfaces/data/connection.ts +13 -0
- package/ts_interfaces/data/group.ts +10 -0
- package/ts_interfaces/data/identity.ts +7 -0
- package/ts_interfaces/data/index.ts +11 -0
- package/ts_interfaces/data/job.ts +42 -0
- package/ts_interfaces/data/managedsecret.ts +41 -0
- package/ts_interfaces/data/pipeline.ts +32 -0
- package/ts_interfaces/data/project.ts +12 -0
- package/ts_interfaces/data/secret.ts +11 -0
- package/ts_interfaces/data/sync.ts +37 -0
- package/ts_interfaces/index.ts +9 -0
- package/ts_interfaces/plugins.ts +6 -0
- package/ts_interfaces/requests/actionlog.ts +19 -0
- package/ts_interfaces/requests/actions.ts +39 -0
- package/ts_interfaces/requests/admin.ts +43 -0
- package/ts_interfaces/requests/connections.ts +95 -0
- package/ts_interfaces/requests/groups.ts +18 -0
- package/ts_interfaces/requests/index.ts +13 -0
- package/ts_interfaces/requests/jobs.ts +118 -0
- package/ts_interfaces/requests/logs.ts +18 -0
- package/ts_interfaces/requests/managedsecrets.ts +112 -0
- package/ts_interfaces/requests/pipelines.ts +71 -0
- package/ts_interfaces/requests/projects.ts +18 -0
- package/ts_interfaces/requests/secrets.ts +92 -0
- package/ts_interfaces/requests/sync.ts +157 -0
- package/ts_interfaces/requests/webhook.ts +18 -0
- package/ts_web/00_commitinfo_data.ts +8 -0
- package/ts_web/appstate.ts +1251 -0
- package/ts_web/elements/gitops-dashboard.ts +350 -0
- package/ts_web/elements/index.ts +10 -0
- package/ts_web/elements/shared/css.ts +29 -0
- package/ts_web/elements/shared/index.ts +1 -0
- package/ts_web/elements/views/actionlog/index.ts +101 -0
- package/ts_web/elements/views/actions/index.ts +209 -0
- package/ts_web/elements/views/buildlog/index.ts +196 -0
- package/ts_web/elements/views/connections/index.ts +260 -0
- package/ts_web/elements/views/groups/index.ts +134 -0
- package/ts_web/elements/views/jobs/index.ts +424 -0
- package/ts_web/elements/views/managedsecrets/index.ts +502 -0
- package/ts_web/elements/views/overview/index.ts +86 -0
- package/ts_web/elements/views/pipelines/index.ts +561 -0
- package/ts_web/elements/views/projects/index.ts +149 -0
- package/ts_web/elements/views/secrets/index.ts +310 -0
- package/ts_web/elements/views/sync/index.ts +512 -0
- package/ts_web/index.ts +7 -0
- package/ts_web/plugins.ts +15 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
3
|
+
import { requireValidIdentity } from '../helpers/guards.js';
|
|
4
|
+
const TIME_RANGE_MS = {
|
|
5
|
+
'1h': 60 * 60 * 1000,
|
|
6
|
+
'6h': 6 * 60 * 60 * 1000,
|
|
7
|
+
'1d': 24 * 60 * 60 * 1000,
|
|
8
|
+
'3d': 3 * 24 * 60 * 60 * 1000,
|
|
9
|
+
'7d': 7 * 24 * 60 * 60 * 1000,
|
|
10
|
+
'30d': 30 * 24 * 60 * 60 * 1000,
|
|
11
|
+
};
|
|
12
|
+
const STATUS_PRIORITY = {
|
|
13
|
+
running: 0,
|
|
14
|
+
pending: 1,
|
|
15
|
+
waiting: 2,
|
|
16
|
+
manual: 3,
|
|
17
|
+
failed: 4,
|
|
18
|
+
canceled: 5,
|
|
19
|
+
success: 6,
|
|
20
|
+
skipped: 7,
|
|
21
|
+
};
|
|
22
|
+
export class PipelinesHandler {
|
|
23
|
+
opsServerRef;
|
|
24
|
+
typedrouter = new plugins.typedrequest.TypedRouter();
|
|
25
|
+
constructor(opsServerRef) {
|
|
26
|
+
this.opsServerRef = opsServerRef;
|
|
27
|
+
this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
|
|
28
|
+
this.registerHandlers();
|
|
29
|
+
}
|
|
30
|
+
get actionLog() {
|
|
31
|
+
return this.opsServerRef.gitopsAppRef.actionLog;
|
|
32
|
+
}
|
|
33
|
+
registerHandlers() {
|
|
34
|
+
// Get pipelines — supports view modes
|
|
35
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getPipelines', async (dataArg) => {
|
|
36
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
37
|
+
const provider = this.opsServerRef.gitopsAppRef.connectionManager.getProvider(dataArg.connectionId);
|
|
38
|
+
const viewMode = dataArg.viewMode || 'project';
|
|
39
|
+
const timeRange = dataArg.timeRange || '1d';
|
|
40
|
+
const sortBy = dataArg.sortBy || 'created';
|
|
41
|
+
let pipelines;
|
|
42
|
+
if (viewMode === 'project') {
|
|
43
|
+
if (!dataArg.projectId)
|
|
44
|
+
return { pipelines: [] };
|
|
45
|
+
pipelines = await provider.getPipelines(dataArg.projectId, {
|
|
46
|
+
page: dataArg.page,
|
|
47
|
+
status: dataArg.status,
|
|
48
|
+
});
|
|
49
|
+
pipelines = this.filterByTimeRange(pipelines, timeRange);
|
|
50
|
+
}
|
|
51
|
+
else if (viewMode === 'current') {
|
|
52
|
+
pipelines = await this.fetchCurrentPipelines(provider, timeRange);
|
|
53
|
+
}
|
|
54
|
+
else if (viewMode === 'group') {
|
|
55
|
+
if (!dataArg.groupId)
|
|
56
|
+
return { pipelines: [] };
|
|
57
|
+
pipelines = await this.fetchGroupPipelines(provider, dataArg.groupId, timeRange);
|
|
58
|
+
}
|
|
59
|
+
else if (viewMode === 'error') {
|
|
60
|
+
pipelines = await this.fetchErrorPipelines(provider, timeRange);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
pipelines = [];
|
|
64
|
+
}
|
|
65
|
+
return { pipelines: this.sortPipelines(pipelines, sortBy).slice(0, 200) };
|
|
66
|
+
}));
|
|
67
|
+
// Get pipeline jobs
|
|
68
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getPipelineJobs', async (dataArg) => {
|
|
69
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
70
|
+
const provider = this.opsServerRef.gitopsAppRef.connectionManager.getProvider(dataArg.connectionId);
|
|
71
|
+
const jobs = await provider.getPipelineJobs(dataArg.projectId, dataArg.pipelineId);
|
|
72
|
+
return { jobs };
|
|
73
|
+
}));
|
|
74
|
+
// Retry pipeline
|
|
75
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('retryPipeline', async (dataArg) => {
|
|
76
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
77
|
+
const provider = this.opsServerRef.gitopsAppRef.connectionManager.getProvider(dataArg.connectionId);
|
|
78
|
+
await provider.retryPipeline(dataArg.projectId, dataArg.pipelineId);
|
|
79
|
+
this.actionLog.append({
|
|
80
|
+
actionType: 'update',
|
|
81
|
+
entityType: 'pipeline',
|
|
82
|
+
entityId: dataArg.pipelineId,
|
|
83
|
+
entityName: `Pipeline #${dataArg.pipelineId}`,
|
|
84
|
+
details: `Retried pipeline #${dataArg.pipelineId} in project ${dataArg.projectId}`,
|
|
85
|
+
username: dataArg.identity.username,
|
|
86
|
+
});
|
|
87
|
+
return { ok: true };
|
|
88
|
+
}));
|
|
89
|
+
// Cancel pipeline
|
|
90
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('cancelPipeline', async (dataArg) => {
|
|
91
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
92
|
+
const provider = this.opsServerRef.gitopsAppRef.connectionManager.getProvider(dataArg.connectionId);
|
|
93
|
+
await provider.cancelPipeline(dataArg.projectId, dataArg.pipelineId);
|
|
94
|
+
this.actionLog.append({
|
|
95
|
+
actionType: 'delete',
|
|
96
|
+
entityType: 'pipeline',
|
|
97
|
+
entityId: dataArg.pipelineId,
|
|
98
|
+
entityName: `Pipeline #${dataArg.pipelineId}`,
|
|
99
|
+
details: `Cancelled pipeline #${dataArg.pipelineId} in project ${dataArg.projectId}`,
|
|
100
|
+
username: dataArg.identity.username,
|
|
101
|
+
});
|
|
102
|
+
return { ok: true };
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
// View mode helpers
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
/**
|
|
109
|
+
* Current mode: running/pending always shown, plus recent pipelines within timeRange.
|
|
110
|
+
* Fetches a generous page of recent pipelines per project (100), then splits into
|
|
111
|
+
* active (running/pending/waiting) and the rest. Active are always shown; the rest
|
|
112
|
+
* is filtered by timeRange.
|
|
113
|
+
*/
|
|
114
|
+
async fetchCurrentPipelines(provider, timeRange) {
|
|
115
|
+
const projects = await provider.getProjects();
|
|
116
|
+
const allPipelines = await this.fetchAggregatedPipelines(provider, projects, { perPage: 100 });
|
|
117
|
+
// Running/pending pipelines are always shown regardless of time
|
|
118
|
+
const active = allPipelines.filter((p) => p.status === 'running' || p.status === 'pending' || p.status === 'waiting');
|
|
119
|
+
const rest = allPipelines.filter((p) => p.status !== 'running' && p.status !== 'pending' && p.status !== 'waiting');
|
|
120
|
+
const filteredRest = this.filterByTimeRange(rest, timeRange);
|
|
121
|
+
// Deduplicate (active pipelines may also appear in filtered rest)
|
|
122
|
+
const activeIds = new Set(active.map((p) => `${p.connectionId}:${p.projectId}:${p.id}`));
|
|
123
|
+
const uniqueRest = filteredRest.filter((p) => !activeIds.has(`${p.connectionId}:${p.projectId}:${p.id}`));
|
|
124
|
+
return [...active, ...uniqueRest];
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Group mode: pipelines from all projects in a group
|
|
128
|
+
*/
|
|
129
|
+
async fetchGroupPipelines(provider, groupId, timeRange) {
|
|
130
|
+
const projects = await provider.getGroupProjects(groupId);
|
|
131
|
+
const allPipelines = await this.fetchAggregatedPipelines(provider, projects);
|
|
132
|
+
return this.filterByTimeRange(allPipelines, timeRange);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Error mode: only failed pipelines
|
|
136
|
+
*/
|
|
137
|
+
async fetchErrorPipelines(provider, timeRange) {
|
|
138
|
+
const projects = await provider.getProjects();
|
|
139
|
+
const allPipelines = await this.fetchAggregatedPipelines(provider, projects, { status: 'failed' });
|
|
140
|
+
return this.filterByTimeRange(allPipelines, timeRange);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Fetch pipelines from multiple projects in parallel (batched)
|
|
144
|
+
*/
|
|
145
|
+
async fetchAggregatedPipelines(provider, projects, opts) {
|
|
146
|
+
const BATCH_SIZE = 10;
|
|
147
|
+
const perPage = opts?.perPage || 50;
|
|
148
|
+
const allPipelines = [];
|
|
149
|
+
for (let i = 0; i < projects.length; i += BATCH_SIZE) {
|
|
150
|
+
const batch = projects.slice(i, i + BATCH_SIZE);
|
|
151
|
+
const results = await Promise.allSettled(batch.map(async (project) => {
|
|
152
|
+
const pipelines = await provider.getPipelines(project.id, {
|
|
153
|
+
perPage,
|
|
154
|
+
status: opts?.status,
|
|
155
|
+
});
|
|
156
|
+
// Enrich with proper project name
|
|
157
|
+
return pipelines.map((p) => ({
|
|
158
|
+
...p,
|
|
159
|
+
projectName: project.fullPath || project.name || p.projectId,
|
|
160
|
+
}));
|
|
161
|
+
}));
|
|
162
|
+
for (let j = 0; j < results.length; j++) {
|
|
163
|
+
const result = results[j];
|
|
164
|
+
if (result.status === 'fulfilled') {
|
|
165
|
+
allPipelines.push(...result.value);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
const projectId = batch[j]?.id || 'unknown';
|
|
169
|
+
console.warn(`[PipelinesHandler] Failed to fetch pipelines for project ${projectId}: ${result.reason}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return allPipelines;
|
|
174
|
+
}
|
|
175
|
+
// ---------------------------------------------------------------------------
|
|
176
|
+
// Filtering and sorting
|
|
177
|
+
// ---------------------------------------------------------------------------
|
|
178
|
+
filterByTimeRange(pipelines, timeRange) {
|
|
179
|
+
const cutoffMs = TIME_RANGE_MS[timeRange] || TIME_RANGE_MS['1d'];
|
|
180
|
+
const cutoff = Date.now() - cutoffMs;
|
|
181
|
+
return pipelines.filter((p) => {
|
|
182
|
+
if (!p.createdAt)
|
|
183
|
+
return false;
|
|
184
|
+
return new Date(p.createdAt).getTime() >= cutoff;
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
sortPipelines(pipelines, sortBy) {
|
|
188
|
+
const sorted = [...pipelines];
|
|
189
|
+
switch (sortBy) {
|
|
190
|
+
case 'duration':
|
|
191
|
+
sorted.sort((a, b) => (b.duration || 0) - (a.duration || 0));
|
|
192
|
+
break;
|
|
193
|
+
case 'status':
|
|
194
|
+
sorted.sort((a, b) => (STATUS_PRIORITY[a.status] ?? 99) - (STATUS_PRIORITY[b.status] ?? 99));
|
|
195
|
+
break;
|
|
196
|
+
case 'created':
|
|
197
|
+
default:
|
|
198
|
+
sorted.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
return sorted;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmVzLmhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9vcHNzZXJ2ZXIvaGFuZGxlcnMvcGlwZWxpbmVzLmhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEtBQUssVUFBVSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRzVELE1BQU0sYUFBYSxHQUEyQjtJQUM1QyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQ3BCLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQ3hCLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQ3pCLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtJQUM3QixJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7SUFDN0IsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0NBQ2hDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBMkI7SUFDOUMsT0FBTyxFQUFFLENBQUM7SUFDVixPQUFPLEVBQUUsQ0FBQztJQUNWLE9BQU8sRUFBRSxDQUFDO0lBQ1YsTUFBTSxFQUFFLENBQUM7SUFDVCxNQUFNLEVBQUUsQ0FBQztJQUNULFFBQVEsRUFBRSxDQUFDO0lBQ1gsT0FBTyxFQUFFLENBQUM7SUFDVixPQUFPLEVBQUUsQ0FBQztDQUNYLENBQUM7QUFFRixNQUFNLE9BQU8sZ0JBQWdCO0lBR1A7SUFGYixXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxD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
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import type { OpsServer } from '../classes.opsserver.js';
|
|
3
|
+
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
4
|
+
export declare class ProjectsHandler {
|
|
5
|
+
private opsServerRef;
|
|
6
|
+
typedrouter: plugins.typedrequest.TypedRouter<interfaces.typedrequestInterfaces.ITypedRequest>;
|
|
7
|
+
constructor(opsServerRef: OpsServer);
|
|
8
|
+
private registerHandlers;
|
|
9
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
3
|
+
import { requireValidIdentity } from '../helpers/guards.js';
|
|
4
|
+
export class ProjectsHandler {
|
|
5
|
+
opsServerRef;
|
|
6
|
+
typedrouter = new plugins.typedrequest.TypedRouter();
|
|
7
|
+
constructor(opsServerRef) {
|
|
8
|
+
this.opsServerRef = opsServerRef;
|
|
9
|
+
this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
|
|
10
|
+
this.registerHandlers();
|
|
11
|
+
}
|
|
12
|
+
registerHandlers() {
|
|
13
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getProjects', async (dataArg) => {
|
|
14
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
15
|
+
const provider = this.opsServerRef.gitopsAppRef.connectionManager.getProvider(dataArg.connectionId);
|
|
16
|
+
const projects = await provider.getProjects({
|
|
17
|
+
search: dataArg.search,
|
|
18
|
+
page: dataArg.page,
|
|
19
|
+
});
|
|
20
|
+
return { projects };
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdHMuaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL29wc3NlcnZlci9oYW5kbGVycy9wcm9qZWN0cy5oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU1RCxNQUFNLE9BQU8sZUFBZTtJQUdOO0lBRmIsV0FBVyxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUU1RCxZQUFvQixZQUF1QjtRQUF2QixpQkFBWSxHQUFaLFlBQVksQ0FBVztRQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQzlCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQ25DLGFBQWEsRUFDYixLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQzNFLE9BQU8sQ0FBQyxZQUFZLENBQ3JCLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxXQUFXLENBQUM7Z0JBQzFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDdEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2FBQ25CLENBQUMsQ0FBQztZQUNILE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import type { OpsServer } from '../classes.opsserver.js';
|
|
3
|
+
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
4
|
+
export declare class SecretsHandler {
|
|
5
|
+
private opsServerRef;
|
|
6
|
+
typedrouter: plugins.typedrequest.TypedRouter<interfaces.typedrequestInterfaces.ITypedRequest>;
|
|
7
|
+
constructor(opsServerRef: OpsServer);
|
|
8
|
+
private get actionLog();
|
|
9
|
+
private registerHandlers;
|
|
10
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
3
|
+
import { requireValidIdentity } from '../helpers/guards.js';
|
|
4
|
+
export class SecretsHandler {
|
|
5
|
+
opsServerRef;
|
|
6
|
+
typedrouter = new plugins.typedrequest.TypedRouter();
|
|
7
|
+
constructor(opsServerRef) {
|
|
8
|
+
this.opsServerRef = opsServerRef;
|
|
9
|
+
this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
|
|
10
|
+
this.registerHandlers();
|
|
11
|
+
}
|
|
12
|
+
get actionLog() {
|
|
13
|
+
return this.opsServerRef.gitopsAppRef.actionLog;
|
|
14
|
+
}
|
|
15
|
+
registerHandlers() {
|
|
16
|
+
// Get all secrets (cache-first, falls back to live fetch)
|
|
17
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getAllSecrets', async (dataArg) => {
|
|
18
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
19
|
+
const scanService = this.opsServerRef.gitopsAppRef.secretsScanService;
|
|
20
|
+
// Try cache first
|
|
21
|
+
const hasCached = await scanService.hasCachedData(dataArg.connectionId, dataArg.scope);
|
|
22
|
+
if (hasCached) {
|
|
23
|
+
const secrets = await scanService.getCachedSecrets({
|
|
24
|
+
connectionId: dataArg.connectionId,
|
|
25
|
+
scope: dataArg.scope,
|
|
26
|
+
});
|
|
27
|
+
return { secrets };
|
|
28
|
+
}
|
|
29
|
+
// Cache miss: live fetch and save to cache
|
|
30
|
+
const provider = this.opsServerRef.gitopsAppRef.connectionManager.getProvider(dataArg.connectionId);
|
|
31
|
+
const allSecrets = [];
|
|
32
|
+
if (dataArg.scope === 'project') {
|
|
33
|
+
const projects = await provider.getProjects();
|
|
34
|
+
for (let i = 0; i < projects.length; i += 5) {
|
|
35
|
+
const batch = projects.slice(i, i + 5);
|
|
36
|
+
const results = await Promise.allSettled(batch.map(async (p) => {
|
|
37
|
+
const secrets = await provider.getProjectSecrets(p.id);
|
|
38
|
+
return secrets.map((s) => ({
|
|
39
|
+
...s,
|
|
40
|
+
scopeName: p.fullPath || p.name,
|
|
41
|
+
scope: 'project',
|
|
42
|
+
scopeId: p.id,
|
|
43
|
+
connectionId: dataArg.connectionId,
|
|
44
|
+
}));
|
|
45
|
+
}));
|
|
46
|
+
for (const result of results) {
|
|
47
|
+
if (result.status === 'fulfilled') {
|
|
48
|
+
allSecrets.push(...result.value);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const groups = await provider.getGroups();
|
|
55
|
+
for (let i = 0; i < groups.length; i += 5) {
|
|
56
|
+
const batch = groups.slice(i, i + 5);
|
|
57
|
+
const results = await Promise.allSettled(batch.map(async (g) => {
|
|
58
|
+
const secrets = await provider.getGroupSecrets(g.id);
|
|
59
|
+
return secrets.map((s) => ({
|
|
60
|
+
...s,
|
|
61
|
+
scopeName: g.fullPath || g.name,
|
|
62
|
+
scope: 'group',
|
|
63
|
+
scopeId: g.id,
|
|
64
|
+
connectionId: dataArg.connectionId,
|
|
65
|
+
}));
|
|
66
|
+
}));
|
|
67
|
+
for (const result of results) {
|
|
68
|
+
if (result.status === 'fulfilled') {
|
|
69
|
+
allSecrets.push(...result.value);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Save fetched secrets to cache (fire-and-forget)
|
|
75
|
+
scanService.saveSecrets(allSecrets).catch(() => { });
|
|
76
|
+
return { secrets: allSecrets };
|
|
77
|
+
}));
|
|
78
|
+
// Get secrets (cache-first for single entity)
|
|
79
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getSecrets', async (dataArg) => {
|
|
80
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
81
|
+
const scanService = this.opsServerRef.gitopsAppRef.secretsScanService;
|
|
82
|
+
// Try cache first
|
|
83
|
+
const cached = await scanService.getCachedSecrets({
|
|
84
|
+
connectionId: dataArg.connectionId,
|
|
85
|
+
scope: dataArg.scope,
|
|
86
|
+
scopeId: dataArg.scopeId,
|
|
87
|
+
});
|
|
88
|
+
if (cached.length > 0) {
|
|
89
|
+
return { secrets: cached };
|
|
90
|
+
}
|
|
91
|
+
// Cache miss: live fetch
|
|
92
|
+
const provider = this.opsServerRef.gitopsAppRef.connectionManager.getProvider(dataArg.connectionId);
|
|
93
|
+
const secrets = dataArg.scope === 'project'
|
|
94
|
+
? await provider.getProjectSecrets(dataArg.scopeId)
|
|
95
|
+
: await provider.getGroupSecrets(dataArg.scopeId);
|
|
96
|
+
// Save to cache (fire-and-forget)
|
|
97
|
+
const fullSecrets = secrets.map((s) => ({
|
|
98
|
+
...s,
|
|
99
|
+
scope: dataArg.scope,
|
|
100
|
+
scopeId: dataArg.scopeId,
|
|
101
|
+
connectionId: dataArg.connectionId,
|
|
102
|
+
}));
|
|
103
|
+
scanService.saveSecrets(fullSecrets).catch(() => { });
|
|
104
|
+
return { secrets };
|
|
105
|
+
}));
|
|
106
|
+
// Create secret
|
|
107
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('createSecret', async (dataArg) => {
|
|
108
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
109
|
+
const provider = this.opsServerRef.gitopsAppRef.connectionManager.getProvider(dataArg.connectionId);
|
|
110
|
+
const secret = dataArg.scope === 'project'
|
|
111
|
+
? await provider.createProjectSecret(dataArg.scopeId, dataArg.key, dataArg.value)
|
|
112
|
+
: await provider.createGroupSecret(dataArg.scopeId, dataArg.key, dataArg.value);
|
|
113
|
+
// Refresh cache for this entity
|
|
114
|
+
const scanService = this.opsServerRef.gitopsAppRef.secretsScanService;
|
|
115
|
+
scanService.scanEntity(dataArg.connectionId, dataArg.scope, dataArg.scopeId).catch(() => { });
|
|
116
|
+
this.actionLog.append({
|
|
117
|
+
actionType: 'create',
|
|
118
|
+
entityType: 'secret',
|
|
119
|
+
entityId: `${dataArg.scopeId}/${dataArg.key}`,
|
|
120
|
+
entityName: dataArg.key,
|
|
121
|
+
details: `Created ${dataArg.scope} secret "${dataArg.key}" in ${dataArg.scopeId}`,
|
|
122
|
+
username: dataArg.identity.username,
|
|
123
|
+
});
|
|
124
|
+
return { secret };
|
|
125
|
+
}));
|
|
126
|
+
// Update secret
|
|
127
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('updateSecret', async (dataArg) => {
|
|
128
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
129
|
+
const provider = this.opsServerRef.gitopsAppRef.connectionManager.getProvider(dataArg.connectionId);
|
|
130
|
+
const secret = dataArg.scope === 'project'
|
|
131
|
+
? await provider.updateProjectSecret(dataArg.scopeId, dataArg.key, dataArg.value)
|
|
132
|
+
: await provider.updateGroupSecret(dataArg.scopeId, dataArg.key, dataArg.value);
|
|
133
|
+
// Refresh cache for this entity
|
|
134
|
+
const scanService = this.opsServerRef.gitopsAppRef.secretsScanService;
|
|
135
|
+
scanService.scanEntity(dataArg.connectionId, dataArg.scope, dataArg.scopeId).catch(() => { });
|
|
136
|
+
this.actionLog.append({
|
|
137
|
+
actionType: 'update',
|
|
138
|
+
entityType: 'secret',
|
|
139
|
+
entityId: `${dataArg.scopeId}/${dataArg.key}`,
|
|
140
|
+
entityName: dataArg.key,
|
|
141
|
+
details: `Updated ${dataArg.scope} secret "${dataArg.key}" in ${dataArg.scopeId}`,
|
|
142
|
+
username: dataArg.identity.username,
|
|
143
|
+
});
|
|
144
|
+
return { secret };
|
|
145
|
+
}));
|
|
146
|
+
// Delete secret
|
|
147
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('deleteSecret', async (dataArg) => {
|
|
148
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
149
|
+
const provider = this.opsServerRef.gitopsAppRef.connectionManager.getProvider(dataArg.connectionId);
|
|
150
|
+
if (dataArg.scope === 'project') {
|
|
151
|
+
await provider.deleteProjectSecret(dataArg.scopeId, dataArg.key);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
await provider.deleteGroupSecret(dataArg.scopeId, dataArg.key);
|
|
155
|
+
}
|
|
156
|
+
// Refresh cache for this entity
|
|
157
|
+
const scanService = this.opsServerRef.gitopsAppRef.secretsScanService;
|
|
158
|
+
scanService.scanEntity(dataArg.connectionId, dataArg.scope, dataArg.scopeId).catch(() => { });
|
|
159
|
+
this.actionLog.append({
|
|
160
|
+
actionType: 'delete',
|
|
161
|
+
entityType: 'secret',
|
|
162
|
+
entityId: `${dataArg.scopeId}/${dataArg.key}`,
|
|
163
|
+
entityName: dataArg.key,
|
|
164
|
+
details: `Deleted ${dataArg.scope} secret "${dataArg.key}" from ${dataArg.scopeId}`,
|
|
165
|
+
username: dataArg.identity.username,
|
|
166
|
+
});
|
|
167
|
+
return { ok: true };
|
|
168
|
+
}));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy5oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvb3Bzc2VydmVyL2hhbmRsZXJzL3NlY3JldHMuaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8sS0FBSyxVQUFVLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFNUQsTUFBTSxPQUFPLGNBQWM7SUFHTDtJQUZiLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFNUQsWUFBb0IsWUFBdUI7UUFBdkIsaUJBQVksR0FBWixZQUFZLENBQVc7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBWSxTQUFTO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO0lBQ2xELENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsMERBQTBEO1FBQzFELElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUM5QixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUNuQyxlQUFlLEVBQ2YsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE1BQU0sb0JBQW9CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDcEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUM7WUFFdEUsa0JBQWtCO1lBQ2xCLE1BQU0sU0FBUyxHQUFHLE1BQU0sV0FBVyxDQUFDLGFB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
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import type { OpsServer } from '../classes.opsserver.js';
|
|
3
|
+
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
4
|
+
export declare class SyncHandler {
|
|
5
|
+
private opsServerRef;
|
|
6
|
+
typedrouter: plugins.typedrequest.TypedRouter<interfaces.typedrequestInterfaces.ITypedRequest>;
|
|
7
|
+
constructor(opsServerRef: OpsServer);
|
|
8
|
+
/**
|
|
9
|
+
* Wire up the logger's broadcast function to push sync log entries
|
|
10
|
+
* to all connected frontends via TypedSocket.
|
|
11
|
+
*/
|
|
12
|
+
private setupBroadcast;
|
|
13
|
+
private get syncManager();
|
|
14
|
+
private get actionLog();
|
|
15
|
+
private registerHandlers;
|
|
16
|
+
}
|