@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,224 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
import { BaseProvider } from './classes.baseprovider.js';
|
|
3
|
+
/**
|
|
4
|
+
* Gitea API v1 provider implementation
|
|
5
|
+
*/
|
|
6
|
+
export class GiteaProvider extends BaseProvider {
|
|
7
|
+
client;
|
|
8
|
+
constructor(connectionId, baseUrl, token, groupFilterId) {
|
|
9
|
+
super(connectionId, baseUrl, token, groupFilterId);
|
|
10
|
+
this.client = new plugins.giteaClient.GiteaClient(baseUrl, token);
|
|
11
|
+
}
|
|
12
|
+
async testConnection() {
|
|
13
|
+
return this.client.testConnection();
|
|
14
|
+
}
|
|
15
|
+
async getProjects(opts) {
|
|
16
|
+
const repos = this.groupFilterId
|
|
17
|
+
? await (await this.client.getOrg(this.groupFilterId)).getRepos(opts)
|
|
18
|
+
: await this.client.getRepos(opts);
|
|
19
|
+
return repos.map((r) => this.mapProject(r));
|
|
20
|
+
}
|
|
21
|
+
async getGroups(opts) {
|
|
22
|
+
if (this.groupFilterId) {
|
|
23
|
+
const org = await this.client.getOrg(this.groupFilterId);
|
|
24
|
+
return [this.mapGroup(org)];
|
|
25
|
+
}
|
|
26
|
+
const orgs = await this.client.getOrgs(opts);
|
|
27
|
+
return orgs.map((o) => this.mapGroup(o));
|
|
28
|
+
}
|
|
29
|
+
async getGroupProjects(groupId, opts) {
|
|
30
|
+
const org = await this.client.getOrg(groupId);
|
|
31
|
+
const repos = await org.getRepos(opts);
|
|
32
|
+
return repos.map((r) => this.mapProject(r));
|
|
33
|
+
}
|
|
34
|
+
// --- Branches / Tags ---
|
|
35
|
+
async getBranches(projectFullPath, opts) {
|
|
36
|
+
const repo = await this.client.getRepo(projectFullPath);
|
|
37
|
+
const branches = await repo.getBranches(opts);
|
|
38
|
+
return branches.map((b) => ({ name: b.name, commitSha: b.commitSha }));
|
|
39
|
+
}
|
|
40
|
+
async getTags(projectFullPath, opts) {
|
|
41
|
+
const repo = await this.client.getRepo(projectFullPath);
|
|
42
|
+
const tags = await repo.getTags(opts);
|
|
43
|
+
return tags.map((t) => ({ name: t.name, commitSha: t.commitSha }));
|
|
44
|
+
}
|
|
45
|
+
// --- Project Secrets ---
|
|
46
|
+
async getProjectSecrets(projectId) {
|
|
47
|
+
const repo = await this.client.getRepo(projectId);
|
|
48
|
+
const secrets = await repo.getSecrets();
|
|
49
|
+
return secrets.map((s) => this.mapSecret(s, 'project', projectId));
|
|
50
|
+
}
|
|
51
|
+
async createProjectSecret(projectId, key, value) {
|
|
52
|
+
const repo = await this.client.getRepo(projectId);
|
|
53
|
+
await repo.setSecret(key, value);
|
|
54
|
+
return { key, value: '***', protected: false, masked: true, scope: 'project', scopeId: projectId, scopeName: projectId, connectionId: this.connectionId, environment: '*' };
|
|
55
|
+
}
|
|
56
|
+
async updateProjectSecret(projectId, key, value) {
|
|
57
|
+
return this.createProjectSecret(projectId, key, value);
|
|
58
|
+
}
|
|
59
|
+
async deleteProjectSecret(projectId, key) {
|
|
60
|
+
const repo = await this.client.getRepo(projectId);
|
|
61
|
+
await repo.deleteSecret(key);
|
|
62
|
+
}
|
|
63
|
+
// --- Group Secrets ---
|
|
64
|
+
async getGroupSecrets(groupId) {
|
|
65
|
+
const org = await this.client.getOrg(groupId);
|
|
66
|
+
const secrets = await org.getSecrets();
|
|
67
|
+
return secrets.map((s) => this.mapSecret(s, 'group', groupId));
|
|
68
|
+
}
|
|
69
|
+
async createGroupSecret(groupId, key, value) {
|
|
70
|
+
const org = await this.client.getOrg(groupId);
|
|
71
|
+
await org.setSecret(key, value);
|
|
72
|
+
return { key, value: '***', protected: false, masked: true, scope: 'group', scopeId: groupId, scopeName: groupId, connectionId: this.connectionId, environment: '*' };
|
|
73
|
+
}
|
|
74
|
+
async updateGroupSecret(groupId, key, value) {
|
|
75
|
+
return this.createGroupSecret(groupId, key, value);
|
|
76
|
+
}
|
|
77
|
+
async deleteGroupSecret(groupId, key) {
|
|
78
|
+
const org = await this.client.getOrg(groupId);
|
|
79
|
+
await org.deleteSecret(key);
|
|
80
|
+
}
|
|
81
|
+
// --- Pipelines (Action Runs) ---
|
|
82
|
+
async getPipelines(projectId, opts) {
|
|
83
|
+
const repo = await this.client.getRepo(projectId);
|
|
84
|
+
const runs = await repo.getActionRuns({
|
|
85
|
+
page: opts?.page,
|
|
86
|
+
perPage: opts?.perPage,
|
|
87
|
+
status: opts?.status,
|
|
88
|
+
branch: opts?.ref,
|
|
89
|
+
event: opts?.source,
|
|
90
|
+
});
|
|
91
|
+
return runs.map((r) => this.mapPipeline(r, projectId));
|
|
92
|
+
}
|
|
93
|
+
async getPipelineJobs(projectId, pipelineId) {
|
|
94
|
+
// Use the client's internal method directly to avoid an extra getRepo call
|
|
95
|
+
const jobs = await this.client.requestGetActionRunJobs(projectId, Number(pipelineId));
|
|
96
|
+
return jobs.map((j) => {
|
|
97
|
+
const resolvedStatus = plugins.giteaClient.resolveGiteaStatus(j.status, j.conclusion);
|
|
98
|
+
return this.mapJob(resolvedStatus, j, pipelineId);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
async getJobLog(projectId, jobId) {
|
|
102
|
+
return this.client.requestGetJobLog(projectId, Number(jobId));
|
|
103
|
+
}
|
|
104
|
+
async retryPipeline(projectId, pipelineId) {
|
|
105
|
+
// Fetch the run to get its workflow path, then dispatch
|
|
106
|
+
const run = await this.client.requestGetActionRun(projectId, Number(pipelineId));
|
|
107
|
+
const wfId = plugins.giteaClient.extractWorkflowIdFromPath(run.path);
|
|
108
|
+
const ref = run.head_branch || 'main';
|
|
109
|
+
if (!wfId) {
|
|
110
|
+
throw new Error(`Cannot retry: no workflow ID found in path "${run.path}"`);
|
|
111
|
+
}
|
|
112
|
+
await this.client.requestDispatchWorkflow(projectId, wfId, ref);
|
|
113
|
+
}
|
|
114
|
+
async cancelPipeline(_projectId, _pipelineId) {
|
|
115
|
+
throw new Error('Cancel is not supported by Gitea 1.25');
|
|
116
|
+
}
|
|
117
|
+
// --- File Content ---
|
|
118
|
+
async getFileContent(projectFullPath, filePath, ref) {
|
|
119
|
+
try {
|
|
120
|
+
const query = ref ? `?ref=${encodeURIComponent(ref)}` : '';
|
|
121
|
+
return await this.client.requestText('GET', `/api/v1/repos/${projectFullPath}/raw/${encodeURIComponent(filePath)}${query}`);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// --- Directory Listing ---
|
|
128
|
+
async getDirectoryContents(projectFullPath, dirPath, ref) {
|
|
129
|
+
try {
|
|
130
|
+
const query = ref ? `?ref=${encodeURIComponent(ref)}` : '';
|
|
131
|
+
const result = await this.client.request('GET', `/api/v1/repos/${projectFullPath}/contents/${encodeURIComponent(dirPath)}${query}`);
|
|
132
|
+
if (!Array.isArray(result))
|
|
133
|
+
return null;
|
|
134
|
+
return result.map((entry) => ({
|
|
135
|
+
name: entry.name,
|
|
136
|
+
path: entry.path,
|
|
137
|
+
type: entry.type, // "file" or "dir"
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// --- Mappers ---
|
|
145
|
+
mapProject(r) {
|
|
146
|
+
return {
|
|
147
|
+
id: r.fullName || String(r.id),
|
|
148
|
+
name: r.name,
|
|
149
|
+
fullPath: r.fullName,
|
|
150
|
+
description: r.description,
|
|
151
|
+
defaultBranch: r.defaultBranch,
|
|
152
|
+
webUrl: r.htmlUrl,
|
|
153
|
+
connectionId: this.connectionId,
|
|
154
|
+
visibility: r.isPrivate ? 'private' : 'public',
|
|
155
|
+
topics: r.topics,
|
|
156
|
+
lastActivity: r.updatedAt,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
mapGroup(o) {
|
|
160
|
+
return {
|
|
161
|
+
id: o.name || String(o.id),
|
|
162
|
+
name: o.name,
|
|
163
|
+
fullPath: o.name,
|
|
164
|
+
description: o.description,
|
|
165
|
+
webUrl: `${this.baseUrl}/${o.name}`,
|
|
166
|
+
connectionId: this.connectionId,
|
|
167
|
+
visibility: o.visibility || 'public',
|
|
168
|
+
projectCount: o.repoCount,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
mapSecret(s, scope, scopeId) {
|
|
172
|
+
return {
|
|
173
|
+
key: s.name,
|
|
174
|
+
value: '***',
|
|
175
|
+
protected: false,
|
|
176
|
+
masked: true,
|
|
177
|
+
scope,
|
|
178
|
+
scopeId,
|
|
179
|
+
scopeName: scopeId,
|
|
180
|
+
connectionId: this.connectionId,
|
|
181
|
+
environment: '*',
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
mapPipeline(r, projectId) {
|
|
185
|
+
return {
|
|
186
|
+
id: String(r.id),
|
|
187
|
+
projectId,
|
|
188
|
+
projectName: projectId,
|
|
189
|
+
connectionId: this.connectionId,
|
|
190
|
+
status: this.mapStatus(r.resolvedStatus),
|
|
191
|
+
ref: r.ref,
|
|
192
|
+
sha: r.headSha,
|
|
193
|
+
webUrl: r.htmlUrl,
|
|
194
|
+
duration: r.duration,
|
|
195
|
+
createdAt: r.startedAt,
|
|
196
|
+
source: r.event || 'push',
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
mapJob(resolvedStatus, j, pipelineId) {
|
|
200
|
+
return {
|
|
201
|
+
id: String(j.id),
|
|
202
|
+
pipelineId,
|
|
203
|
+
name: j.name || '',
|
|
204
|
+
stage: j.name || 'default',
|
|
205
|
+
status: this.mapStatus(resolvedStatus),
|
|
206
|
+
duration: plugins.giteaClient.computeDuration(j.started_at, j.completed_at),
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
mapStatus(status) {
|
|
210
|
+
const map = {
|
|
211
|
+
success: 'success',
|
|
212
|
+
completed: 'success',
|
|
213
|
+
failure: 'failed',
|
|
214
|
+
cancelled: 'canceled',
|
|
215
|
+
waiting: 'waiting',
|
|
216
|
+
running: 'running',
|
|
217
|
+
queued: 'pending',
|
|
218
|
+
in_progress: 'running',
|
|
219
|
+
skipped: 'skipped',
|
|
220
|
+
};
|
|
221
|
+
return map[status?.toLowerCase()] || 'pending';
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5naXRlYXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJvdmlkZXJzL2NsYXNzZXMuZ2l0ZWFwcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsWUFBWSxFQUE0RSxNQUFNLDJCQUEyQixDQUFDO0FBRW5JOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWMsU0FBUSxZQUFZO0lBQ3JDLE1BQU0sQ0FBa0M7SUFFaEQsWUFBWSxZQUFvQixFQUFFLE9BQWUsRUFBRSxLQUFhLEVBQUUsYUFBc0I7UUFDdEYsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFtQjtRQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYTtZQUM5QixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNyRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENB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
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
* GitLab API v4 provider implementation
|
|
5
|
+
*/
|
|
6
|
+
export declare class GitLabProvider 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 mapVariable;
|
|
37
|
+
private mapPipeline;
|
|
38
|
+
private mapJob;
|
|
39
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
import { BaseProvider } from './classes.baseprovider.js';
|
|
3
|
+
/**
|
|
4
|
+
* GitLab API v4 provider implementation
|
|
5
|
+
*/
|
|
6
|
+
export class GitLabProvider extends BaseProvider {
|
|
7
|
+
client;
|
|
8
|
+
constructor(connectionId, baseUrl, token, groupFilterId) {
|
|
9
|
+
super(connectionId, baseUrl, token, groupFilterId);
|
|
10
|
+
this.client = new plugins.gitlabClient.GitLabClient(baseUrl, token);
|
|
11
|
+
}
|
|
12
|
+
async testConnection() {
|
|
13
|
+
return this.client.testConnection();
|
|
14
|
+
}
|
|
15
|
+
async getProjects(opts) {
|
|
16
|
+
const projects = this.groupFilterId
|
|
17
|
+
? await (await this.client.getGroup(this.groupFilterId)).getProjects(opts)
|
|
18
|
+
: await this.client.getProjects(opts);
|
|
19
|
+
return projects.map((p) => this.mapProject(p));
|
|
20
|
+
}
|
|
21
|
+
async getGroups(opts) {
|
|
22
|
+
if (this.groupFilterId) {
|
|
23
|
+
const group = await this.client.getGroup(this.groupFilterId);
|
|
24
|
+
const descendants = await group.getDescendantGroups(opts);
|
|
25
|
+
return descendants.map((g) => this.mapGroup(g));
|
|
26
|
+
}
|
|
27
|
+
const groups = await this.client.getGroups(opts);
|
|
28
|
+
return groups.map((g) => this.mapGroup(g));
|
|
29
|
+
}
|
|
30
|
+
async getGroupProjects(groupId, opts) {
|
|
31
|
+
const group = await this.client.getGroup(groupId);
|
|
32
|
+
const projects = await group.getProjects(opts);
|
|
33
|
+
return projects.map((p) => this.mapProject(p));
|
|
34
|
+
}
|
|
35
|
+
// --- Branches / Tags ---
|
|
36
|
+
async getBranches(projectFullPath, opts) {
|
|
37
|
+
const project = await this.client.getProject(projectFullPath);
|
|
38
|
+
const branches = await project.getBranches(opts);
|
|
39
|
+
return branches.map((b) => ({ name: b.name, commitSha: b.commitSha }));
|
|
40
|
+
}
|
|
41
|
+
async getTags(projectFullPath, opts) {
|
|
42
|
+
const project = await this.client.getProject(projectFullPath);
|
|
43
|
+
const tags = await project.getTags(opts);
|
|
44
|
+
return tags.map((t) => ({ name: t.name, commitSha: t.commitSha }));
|
|
45
|
+
}
|
|
46
|
+
// --- Project Secrets (CI/CD Variables) ---
|
|
47
|
+
async getProjectSecrets(projectId) {
|
|
48
|
+
const project = await this.client.getProject(projectId);
|
|
49
|
+
const vars = await project.getVariables();
|
|
50
|
+
return vars.map((v) => this.mapVariable(v, 'project', projectId));
|
|
51
|
+
}
|
|
52
|
+
async createProjectSecret(projectId, key, value) {
|
|
53
|
+
const project = await this.client.getProject(projectId);
|
|
54
|
+
const v = await project.createVariable(key, value);
|
|
55
|
+
return this.mapVariable(v, 'project', projectId);
|
|
56
|
+
}
|
|
57
|
+
async updateProjectSecret(projectId, key, value) {
|
|
58
|
+
const project = await this.client.getProject(projectId);
|
|
59
|
+
const v = await project.updateVariable(key, value);
|
|
60
|
+
return this.mapVariable(v, 'project', projectId);
|
|
61
|
+
}
|
|
62
|
+
async deleteProjectSecret(projectId, key) {
|
|
63
|
+
const project = await this.client.getProject(projectId);
|
|
64
|
+
await project.deleteVariable(key);
|
|
65
|
+
}
|
|
66
|
+
// --- Group Secrets (CI/CD Variables) ---
|
|
67
|
+
async getGroupSecrets(groupId) {
|
|
68
|
+
const group = await this.client.getGroup(groupId);
|
|
69
|
+
const vars = await group.getVariables();
|
|
70
|
+
return vars.map((v) => this.mapVariable(v, 'group', groupId));
|
|
71
|
+
}
|
|
72
|
+
async createGroupSecret(groupId, key, value) {
|
|
73
|
+
const group = await this.client.getGroup(groupId);
|
|
74
|
+
const v = await group.createVariable(key, value);
|
|
75
|
+
return this.mapVariable(v, 'group', groupId);
|
|
76
|
+
}
|
|
77
|
+
async updateGroupSecret(groupId, key, value) {
|
|
78
|
+
const group = await this.client.getGroup(groupId);
|
|
79
|
+
const v = await group.updateVariable(key, value);
|
|
80
|
+
return this.mapVariable(v, 'group', groupId);
|
|
81
|
+
}
|
|
82
|
+
async deleteGroupSecret(groupId, key) {
|
|
83
|
+
const group = await this.client.getGroup(groupId);
|
|
84
|
+
await group.deleteVariable(key);
|
|
85
|
+
}
|
|
86
|
+
// --- Pipelines ---
|
|
87
|
+
async getPipelines(projectId, opts) {
|
|
88
|
+
const project = await this.client.getProject(projectId);
|
|
89
|
+
const pipelines = await project.getPipelines({
|
|
90
|
+
page: opts?.page,
|
|
91
|
+
perPage: opts?.perPage,
|
|
92
|
+
status: opts?.status,
|
|
93
|
+
ref: opts?.ref,
|
|
94
|
+
source: opts?.source,
|
|
95
|
+
});
|
|
96
|
+
return pipelines.map((p) => this.mapPipeline(p, projectId));
|
|
97
|
+
}
|
|
98
|
+
async getPipelineJobs(projectId, pipelineId) {
|
|
99
|
+
const jobs = await this.client.requestGetPipelineJobs(projectId, Number(pipelineId));
|
|
100
|
+
return jobs.map((j) => this.mapJob(j, pipelineId));
|
|
101
|
+
}
|
|
102
|
+
async getJobLog(projectId, jobId) {
|
|
103
|
+
return this.client.requestGetJobLog(projectId, Number(jobId));
|
|
104
|
+
}
|
|
105
|
+
async retryPipeline(projectId, pipelineId) {
|
|
106
|
+
await this.client.requestRetryPipeline(projectId, Number(pipelineId));
|
|
107
|
+
}
|
|
108
|
+
async cancelPipeline(projectId, pipelineId) {
|
|
109
|
+
await this.client.requestCancelPipeline(projectId, Number(pipelineId));
|
|
110
|
+
}
|
|
111
|
+
// --- File Content ---
|
|
112
|
+
async getFileContent(projectFullPath, filePath, ref) {
|
|
113
|
+
try {
|
|
114
|
+
const encodedPath = encodeURIComponent(projectFullPath);
|
|
115
|
+
const encodedFile = encodeURIComponent(filePath);
|
|
116
|
+
const refParam = ref ? `?ref=${encodeURIComponent(ref)}` : '?ref=HEAD';
|
|
117
|
+
return await this.client.requestText('GET', `/api/v4/projects/${encodedPath}/repository/files/${encodedFile}/raw${refParam}`);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// --- Directory Listing ---
|
|
124
|
+
async getDirectoryContents(projectFullPath, dirPath, ref) {
|
|
125
|
+
try {
|
|
126
|
+
const encodedPath = encodeURIComponent(projectFullPath);
|
|
127
|
+
const refParam = ref ? `&ref=${encodeURIComponent(ref)}` : '&ref=HEAD';
|
|
128
|
+
const result = await this.client.request('GET', `/api/v4/projects/${encodedPath}/repository/tree?path=${encodeURIComponent(dirPath)}${refParam}`);
|
|
129
|
+
if (!Array.isArray(result))
|
|
130
|
+
return null;
|
|
131
|
+
return result.map((entry) => ({
|
|
132
|
+
name: entry.name,
|
|
133
|
+
path: entry.path,
|
|
134
|
+
type: entry.type === 'blob' ? 'file' : 'dir',
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// --- Mappers ---
|
|
142
|
+
mapProject(p) {
|
|
143
|
+
return {
|
|
144
|
+
id: String(p.id),
|
|
145
|
+
name: p.name,
|
|
146
|
+
fullPath: p.fullPath,
|
|
147
|
+
description: p.description,
|
|
148
|
+
defaultBranch: p.defaultBranch,
|
|
149
|
+
webUrl: p.webUrl,
|
|
150
|
+
connectionId: this.connectionId,
|
|
151
|
+
visibility: p.visibility,
|
|
152
|
+
topics: p.topics,
|
|
153
|
+
lastActivity: p.lastActivityAt,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
mapGroup(g) {
|
|
157
|
+
return {
|
|
158
|
+
id: String(g.id),
|
|
159
|
+
name: g.name,
|
|
160
|
+
fullPath: g.fullPath,
|
|
161
|
+
description: g.description,
|
|
162
|
+
webUrl: g.webUrl,
|
|
163
|
+
connectionId: this.connectionId,
|
|
164
|
+
visibility: g.visibility,
|
|
165
|
+
projectCount: 0,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
mapVariable(v, scope, scopeId) {
|
|
169
|
+
return {
|
|
170
|
+
key: v.key,
|
|
171
|
+
value: v.value || '***',
|
|
172
|
+
protected: v.protected,
|
|
173
|
+
masked: v.masked,
|
|
174
|
+
scope,
|
|
175
|
+
scopeId,
|
|
176
|
+
scopeName: scopeId,
|
|
177
|
+
connectionId: this.connectionId,
|
|
178
|
+
environment: v.environmentScope,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
mapPipeline(p, projectId) {
|
|
182
|
+
return {
|
|
183
|
+
id: String(p.id),
|
|
184
|
+
projectId,
|
|
185
|
+
projectName: projectId,
|
|
186
|
+
connectionId: this.connectionId,
|
|
187
|
+
status: (p.status || 'pending'),
|
|
188
|
+
ref: p.ref,
|
|
189
|
+
sha: p.sha,
|
|
190
|
+
webUrl: p.webUrl,
|
|
191
|
+
duration: p.duration,
|
|
192
|
+
createdAt: p.createdAt,
|
|
193
|
+
source: p.source || 'push',
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
mapJob(j, pipelineId) {
|
|
197
|
+
return {
|
|
198
|
+
id: String(j.id),
|
|
199
|
+
pipelineId: String(pipelineId),
|
|
200
|
+
name: j.name || '',
|
|
201
|
+
stage: j.stage || '',
|
|
202
|
+
status: (j.status || 'pending'),
|
|
203
|
+
duration: j.duration || 0,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5naXRsYWJwcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3Byb3ZpZGVycy9jbGFzc2VzLmdpdGxhYnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxZQUFZLEVBQTRFLE1BQU0sMkJBQTJCLENBQUM7QUFFbkk7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBZSxTQUFRLFlBQVk7SUFDdEMsTUFBTSxDQUFvQztJQUVsRCxZQUFZLFlBQW9CLEVBQUUsT0FBZSxFQUFFLEtBQWEsRUFBRSxhQUFzQjtRQUN0RixLQUFLLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQW1CO1FBQ25DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhO1lBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQzFFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMs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
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { BaseProvider } from './classes.baseprovider.js';
|
|
2
|
+
export { GiteaProvider } from './classes.giteaprovider.js';
|
|
3
|
+
export { GitLabProvider } from './classes.gitlabprovider.js';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm92aWRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUMifQ==
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export type TStorageBackend = 'filesystem' | 'memory';
|
|
2
|
+
export interface IStorageConfig {
|
|
3
|
+
backend?: TStorageBackend;
|
|
4
|
+
fsPath?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Key-value storage abstraction with filesystem and memory backends.
|
|
8
|
+
* Keys must start with '/' and are normalized (no '..', no double slashes).
|
|
9
|
+
*/
|
|
10
|
+
export declare class StorageManager {
|
|
11
|
+
private backend;
|
|
12
|
+
private fsPath;
|
|
13
|
+
private memoryStore;
|
|
14
|
+
constructor(config?: IStorageConfig);
|
|
15
|
+
/**
|
|
16
|
+
* Normalize and validate a storage key.
|
|
17
|
+
*/
|
|
18
|
+
private normalizeKey;
|
|
19
|
+
/**
|
|
20
|
+
* Resolve a key to a filesystem path.
|
|
21
|
+
*/
|
|
22
|
+
private keyToPath;
|
|
23
|
+
get(key: string): Promise<string | null>;
|
|
24
|
+
set(key: string, value: string): Promise<void>;
|
|
25
|
+
delete(key: string): Promise<boolean>;
|
|
26
|
+
exists(key: string): Promise<boolean>;
|
|
27
|
+
/**
|
|
28
|
+
* List keys under a given prefix.
|
|
29
|
+
*/
|
|
30
|
+
list(prefix: string): Promise<string[]>;
|
|
31
|
+
getJSON<T>(key: string): Promise<T | null>;
|
|
32
|
+
setJSON(key: string, value: unknown): Promise<void>;
|
|
33
|
+
}
|