@package-broker/core 0.2.15
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/cache/index.d.ts +2 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +2 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-driver.d.ts +15 -0
- package/dist/cache/memory-driver.d.ts.map +1 -0
- package/dist/cache/memory-driver.js +56 -0
- package/dist/cache/memory-driver.js.map +1 -0
- package/dist/db/d1-driver.d.ts +3 -0
- package/dist/db/d1-driver.d.ts.map +1 -0
- package/dist/db/d1-driver.js +7 -0
- package/dist/db/d1-driver.js.map +1 -0
- package/dist/db/index.d.ts +5 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +4 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +696 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +99 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/factory.d.ts +34 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +121 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/index.d.ts +2 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +7 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/processor.d.ts +49 -0
- package/dist/jobs/processor.d.ts.map +1 -0
- package/dist/jobs/processor.js +118 -0
- package/dist/jobs/processor.js.map +1 -0
- package/dist/middleware/auth.d.ts +52 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +300 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/composer-version.d.ts +7 -0
- package/dist/middleware/composer-version.d.ts.map +1 -0
- package/dist/middleware/composer-version.js +18 -0
- package/dist/middleware/composer-version.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +7 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +45 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/index.d.ts +5 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +6 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/request-id.d.ts +9 -0
- package/dist/middleware/request-id.d.ts.map +1 -0
- package/dist/middleware/request-id.js +36 -0
- package/dist/middleware/request-id.js.map +1 -0
- package/dist/ports.d.ts +32 -0
- package/dist/ports.d.ts.map +1 -0
- package/dist/ports.js +4 -0
- package/dist/ports.js.map +1 -0
- package/dist/queue/consumer.d.ts +18 -0
- package/dist/queue/consumer.d.ts.map +1 -0
- package/dist/queue/consumer.js +82 -0
- package/dist/queue/consumer.js.map +1 -0
- package/dist/queue/index.d.ts +2 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +2 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/memory-driver.d.ts +13 -0
- package/dist/queue/memory-driver.d.ts.map +1 -0
- package/dist/queue/memory-driver.js +22 -0
- package/dist/queue/memory-driver.js.map +1 -0
- package/dist/queue/types.d.ts +19 -0
- package/dist/queue/types.d.ts.map +1 -0
- package/dist/queue/types.js +3 -0
- package/dist/queue/types.js.map +1 -0
- package/dist/routes/api/artifacts.d.ts +25 -0
- package/dist/routes/api/artifacts.d.ts.map +1 -0
- package/dist/routes/api/artifacts.js +57 -0
- package/dist/routes/api/artifacts.js.map +1 -0
- package/dist/routes/api/auth.d.ts +50 -0
- package/dist/routes/api/auth.d.ts.map +1 -0
- package/dist/routes/api/auth.js +268 -0
- package/dist/routes/api/auth.js.map +1 -0
- package/dist/routes/api/index.d.ts +9 -0
- package/dist/routes/api/index.d.ts.map +1 -0
- package/dist/routes/api/index.js +10 -0
- package/dist/routes/api/index.js.map +1 -0
- package/dist/routes/api/packages.d.ts +47 -0
- package/dist/routes/api/packages.d.ts.map +1 -0
- package/dist/routes/api/packages.js +671 -0
- package/dist/routes/api/packages.js.map +1 -0
- package/dist/routes/api/repositories.d.ts +56 -0
- package/dist/routes/api/repositories.d.ts.map +1 -0
- package/dist/routes/api/repositories.js +317 -0
- package/dist/routes/api/repositories.js.map +1 -0
- package/dist/routes/api/settings.d.ts +28 -0
- package/dist/routes/api/settings.d.ts.map +1 -0
- package/dist/routes/api/settings.js +81 -0
- package/dist/routes/api/settings.js.map +1 -0
- package/dist/routes/api/stats.d.ts +21 -0
- package/dist/routes/api/stats.d.ts.map +1 -0
- package/dist/routes/api/stats.js +52 -0
- package/dist/routes/api/stats.js.map +1 -0
- package/dist/routes/api/tokens.d.ts +39 -0
- package/dist/routes/api/tokens.d.ts.map +1 -0
- package/dist/routes/api/tokens.js +191 -0
- package/dist/routes/api/tokens.js.map +1 -0
- package/dist/routes/api/users.d.ts +5 -0
- package/dist/routes/api/users.d.ts.map +1 -0
- package/dist/routes/api/users.js +125 -0
- package/dist/routes/api/users.js.map +1 -0
- package/dist/routes/composer.d.ts +133 -0
- package/dist/routes/composer.d.ts.map +1 -0
- package/dist/routes/composer.js +1179 -0
- package/dist/routes/composer.js.map +1 -0
- package/dist/routes/dist.d.ts +32 -0
- package/dist/routes/dist.d.ts.map +1 -0
- package/dist/routes/dist.js +761 -0
- package/dist/routes/dist.js.map +1 -0
- package/dist/routes/health.d.ts +7 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +22 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/index.d.ts +5 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +6 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/services/EmailService.d.ts +20 -0
- package/dist/services/EmailService.d.ts.map +1 -0
- package/dist/services/EmailService.js +27 -0
- package/dist/services/EmailService.js.map +1 -0
- package/dist/services/UserService.d.ts +27 -0
- package/dist/services/UserService.d.ts.map +1 -0
- package/dist/services/UserService.js +164 -0
- package/dist/services/UserService.js.map +1 -0
- package/dist/storage/driver.d.ts +65 -0
- package/dist/storage/driver.d.ts.map +1 -0
- package/dist/storage/driver.js +59 -0
- package/dist/storage/driver.js.map +1 -0
- package/dist/storage/index.d.ts +4 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/r2-driver.d.ts +16 -0
- package/dist/storage/r2-driver.d.ts.map +1 -0
- package/dist/storage/r2-driver.js +28 -0
- package/dist/storage/r2-driver.js.map +1 -0
- package/dist/storage/s3-driver.d.ts +22 -0
- package/dist/storage/s3-driver.d.ts.map +1 -0
- package/dist/storage/s3-driver.js +66 -0
- package/dist/storage/s3-driver.js.map +1 -0
- package/dist/sync/github-sync.d.ts +15 -0
- package/dist/sync/github-sync.d.ts.map +1 -0
- package/dist/sync/github-sync.js +39 -0
- package/dist/sync/github-sync.js.map +1 -0
- package/dist/sync/index.d.ts +5 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +6 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/repository-sync.d.ts +18 -0
- package/dist/sync/repository-sync.d.ts.map +1 -0
- package/dist/sync/repository-sync.js +214 -0
- package/dist/sync/repository-sync.js.map +1 -0
- package/dist/sync/strategies/composer-repo.d.ts +11 -0
- package/dist/sync/strategies/composer-repo.d.ts.map +1 -0
- package/dist/sync/strategies/composer-repo.js +269 -0
- package/dist/sync/strategies/composer-repo.js.map +1 -0
- package/dist/sync/strategies/github-api.d.ts +6 -0
- package/dist/sync/strategies/github-api.d.ts.map +1 -0
- package/dist/sync/strategies/github-api.js +137 -0
- package/dist/sync/strategies/github-api.js.map +1 -0
- package/dist/sync/strategies/github-packages.d.ts +7 -0
- package/dist/sync/strategies/github-packages.d.ts.map +1 -0
- package/dist/sync/strategies/github-packages.js +66 -0
- package/dist/sync/strategies/github-packages.js.map +1 -0
- package/dist/sync/strategies/index.d.ts +4 -0
- package/dist/sync/strategies/index.d.ts.map +1 -0
- package/dist/sync/strategies/index.js +5 -0
- package/dist/sync/strategies/index.js.map +1 -0
- package/dist/sync/types.d.ts +60 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +3 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/utils/analytics.d.ts +142 -0
- package/dist/utils/analytics.d.ts.map +1 -0
- package/dist/utils/analytics.js +229 -0
- package/dist/utils/analytics.js.map +1 -0
- package/dist/utils/download.d.ts +10 -0
- package/dist/utils/download.d.ts.map +1 -0
- package/dist/utils/download.js +34 -0
- package/dist/utils/download.js.map +1 -0
- package/dist/utils/encryption.d.ts +20 -0
- package/dist/utils/encryption.d.ts.map +1 -0
- package/dist/utils/encryption.js +76 -0
- package/dist/utils/encryption.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +78 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +134 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/upstream-fetch.d.ts +15 -0
- package/dist/utils/upstream-fetch.d.ts.map +1 -0
- package/dist/utils/upstream-fetch.js +108 -0
- package/dist/utils/upstream-fetch.js.map +1 -0
- package/dist/workflows/index.d.ts +3 -0
- package/dist/workflows/index.d.ts.map +1 -0
- package/dist/workflows/index.js +8 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/package-storage.d.ts +47 -0
- package/dist/workflows/package-storage.d.ts.map +1 -0
- package/dist/workflows/package-storage.js +136 -0
- package/dist/workflows/package-storage.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// S3-compatible storage driver
|
|
2
|
+
import { AwsClient } from 'aws4fetch';
|
|
3
|
+
/**
|
|
4
|
+
* S3-compatible storage driver implementation
|
|
5
|
+
*/
|
|
6
|
+
export class S3Driver {
|
|
7
|
+
config;
|
|
8
|
+
client;
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.config = config;
|
|
11
|
+
this.client = new AwsClient({
|
|
12
|
+
accessKeyId: config.accessKeyId,
|
|
13
|
+
secretAccessKey: config.secretAccessKey,
|
|
14
|
+
region: config.region,
|
|
15
|
+
service: 's3',
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
getUrl(key) {
|
|
19
|
+
// Handle endpoint with or without bucket
|
|
20
|
+
const endpoint = this.config.endpoint.replace(/\/$/, '');
|
|
21
|
+
return `${endpoint}/${this.config.bucket}/${key}`;
|
|
22
|
+
}
|
|
23
|
+
async get(key) {
|
|
24
|
+
const url = this.getUrl(key);
|
|
25
|
+
const response = await this.client.fetch(url, {
|
|
26
|
+
method: 'GET',
|
|
27
|
+
});
|
|
28
|
+
if (response.status === 404) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
throw new Error(`S3 GET failed: ${response.status} ${response.statusText}`);
|
|
33
|
+
}
|
|
34
|
+
return response.body;
|
|
35
|
+
}
|
|
36
|
+
async put(key, data) {
|
|
37
|
+
const url = this.getUrl(key);
|
|
38
|
+
const response = await this.client.fetch(url, {
|
|
39
|
+
method: 'PUT',
|
|
40
|
+
body: data,
|
|
41
|
+
headers: {
|
|
42
|
+
'Content-Type': 'application/zip',
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
if (!response.ok) {
|
|
46
|
+
throw new Error(`S3 PUT failed: ${response.status} ${response.statusText}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async delete(key) {
|
|
50
|
+
const url = this.getUrl(key);
|
|
51
|
+
const response = await this.client.fetch(url, {
|
|
52
|
+
method: 'DELETE',
|
|
53
|
+
});
|
|
54
|
+
if (!response.ok && response.status !== 404) {
|
|
55
|
+
throw new Error(`S3 DELETE failed: ${response.status} ${response.statusText}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async exists(key) {
|
|
59
|
+
const url = this.getUrl(key);
|
|
60
|
+
const response = await this.client.fetch(url, {
|
|
61
|
+
method: 'HEAD',
|
|
62
|
+
});
|
|
63
|
+
return response.ok;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=s3-driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-driver.js","sourceRoot":"","sources":["../../src/storage/s3-driver.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAWtC;;GAEG;AACH,MAAM,OAAO,QAAQ;IAGC;IAFZ,MAAM,CAAY;IAE1B,YAAoB,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,GAAW;QACxB,yCAAyC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzD,OAAO,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;YAC5C,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,IAA+C;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,IAAI;YACV,OAAO,EAAE;gBACP,cAAc,EAAE,iBAAiB;aAClC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;YAC5C,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;YAC5C,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SyncResult } from './types';
|
|
2
|
+
export interface GitHubRepositoryConfig {
|
|
3
|
+
owner: string;
|
|
4
|
+
repo?: string;
|
|
5
|
+
token: string;
|
|
6
|
+
branch?: string;
|
|
7
|
+
composerJsonPath?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Sync GitHub repository using two-tier strategy:
|
|
11
|
+
* 1. Primary: Try GitHub Packages Composer Registry (single API call)
|
|
12
|
+
* 2. Fallback: Use GitHub Repository API (tree enumeration)
|
|
13
|
+
*/
|
|
14
|
+
export declare function syncGitHubRepository(config: GitHubRepositoryConfig): Promise<SyncResult>;
|
|
15
|
+
//# sourceMappingURL=github-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-sync.d.ts","sourceRoot":"","sources":["../../src/sync/github-sync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAI1C,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,UAAU,CAAC,CAuCrB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Combined GitHub sync with two-tier strategy
|
|
2
|
+
import { syncViaGitHubPackages } from './strategies/github-packages';
|
|
3
|
+
import { syncViaGitHubApi } from './strategies/github-api';
|
|
4
|
+
/**
|
|
5
|
+
* Sync GitHub repository using two-tier strategy:
|
|
6
|
+
* 1. Primary: Try GitHub Packages Composer Registry (single API call)
|
|
7
|
+
* 2. Fallback: Use GitHub Repository API (tree enumeration)
|
|
8
|
+
*/
|
|
9
|
+
export async function syncGitHubRepository(config) {
|
|
10
|
+
const { owner, repo, token, composerJsonPath } = config;
|
|
11
|
+
// Strategy 1: Try GitHub Packages first (if owner-level sync)
|
|
12
|
+
if (!repo) {
|
|
13
|
+
const packagesResult = await syncViaGitHubPackages(owner, token);
|
|
14
|
+
if (packagesResult.success) {
|
|
15
|
+
return {
|
|
16
|
+
success: true,
|
|
17
|
+
packages: packagesResult.packages,
|
|
18
|
+
strategy: 'github_packages',
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// If Packages failed, return error (no repo to fall back to)
|
|
22
|
+
return packagesResult;
|
|
23
|
+
}
|
|
24
|
+
// Strategy 2: Fall back to Repository API
|
|
25
|
+
const apiResult = await syncViaGitHubApi(owner, repo, token, config.branch || 'main', composerJsonPath || '**/composer.json');
|
|
26
|
+
if (apiResult.success) {
|
|
27
|
+
return {
|
|
28
|
+
success: true,
|
|
29
|
+
packages: apiResult.packages,
|
|
30
|
+
strategy: 'github_api',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
success: false,
|
|
35
|
+
packages: [],
|
|
36
|
+
error: apiResult.error,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=github-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-sync.js","sourceRoot":"","sources":["../../src/sync/github-sync.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAG9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAU3D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAA8B;IAE9B,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;IAExD,8DAA8D;IAC9D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACjE,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,cAAc,CAAC,QAAQ;gBACjC,QAAQ,EAAE,iBAAiB;aAC5B,CAAC;QACJ,CAAC;QACD,6DAA6D;QAC7D,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,0CAA0C;IAC1C,MAAM,SAAS,GAAG,MAAM,gBAAgB,CACtC,KAAK,EACL,IAAI,EACJ,KAAK,EACL,MAAM,CAAC,MAAM,IAAI,MAAM,EACvB,gBAAgB,IAAI,kBAAkB,CACvC,CAAC;IAEF,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,QAAQ,EAAE,YAAY;SACvB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,SAAS,CAAC,KAAK;KACvB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SyncResult } from './types';
|
|
2
|
+
import type { StorageDriver } from '../storage/driver';
|
|
3
|
+
export interface SyncEnv {
|
|
4
|
+
DB: D1Database;
|
|
5
|
+
KV?: KVNamespace;
|
|
6
|
+
QUEUE?: Queue;
|
|
7
|
+
ENCRYPTION_KEY: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SyncOptions {
|
|
10
|
+
storage: StorageDriver;
|
|
11
|
+
proxyBaseUrl: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Sync a repository by ID
|
|
15
|
+
* Called on-demand when packages.json is requested
|
|
16
|
+
*/
|
|
17
|
+
export declare function syncRepository(repoId: string, env: SyncEnv, options: SyncOptions): Promise<SyncResult>;
|
|
18
|
+
//# sourceMappingURL=repository-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-sync.d.ts","sourceRoot":"","sources":["../../src/sync/repository-sync.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,SAAS,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMvD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,UAAU,CAAC;IACf,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAiIrB"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* PACKAGE.broker
|
|
3
|
+
* Copyright (C) 2025 Łukasz Bajsarowicz
|
|
4
|
+
* Licensed under AGPL-3.0
|
|
5
|
+
*/
|
|
6
|
+
// Main repository sync orchestrator
|
|
7
|
+
import { createD1Database } from '../db';
|
|
8
|
+
import { repositories, packages as packagesTable } from '../db/schema';
|
|
9
|
+
import { eq, and } from 'drizzle-orm';
|
|
10
|
+
import { decryptCredentials } from '../utils/encryption';
|
|
11
|
+
import { syncGitHubRepository } from './github-sync';
|
|
12
|
+
import { syncComposerRepository } from './strategies/composer-repo';
|
|
13
|
+
import { nanoid } from 'nanoid';
|
|
14
|
+
import { getLogger } from '../utils/logger';
|
|
15
|
+
import { getAnalytics } from '../utils/analytics';
|
|
16
|
+
/**
|
|
17
|
+
* Sync a repository by ID
|
|
18
|
+
* Called on-demand when packages.json is requested
|
|
19
|
+
*/
|
|
20
|
+
export async function syncRepository(repoId, env, options) {
|
|
21
|
+
const db = createD1Database(env.DB);
|
|
22
|
+
// Get repository details
|
|
23
|
+
const [repo] = await db
|
|
24
|
+
.select()
|
|
25
|
+
.from(repositories)
|
|
26
|
+
.where(eq(repositories.id, repoId))
|
|
27
|
+
.limit(1);
|
|
28
|
+
if (!repo) {
|
|
29
|
+
return { success: false, packages: [], error: 'repo_not_found' };
|
|
30
|
+
}
|
|
31
|
+
// Update status to syncing
|
|
32
|
+
await db
|
|
33
|
+
.update(repositories)
|
|
34
|
+
.set({ status: 'syncing' })
|
|
35
|
+
.where(eq(repositories.id, repoId));
|
|
36
|
+
// Track sync start
|
|
37
|
+
const analytics = getAnalytics();
|
|
38
|
+
analytics.trackRepositorySyncStart({ repoId });
|
|
39
|
+
try {
|
|
40
|
+
// Decrypt credentials
|
|
41
|
+
const credentialsJson = await decryptCredentials(repo.auth_credentials, env.ENCRYPTION_KEY);
|
|
42
|
+
const credentials = JSON.parse(credentialsJson);
|
|
43
|
+
let syncResult;
|
|
44
|
+
// Dispatch to appropriate sync strategy based on vcs_type and credential_type
|
|
45
|
+
if (repo.vcs_type === 'git') {
|
|
46
|
+
syncResult = await syncGitRepository(repo.url, repo.credential_type, credentials, repo.composer_json_path || undefined);
|
|
47
|
+
}
|
|
48
|
+
else if (repo.vcs_type === 'composer') {
|
|
49
|
+
syncResult = await syncComposerRepository(repo.url, repo.credential_type, credentials, repo.package_filter || undefined);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
syncResult = { success: false, packages: [], error: 'unsupported_vcs_type' };
|
|
53
|
+
}
|
|
54
|
+
if (!syncResult.success) {
|
|
55
|
+
// Update status to error
|
|
56
|
+
await db
|
|
57
|
+
.update(repositories)
|
|
58
|
+
.set({
|
|
59
|
+
status: 'error',
|
|
60
|
+
error_message: syncResult.error,
|
|
61
|
+
last_synced_at: Math.floor(Date.now() / 1000),
|
|
62
|
+
})
|
|
63
|
+
.where(eq(repositories.id, repoId));
|
|
64
|
+
// Track sync failure
|
|
65
|
+
analytics.trackRepositorySyncFailure({
|
|
66
|
+
repoId,
|
|
67
|
+
error: syncResult.error || 'unknown_error',
|
|
68
|
+
});
|
|
69
|
+
return syncResult;
|
|
70
|
+
}
|
|
71
|
+
// Store packages and transform dist URLs
|
|
72
|
+
await storePackages(db, repoId, syncResult.packages, options);
|
|
73
|
+
// Update repository status
|
|
74
|
+
await db
|
|
75
|
+
.update(repositories)
|
|
76
|
+
.set({
|
|
77
|
+
status: 'active',
|
|
78
|
+
error_message: null,
|
|
79
|
+
last_synced_at: Math.floor(Date.now() / 1000),
|
|
80
|
+
})
|
|
81
|
+
.where(eq(repositories.id, repoId));
|
|
82
|
+
// Invalidate KV cache (if KV available)
|
|
83
|
+
if (env.KV) {
|
|
84
|
+
await env.KV.delete(`packages:${repoId}:packages.json`).catch(() => { });
|
|
85
|
+
await env.KV.delete('packages:all:packages.json').catch(() => { });
|
|
86
|
+
await env.KV.delete('packages:all:metadata').catch(() => { });
|
|
87
|
+
}
|
|
88
|
+
// Track sync success
|
|
89
|
+
analytics.trackRepositorySyncSuccess({
|
|
90
|
+
repoId,
|
|
91
|
+
packageCount: syncResult.packages.length,
|
|
92
|
+
strategy: syncResult.strategy || 'unknown',
|
|
93
|
+
});
|
|
94
|
+
return {
|
|
95
|
+
success: true,
|
|
96
|
+
packages: syncResult.packages,
|
|
97
|
+
strategy: syncResult.strategy,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
const logger = getLogger();
|
|
102
|
+
logger.error('Sync error for repo', { repoId }, error instanceof Error ? error : new Error(String(error)));
|
|
103
|
+
// Update status to error
|
|
104
|
+
await db
|
|
105
|
+
.update(repositories)
|
|
106
|
+
.set({
|
|
107
|
+
status: 'error',
|
|
108
|
+
error_message: error instanceof Error ? error.message : 'Unknown error',
|
|
109
|
+
last_synced_at: Math.floor(Date.now() / 1000),
|
|
110
|
+
})
|
|
111
|
+
.where(eq(repositories.id, repoId));
|
|
112
|
+
// Track sync failure
|
|
113
|
+
const analytics = getAnalytics();
|
|
114
|
+
analytics.trackRepositorySyncFailure({
|
|
115
|
+
repoId,
|
|
116
|
+
error: error instanceof Error ? error.message : 'unknown_error',
|
|
117
|
+
});
|
|
118
|
+
return {
|
|
119
|
+
success: false,
|
|
120
|
+
packages: [],
|
|
121
|
+
error: error instanceof Error ? error.message : 'unknown_error',
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Sync a Git repository based on URL and credential type
|
|
127
|
+
*/
|
|
128
|
+
async function syncGitRepository(url, credentialType, credentials, composerJsonPath) {
|
|
129
|
+
// Parse URL to extract owner/repo
|
|
130
|
+
const urlMatch = url.match(/github\.com[:/]([^/]+)\/([^/.]+)/);
|
|
131
|
+
if (urlMatch) {
|
|
132
|
+
const [, owner, repo] = urlMatch;
|
|
133
|
+
return syncGitHubRepository({
|
|
134
|
+
owner,
|
|
135
|
+
repo: repo.replace('.git', ''),
|
|
136
|
+
token: credentials.token || credentials.password || '',
|
|
137
|
+
composerJsonPath,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
// GitLab/Bitbucket would be handled similarly
|
|
141
|
+
// For now, return error for unsupported Git hosts
|
|
142
|
+
return {
|
|
143
|
+
success: false,
|
|
144
|
+
packages: [],
|
|
145
|
+
error: 'unsupported_git_host',
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Parse release time from ISO 8601 string or use fallback
|
|
150
|
+
*/
|
|
151
|
+
function parseReleaseTime(isoTime, fallback) {
|
|
152
|
+
if (isoTime) {
|
|
153
|
+
const timestamp = Date.parse(isoTime);
|
|
154
|
+
if (!isNaN(timestamp)) {
|
|
155
|
+
return Math.floor(timestamp / 1000);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return fallback ?? Math.floor(Date.now() / 1000);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Store synced packages in database with transformed dist URLs
|
|
162
|
+
*/
|
|
163
|
+
async function storePackages(db, repoId, packages, options) {
|
|
164
|
+
for (const pkg of packages) {
|
|
165
|
+
// Transform dist URL to proxy URL
|
|
166
|
+
const proxyDistUrl = `${options.proxyBaseUrl}/dist/${repoId}/${pkg.name}/${pkg.version}.zip`;
|
|
167
|
+
// Store original source dist URL for on-demand mirroring
|
|
168
|
+
const sourceDistUrl = pkg.dist?.url || null;
|
|
169
|
+
// Get existing package to preserve created_at for first-seen date
|
|
170
|
+
const [existing] = await db
|
|
171
|
+
.select()
|
|
172
|
+
.from(packagesTable)
|
|
173
|
+
.where(and(eq(packagesTable.name, pkg.name), eq(packagesTable.version, pkg.version)))
|
|
174
|
+
.limit(1);
|
|
175
|
+
const now = Math.floor(Date.now() / 1000);
|
|
176
|
+
const firstSeenAt = existing?.created_at || now;
|
|
177
|
+
// Use upstream time if available, otherwise use first-seen date (created_at)
|
|
178
|
+
const releasedAt = parseReleaseTime(pkg.time, firstSeenAt);
|
|
179
|
+
// Upsert package (use unique constraint on name+version)
|
|
180
|
+
try {
|
|
181
|
+
await db.insert(packagesTable).values({
|
|
182
|
+
id: nanoid(),
|
|
183
|
+
repo_id: repoId,
|
|
184
|
+
name: pkg.name,
|
|
185
|
+
version: pkg.version,
|
|
186
|
+
dist_url: proxyDistUrl,
|
|
187
|
+
source_dist_url: sourceDistUrl,
|
|
188
|
+
description: pkg.description || null,
|
|
189
|
+
license: pkg.license ? JSON.stringify(pkg.license) : null,
|
|
190
|
+
package_type: pkg.type || null,
|
|
191
|
+
homepage: pkg.homepage || null,
|
|
192
|
+
released_at: releasedAt,
|
|
193
|
+
readme_content: pkg.readme || null,
|
|
194
|
+
created_at: firstSeenAt,
|
|
195
|
+
}).onConflictDoUpdate({
|
|
196
|
+
target: [packagesTable.name, packagesTable.version],
|
|
197
|
+
set: {
|
|
198
|
+
dist_url: proxyDistUrl,
|
|
199
|
+
source_dist_url: sourceDistUrl,
|
|
200
|
+
description: pkg.description || null,
|
|
201
|
+
license: pkg.license ? JSON.stringify(pkg.license) : null,
|
|
202
|
+
package_type: pkg.type || null,
|
|
203
|
+
homepage: pkg.homepage || null,
|
|
204
|
+
released_at: releasedAt,
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
const logger = getLogger();
|
|
210
|
+
logger.error('Error storing package', { packageName: pkg.name, version: pkg.version, repoId }, error instanceof Error ? error : new Error(String(error)));
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=repository-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-sync.js","sourceRoot":"","sources":["../../src/sync/repository-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SyncResult } from '../types';
|
|
2
|
+
import { type CredentialType } from '@package-broker/shared';
|
|
3
|
+
/**
|
|
4
|
+
* Sync from Composer repository (e.g., Satis, Packagist, third-party)
|
|
5
|
+
* @param url - Repository base URL
|
|
6
|
+
* @param credentialType - Type of authentication
|
|
7
|
+
* @param credentials - Authentication credentials
|
|
8
|
+
* @param packageFilter - Optional comma-separated list of packages to sync (required for provider-includes repos)
|
|
9
|
+
*/
|
|
10
|
+
export declare function syncComposerRepository(url: string, credentialType: CredentialType, credentials: Record<string, string>, packageFilter?: string): Promise<SyncResult>;
|
|
11
|
+
//# sourceMappingURL=composer-repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer-repo.d.ts","sourceRoot":"","sources":["../../../src/sync/strategies/composer-repo.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAgF,MAAM,UAAU,CAAC;AACzH,OAAO,EAAoB,KAAK,cAAc,EAAuB,MAAM,wBAAwB,CAAC;AAIpG;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,UAAU,CAAC,CAuDrB"}
|