@push.rocks/smartregistry 1.1.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/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/classes.smartregistry.d.ts +45 -0
- package/dist_ts/classes.smartregistry.js +113 -0
- package/dist_ts/core/classes.authmanager.d.ts +108 -0
- package/dist_ts/core/classes.authmanager.js +315 -0
- package/dist_ts/core/classes.baseregistry.d.ts +28 -0
- package/dist_ts/core/classes.baseregistry.js +6 -0
- package/dist_ts/core/classes.registrystorage.d.ts +109 -0
- package/dist_ts/core/classes.registrystorage.js +226 -0
- package/dist_ts/core/index.d.ts +7 -0
- package/dist_ts/core/index.js +10 -0
- package/dist_ts/core/interfaces.core.d.ts +142 -0
- package/dist_ts/core/interfaces.core.js +5 -0
- package/dist_ts/index.d.ts +8 -0
- package/dist_ts/index.js +13 -0
- package/dist_ts/npm/classes.npmregistry.d.ts +36 -0
- package/dist_ts/npm/classes.npmregistry.js +717 -0
- package/dist_ts/npm/index.d.ts +5 -0
- package/dist_ts/npm/index.js +6 -0
- package/dist_ts/npm/interfaces.npm.d.ts +245 -0
- package/dist_ts/npm/interfaces.npm.js +6 -0
- package/dist_ts/oci/classes.ociregistry.d.ts +43 -0
- package/dist_ts/oci/classes.ociregistry.js +565 -0
- package/dist_ts/oci/index.d.ts +5 -0
- package/dist_ts/oci/index.js +6 -0
- package/dist_ts/oci/interfaces.oci.d.ts +103 -0
- package/dist_ts/oci/interfaces.oci.js +5 -0
- package/dist_ts/paths.d.ts +1 -0
- package/dist_ts/paths.js +3 -0
- package/dist_ts/plugins.d.ts +6 -0
- package/dist_ts/plugins.js +9 -0
- package/npmextra.json +18 -0
- package/package.json +49 -0
- package/readme.hints.md +3 -0
- package/readme.md +486 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/classes.smartregistry.ts +129 -0
- package/ts/core/classes.authmanager.ts +388 -0
- package/ts/core/classes.baseregistry.ts +36 -0
- package/ts/core/classes.registrystorage.ts +270 -0
- package/ts/core/index.ts +11 -0
- package/ts/core/interfaces.core.ts +159 -0
- package/ts/index.ts +16 -0
- package/ts/npm/classes.npmregistry.ts +890 -0
- package/ts/npm/index.ts +6 -0
- package/ts/npm/interfaces.npm.ts +263 -0
- package/ts/oci/classes.ociregistry.ts +734 -0
- package/ts/oci/index.ts +6 -0
- package/ts/oci/interfaces.oci.ts +101 -0
- package/ts/paths.ts +5 -0
- package/ts/plugins.ts +11 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { IStorageConfig, IStorageBackend } from './interfaces.core.js';
|
|
2
|
+
/**
|
|
3
|
+
* Storage abstraction layer for registry
|
|
4
|
+
* Provides a unified interface over SmartBucket
|
|
5
|
+
*/
|
|
6
|
+
export declare class RegistryStorage implements IStorageBackend {
|
|
7
|
+
private config;
|
|
8
|
+
private smartBucket;
|
|
9
|
+
private bucket;
|
|
10
|
+
private bucketName;
|
|
11
|
+
constructor(config: IStorageConfig);
|
|
12
|
+
/**
|
|
13
|
+
* Initialize the storage backend
|
|
14
|
+
*/
|
|
15
|
+
init(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Get an object from storage
|
|
18
|
+
*/
|
|
19
|
+
getObject(key: string): Promise<Buffer | null>;
|
|
20
|
+
/**
|
|
21
|
+
* Store an object
|
|
22
|
+
*/
|
|
23
|
+
putObject(key: string, data: Buffer, metadata?: Record<string, string>): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Delete an object
|
|
26
|
+
*/
|
|
27
|
+
deleteObject(key: string): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* List objects with a prefix (recursively)
|
|
30
|
+
*/
|
|
31
|
+
listObjects(prefix: string): Promise<string[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Check if an object exists
|
|
34
|
+
*/
|
|
35
|
+
objectExists(key: string): Promise<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* Get object metadata
|
|
38
|
+
* Note: SmartBucket may not support metadata retrieval, returning empty object
|
|
39
|
+
*/
|
|
40
|
+
getMetadata(key: string): Promise<Record<string, string> | null>;
|
|
41
|
+
/**
|
|
42
|
+
* Get OCI blob by digest
|
|
43
|
+
*/
|
|
44
|
+
getOciBlob(digest: string): Promise<Buffer | null>;
|
|
45
|
+
/**
|
|
46
|
+
* Store OCI blob
|
|
47
|
+
*/
|
|
48
|
+
putOciBlob(digest: string, data: Buffer): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Check if OCI blob exists
|
|
51
|
+
*/
|
|
52
|
+
ociBlobExists(digest: string): Promise<boolean>;
|
|
53
|
+
/**
|
|
54
|
+
* Delete OCI blob
|
|
55
|
+
*/
|
|
56
|
+
deleteOciBlob(digest: string): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Get OCI manifest
|
|
59
|
+
*/
|
|
60
|
+
getOciManifest(repository: string, digest: string): Promise<Buffer | null>;
|
|
61
|
+
/**
|
|
62
|
+
* Store OCI manifest
|
|
63
|
+
*/
|
|
64
|
+
putOciManifest(repository: string, digest: string, data: Buffer, contentType: string): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Check if OCI manifest exists
|
|
67
|
+
*/
|
|
68
|
+
ociManifestExists(repository: string, digest: string): Promise<boolean>;
|
|
69
|
+
/**
|
|
70
|
+
* Delete OCI manifest
|
|
71
|
+
*/
|
|
72
|
+
deleteOciManifest(repository: string, digest: string): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Get NPM packument (package document)
|
|
75
|
+
*/
|
|
76
|
+
getNpmPackument(packageName: string): Promise<any | null>;
|
|
77
|
+
/**
|
|
78
|
+
* Store NPM packument
|
|
79
|
+
*/
|
|
80
|
+
putNpmPackument(packageName: string, packument: any): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Check if NPM packument exists
|
|
83
|
+
*/
|
|
84
|
+
npmPackumentExists(packageName: string): Promise<boolean>;
|
|
85
|
+
/**
|
|
86
|
+
* Delete NPM packument
|
|
87
|
+
*/
|
|
88
|
+
deleteNpmPackument(packageName: string): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Get NPM tarball
|
|
91
|
+
*/
|
|
92
|
+
getNpmTarball(packageName: string, version: string): Promise<Buffer | null>;
|
|
93
|
+
/**
|
|
94
|
+
* Store NPM tarball
|
|
95
|
+
*/
|
|
96
|
+
putNpmTarball(packageName: string, version: string, tarball: Buffer): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Check if NPM tarball exists
|
|
99
|
+
*/
|
|
100
|
+
npmTarballExists(packageName: string, version: string): Promise<boolean>;
|
|
101
|
+
/**
|
|
102
|
+
* Delete NPM tarball
|
|
103
|
+
*/
|
|
104
|
+
deleteNpmTarball(packageName: string, version: string): Promise<void>;
|
|
105
|
+
private getOciBlobPath;
|
|
106
|
+
private getOciManifestPath;
|
|
107
|
+
private getNpmPackumentPath;
|
|
108
|
+
private getNpmTarballPath;
|
|
109
|
+
}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* Storage abstraction layer for registry
|
|
4
|
+
* Provides a unified interface over SmartBucket
|
|
5
|
+
*/
|
|
6
|
+
export class RegistryStorage {
|
|
7
|
+
config;
|
|
8
|
+
smartBucket;
|
|
9
|
+
bucket;
|
|
10
|
+
bucketName;
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.config = config;
|
|
13
|
+
this.bucketName = config.bucketName;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Initialize the storage backend
|
|
17
|
+
*/
|
|
18
|
+
async init() {
|
|
19
|
+
this.smartBucket = new plugins.smartbucket.SmartBucket({
|
|
20
|
+
accessKey: this.config.accessKey,
|
|
21
|
+
accessSecret: this.config.accessSecret,
|
|
22
|
+
endpoint: this.config.endpoint,
|
|
23
|
+
port: this.config.port || 443,
|
|
24
|
+
useSsl: this.config.useSsl !== false,
|
|
25
|
+
region: this.config.region || 'us-east-1',
|
|
26
|
+
});
|
|
27
|
+
// Ensure bucket exists
|
|
28
|
+
await this.smartBucket.createBucket(this.bucketName).catch(() => {
|
|
29
|
+
// Bucket may already exist
|
|
30
|
+
});
|
|
31
|
+
this.bucket = await this.smartBucket.getBucketByName(this.bucketName);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get an object from storage
|
|
35
|
+
*/
|
|
36
|
+
async getObject(key) {
|
|
37
|
+
try {
|
|
38
|
+
return await this.bucket.fastGet({ path: key });
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Store an object
|
|
46
|
+
*/
|
|
47
|
+
async putObject(key, data, metadata) {
|
|
48
|
+
// Note: SmartBucket doesn't support metadata yet
|
|
49
|
+
await this.bucket.fastPut({
|
|
50
|
+
path: key,
|
|
51
|
+
contents: data,
|
|
52
|
+
overwrite: true, // Always overwrite existing objects
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Delete an object
|
|
57
|
+
*/
|
|
58
|
+
async deleteObject(key) {
|
|
59
|
+
await this.bucket.fastRemove({ path: key });
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* List objects with a prefix (recursively)
|
|
63
|
+
*/
|
|
64
|
+
async listObjects(prefix) {
|
|
65
|
+
const paths = [];
|
|
66
|
+
for await (const path of this.bucket.listAllObjects(prefix)) {
|
|
67
|
+
paths.push(path);
|
|
68
|
+
}
|
|
69
|
+
return paths;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Check if an object exists
|
|
73
|
+
*/
|
|
74
|
+
async objectExists(key) {
|
|
75
|
+
return await this.bucket.fastExists({ path: key });
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get object metadata
|
|
79
|
+
* Note: SmartBucket may not support metadata retrieval, returning empty object
|
|
80
|
+
*/
|
|
81
|
+
async getMetadata(key) {
|
|
82
|
+
// SmartBucket doesn't expose metadata retrieval directly
|
|
83
|
+
// This is a limitation we'll document
|
|
84
|
+
const exists = await this.objectExists(key);
|
|
85
|
+
return exists ? {} : null;
|
|
86
|
+
}
|
|
87
|
+
// ========================================================================
|
|
88
|
+
// OCI-SPECIFIC HELPERS
|
|
89
|
+
// ========================================================================
|
|
90
|
+
/**
|
|
91
|
+
* Get OCI blob by digest
|
|
92
|
+
*/
|
|
93
|
+
async getOciBlob(digest) {
|
|
94
|
+
const path = this.getOciBlobPath(digest);
|
|
95
|
+
return this.getObject(path);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Store OCI blob
|
|
99
|
+
*/
|
|
100
|
+
async putOciBlob(digest, data) {
|
|
101
|
+
const path = this.getOciBlobPath(digest);
|
|
102
|
+
return this.putObject(path, data);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Check if OCI blob exists
|
|
106
|
+
*/
|
|
107
|
+
async ociBlobExists(digest) {
|
|
108
|
+
const path = this.getOciBlobPath(digest);
|
|
109
|
+
return this.objectExists(path);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Delete OCI blob
|
|
113
|
+
*/
|
|
114
|
+
async deleteOciBlob(digest) {
|
|
115
|
+
const path = this.getOciBlobPath(digest);
|
|
116
|
+
return this.deleteObject(path);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get OCI manifest
|
|
120
|
+
*/
|
|
121
|
+
async getOciManifest(repository, digest) {
|
|
122
|
+
const path = this.getOciManifestPath(repository, digest);
|
|
123
|
+
return this.getObject(path);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Store OCI manifest
|
|
127
|
+
*/
|
|
128
|
+
async putOciManifest(repository, digest, data, contentType) {
|
|
129
|
+
const path = this.getOciManifestPath(repository, digest);
|
|
130
|
+
return this.putObject(path, data, { 'Content-Type': contentType });
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Check if OCI manifest exists
|
|
134
|
+
*/
|
|
135
|
+
async ociManifestExists(repository, digest) {
|
|
136
|
+
const path = this.getOciManifestPath(repository, digest);
|
|
137
|
+
return this.objectExists(path);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Delete OCI manifest
|
|
141
|
+
*/
|
|
142
|
+
async deleteOciManifest(repository, digest) {
|
|
143
|
+
const path = this.getOciManifestPath(repository, digest);
|
|
144
|
+
return this.deleteObject(path);
|
|
145
|
+
}
|
|
146
|
+
// ========================================================================
|
|
147
|
+
// NPM-SPECIFIC HELPERS
|
|
148
|
+
// ========================================================================
|
|
149
|
+
/**
|
|
150
|
+
* Get NPM packument (package document)
|
|
151
|
+
*/
|
|
152
|
+
async getNpmPackument(packageName) {
|
|
153
|
+
const path = this.getNpmPackumentPath(packageName);
|
|
154
|
+
const data = await this.getObject(path);
|
|
155
|
+
return data ? JSON.parse(data.toString('utf-8')) : null;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Store NPM packument
|
|
159
|
+
*/
|
|
160
|
+
async putNpmPackument(packageName, packument) {
|
|
161
|
+
const path = this.getNpmPackumentPath(packageName);
|
|
162
|
+
const data = Buffer.from(JSON.stringify(packument, null, 2), 'utf-8');
|
|
163
|
+
return this.putObject(path, data, { 'Content-Type': 'application/json' });
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Check if NPM packument exists
|
|
167
|
+
*/
|
|
168
|
+
async npmPackumentExists(packageName) {
|
|
169
|
+
const path = this.getNpmPackumentPath(packageName);
|
|
170
|
+
return this.objectExists(path);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Delete NPM packument
|
|
174
|
+
*/
|
|
175
|
+
async deleteNpmPackument(packageName) {
|
|
176
|
+
const path = this.getNpmPackumentPath(packageName);
|
|
177
|
+
return this.deleteObject(path);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get NPM tarball
|
|
181
|
+
*/
|
|
182
|
+
async getNpmTarball(packageName, version) {
|
|
183
|
+
const path = this.getNpmTarballPath(packageName, version);
|
|
184
|
+
return this.getObject(path);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Store NPM tarball
|
|
188
|
+
*/
|
|
189
|
+
async putNpmTarball(packageName, version, tarball) {
|
|
190
|
+
const path = this.getNpmTarballPath(packageName, version);
|
|
191
|
+
return this.putObject(path, tarball, { 'Content-Type': 'application/octet-stream' });
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Check if NPM tarball exists
|
|
195
|
+
*/
|
|
196
|
+
async npmTarballExists(packageName, version) {
|
|
197
|
+
const path = this.getNpmTarballPath(packageName, version);
|
|
198
|
+
return this.objectExists(path);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Delete NPM tarball
|
|
202
|
+
*/
|
|
203
|
+
async deleteNpmTarball(packageName, version) {
|
|
204
|
+
const path = this.getNpmTarballPath(packageName, version);
|
|
205
|
+
return this.deleteObject(path);
|
|
206
|
+
}
|
|
207
|
+
// ========================================================================
|
|
208
|
+
// PATH HELPERS
|
|
209
|
+
// ========================================================================
|
|
210
|
+
getOciBlobPath(digest) {
|
|
211
|
+
const hash = digest.split(':')[1];
|
|
212
|
+
return `oci/blobs/sha256/${hash}`;
|
|
213
|
+
}
|
|
214
|
+
getOciManifestPath(repository, digest) {
|
|
215
|
+
const hash = digest.split(':')[1];
|
|
216
|
+
return `oci/manifests/${repository}/${hash}`;
|
|
217
|
+
}
|
|
218
|
+
getNpmPackumentPath(packageName) {
|
|
219
|
+
return `npm/packages/${packageName}/index.json`;
|
|
220
|
+
}
|
|
221
|
+
getNpmTarballPath(packageName, version) {
|
|
222
|
+
const safeName = packageName.replace('@', '').replace('/', '-');
|
|
223
|
+
return `npm/packages/${packageName}/${safeName}-${version}.tgz`;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yZWdpc3RyeXN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jb3JlL2NsYXNzZXMucmVnaXN0cnlzdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBR3pDOzs7R0FHRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBS047SUFKWixXQUFXLENBQWtDO0lBQzdDLE1BQU0sQ0FBNkI7SUFDbkMsVUFBVSxDQUFTO0lBRTNCLFlBQW9CLE1BQXNCO1FBQXRCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsSUFBSTtRQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztZQUNyRCxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO1lBQ2hDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7WUFDdEMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtZQUM5QixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRztZQUM3QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssS0FBSztZQUNwQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksV0FBVztTQUMxQyxDQUFDLENBQUM7UUFFSCx1QkFBdUI7UUFDdkIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUM5RCwyQkFBMkI7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFB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
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core registry infrastructure exports
|
|
3
|
+
*/
|
|
4
|
+
export * from './interfaces.core.js';
|
|
5
|
+
export { BaseRegistry } from './classes.baseregistry.js';
|
|
6
|
+
export { RegistryStorage } from './classes.registrystorage.js';
|
|
7
|
+
export { AuthManager } from './classes.authmanager.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core registry infrastructure exports
|
|
3
|
+
*/
|
|
4
|
+
// Interfaces
|
|
5
|
+
export * from './interfaces.core.js';
|
|
6
|
+
// Classes
|
|
7
|
+
export { BaseRegistry } from './classes.baseregistry.js';
|
|
8
|
+
export { RegistryStorage } from './classes.registrystorage.js';
|
|
9
|
+
export { AuthManager } from './classes.authmanager.js';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jb3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsYUFBYTtBQUNiLGNBQWMsc0JBQXNCLENBQUM7QUFFckMsVUFBVTtBQUNWLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDIn0=
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core interfaces for the composable registry system
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Registry protocol types
|
|
6
|
+
*/
|
|
7
|
+
export type TRegistryProtocol = 'oci' | 'npm';
|
|
8
|
+
/**
|
|
9
|
+
* Unified action types across protocols
|
|
10
|
+
*/
|
|
11
|
+
export type TRegistryAction = 'pull' | 'push' | 'delete' | 'read' | 'write' | '*';
|
|
12
|
+
/**
|
|
13
|
+
* Unified authentication token
|
|
14
|
+
*/
|
|
15
|
+
export interface IAuthToken {
|
|
16
|
+
/** Token type/protocol */
|
|
17
|
+
type: TRegistryProtocol;
|
|
18
|
+
/** User ID */
|
|
19
|
+
userId: string;
|
|
20
|
+
/** Permission scopes (e.g., "npm:package:foo:write", "oci:repository:bar:push") */
|
|
21
|
+
scopes: string[];
|
|
22
|
+
/** Token expiration */
|
|
23
|
+
expiresAt?: Date;
|
|
24
|
+
/** Read-only flag */
|
|
25
|
+
readonly?: boolean;
|
|
26
|
+
/** Additional metadata */
|
|
27
|
+
metadata?: Record<string, any>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Credentials for authentication
|
|
31
|
+
*/
|
|
32
|
+
export interface ICredentials {
|
|
33
|
+
username: string;
|
|
34
|
+
password: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Storage backend configuration
|
|
38
|
+
*/
|
|
39
|
+
export interface IStorageConfig {
|
|
40
|
+
accessKey: string;
|
|
41
|
+
accessSecret: string;
|
|
42
|
+
endpoint: string;
|
|
43
|
+
port?: number;
|
|
44
|
+
useSsl?: boolean;
|
|
45
|
+
region?: string;
|
|
46
|
+
bucketName: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Authentication configuration
|
|
50
|
+
*/
|
|
51
|
+
export interface IAuthConfig {
|
|
52
|
+
/** JWT secret for OCI tokens */
|
|
53
|
+
jwtSecret: string;
|
|
54
|
+
/** Token storage type */
|
|
55
|
+
tokenStore: 'memory' | 'redis' | 'database';
|
|
56
|
+
/** NPM token settings */
|
|
57
|
+
npmTokens: {
|
|
58
|
+
enabled: boolean;
|
|
59
|
+
defaultReadonly?: boolean;
|
|
60
|
+
};
|
|
61
|
+
/** OCI token settings */
|
|
62
|
+
ociTokens: {
|
|
63
|
+
enabled: boolean;
|
|
64
|
+
realm: string;
|
|
65
|
+
service: string;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Protocol-specific configuration
|
|
70
|
+
*/
|
|
71
|
+
export interface IProtocolConfig {
|
|
72
|
+
enabled: boolean;
|
|
73
|
+
basePath: string;
|
|
74
|
+
features?: Record<string, boolean>;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Main registry configuration
|
|
78
|
+
*/
|
|
79
|
+
export interface IRegistryConfig {
|
|
80
|
+
storage: IStorageConfig;
|
|
81
|
+
auth: IAuthConfig;
|
|
82
|
+
oci?: IProtocolConfig;
|
|
83
|
+
npm?: IProtocolConfig;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Storage backend interface
|
|
87
|
+
*/
|
|
88
|
+
export interface IStorageBackend {
|
|
89
|
+
/**
|
|
90
|
+
* Get an object from storage
|
|
91
|
+
*/
|
|
92
|
+
getObject(key: string): Promise<Buffer | null>;
|
|
93
|
+
/**
|
|
94
|
+
* Store an object
|
|
95
|
+
*/
|
|
96
|
+
putObject(key: string, data: Buffer, metadata?: Record<string, string>): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Delete an object
|
|
99
|
+
*/
|
|
100
|
+
deleteObject(key: string): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* List objects with a prefix
|
|
103
|
+
*/
|
|
104
|
+
listObjects(prefix: string): Promise<string[]>;
|
|
105
|
+
/**
|
|
106
|
+
* Check if an object exists
|
|
107
|
+
*/
|
|
108
|
+
objectExists(key: string): Promise<boolean>;
|
|
109
|
+
/**
|
|
110
|
+
* Get object metadata
|
|
111
|
+
*/
|
|
112
|
+
getMetadata(key: string): Promise<Record<string, string> | null>;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Error response structure
|
|
116
|
+
*/
|
|
117
|
+
export interface IRegistryError {
|
|
118
|
+
errors: Array<{
|
|
119
|
+
code: string;
|
|
120
|
+
message: string;
|
|
121
|
+
detail?: any;
|
|
122
|
+
}>;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Base request context
|
|
126
|
+
*/
|
|
127
|
+
export interface IRequestContext {
|
|
128
|
+
method: string;
|
|
129
|
+
path: string;
|
|
130
|
+
headers: Record<string, string>;
|
|
131
|
+
query: Record<string, string>;
|
|
132
|
+
body?: any;
|
|
133
|
+
token?: string;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Base response structure
|
|
137
|
+
*/
|
|
138
|
+
export interface IResponse {
|
|
139
|
+
status: number;
|
|
140
|
+
headers: Record<string, string>;
|
|
141
|
+
body?: any;
|
|
142
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core interfaces for the composable registry system
|
|
3
|
+
*/
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5jb3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvY29yZS9pbnRlcmZhY2VzLmNvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUcifQ==
|
package/dist_ts/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @push.rocks/smartregistry
|
|
3
|
+
* Composable registry supporting OCI and NPM protocols
|
|
4
|
+
*/
|
|
5
|
+
// Main orchestrator
|
|
6
|
+
export { SmartRegistry } from './classes.smartregistry.js';
|
|
7
|
+
// Core infrastructure
|
|
8
|
+
export * from './core/index.js';
|
|
9
|
+
// OCI Registry
|
|
10
|
+
export * from './oci/index.js';
|
|
11
|
+
// NPM Registry
|
|
12
|
+
export * from './npm/index.js';
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNELHNCQUFzQjtBQUN0QixjQUFjLGlCQUFpQixDQUFDO0FBRWhDLGVBQWU7QUFDZixjQUFjLGdCQUFnQixDQUFDO0FBRS9CLGVBQWU7QUFDZixjQUFjLGdCQUFnQixDQUFDIn0=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BaseRegistry } from '../core/classes.baseregistry.js';
|
|
2
|
+
import { RegistryStorage } from '../core/classes.registrystorage.js';
|
|
3
|
+
import { AuthManager } from '../core/classes.authmanager.js';
|
|
4
|
+
import type { IRequestContext, IResponse, IAuthToken } from '../core/interfaces.core.js';
|
|
5
|
+
/**
|
|
6
|
+
* NPM Registry implementation
|
|
7
|
+
* Compliant with npm registry API
|
|
8
|
+
*/
|
|
9
|
+
export declare class NpmRegistry extends BaseRegistry {
|
|
10
|
+
private storage;
|
|
11
|
+
private authManager;
|
|
12
|
+
private basePath;
|
|
13
|
+
private registryUrl;
|
|
14
|
+
private logger;
|
|
15
|
+
constructor(storage: RegistryStorage, authManager: AuthManager, basePath?: string, registryUrl?: string);
|
|
16
|
+
init(): Promise<void>;
|
|
17
|
+
getBasePath(): string;
|
|
18
|
+
handleRequest(context: IRequestContext): Promise<IResponse>;
|
|
19
|
+
protected checkPermission(token: IAuthToken | null, resource: string, action: string): Promise<boolean>;
|
|
20
|
+
private handleRegistryInfo;
|
|
21
|
+
private handlePackage;
|
|
22
|
+
private getPackument;
|
|
23
|
+
private handlePackageVersion;
|
|
24
|
+
private publishPackage;
|
|
25
|
+
private unpublishVersion;
|
|
26
|
+
private unpublishPackage;
|
|
27
|
+
private handleTarballDownload;
|
|
28
|
+
private handleSearch;
|
|
29
|
+
private handleUserAuth;
|
|
30
|
+
private handleTokens;
|
|
31
|
+
private listTokens;
|
|
32
|
+
private createToken;
|
|
33
|
+
private deleteToken;
|
|
34
|
+
private handleDistTags;
|
|
35
|
+
private createError;
|
|
36
|
+
}
|