@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,166 @@
|
|
|
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
|
+
import { logger } from '../../logging.js';
|
|
5
|
+
export class SyncHandler {
|
|
6
|
+
opsServerRef;
|
|
7
|
+
typedrouter = new plugins.typedrequest.TypedRouter();
|
|
8
|
+
constructor(opsServerRef) {
|
|
9
|
+
this.opsServerRef = opsServerRef;
|
|
10
|
+
this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
|
|
11
|
+
this.registerHandlers();
|
|
12
|
+
this.setupBroadcast();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Wire up the logger's broadcast function to push sync log entries
|
|
16
|
+
* to all connected frontends via TypedSocket.
|
|
17
|
+
*/
|
|
18
|
+
setupBroadcast() {
|
|
19
|
+
logger.setBroadcastFn((entry) => {
|
|
20
|
+
try {
|
|
21
|
+
const typedsocket = this.opsServerRef.server?.typedserver?.typedsocket;
|
|
22
|
+
if (!typedsocket)
|
|
23
|
+
return;
|
|
24
|
+
typedsocket.findAllTargetConnectionsByTag('syncLogClient').then((connections) => {
|
|
25
|
+
for (const conn of connections) {
|
|
26
|
+
typedsocket
|
|
27
|
+
.createTypedRequest('pushSyncLog', conn)
|
|
28
|
+
.fire({ entry })
|
|
29
|
+
.catch(() => { });
|
|
30
|
+
}
|
|
31
|
+
}).catch(() => { });
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Server may not be ready yet — ignore
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
get syncManager() {
|
|
39
|
+
return this.opsServerRef.gitopsAppRef.syncManager;
|
|
40
|
+
}
|
|
41
|
+
get actionLog() {
|
|
42
|
+
return this.opsServerRef.gitopsAppRef.actionLog;
|
|
43
|
+
}
|
|
44
|
+
registerHandlers() {
|
|
45
|
+
// Get all sync configs
|
|
46
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getSyncConfigs', async (dataArg) => {
|
|
47
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
48
|
+
return { configs: this.syncManager.getConfigs() };
|
|
49
|
+
}));
|
|
50
|
+
// Create sync config
|
|
51
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('createSyncConfig', async (dataArg) => {
|
|
52
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
53
|
+
const config = await this.syncManager.createConfig({
|
|
54
|
+
name: dataArg.name,
|
|
55
|
+
sourceConnectionId: dataArg.sourceConnectionId,
|
|
56
|
+
targetConnectionId: dataArg.targetConnectionId,
|
|
57
|
+
targetGroupOffset: dataArg.targetGroupOffset,
|
|
58
|
+
intervalMinutes: dataArg.intervalMinutes,
|
|
59
|
+
enforceDelete: dataArg.enforceDelete,
|
|
60
|
+
enforceGroupDelete: dataArg.enforceGroupDelete,
|
|
61
|
+
addMirrorHint: dataArg.addMirrorHint,
|
|
62
|
+
useGroupAvatarsForProjects: dataArg.useGroupAvatarsForProjects,
|
|
63
|
+
});
|
|
64
|
+
this.actionLog.append({
|
|
65
|
+
actionType: 'create',
|
|
66
|
+
entityType: 'sync',
|
|
67
|
+
entityId: config.id,
|
|
68
|
+
entityName: config.name,
|
|
69
|
+
details: `Created sync config "${config.name}" (${config.intervalMinutes}m interval)`,
|
|
70
|
+
username: dataArg.identity.username,
|
|
71
|
+
});
|
|
72
|
+
return { config };
|
|
73
|
+
}));
|
|
74
|
+
// Update sync config
|
|
75
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('updateSyncConfig', async (dataArg) => {
|
|
76
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
77
|
+
const config = await this.syncManager.updateConfig(dataArg.syncConfigId, {
|
|
78
|
+
name: dataArg.name,
|
|
79
|
+
targetGroupOffset: dataArg.targetGroupOffset,
|
|
80
|
+
intervalMinutes: dataArg.intervalMinutes,
|
|
81
|
+
enforceDelete: dataArg.enforceDelete,
|
|
82
|
+
enforceGroupDelete: dataArg.enforceGroupDelete,
|
|
83
|
+
addMirrorHint: dataArg.addMirrorHint,
|
|
84
|
+
useGroupAvatarsForProjects: dataArg.useGroupAvatarsForProjects,
|
|
85
|
+
});
|
|
86
|
+
this.actionLog.append({
|
|
87
|
+
actionType: 'update',
|
|
88
|
+
entityType: 'sync',
|
|
89
|
+
entityId: config.id,
|
|
90
|
+
entityName: config.name,
|
|
91
|
+
details: `Updated sync config "${config.name}"`,
|
|
92
|
+
username: dataArg.identity.username,
|
|
93
|
+
});
|
|
94
|
+
return { config };
|
|
95
|
+
}));
|
|
96
|
+
// Delete sync config
|
|
97
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('deleteSyncConfig', async (dataArg) => {
|
|
98
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
99
|
+
const config = this.syncManager.getConfig(dataArg.syncConfigId);
|
|
100
|
+
await this.syncManager.deleteConfig(dataArg.syncConfigId);
|
|
101
|
+
this.actionLog.append({
|
|
102
|
+
actionType: 'delete',
|
|
103
|
+
entityType: 'sync',
|
|
104
|
+
entityId: dataArg.syncConfigId,
|
|
105
|
+
entityName: config?.name || dataArg.syncConfigId,
|
|
106
|
+
details: `Deleted sync config "${config?.name || dataArg.syncConfigId}"`,
|
|
107
|
+
username: dataArg.identity.username,
|
|
108
|
+
});
|
|
109
|
+
return { ok: true };
|
|
110
|
+
}));
|
|
111
|
+
// Pause/resume sync config
|
|
112
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('pauseSyncConfig', async (dataArg) => {
|
|
113
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
114
|
+
const config = await this.syncManager.pauseConfig(dataArg.syncConfigId, dataArg.paused);
|
|
115
|
+
this.actionLog.append({
|
|
116
|
+
actionType: dataArg.paused ? 'pause' : 'resume',
|
|
117
|
+
entityType: 'sync',
|
|
118
|
+
entityId: config.id,
|
|
119
|
+
entityName: config.name,
|
|
120
|
+
details: `${dataArg.paused ? 'Paused' : 'Resumed'} sync config "${config.name}"`,
|
|
121
|
+
username: dataArg.identity.username,
|
|
122
|
+
});
|
|
123
|
+
return { config };
|
|
124
|
+
}));
|
|
125
|
+
// Trigger sync manually
|
|
126
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('triggerSync', async (dataArg) => {
|
|
127
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
128
|
+
const config = this.syncManager.getConfig(dataArg.syncConfigId);
|
|
129
|
+
if (!config) {
|
|
130
|
+
return { ok: false, message: 'Sync config not found' };
|
|
131
|
+
}
|
|
132
|
+
// Fire and forget — force=true bypasses paused check for manual triggers
|
|
133
|
+
this.syncManager.executeSync(dataArg.syncConfigId, true).catch((err) => {
|
|
134
|
+
console.error(`Manual sync trigger failed: ${err}`);
|
|
135
|
+
});
|
|
136
|
+
this.actionLog.append({
|
|
137
|
+
actionType: 'sync',
|
|
138
|
+
entityType: 'sync',
|
|
139
|
+
entityId: config.id,
|
|
140
|
+
entityName: config.name,
|
|
141
|
+
details: `Manually triggered sync "${config.name}"`,
|
|
142
|
+
username: dataArg.identity.username,
|
|
143
|
+
});
|
|
144
|
+
return { ok: true, message: 'Sync triggered' };
|
|
145
|
+
}));
|
|
146
|
+
// Preview sync (dry run — shows source → target mappings)
|
|
147
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('previewSync', async (dataArg) => {
|
|
148
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
149
|
+
const result = await this.syncManager.previewSync(dataArg.syncConfigId);
|
|
150
|
+
return { mappings: result.mappings, deletions: result.deletions, groupDeletions: result.groupDeletions };
|
|
151
|
+
}));
|
|
152
|
+
// Get repo statuses for a sync config
|
|
153
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getSyncRepoStatuses', async (dataArg) => {
|
|
154
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
155
|
+
const statuses = await this.syncManager.getRepoStatuses(dataArg.syncConfigId);
|
|
156
|
+
return { statuses };
|
|
157
|
+
}));
|
|
158
|
+
// Get recent sync log entries
|
|
159
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getSyncLogs', async (dataArg) => {
|
|
160
|
+
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
|
161
|
+
const logs = logger.getSyncLogs(dataArg.limit || 200);
|
|
162
|
+
return { logs };
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy5oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvb3Bzc2VydmVyL2hhbmRsZXJzL3N5bmMuaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8sS0FBSyxVQUFVLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFDLE1BQU0sT0FBTyxXQUFXO0lBR0Y7SUFGYixXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRTVELFlBQW9CLFlBQXVCO1FBQXZCLGlCQUFZLEdBQVosWUFBWSxDQUFXO1FBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxjQUFjO1FBQ3BCLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM5QixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLFdBQVc7b0JBQUUsT0FBTztnQkFDekIsV0FBVyxDQUFDLDZCQUE2QixDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUM5RSxLQUFLLE1BQU0sSUFBSSxJQUFJLFdBQVcsRUFBRSxDQUFDO3dCQUMvQixXQUFXOzZCQUNSLGtC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
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import type { OpsServer } from '../classes.opsserver.js';
|
|
3
|
+
export declare class WebhookHandler {
|
|
4
|
+
private opsServerRef;
|
|
5
|
+
constructor(opsServerRef: OpsServer);
|
|
6
|
+
registerRoutes(typedserver: plugins.typedserver.TypedServer): void;
|
|
7
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import { logger } from '../../logging.js';
|
|
3
|
+
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
4
|
+
export class WebhookHandler {
|
|
5
|
+
opsServerRef;
|
|
6
|
+
constructor(opsServerRef) {
|
|
7
|
+
this.opsServerRef = opsServerRef;
|
|
8
|
+
}
|
|
9
|
+
registerRoutes(typedserver) {
|
|
10
|
+
typedserver.addRoute('/webhook/:connectionId', 'POST', async (ctx) => {
|
|
11
|
+
const connectionId = ctx.params.connectionId;
|
|
12
|
+
// Validate connection exists
|
|
13
|
+
const connection = this.opsServerRef.gitopsAppRef.connectionManager.getConnection(connectionId);
|
|
14
|
+
if (!connection) {
|
|
15
|
+
return new Response(JSON.stringify({ error: 'Connection not found' }), {
|
|
16
|
+
status: 404,
|
|
17
|
+
headers: { 'Content-Type': 'application/json' },
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
// Parse event type from provider-specific headers
|
|
21
|
+
const giteaEvent = ctx.headers.get('X-Gitea-Event');
|
|
22
|
+
const gitlabEvent = ctx.headers.get('X-Gitlab-Event');
|
|
23
|
+
const event = giteaEvent || gitlabEvent || 'unknown';
|
|
24
|
+
const provider = giteaEvent ? 'gitea' : gitlabEvent ? 'gitlab' : 'unknown';
|
|
25
|
+
logger.info(`Webhook received: ${provider}/${event} for connection ${connection.name} (${connectionId})`);
|
|
26
|
+
// Broadcast to all connected frontends via TypedSocket
|
|
27
|
+
try {
|
|
28
|
+
const typedsocket = this.opsServerRef.server.typedserver.typedsocket;
|
|
29
|
+
if (typedsocket) {
|
|
30
|
+
const connections = await typedsocket.findAllTargetConnectionsByTag('syncLogClient');
|
|
31
|
+
for (const conn of connections) {
|
|
32
|
+
const req = typedsocket.createTypedRequest('webhookNotification', conn);
|
|
33
|
+
req.fire({
|
|
34
|
+
connectionId,
|
|
35
|
+
provider,
|
|
36
|
+
event,
|
|
37
|
+
timestamp: Date.now(),
|
|
38
|
+
}).catch((err) => {
|
|
39
|
+
logger.warn(`Failed to notify client: ${err.message || err}`);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
logger.warn(`Failed to broadcast webhook event: ${err.message || err}`);
|
|
46
|
+
}
|
|
47
|
+
return new Response(JSON.stringify({ ok: true }), {
|
|
48
|
+
status: 200,
|
|
49
|
+
headers: { 'Content-Type': 'application/json' },
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
logger.info('WebhookHandler routes registered');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViaG9vay5oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvb3Bzc2VydmVyL2hhbmRsZXJzL3dlYmhvb2suaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQyxPQUFPLEtBQUssVUFBVSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlELE1BQU0sT0FBTyxjQUFjO0lBQ0w7SUFBcEIsWUFBb0IsWUFBdUI7UUFBdkIsaUJBQVksR0FBWixZQUFZLENBQVc7SUFBRyxDQUFDO0lBRXhDLGNBQWMsQ0FBQyxXQUE0QztRQUNoRSxXQUFXLENBQUMsUUFBUSxDQUFDLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDbkUsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFFN0MsNkJBQTZCO1lBQzdCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxDQUFDLEVBQUU7b0JBQ3JFLE1BQU0sRUFBRSxHQUFHO29CQUNYLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRTtpQkFDaEQsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELGtEQUFrRDtZQUNsRCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNwRCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3RELE1BQU0sS0FBSyxHQUFHLFVBQVUsSUFBSSxXQUFXLElBQUksU0FBUyxDQUFDO1lBQ3JELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBRTNFLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLFFBQVEsSUFBSSxLQUFLLG1CQUFtQixVQUFVLENBQUMsSUFBSSxLQUFLLFlBQVksR0FBRyxDQUFDLENBQUM7WUFFMUcsdURBQXVEO1lBQ3ZELElBQUksQ0FBQztnQkFDSCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO2dCQUNyRSxJQUFJLFdBQVcsRUFBRSxDQUFDO29CQUNoQixNQUFNLFdBQVcsR0FBRyxNQUFNLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFDckYsS0FBSyxNQUFNLElBQUksSUFBSSxXQUFXLEVBQUUsQ0FBQzt3QkFDL0IsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUN4QyxxQkFBcUIsRUFDckIsSUFBSSxDQUNMLENBQUM7d0JBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQzs0QkFDUCxZQUFZOzRCQUNaLFFBQVE7NEJBQ1IsS0FBSzs0QkFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTt5QkFDdEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFOzRCQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7d0JBQ2hFLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO2dCQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUUsQ0FBQztZQUVELE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO2dCQUNoRCxNQUFNLEVBQUUsR0FBRztnQkFDWCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7YUFDaEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AdminHandler } from '../handlers/admin.handler.js';
|
|
2
|
+
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
3
|
+
export declare function requireValidIdentity<T extends {
|
|
4
|
+
identity?: interfaces.data.IIdentity;
|
|
5
|
+
}>(adminHandler: AdminHandler, dataArg: T): Promise<void>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
3
|
+
export async function requireValidIdentity(adminHandler, dataArg) {
|
|
4
|
+
if (!dataArg.identity) {
|
|
5
|
+
throw new plugins.typedrequest.TypedResponseError('No identity provided');
|
|
6
|
+
}
|
|
7
|
+
const passed = await adminHandler.validIdentityGuard.exec({ identity: dataArg.identity });
|
|
8
|
+
if (!passed) {
|
|
9
|
+
throw new plugins.typedrequest.TypedResponseError('Valid identity required');
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvb3Bzc2VydmVyL2hlbHBlcnMvZ3VhcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUN4QyxZQUEwQixFQUMxQixPQUFVO0lBRVYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMvRSxDQUFDO0FBQ0gsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { OpsServer } from './classes.opsserver.js';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { OpsServer } from './classes.opsserver.js';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9vcHNzZXJ2ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDIn0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface IGitopsPaths {
|
|
2
|
+
gitopsHomeDir: string;
|
|
3
|
+
defaultStoragePath: string;
|
|
4
|
+
defaultTsmDbPath: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Resolve gitops paths. Accepts optional baseDir for test isolation.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolvePaths(baseDir?: string): IGitopsPaths;
|
package/dist_ts/paths.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve gitops paths. Accepts optional baseDir for test isolation.
|
|
4
|
+
*/
|
|
5
|
+
export function resolvePaths(baseDir) {
|
|
6
|
+
const home = baseDir ?? plugins.path.join(process.env.HOME ?? '/tmp', '.serve.zone', 'gitops');
|
|
7
|
+
return {
|
|
8
|
+
gitopsHomeDir: home,
|
|
9
|
+
defaultStoragePath: plugins.path.join(home, 'storage'),
|
|
10
|
+
defaultTsmDbPath: plugins.path.join(home, 'tsmdb'),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQVF4Qzs7R0FFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsT0FBZ0I7SUFDM0MsTUFBTSxJQUFJLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0YsT0FBTztRQUNMLGFBQWEsRUFBRSxJQUFJO1FBQ25CLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7UUFDdEQsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztLQUNuRCxDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized dependency imports for GitOps
|
|
3
|
+
*/
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import * as fs from 'node:fs/promises';
|
|
6
|
+
import * as os from 'node:os';
|
|
7
|
+
import * as nodeUrl from 'node:url';
|
|
8
|
+
import * as childProcess from 'node:child_process';
|
|
9
|
+
import { Buffer } from 'node:buffer';
|
|
10
|
+
export { path, fs, os, nodeUrl, childProcess, Buffer };
|
|
11
|
+
import * as typedrequest from '@api.global/typedrequest';
|
|
12
|
+
import * as typedserver from '@api.global/typedserver';
|
|
13
|
+
export { typedrequest, typedserver };
|
|
14
|
+
import * as smartguard from '@push.rocks/smartguard';
|
|
15
|
+
import * as smartjwt from '@push.rocks/smartjwt';
|
|
16
|
+
export { smartguard, smartjwt };
|
|
17
|
+
import * as giteaClient from '@apiclient.xyz/gitea';
|
|
18
|
+
import * as gitlabClient from '@apiclient.xyz/gitlab';
|
|
19
|
+
import * as bookstackClient from '@apiclient.xyz/bookstack';
|
|
20
|
+
export { giteaClient, gitlabClient, bookstackClient };
|
|
21
|
+
import * as smartmongo from '@push.rocks/smartmongo';
|
|
22
|
+
import * as smartdata from '@push.rocks/smartdata';
|
|
23
|
+
export { smartmongo, smartdata };
|
|
24
|
+
import * as smartsecret from '@push.rocks/smartsecret';
|
|
25
|
+
export { smartsecret };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized dependency imports for GitOps
|
|
3
|
+
*/
|
|
4
|
+
// Node native scope
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
import * as fs from 'node:fs/promises';
|
|
7
|
+
import * as os from 'node:os';
|
|
8
|
+
import * as nodeUrl from 'node:url';
|
|
9
|
+
import * as childProcess from 'node:child_process';
|
|
10
|
+
import { Buffer } from 'node:buffer';
|
|
11
|
+
export { path, fs, os, nodeUrl, childProcess, Buffer };
|
|
12
|
+
// TypedRequest/TypedServer infrastructure
|
|
13
|
+
import * as typedrequest from '@api.global/typedrequest';
|
|
14
|
+
import * as typedserver from '@api.global/typedserver';
|
|
15
|
+
export { typedrequest, typedserver };
|
|
16
|
+
// Auth & Guards
|
|
17
|
+
import * as smartguard from '@push.rocks/smartguard';
|
|
18
|
+
import * as smartjwt from '@push.rocks/smartjwt';
|
|
19
|
+
export { smartguard, smartjwt };
|
|
20
|
+
// API Clients
|
|
21
|
+
import * as giteaClient from '@apiclient.xyz/gitea';
|
|
22
|
+
import * as gitlabClient from '@apiclient.xyz/gitlab';
|
|
23
|
+
import * as bookstackClient from '@apiclient.xyz/bookstack';
|
|
24
|
+
export { giteaClient, gitlabClient, bookstackClient };
|
|
25
|
+
// Database
|
|
26
|
+
import * as smartmongo from '@push.rocks/smartmongo';
|
|
27
|
+
import * as smartdata from '@push.rocks/smartdata';
|
|
28
|
+
export { smartmongo, smartdata };
|
|
29
|
+
// Secrets
|
|
30
|
+
import * as smartsecret from '@push.rocks/smartsecret';
|
|
31
|
+
export { smartsecret };
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEtBQUssT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEtBQUssWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFFdkQsMENBQTBDO0FBQzFDLE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBRXJDLGdCQUFnQjtBQUNoQixPQUFPLEtBQUssVUFBVSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUVoQyxjQUFjO0FBQ2QsT0FBTyxLQUFLLFdBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssWUFBWSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sS0FBSyxlQUFlLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFFdEQsV0FBVztBQUNYLE9BQU8sS0FBSyxVQUFVLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBRWpDLFVBQVU7QUFDVixPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyJ9
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type * as interfaces from '../../dist_ts_interfaces/index.js';
|
|
2
|
+
export interface ITestConnectionResult {
|
|
3
|
+
ok: boolean;
|
|
4
|
+
error?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface IListOptions {
|
|
7
|
+
search?: string;
|
|
8
|
+
page?: number;
|
|
9
|
+
perPage?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface IPipelineListOptions extends IListOptions {
|
|
12
|
+
status?: string;
|
|
13
|
+
ref?: string;
|
|
14
|
+
source?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Abstract base class for Git provider implementations.
|
|
18
|
+
* Subclasses implement Gitea API v1 or GitLab API v4.
|
|
19
|
+
*/
|
|
20
|
+
export declare abstract class BaseProvider {
|
|
21
|
+
readonly connectionId: string;
|
|
22
|
+
readonly baseUrl: string;
|
|
23
|
+
protected readonly token: string;
|
|
24
|
+
readonly groupFilterId?: string;
|
|
25
|
+
constructor(connectionId: string, baseUrl: string, token: string, groupFilterId?: string);
|
|
26
|
+
abstract testConnection(): Promise<ITestConnectionResult>;
|
|
27
|
+
abstract getProjects(opts?: IListOptions): Promise<interfaces.data.IProject[]>;
|
|
28
|
+
abstract getGroups(opts?: IListOptions): Promise<interfaces.data.IGroup[]>;
|
|
29
|
+
abstract getGroupProjects(groupId: string, opts?: IListOptions): Promise<interfaces.data.IProject[]>;
|
|
30
|
+
abstract getProjectSecrets(projectId: string): Promise<interfaces.data.ISecret[]>;
|
|
31
|
+
abstract createProjectSecret(projectId: string, key: string, value: string): Promise<interfaces.data.ISecret>;
|
|
32
|
+
abstract updateProjectSecret(projectId: string, key: string, value: string): Promise<interfaces.data.ISecret>;
|
|
33
|
+
abstract deleteProjectSecret(projectId: string, key: string): Promise<void>;
|
|
34
|
+
abstract getGroupSecrets(groupId: string): Promise<interfaces.data.ISecret[]>;
|
|
35
|
+
abstract createGroupSecret(groupId: string, key: string, value: string): Promise<interfaces.data.ISecret>;
|
|
36
|
+
abstract updateGroupSecret(groupId: string, key: string, value: string): Promise<interfaces.data.ISecret>;
|
|
37
|
+
abstract deleteGroupSecret(groupId: string, key: string): Promise<void>;
|
|
38
|
+
abstract getBranches(projectFullPath: string, opts?: IListOptions): Promise<interfaces.data.IBranch[]>;
|
|
39
|
+
abstract getTags(projectFullPath: string, opts?: IListOptions): Promise<interfaces.data.ITag[]>;
|
|
40
|
+
abstract getPipelines(projectId: string, opts?: IPipelineListOptions): Promise<interfaces.data.IPipeline[]>;
|
|
41
|
+
abstract getPipelineJobs(projectId: string, pipelineId: string): Promise<interfaces.data.IPipelineJob[]>;
|
|
42
|
+
abstract getJobLog(projectId: string, jobId: string): Promise<string>;
|
|
43
|
+
abstract retryPipeline(projectId: string, pipelineId: string): Promise<void>;
|
|
44
|
+
abstract cancelPipeline(projectId: string, pipelineId: string): Promise<void>;
|
|
45
|
+
abstract getFileContent(projectFullPath: string, filePath: string, ref?: string): Promise<string | null>;
|
|
46
|
+
abstract getDirectoryContents(projectFullPath: string, dirPath: string, ref?: string): Promise<{
|
|
47
|
+
name: string;
|
|
48
|
+
path: string;
|
|
49
|
+
type: string;
|
|
50
|
+
}[] | null>;
|
|
51
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base class for Git provider implementations.
|
|
3
|
+
* Subclasses implement Gitea API v1 or GitLab API v4.
|
|
4
|
+
*/
|
|
5
|
+
export class BaseProvider {
|
|
6
|
+
connectionId;
|
|
7
|
+
baseUrl;
|
|
8
|
+
token;
|
|
9
|
+
groupFilterId;
|
|
10
|
+
constructor(connectionId, baseUrl, token, groupFilterId) {
|
|
11
|
+
this.connectionId = connectionId;
|
|
12
|
+
this.baseUrl = baseUrl;
|
|
13
|
+
this.token = token;
|
|
14
|
+
this.groupFilterId = groupFilterId;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5iYXNlcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm92aWRlcnMvY2xhc3Nlcy5iYXNlcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUJBOzs7R0FHRztBQUNILE1BQU0sT0FBZ0IsWUFBWTtJQUlkO0lBQ0E7SUFDRztJQUxMLGFBQWEsQ0FBVTtJQUV2QyxZQUNrQixZQUFvQixFQUNwQixPQUFlLEVBQ1osS0FBYSxFQUNoQyxhQUFzQjtRQUhOLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ3BCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDWixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBR2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLENBQUM7Q0FpRUYifQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type * as interfaces from '../../dist_ts_interfaces/index.js';
|
|
2
|
+
import { BaseProvider, type ITestConnectionResult, type IListOptions, type IPipelineListOptions } from './classes.baseprovider.js';
|
|
3
|
+
/**
|
|
4
|
+
* Gitea API v1 provider implementation
|
|
5
|
+
*/
|
|
6
|
+
export declare class GiteaProvider extends BaseProvider {
|
|
7
|
+
private client;
|
|
8
|
+
constructor(connectionId: string, baseUrl: string, token: string, groupFilterId?: string);
|
|
9
|
+
testConnection(): Promise<ITestConnectionResult>;
|
|
10
|
+
getProjects(opts?: IListOptions): Promise<interfaces.data.IProject[]>;
|
|
11
|
+
getGroups(opts?: IListOptions): Promise<interfaces.data.IGroup[]>;
|
|
12
|
+
getGroupProjects(groupId: string, opts?: IListOptions): Promise<interfaces.data.IProject[]>;
|
|
13
|
+
getBranches(projectFullPath: string, opts?: IListOptions): Promise<interfaces.data.IBranch[]>;
|
|
14
|
+
getTags(projectFullPath: string, opts?: IListOptions): Promise<interfaces.data.ITag[]>;
|
|
15
|
+
getProjectSecrets(projectId: string): Promise<interfaces.data.ISecret[]>;
|
|
16
|
+
createProjectSecret(projectId: string, key: string, value: string): Promise<interfaces.data.ISecret>;
|
|
17
|
+
updateProjectSecret(projectId: string, key: string, value: string): Promise<interfaces.data.ISecret>;
|
|
18
|
+
deleteProjectSecret(projectId: string, key: string): Promise<void>;
|
|
19
|
+
getGroupSecrets(groupId: string): Promise<interfaces.data.ISecret[]>;
|
|
20
|
+
createGroupSecret(groupId: string, key: string, value: string): Promise<interfaces.data.ISecret>;
|
|
21
|
+
updateGroupSecret(groupId: string, key: string, value: string): Promise<interfaces.data.ISecret>;
|
|
22
|
+
deleteGroupSecret(groupId: string, key: string): Promise<void>;
|
|
23
|
+
getPipelines(projectId: string, opts?: IPipelineListOptions): Promise<interfaces.data.IPipeline[]>;
|
|
24
|
+
getPipelineJobs(projectId: string, pipelineId: string): Promise<interfaces.data.IPipelineJob[]>;
|
|
25
|
+
getJobLog(projectId: string, jobId: string): Promise<string>;
|
|
26
|
+
retryPipeline(projectId: string, pipelineId: string): Promise<void>;
|
|
27
|
+
cancelPipeline(_projectId: string, _pipelineId: string): Promise<void>;
|
|
28
|
+
getFileContent(projectFullPath: string, filePath: string, ref?: string): Promise<string | null>;
|
|
29
|
+
getDirectoryContents(projectFullPath: string, dirPath: string, ref?: string): Promise<{
|
|
30
|
+
name: string;
|
|
31
|
+
path: string;
|
|
32
|
+
type: string;
|
|
33
|
+
}[] | null>;
|
|
34
|
+
private mapProject;
|
|
35
|
+
private mapGroup;
|
|
36
|
+
private mapSecret;
|
|
37
|
+
private mapPipeline;
|
|
38
|
+
private mapJob;
|
|
39
|
+
private mapStatus;
|
|
40
|
+
}
|