@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,33 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta
|
|
5
|
+
name="viewport"
|
|
6
|
+
content="user-scalable=0, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height"
|
|
7
|
+
/>
|
|
8
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
9
|
+
<meta name="theme-color" content="#000000" />
|
|
10
|
+
<title>GitOps</title>
|
|
11
|
+
<link rel="preconnect" href="https://assetbroker.lossless.one/" crossorigin>
|
|
12
|
+
<link rel="stylesheet" href="https://assetbroker.lossless.one/fonts/fonts.css">
|
|
13
|
+
<style>
|
|
14
|
+
html {
|
|
15
|
+
-ms-text-size-adjust: 100%;
|
|
16
|
+
-webkit-text-size-adjust: 100%;
|
|
17
|
+
}
|
|
18
|
+
body {
|
|
19
|
+
position: relative;
|
|
20
|
+
background: #000;
|
|
21
|
+
margin: 0px;
|
|
22
|
+
}
|
|
23
|
+
</style>
|
|
24
|
+
</head>
|
|
25
|
+
<body>
|
|
26
|
+
<noscript>
|
|
27
|
+
<p style="color: #fff; text-align: center; margin-top: 100px;">
|
|
28
|
+
JavaScript is required to run the GitOps dashboard.
|
|
29
|
+
</p>
|
|
30
|
+
</noscript>
|
|
31
|
+
</body>
|
|
32
|
+
<script defer type="module" src="/bundle.js"></script>
|
|
33
|
+
</html>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* autocreated commitinfo by @push.rocks/commitinfo
|
|
3
|
+
*/
|
|
4
|
+
export const commitinfo = {
|
|
5
|
+
name: '@serve.zone/gitops',
|
|
6
|
+
version: '2.13.1',
|
|
7
|
+
description: 'GitOps management app for Gitea and GitLab - manage secrets, browse projects, view CI pipelines, and stream build logs'
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxvQkFBb0I7SUFDMUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHdIQUF3SDtDQUN0SSxDQUFBIn0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CacheDb } from './classes.cachedb.js';
|
|
2
|
+
type DocumentClass = {
|
|
3
|
+
getInstances: (filter: any) => Promise<{
|
|
4
|
+
delete: () => Promise<void>;
|
|
5
|
+
}[]>;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Periodically cleans up expired cached documents.
|
|
9
|
+
*/
|
|
10
|
+
export declare class CacheCleaner {
|
|
11
|
+
private intervalId;
|
|
12
|
+
private intervalMs;
|
|
13
|
+
private documentClasses;
|
|
14
|
+
private cacheDb;
|
|
15
|
+
constructor(cacheDb: CacheDb, intervalMs?: number);
|
|
16
|
+
/** Register a document class for cleanup */
|
|
17
|
+
registerClass(cls: DocumentClass): void;
|
|
18
|
+
start(): void;
|
|
19
|
+
stop(): void;
|
|
20
|
+
/** Run a single cleanup pass */
|
|
21
|
+
clean(): Promise<number>;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { logger } from '../logging.js';
|
|
2
|
+
import { unrefTimer } from '../timers.js';
|
|
3
|
+
const DEFAULT_INTERVAL_MS = 60 * 60 * 1000; // 1 hour
|
|
4
|
+
/**
|
|
5
|
+
* Periodically cleans up expired cached documents.
|
|
6
|
+
*/
|
|
7
|
+
export class CacheCleaner {
|
|
8
|
+
intervalId = null;
|
|
9
|
+
intervalMs;
|
|
10
|
+
documentClasses = [];
|
|
11
|
+
cacheDb;
|
|
12
|
+
constructor(cacheDb, intervalMs = DEFAULT_INTERVAL_MS) {
|
|
13
|
+
this.cacheDb = cacheDb;
|
|
14
|
+
this.intervalMs = intervalMs;
|
|
15
|
+
}
|
|
16
|
+
/** Register a document class for cleanup */
|
|
17
|
+
registerClass(cls) {
|
|
18
|
+
this.documentClasses.push(cls);
|
|
19
|
+
}
|
|
20
|
+
start() {
|
|
21
|
+
if (this.intervalId !== null)
|
|
22
|
+
return;
|
|
23
|
+
this.intervalId = setInterval(() => {
|
|
24
|
+
this.clean().catch((err) => {
|
|
25
|
+
logger.error(`CacheCleaner error: ${err}`);
|
|
26
|
+
});
|
|
27
|
+
}, this.intervalMs);
|
|
28
|
+
// Unref so the interval doesn't prevent process exit
|
|
29
|
+
unrefTimer(this.intervalId);
|
|
30
|
+
logger.debug(`CacheCleaner started (interval: ${this.intervalMs}ms)`);
|
|
31
|
+
}
|
|
32
|
+
stop() {
|
|
33
|
+
if (this.intervalId !== null) {
|
|
34
|
+
clearInterval(this.intervalId);
|
|
35
|
+
this.intervalId = null;
|
|
36
|
+
logger.debug('CacheCleaner stopped');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** Run a single cleanup pass */
|
|
40
|
+
async clean() {
|
|
41
|
+
const now = Date.now();
|
|
42
|
+
let totalDeleted = 0;
|
|
43
|
+
for (const cls of this.documentClasses) {
|
|
44
|
+
try {
|
|
45
|
+
const expired = await cls.getInstances({ expiresAt: { $lt: now } });
|
|
46
|
+
for (const doc of expired) {
|
|
47
|
+
await doc.delete();
|
|
48
|
+
totalDeleted++;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
logger.error(`CacheCleaner: failed to clean class: ${err}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (totalDeleted > 0) {
|
|
56
|
+
logger.debug(`CacheCleaner: deleted ${totalDeleted} expired document(s)`);
|
|
57
|
+
}
|
|
58
|
+
return totalDeleted;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jYWNoZS5jbGVhbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvY2FjaGUvY2xhc3Nlcy5jYWNoZS5jbGVhbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQU0xQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsU0FBUztBQUVyRDs7R0FFRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ2YsVUFBVSxHQUEwQyxJQUFJLENBQUM7SUFDekQsVUFBVSxDQUFTO0lBQ25CLGVBQWUsR0FBb0IsRUFBRSxDQUFDO0lBQ3RDLE9BQU8sQ0FBVTtJQUV6QixZQUFZLE9BQWdCLEVBQUUsVUFBVSxHQUFHLG1CQUFtQjtRQUM1RCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQsNENBQTRDO0lBQzVDLGFBQWEsQ0FBQyxHQUFrQjtRQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJO1lBQUUsT0FBTztRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN6QixNQUFNLENBQUMsS0FBSyxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQixxREFBcUQ7UUFDckQsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QixNQUFNLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM3QixhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDckIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3BFLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQzFCLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNuQixZQUFZLEVBQUUsQ0FBQztnQkFDakIsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDOUQsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixZQUFZLHNCQUFzQixDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
/** TTL duration constants in milliseconds */
|
|
3
|
+
export declare const TTL: {
|
|
4
|
+
readonly MINUTES_5: number;
|
|
5
|
+
readonly HOURS_1: number;
|
|
6
|
+
readonly HOURS_24: number;
|
|
7
|
+
readonly DAYS_7: number;
|
|
8
|
+
readonly DAYS_30: number;
|
|
9
|
+
readonly DAYS_90: number;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Abstract base class for cached documents with TTL support.
|
|
13
|
+
* Extend this class and add @Collection decorator pointing to your CacheDb.
|
|
14
|
+
*/
|
|
15
|
+
export declare abstract class CachedDocument<T extends CachedDocument<T>> extends plugins.smartdata.SmartDataDbDoc<T, T> {
|
|
16
|
+
createdAt: number;
|
|
17
|
+
expiresAt: number;
|
|
18
|
+
lastAccessedAt: number;
|
|
19
|
+
constructor();
|
|
20
|
+
/** Set TTL in milliseconds from now */
|
|
21
|
+
setTTL(ms: number): void;
|
|
22
|
+
/** Set TTL in days from now */
|
|
23
|
+
setTTLDays(days: number): void;
|
|
24
|
+
/** Set TTL in hours from now */
|
|
25
|
+
setTTLHours(hours: number): void;
|
|
26
|
+
/** Check if this document has expired */
|
|
27
|
+
isExpired(): boolean;
|
|
28
|
+
/** Update last accessed timestamp */
|
|
29
|
+
touch(): void;
|
|
30
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
35
|
+
import * as plugins from '../plugins.js';
|
|
36
|
+
/** TTL duration constants in milliseconds */
|
|
37
|
+
export const TTL = {
|
|
38
|
+
MINUTES_5: 5 * 60 * 1000,
|
|
39
|
+
HOURS_1: 60 * 60 * 1000,
|
|
40
|
+
HOURS_24: 24 * 60 * 60 * 1000,
|
|
41
|
+
DAYS_7: 7 * 24 * 60 * 60 * 1000,
|
|
42
|
+
DAYS_30: 30 * 24 * 60 * 60 * 1000,
|
|
43
|
+
DAYS_90: 90 * 24 * 60 * 60 * 1000,
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Abstract base class for cached documents with TTL support.
|
|
47
|
+
* Extend this class and add @Collection decorator pointing to your CacheDb.
|
|
48
|
+
*/
|
|
49
|
+
let CachedDocument = (() => {
|
|
50
|
+
let _classSuper = plugins.smartdata.SmartDataDbDoc;
|
|
51
|
+
let _createdAt_decorators;
|
|
52
|
+
let _createdAt_initializers = [];
|
|
53
|
+
let _createdAt_extraInitializers = [];
|
|
54
|
+
let _expiresAt_decorators;
|
|
55
|
+
let _expiresAt_initializers = [];
|
|
56
|
+
let _expiresAt_extraInitializers = [];
|
|
57
|
+
let _lastAccessedAt_decorators;
|
|
58
|
+
let _lastAccessedAt_initializers = [];
|
|
59
|
+
let _lastAccessedAt_extraInitializers = [];
|
|
60
|
+
return class CachedDocument extends _classSuper {
|
|
61
|
+
static {
|
|
62
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
63
|
+
_createdAt_decorators = [plugins.smartdata.svDb()];
|
|
64
|
+
_expiresAt_decorators = [plugins.smartdata.svDb()];
|
|
65
|
+
_lastAccessedAt_decorators = [plugins.smartdata.svDb()];
|
|
66
|
+
__esDecorate(null, null, _createdAt_decorators, { kind: "field", name: "createdAt", static: false, private: false, access: { has: obj => "createdAt" in obj, get: obj => obj.createdAt, set: (obj, value) => { obj.createdAt = value; } }, metadata: _metadata }, _createdAt_initializers, _createdAt_extraInitializers);
|
|
67
|
+
__esDecorate(null, null, _expiresAt_decorators, { kind: "field", name: "expiresAt", static: false, private: false, access: { has: obj => "expiresAt" in obj, get: obj => obj.expiresAt, set: (obj, value) => { obj.expiresAt = value; } }, metadata: _metadata }, _expiresAt_initializers, _expiresAt_extraInitializers);
|
|
68
|
+
__esDecorate(null, null, _lastAccessedAt_decorators, { kind: "field", name: "lastAccessedAt", static: false, private: false, access: { has: obj => "lastAccessedAt" in obj, get: obj => obj.lastAccessedAt, set: (obj, value) => { obj.lastAccessedAt = value; } }, metadata: _metadata }, _lastAccessedAt_initializers, _lastAccessedAt_extraInitializers);
|
|
69
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
70
|
+
}
|
|
71
|
+
createdAt = __runInitializers(this, _createdAt_initializers, Date.now());
|
|
72
|
+
expiresAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _expiresAt_initializers, Date.now() + TTL.HOURS_1));
|
|
73
|
+
lastAccessedAt = (__runInitializers(this, _expiresAt_extraInitializers), __runInitializers(this, _lastAccessedAt_initializers, Date.now()));
|
|
74
|
+
constructor() {
|
|
75
|
+
super();
|
|
76
|
+
__runInitializers(this, _lastAccessedAt_extraInitializers);
|
|
77
|
+
}
|
|
78
|
+
/** Set TTL in milliseconds from now */
|
|
79
|
+
setTTL(ms) {
|
|
80
|
+
this.expiresAt = Date.now() + ms;
|
|
81
|
+
}
|
|
82
|
+
/** Set TTL in days from now */
|
|
83
|
+
setTTLDays(days) {
|
|
84
|
+
this.setTTL(days * 24 * 60 * 60 * 1000);
|
|
85
|
+
}
|
|
86
|
+
/** Set TTL in hours from now */
|
|
87
|
+
setTTLHours(hours) {
|
|
88
|
+
this.setTTL(hours * 60 * 60 * 1000);
|
|
89
|
+
}
|
|
90
|
+
/** Check if this document has expired */
|
|
91
|
+
isExpired() {
|
|
92
|
+
return Date.now() > this.expiresAt;
|
|
93
|
+
}
|
|
94
|
+
/** Update last accessed timestamp */
|
|
95
|
+
touch() {
|
|
96
|
+
this.lastAccessedAt = Date.now();
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
})();
|
|
100
|
+
export { CachedDocument };
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jYWNoZWQuZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jYWNoZS9jbGFzc2VzLmNhY2hlZC5kb2N1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFFekMsNkNBQTZDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRztJQUNqQixTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQ3hCLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7SUFDdkIsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7SUFDN0IsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQy9CLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtJQUNqQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7Q0FDekIsQ0FBQztBQUVYOzs7R0FHRztJQUNtQixjQUFjO3NCQUUxQixPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWM7Ozs7Ozs7Ozs7aUJBRnBCLGNBRXBCLFNBQVEsV0FBc0M7OztxQ0FDN0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7cUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFOzBDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtZQUx6Qiw2S0FBTyxTQUFTLDZCQUFULFNBQVMsNkZBQXNCO1lBR3RDLDZLQUFPLFNBQVMsNkJBQVQsU0FBUyw2RkFBb0M7WUFHcEQsNExBQU8sY0FBYyw2QkFBZCxjQUFjLHVHQUFzQjs7O1FBTnBDLFNBQVMsb0RBQVcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDO1FBRy9CLFNBQVMsNEdBQVcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEdBQUM7UUFHN0MsY0FBYyxpSEFBVyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUM7UUFFM0M7WUFDRSxLQUFLLEVBQUUsQ0FBQzs7U0FDVDtRQUVELHVDQUF1QztRQUN2QyxNQUFNLENBQUMsRUFBVTtZQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNuQyxDQUFDO1FBRUQsK0JBQStCO1FBQy9CLFVBQVUsQ0FBQyxJQUFZO1lBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxnQ0FBZ0M7UUFDaEMsV0FBVyxDQUFDLEtBQWE7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQseUNBQXlDO1FBQ3pDLFNBQVM7WUFDUCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxxQ0FBcUM7UUFDckMsS0FBSztZQUNILElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ25DLENBQUM7OztTQXZDbUIsY0FBYyJ9
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
export interface ICacheDbOptions {
|
|
3
|
+
storagePath?: string;
|
|
4
|
+
dbName?: string;
|
|
5
|
+
debug?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Singleton wrapper around LocalTsmDb + SmartdataDb.
|
|
9
|
+
* Provides a managed MongoDB-compatible cache database.
|
|
10
|
+
*/
|
|
11
|
+
export declare class CacheDb {
|
|
12
|
+
private static instance;
|
|
13
|
+
private smartMongo;
|
|
14
|
+
private smartdataDb;
|
|
15
|
+
private options;
|
|
16
|
+
private constructor();
|
|
17
|
+
static getInstance(options?: ICacheDbOptions): CacheDb;
|
|
18
|
+
static resetInstance(): void;
|
|
19
|
+
start(): Promise<void>;
|
|
20
|
+
stop(): Promise<void>;
|
|
21
|
+
getDb(): InstanceType<typeof plugins.smartdata.SmartdataDb>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
import { logger } from '../logging.js';
|
|
3
|
+
/**
|
|
4
|
+
* Singleton wrapper around LocalTsmDb + SmartdataDb.
|
|
5
|
+
* Provides a managed MongoDB-compatible cache database.
|
|
6
|
+
*/
|
|
7
|
+
export class CacheDb {
|
|
8
|
+
static instance = null;
|
|
9
|
+
smartMongo = null;
|
|
10
|
+
smartdataDb = null;
|
|
11
|
+
options;
|
|
12
|
+
constructor(options = {}) {
|
|
13
|
+
this.options = {
|
|
14
|
+
storagePath: options.storagePath ?? './.nogit/cachedb',
|
|
15
|
+
dbName: options.dbName ?? 'gitops_cache',
|
|
16
|
+
debug: options.debug ?? false,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
static getInstance(options) {
|
|
20
|
+
if (!CacheDb.instance) {
|
|
21
|
+
CacheDb.instance = new CacheDb(options);
|
|
22
|
+
}
|
|
23
|
+
return CacheDb.instance;
|
|
24
|
+
}
|
|
25
|
+
static resetInstance() {
|
|
26
|
+
CacheDb.instance = null;
|
|
27
|
+
}
|
|
28
|
+
async start() {
|
|
29
|
+
logger.info('Starting CacheDb...');
|
|
30
|
+
this.smartMongo = await plugins.smartmongo.SmartMongo.createAndStart();
|
|
31
|
+
const mongoDescriptor = await this.smartMongo.getMongoDescriptor();
|
|
32
|
+
this.smartdataDb = new plugins.smartdata.SmartdataDb({
|
|
33
|
+
mongoDbUrl: mongoDescriptor.mongoDbUrl,
|
|
34
|
+
mongoDbName: this.options.dbName,
|
|
35
|
+
});
|
|
36
|
+
await this.smartdataDb.init();
|
|
37
|
+
logger.success(`CacheDb started (db: ${this.options.dbName})`);
|
|
38
|
+
}
|
|
39
|
+
async stop() {
|
|
40
|
+
logger.info('Stopping CacheDb...');
|
|
41
|
+
if (this.smartdataDb) {
|
|
42
|
+
await this.smartdataDb.close();
|
|
43
|
+
this.smartdataDb = null;
|
|
44
|
+
}
|
|
45
|
+
if (this.smartMongo) {
|
|
46
|
+
await this.smartMongo.stop();
|
|
47
|
+
this.smartMongo = null;
|
|
48
|
+
}
|
|
49
|
+
logger.success('CacheDb stopped');
|
|
50
|
+
}
|
|
51
|
+
getDb() {
|
|
52
|
+
if (!this.smartdataDb) {
|
|
53
|
+
throw new Error('CacheDb not started. Call start() first.');
|
|
54
|
+
}
|
|
55
|
+
return this.smartdataDb;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jYWNoZWRiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvY2FjaGUvY2xhc3Nlcy5jYWNoZWRiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRdkM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLE9BQU87SUFDVixNQUFNLENBQUMsUUFBUSxHQUFtQixJQUFJLENBQUM7SUFFdkMsVUFBVSxHQUE4RCxJQUFJLENBQUM7SUFDN0UsV0FBVyxHQUE4RCxJQUFJLENBQUM7SUFDOUUsT0FBTyxDQUE0QjtJQUUzQyxZQUFvQixVQUEyQixFQUFFO1FBQy9DLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSxrQkFBa0I7WUFDdEQsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksY0FBYztZQUN4QyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUF5QjtRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWE7UUFDbEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2RSxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUVuRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7WUFDbkQsVUFBVSxFQUFFLGVBQWUsQ0FBQyxVQUFVO1lBQ3RDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07U0FDakMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxPQUFPLENBQUMsd0JBQXdCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzFCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQztRQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQyJ9
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { ConnectionManager } from '../classes/connectionmanager.js';
|
|
2
|
+
import type { ISecret } from '../../dist_ts_interfaces/data/secret.js';
|
|
3
|
+
export interface IScanResult {
|
|
4
|
+
connectionsScanned: number;
|
|
5
|
+
secretsFound: number;
|
|
6
|
+
errors: string[];
|
|
7
|
+
durationMs: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Centralized secrets scanning service. Fetches all secrets from all
|
|
11
|
+
* connections and upserts them into the CachedSecret collection.
|
|
12
|
+
*/
|
|
13
|
+
export declare class SecretsScanService {
|
|
14
|
+
lastScanTimestamp: number;
|
|
15
|
+
lastScanResult: IScanResult | null;
|
|
16
|
+
isScanning: boolean;
|
|
17
|
+
private connectionManager;
|
|
18
|
+
constructor(connectionManager: ConnectionManager);
|
|
19
|
+
/**
|
|
20
|
+
* Upsert a single secret into the cache. If a doc with the same composite ID
|
|
21
|
+
* already exists, update it in place; otherwise insert a new one.
|
|
22
|
+
*/
|
|
23
|
+
private upsertSecret;
|
|
24
|
+
/**
|
|
25
|
+
* Save an array of secrets to cache using upsert logic.
|
|
26
|
+
* Best-effort: individual failures are silently ignored.
|
|
27
|
+
*/
|
|
28
|
+
saveSecrets(secrets: ISecret[]): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Full scan: iterate all connections, fetch all projects+groups,
|
|
31
|
+
* fetch all secrets per entity, upsert CachedSecret docs.
|
|
32
|
+
*/
|
|
33
|
+
fullScan(): Promise<IScanResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Scan a single entity: delete existing cached secrets for that entity,
|
|
36
|
+
* fetch fresh from provider, and save to cache.
|
|
37
|
+
*/
|
|
38
|
+
scanEntity(connectionId: string, scope: 'project' | 'group', scopeId: string, scopeName?: string): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Get cached secrets matching the filter criteria.
|
|
41
|
+
*/
|
|
42
|
+
getCachedSecrets(filter: {
|
|
43
|
+
connectionId: string;
|
|
44
|
+
scope: 'project' | 'group';
|
|
45
|
+
scopeId?: string;
|
|
46
|
+
}): Promise<ISecret[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Check if non-expired cached data exists for the given connection+scope.
|
|
49
|
+
*/
|
|
50
|
+
hasCachedData(connectionId: string, scope: 'project' | 'group'): Promise<boolean>;
|
|
51
|
+
}
|