@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.
Files changed (258) hide show
  1. package/.smartconfig.json +114 -0
  2. package/binary/gitops.ts +4 -0
  3. package/changelog.md +185 -0
  4. package/cli.child.js +4 -0
  5. package/cli.js +4 -0
  6. package/cli.ts.js +5 -0
  7. package/deno.json +10 -0
  8. package/dist_serve/bundle.js +36362 -0
  9. package/dist_serve/index.html +33 -0
  10. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  11. package/dist_ts/00_commitinfo_data.js +9 -0
  12. package/dist_ts/cache/classes.cache.cleaner.d.ts +23 -0
  13. package/dist_ts/cache/classes.cache.cleaner.js +61 -0
  14. package/dist_ts/cache/classes.cached.document.d.ts +30 -0
  15. package/dist_ts/cache/classes.cached.document.js +101 -0
  16. package/dist_ts/cache/classes.cachedb.d.ts +22 -0
  17. package/dist_ts/cache/classes.cachedb.js +58 -0
  18. package/dist_ts/cache/classes.secrets.scan.service.d.ts +51 -0
  19. package/dist_ts/cache/classes.secrets.scan.service.js +237 -0
  20. package/dist_ts/cache/documents/classes.cached.project.d.ts +13 -0
  21. package/dist_ts/cache/documents/classes.cached.project.js +101 -0
  22. package/dist_ts/cache/documents/classes.cached.secret.d.ts +24 -0
  23. package/dist_ts/cache/documents/classes.cached.secret.js +158 -0
  24. package/dist_ts/cache/documents/index.d.ts +2 -0
  25. package/dist_ts/cache/documents/index.js +3 -0
  26. package/dist_ts/cache/index.d.ts +7 -0
  27. package/dist_ts/cache/index.js +6 -0
  28. package/dist_ts/classes/actionlog.d.ts +19 -0
  29. package/dist_ts/classes/actionlog.js +44 -0
  30. package/dist_ts/classes/connectionmanager.d.ts +57 -0
  31. package/dist_ts/classes/connectionmanager.js +247 -0
  32. package/dist_ts/classes/gitopsapp.d.ts +30 -0
  33. package/dist_ts/classes/gitopsapp.js +101 -0
  34. package/dist_ts/classes/jobmanager.d.ts +47 -0
  35. package/dist_ts/classes/jobmanager.js +301 -0
  36. package/dist_ts/classes/jobrunners/autobookstackdocs.runner.d.ts +29 -0
  37. package/dist_ts/classes/jobrunners/autobookstackdocs.runner.js +361 -0
  38. package/dist_ts/classes/jobrunners/base.jobrunner.d.ts +14 -0
  39. package/dist_ts/classes/jobrunners/base.jobrunner.js +3 -0
  40. package/dist_ts/classes/jobrunners/index.d.ts +5 -0
  41. package/dist_ts/classes/jobrunners/index.js +14 -0
  42. package/dist_ts/classes/managedsecrets.manager.d.ts +47 -0
  43. package/dist_ts/classes/managedsecrets.manager.js +247 -0
  44. package/dist_ts/classes/syncmanager.d.ts +189 -0
  45. package/dist_ts/classes/syncmanager.js +1787 -0
  46. package/dist_ts/index.d.ts +6 -0
  47. package/dist_ts/index.js +32 -0
  48. package/dist_ts/logging.d.ts +49 -0
  49. package/dist_ts/logging.js +134 -0
  50. package/dist_ts/opsserver/classes.opsserver.d.ts +25 -0
  51. package/dist_ts/opsserver/classes.opsserver.js +70 -0
  52. package/dist_ts/opsserver/handlers/actionlog.handler.d.ts +9 -0
  53. package/dist_ts/opsserver/handlers/actionlog.handler.js +24 -0
  54. package/dist_ts/opsserver/handlers/actions.handler.d.ts +9 -0
  55. package/dist_ts/opsserver/handlers/actions.handler.js +38 -0
  56. package/dist_ts/opsserver/handlers/admin.handler.d.ts +19 -0
  57. package/dist_ts/opsserver/handlers/admin.handler.js +96 -0
  58. package/dist_ts/opsserver/handlers/connections.handler.d.ts +10 -0
  59. package/dist_ts/opsserver/handlers/connections.handler.js +109 -0
  60. package/dist_ts/opsserver/handlers/groups.handler.d.ts +9 -0
  61. package/dist_ts/opsserver/handlers/groups.handler.js +24 -0
  62. package/dist_ts/opsserver/handlers/index.d.ts +13 -0
  63. package/dist_ts/opsserver/handlers/index.js +14 -0
  64. package/dist_ts/opsserver/handlers/jobs.handler.d.ts +16 -0
  65. package/dist_ts/opsserver/handlers/jobs.handler.js +146 -0
  66. package/dist_ts/opsserver/handlers/logs.handler.d.ts +9 -0
  67. package/dist_ts/opsserver/handlers/logs.handler.js +21 -0
  68. package/dist_ts/opsserver/handlers/managedsecrets.handler.d.ts +11 -0
  69. package/dist_ts/opsserver/handlers/managedsecrets.handler.js +110 -0
  70. package/dist_ts/opsserver/handlers/pipelines.handler.d.ts +31 -0
  71. package/dist_ts/opsserver/handlers/pipelines.handler.js +204 -0
  72. package/dist_ts/opsserver/handlers/projects.handler.d.ts +9 -0
  73. package/dist_ts/opsserver/handlers/projects.handler.js +24 -0
  74. package/dist_ts/opsserver/handlers/secrets.handler.d.ts +10 -0
  75. package/dist_ts/opsserver/handlers/secrets.handler.js +171 -0
  76. package/dist_ts/opsserver/handlers/sync.handler.d.ts +16 -0
  77. package/dist_ts/opsserver/handlers/sync.handler.js +166 -0
  78. package/dist_ts/opsserver/handlers/webhook.handler.d.ts +7 -0
  79. package/dist_ts/opsserver/handlers/webhook.handler.js +55 -0
  80. package/dist_ts/opsserver/helpers/guards.d.ts +5 -0
  81. package/dist_ts/opsserver/helpers/guards.js +12 -0
  82. package/dist_ts/opsserver/index.d.ts +1 -0
  83. package/dist_ts/opsserver/index.js +2 -0
  84. package/dist_ts/paths.d.ts +9 -0
  85. package/dist_ts/paths.js +13 -0
  86. package/dist_ts/plugins.d.ts +25 -0
  87. package/dist_ts/plugins.js +32 -0
  88. package/dist_ts/providers/classes.baseprovider.d.ts +51 -0
  89. package/dist_ts/providers/classes.baseprovider.js +17 -0
  90. package/dist_ts/providers/classes.giteaprovider.d.ts +40 -0
  91. package/dist_ts/providers/classes.giteaprovider.js +224 -0
  92. package/dist_ts/providers/classes.gitlabprovider.d.ts +39 -0
  93. package/dist_ts/providers/classes.gitlabprovider.js +207 -0
  94. package/dist_ts/providers/index.d.ts +3 -0
  95. package/dist_ts/providers/index.js +4 -0
  96. package/dist_ts/storage/classes.storagemanager.d.ts +33 -0
  97. package/dist_ts/storage/classes.storagemanager.js +135 -0
  98. package/dist_ts/storage/index.d.ts +2 -0
  99. package/dist_ts/storage/index.js +2 -0
  100. package/dist_ts/timers.d.ts +4 -0
  101. package/dist_ts/timers.js +24 -0
  102. package/dist_ts_bundled/bundle.d.ts +4 -0
  103. package/dist_ts_bundled/bundle.js +12 -0
  104. package/dist_ts_interfaces/data/actionlog.d.ts +12 -0
  105. package/dist_ts_interfaces/data/actionlog.js +2 -0
  106. package/dist_ts_interfaces/data/branch.d.ts +8 -0
  107. package/dist_ts_interfaces/data/branch.js +2 -0
  108. package/dist_ts_interfaces/data/connection.d.ts +12 -0
  109. package/dist_ts_interfaces/data/connection.js +2 -0
  110. package/dist_ts_interfaces/data/group.d.ts +10 -0
  111. package/dist_ts_interfaces/data/group.js +2 -0
  112. package/dist_ts_interfaces/data/identity.d.ts +7 -0
  113. package/dist_ts_interfaces/data/identity.js +2 -0
  114. package/dist_ts_interfaces/data/index.d.ts +11 -0
  115. package/dist_ts_interfaces/data/index.js +12 -0
  116. package/dist_ts_interfaces/data/job.d.ts +37 -0
  117. package/dist_ts_interfaces/data/job.js +2 -0
  118. package/dist_ts_interfaces/data/managedsecret.d.ts +37 -0
  119. package/dist_ts_interfaces/data/managedsecret.js +2 -0
  120. package/dist_ts_interfaces/data/pipeline.d.ts +22 -0
  121. package/dist_ts_interfaces/data/pipeline.js +2 -0
  122. package/dist_ts_interfaces/data/project.d.ts +12 -0
  123. package/dist_ts_interfaces/data/project.js +2 -0
  124. package/dist_ts_interfaces/data/secret.d.ts +11 -0
  125. package/dist_ts_interfaces/data/secret.js +2 -0
  126. package/dist_ts_interfaces/data/sync.d.ts +34 -0
  127. package/dist_ts_interfaces/data/sync.js +2 -0
  128. package/dist_ts_interfaces/index.d.ts +5 -0
  129. package/dist_ts_interfaces/index.js +8 -0
  130. package/dist_ts_interfaces/plugins.d.ts +2 -0
  131. package/dist_ts_interfaces/plugins.js +4 -0
  132. package/dist_ts_interfaces/requests/actionlog.d.ts +15 -0
  133. package/dist_ts_interfaces/requests/actionlog.js +3 -0
  134. package/dist_ts_interfaces/requests/actions.d.ts +31 -0
  135. package/dist_ts_interfaces/requests/actions.js +3 -0
  136. package/dist_ts_interfaces/requests/admin.d.ts +31 -0
  137. package/dist_ts_interfaces/requests/admin.js +3 -0
  138. package/dist_ts_interfaces/requests/connections.d.ts +71 -0
  139. package/dist_ts_interfaces/requests/connections.js +3 -0
  140. package/dist_ts_interfaces/requests/groups.d.ts +14 -0
  141. package/dist_ts_interfaces/requests/groups.js +3 -0
  142. package/dist_ts_interfaces/requests/index.d.ts +13 -0
  143. package/dist_ts_interfaces/requests/index.js +14 -0
  144. package/dist_ts_interfaces/requests/jobs.d.ts +86 -0
  145. package/dist_ts_interfaces/requests/jobs.js +3 -0
  146. package/dist_ts_interfaces/requests/logs.d.ts +14 -0
  147. package/dist_ts_interfaces/requests/logs.js +3 -0
  148. package/dist_ts_interfaces/requests/managedsecrets.d.ts +84 -0
  149. package/dist_ts_interfaces/requests/managedsecrets.js +3 -0
  150. package/dist_ts_interfaces/requests/pipelines.d.ts +55 -0
  151. package/dist_ts_interfaces/requests/pipelines.js +3 -0
  152. package/dist_ts_interfaces/requests/projects.d.ts +14 -0
  153. package/dist_ts_interfaces/requests/projects.js +3 -0
  154. package/dist_ts_interfaces/requests/secrets.d.ts +72 -0
  155. package/dist_ts_interfaces/requests/secrets.js +3 -0
  156. package/dist_ts_interfaces/requests/sync.d.ts +120 -0
  157. package/dist_ts_interfaces/requests/sync.js +3 -0
  158. package/dist_ts_interfaces/requests/webhook.d.ts +13 -0
  159. package/dist_ts_interfaces/requests/webhook.js +3 -0
  160. package/license +21 -0
  161. package/package.json +81 -0
  162. package/readme.md +177 -0
  163. package/readme.todo.md +3 -0
  164. package/ts/00_commitinfo_data.ts +8 -0
  165. package/ts/cache/classes.cache.cleaner.ts +69 -0
  166. package/ts/cache/classes.cached.document.ts +57 -0
  167. package/ts/cache/classes.cachedb.ts +72 -0
  168. package/ts/cache/classes.secrets.scan.service.ts +267 -0
  169. package/ts/cache/documents/classes.cached.project.ts +32 -0
  170. package/ts/cache/documents/classes.cached.secret.ts +81 -0
  171. package/ts/cache/documents/index.ts +2 -0
  172. package/ts/cache/index.ts +7 -0
  173. package/ts/classes/actionlog.ts +57 -0
  174. package/ts/classes/connectionmanager.ts +263 -0
  175. package/ts/classes/gitopsapp.ts +128 -0
  176. package/ts/classes/jobmanager.ts +337 -0
  177. package/ts/classes/jobrunners/autobookstackdocs.runner.ts +435 -0
  178. package/ts/classes/jobrunners/base.jobrunner.ts +16 -0
  179. package/ts/classes/jobrunners/index.ts +17 -0
  180. package/ts/classes/managedsecrets.manager.ts +322 -0
  181. package/ts/classes/syncmanager.ts +2117 -0
  182. package/ts/index.ts +37 -0
  183. package/ts/logging.ts +162 -0
  184. package/ts/opsserver/classes.opsserver.ts +86 -0
  185. package/ts/opsserver/handlers/actionlog.handler.ts +30 -0
  186. package/ts/opsserver/handlers/actions.handler.ts +50 -0
  187. package/ts/opsserver/handlers/admin.handler.ts +122 -0
  188. package/ts/opsserver/handlers/connections.handler.ts +162 -0
  189. package/ts/opsserver/handlers/groups.handler.ts +32 -0
  190. package/ts/opsserver/handlers/index.ts +13 -0
  191. package/ts/opsserver/handlers/jobs.handler.ts +189 -0
  192. package/ts/opsserver/handlers/logs.handler.ts +29 -0
  193. package/ts/opsserver/handlers/managedsecrets.handler.ts +158 -0
  194. package/ts/opsserver/handlers/pipelines.handler.ts +281 -0
  195. package/ts/opsserver/handlers/projects.handler.ts +32 -0
  196. package/ts/opsserver/handlers/secrets.handler.ts +224 -0
  197. package/ts/opsserver/handlers/sync.handler.ts +224 -0
  198. package/ts/opsserver/handlers/webhook.handler.ts +62 -0
  199. package/ts/opsserver/helpers/guards.ts +16 -0
  200. package/ts/opsserver/index.ts +1 -0
  201. package/ts/paths.ts +19 -0
  202. package/ts/plugins.ts +38 -0
  203. package/ts/providers/classes.baseprovider.ts +99 -0
  204. package/ts/providers/classes.giteaprovider.ts +279 -0
  205. package/ts/providers/classes.gitlabprovider.ts +265 -0
  206. package/ts/providers/index.ts +3 -0
  207. package/ts/storage/classes.storagemanager.ts +144 -0
  208. package/ts/storage/index.ts +2 -0
  209. package/ts/timers.ts +34 -0
  210. package/ts_interfaces/data/actionlog.ts +13 -0
  211. package/ts_interfaces/data/branch.ts +9 -0
  212. package/ts_interfaces/data/connection.ts +13 -0
  213. package/ts_interfaces/data/group.ts +10 -0
  214. package/ts_interfaces/data/identity.ts +7 -0
  215. package/ts_interfaces/data/index.ts +11 -0
  216. package/ts_interfaces/data/job.ts +42 -0
  217. package/ts_interfaces/data/managedsecret.ts +41 -0
  218. package/ts_interfaces/data/pipeline.ts +32 -0
  219. package/ts_interfaces/data/project.ts +12 -0
  220. package/ts_interfaces/data/secret.ts +11 -0
  221. package/ts_interfaces/data/sync.ts +37 -0
  222. package/ts_interfaces/index.ts +9 -0
  223. package/ts_interfaces/plugins.ts +6 -0
  224. package/ts_interfaces/requests/actionlog.ts +19 -0
  225. package/ts_interfaces/requests/actions.ts +39 -0
  226. package/ts_interfaces/requests/admin.ts +43 -0
  227. package/ts_interfaces/requests/connections.ts +95 -0
  228. package/ts_interfaces/requests/groups.ts +18 -0
  229. package/ts_interfaces/requests/index.ts +13 -0
  230. package/ts_interfaces/requests/jobs.ts +118 -0
  231. package/ts_interfaces/requests/logs.ts +18 -0
  232. package/ts_interfaces/requests/managedsecrets.ts +112 -0
  233. package/ts_interfaces/requests/pipelines.ts +71 -0
  234. package/ts_interfaces/requests/projects.ts +18 -0
  235. package/ts_interfaces/requests/secrets.ts +92 -0
  236. package/ts_interfaces/requests/sync.ts +157 -0
  237. package/ts_interfaces/requests/webhook.ts +18 -0
  238. package/ts_web/00_commitinfo_data.ts +8 -0
  239. package/ts_web/appstate.ts +1251 -0
  240. package/ts_web/elements/gitops-dashboard.ts +350 -0
  241. package/ts_web/elements/index.ts +10 -0
  242. package/ts_web/elements/shared/css.ts +29 -0
  243. package/ts_web/elements/shared/index.ts +1 -0
  244. package/ts_web/elements/views/actionlog/index.ts +101 -0
  245. package/ts_web/elements/views/actions/index.ts +209 -0
  246. package/ts_web/elements/views/buildlog/index.ts +196 -0
  247. package/ts_web/elements/views/connections/index.ts +260 -0
  248. package/ts_web/elements/views/groups/index.ts +134 -0
  249. package/ts_web/elements/views/jobs/index.ts +424 -0
  250. package/ts_web/elements/views/managedsecrets/index.ts +502 -0
  251. package/ts_web/elements/views/overview/index.ts +86 -0
  252. package/ts_web/elements/views/pipelines/index.ts +561 -0
  253. package/ts_web/elements/views/projects/index.ts +149 -0
  254. package/ts_web/elements/views/secrets/index.ts +310 -0
  255. package/ts_web/elements/views/sync/index.ts +512 -0
  256. package/ts_web/index.ts +7 -0
  257. package/ts_web/plugins.ts +15 -0
  258. 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;
@@ -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
+ }