@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.
Files changed (217) hide show
  1. package/dist/cache/index.d.ts +2 -0
  2. package/dist/cache/index.d.ts.map +1 -0
  3. package/dist/cache/index.js +2 -0
  4. package/dist/cache/index.js.map +1 -0
  5. package/dist/cache/memory-driver.d.ts +15 -0
  6. package/dist/cache/memory-driver.d.ts.map +1 -0
  7. package/dist/cache/memory-driver.js +56 -0
  8. package/dist/cache/memory-driver.js.map +1 -0
  9. package/dist/db/d1-driver.d.ts +3 -0
  10. package/dist/db/d1-driver.d.ts.map +1 -0
  11. package/dist/db/d1-driver.js +7 -0
  12. package/dist/db/d1-driver.js.map +1 -0
  13. package/dist/db/index.d.ts +5 -0
  14. package/dist/db/index.d.ts.map +1 -0
  15. package/dist/db/index.js +4 -0
  16. package/dist/db/index.js.map +1 -0
  17. package/dist/db/schema.d.ts +696 -0
  18. package/dist/db/schema.d.ts.map +1 -0
  19. package/dist/db/schema.js +99 -0
  20. package/dist/db/schema.js.map +1 -0
  21. package/dist/factory.d.ts +34 -0
  22. package/dist/factory.d.ts.map +1 -0
  23. package/dist/factory.js +121 -0
  24. package/dist/factory.js.map +1 -0
  25. package/dist/index.d.ts +16 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +17 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/jobs/index.d.ts +2 -0
  30. package/dist/jobs/index.d.ts.map +1 -0
  31. package/dist/jobs/index.js +7 -0
  32. package/dist/jobs/index.js.map +1 -0
  33. package/dist/jobs/processor.d.ts +49 -0
  34. package/dist/jobs/processor.d.ts.map +1 -0
  35. package/dist/jobs/processor.js +118 -0
  36. package/dist/jobs/processor.js.map +1 -0
  37. package/dist/middleware/auth.d.ts +52 -0
  38. package/dist/middleware/auth.d.ts.map +1 -0
  39. package/dist/middleware/auth.js +300 -0
  40. package/dist/middleware/auth.js.map +1 -0
  41. package/dist/middleware/composer-version.d.ts +7 -0
  42. package/dist/middleware/composer-version.d.ts.map +1 -0
  43. package/dist/middleware/composer-version.js +18 -0
  44. package/dist/middleware/composer-version.js.map +1 -0
  45. package/dist/middleware/error-handler.d.ts +7 -0
  46. package/dist/middleware/error-handler.d.ts.map +1 -0
  47. package/dist/middleware/error-handler.js +45 -0
  48. package/dist/middleware/error-handler.js.map +1 -0
  49. package/dist/middleware/index.d.ts +5 -0
  50. package/dist/middleware/index.d.ts.map +1 -0
  51. package/dist/middleware/index.js +6 -0
  52. package/dist/middleware/index.js.map +1 -0
  53. package/dist/middleware/request-id.d.ts +9 -0
  54. package/dist/middleware/request-id.d.ts.map +1 -0
  55. package/dist/middleware/request-id.js +36 -0
  56. package/dist/middleware/request-id.js.map +1 -0
  57. package/dist/ports.d.ts +32 -0
  58. package/dist/ports.d.ts.map +1 -0
  59. package/dist/ports.js +4 -0
  60. package/dist/ports.js.map +1 -0
  61. package/dist/queue/consumer.d.ts +18 -0
  62. package/dist/queue/consumer.d.ts.map +1 -0
  63. package/dist/queue/consumer.js +82 -0
  64. package/dist/queue/consumer.js.map +1 -0
  65. package/dist/queue/index.d.ts +2 -0
  66. package/dist/queue/index.d.ts.map +1 -0
  67. package/dist/queue/index.js +2 -0
  68. package/dist/queue/index.js.map +1 -0
  69. package/dist/queue/memory-driver.d.ts +13 -0
  70. package/dist/queue/memory-driver.d.ts.map +1 -0
  71. package/dist/queue/memory-driver.js +22 -0
  72. package/dist/queue/memory-driver.js.map +1 -0
  73. package/dist/queue/types.d.ts +19 -0
  74. package/dist/queue/types.d.ts.map +1 -0
  75. package/dist/queue/types.js +3 -0
  76. package/dist/queue/types.js.map +1 -0
  77. package/dist/routes/api/artifacts.d.ts +25 -0
  78. package/dist/routes/api/artifacts.d.ts.map +1 -0
  79. package/dist/routes/api/artifacts.js +57 -0
  80. package/dist/routes/api/artifacts.js.map +1 -0
  81. package/dist/routes/api/auth.d.ts +50 -0
  82. package/dist/routes/api/auth.d.ts.map +1 -0
  83. package/dist/routes/api/auth.js +268 -0
  84. package/dist/routes/api/auth.js.map +1 -0
  85. package/dist/routes/api/index.d.ts +9 -0
  86. package/dist/routes/api/index.d.ts.map +1 -0
  87. package/dist/routes/api/index.js +10 -0
  88. package/dist/routes/api/index.js.map +1 -0
  89. package/dist/routes/api/packages.d.ts +47 -0
  90. package/dist/routes/api/packages.d.ts.map +1 -0
  91. package/dist/routes/api/packages.js +671 -0
  92. package/dist/routes/api/packages.js.map +1 -0
  93. package/dist/routes/api/repositories.d.ts +56 -0
  94. package/dist/routes/api/repositories.d.ts.map +1 -0
  95. package/dist/routes/api/repositories.js +317 -0
  96. package/dist/routes/api/repositories.js.map +1 -0
  97. package/dist/routes/api/settings.d.ts +28 -0
  98. package/dist/routes/api/settings.d.ts.map +1 -0
  99. package/dist/routes/api/settings.js +81 -0
  100. package/dist/routes/api/settings.js.map +1 -0
  101. package/dist/routes/api/stats.d.ts +21 -0
  102. package/dist/routes/api/stats.d.ts.map +1 -0
  103. package/dist/routes/api/stats.js +52 -0
  104. package/dist/routes/api/stats.js.map +1 -0
  105. package/dist/routes/api/tokens.d.ts +39 -0
  106. package/dist/routes/api/tokens.d.ts.map +1 -0
  107. package/dist/routes/api/tokens.js +191 -0
  108. package/dist/routes/api/tokens.js.map +1 -0
  109. package/dist/routes/api/users.d.ts +5 -0
  110. package/dist/routes/api/users.d.ts.map +1 -0
  111. package/dist/routes/api/users.js +125 -0
  112. package/dist/routes/api/users.js.map +1 -0
  113. package/dist/routes/composer.d.ts +133 -0
  114. package/dist/routes/composer.d.ts.map +1 -0
  115. package/dist/routes/composer.js +1179 -0
  116. package/dist/routes/composer.js.map +1 -0
  117. package/dist/routes/dist.d.ts +32 -0
  118. package/dist/routes/dist.d.ts.map +1 -0
  119. package/dist/routes/dist.js +761 -0
  120. package/dist/routes/dist.js.map +1 -0
  121. package/dist/routes/health.d.ts +7 -0
  122. package/dist/routes/health.d.ts.map +1 -0
  123. package/dist/routes/health.js +22 -0
  124. package/dist/routes/health.js.map +1 -0
  125. package/dist/routes/index.d.ts +5 -0
  126. package/dist/routes/index.d.ts.map +1 -0
  127. package/dist/routes/index.js +6 -0
  128. package/dist/routes/index.js.map +1 -0
  129. package/dist/services/EmailService.d.ts +20 -0
  130. package/dist/services/EmailService.d.ts.map +1 -0
  131. package/dist/services/EmailService.js +27 -0
  132. package/dist/services/EmailService.js.map +1 -0
  133. package/dist/services/UserService.d.ts +27 -0
  134. package/dist/services/UserService.d.ts.map +1 -0
  135. package/dist/services/UserService.js +164 -0
  136. package/dist/services/UserService.js.map +1 -0
  137. package/dist/storage/driver.d.ts +65 -0
  138. package/dist/storage/driver.d.ts.map +1 -0
  139. package/dist/storage/driver.js +59 -0
  140. package/dist/storage/driver.js.map +1 -0
  141. package/dist/storage/index.d.ts +4 -0
  142. package/dist/storage/index.d.ts.map +1 -0
  143. package/dist/storage/index.js +5 -0
  144. package/dist/storage/index.js.map +1 -0
  145. package/dist/storage/r2-driver.d.ts +16 -0
  146. package/dist/storage/r2-driver.d.ts.map +1 -0
  147. package/dist/storage/r2-driver.js +28 -0
  148. package/dist/storage/r2-driver.js.map +1 -0
  149. package/dist/storage/s3-driver.d.ts +22 -0
  150. package/dist/storage/s3-driver.d.ts.map +1 -0
  151. package/dist/storage/s3-driver.js +66 -0
  152. package/dist/storage/s3-driver.js.map +1 -0
  153. package/dist/sync/github-sync.d.ts +15 -0
  154. package/dist/sync/github-sync.d.ts.map +1 -0
  155. package/dist/sync/github-sync.js +39 -0
  156. package/dist/sync/github-sync.js.map +1 -0
  157. package/dist/sync/index.d.ts +5 -0
  158. package/dist/sync/index.d.ts.map +1 -0
  159. package/dist/sync/index.js +6 -0
  160. package/dist/sync/index.js.map +1 -0
  161. package/dist/sync/repository-sync.d.ts +18 -0
  162. package/dist/sync/repository-sync.d.ts.map +1 -0
  163. package/dist/sync/repository-sync.js +214 -0
  164. package/dist/sync/repository-sync.js.map +1 -0
  165. package/dist/sync/strategies/composer-repo.d.ts +11 -0
  166. package/dist/sync/strategies/composer-repo.d.ts.map +1 -0
  167. package/dist/sync/strategies/composer-repo.js +269 -0
  168. package/dist/sync/strategies/composer-repo.js.map +1 -0
  169. package/dist/sync/strategies/github-api.d.ts +6 -0
  170. package/dist/sync/strategies/github-api.d.ts.map +1 -0
  171. package/dist/sync/strategies/github-api.js +137 -0
  172. package/dist/sync/strategies/github-api.js.map +1 -0
  173. package/dist/sync/strategies/github-packages.d.ts +7 -0
  174. package/dist/sync/strategies/github-packages.d.ts.map +1 -0
  175. package/dist/sync/strategies/github-packages.js +66 -0
  176. package/dist/sync/strategies/github-packages.js.map +1 -0
  177. package/dist/sync/strategies/index.d.ts +4 -0
  178. package/dist/sync/strategies/index.d.ts.map +1 -0
  179. package/dist/sync/strategies/index.js +5 -0
  180. package/dist/sync/strategies/index.js.map +1 -0
  181. package/dist/sync/types.d.ts +60 -0
  182. package/dist/sync/types.d.ts.map +1 -0
  183. package/dist/sync/types.js +3 -0
  184. package/dist/sync/types.js.map +1 -0
  185. package/dist/utils/analytics.d.ts +142 -0
  186. package/dist/utils/analytics.d.ts.map +1 -0
  187. package/dist/utils/analytics.js +229 -0
  188. package/dist/utils/analytics.js.map +1 -0
  189. package/dist/utils/download.d.ts +10 -0
  190. package/dist/utils/download.d.ts.map +1 -0
  191. package/dist/utils/download.js +34 -0
  192. package/dist/utils/download.js.map +1 -0
  193. package/dist/utils/encryption.d.ts +20 -0
  194. package/dist/utils/encryption.d.ts.map +1 -0
  195. package/dist/utils/encryption.js +76 -0
  196. package/dist/utils/encryption.js.map +1 -0
  197. package/dist/utils/index.d.ts +5 -0
  198. package/dist/utils/index.d.ts.map +1 -0
  199. package/dist/utils/index.js +6 -0
  200. package/dist/utils/index.js.map +1 -0
  201. package/dist/utils/logger.d.ts +78 -0
  202. package/dist/utils/logger.d.ts.map +1 -0
  203. package/dist/utils/logger.js +134 -0
  204. package/dist/utils/logger.js.map +1 -0
  205. package/dist/utils/upstream-fetch.d.ts +15 -0
  206. package/dist/utils/upstream-fetch.d.ts.map +1 -0
  207. package/dist/utils/upstream-fetch.js +108 -0
  208. package/dist/utils/upstream-fetch.js.map +1 -0
  209. package/dist/workflows/index.d.ts +3 -0
  210. package/dist/workflows/index.d.ts.map +1 -0
  211. package/dist/workflows/index.js +8 -0
  212. package/dist/workflows/index.js.map +1 -0
  213. package/dist/workflows/package-storage.d.ts +47 -0
  214. package/dist/workflows/package-storage.d.ts.map +1 -0
  215. package/dist/workflows/package-storage.js +136 -0
  216. package/dist/workflows/package-storage.js.map +1 -0
  217. 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,5 @@
1
+ export * from './types';
2
+ export * from './strategies';
3
+ export * from './github-sync';
4
+ export * from './repository-sync';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,6 @@
1
+ // Sync exports
2
+ export * from './types';
3
+ export * from './strategies';
4
+ export * from './github-sync';
5
+ export * from './repository-sync';
6
+ //# sourceMappingURL=index.js.map
@@ -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"}