@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,269 @@
1
+ /*
2
+ * PACKAGE.broker
3
+ * Copyright (C) 2025 Łukasz Bajsarowicz
4
+ * Licensed under AGPL-3.0
5
+ */
6
+ import { buildAuthHeaders, COMPOSER_USER_AGENT } from '@package-broker/shared';
7
+ import pRetry from 'p-retry';
8
+ import { getLogger } from '../../utils/logger';
9
+ /**
10
+ * Sync from Composer repository (e.g., Satis, Packagist, third-party)
11
+ * @param url - Repository base URL
12
+ * @param credentialType - Type of authentication
13
+ * @param credentials - Authentication credentials
14
+ * @param packageFilter - Optional comma-separated list of packages to sync (required for provider-includes repos)
15
+ */
16
+ export async function syncComposerRepository(url, credentialType, credentials, packageFilter) {
17
+ // Build auth headers based on credential type
18
+ const authHeaders = buildAuthHeaders(credentialType, credentials);
19
+ // Normalize URL
20
+ const baseUrl = url.replace(/\/$/, '');
21
+ const packagesUrl = `${baseUrl}/packages.json`;
22
+ try {
23
+ const response = await pRetry(() => fetch(packagesUrl, {
24
+ headers: {
25
+ ...authHeaders,
26
+ Accept: 'application/json',
27
+ 'User-Agent': COMPOSER_USER_AGENT,
28
+ },
29
+ }), { retries: 3 });
30
+ if (response.status === 401 || response.status === 403) {
31
+ return { success: false, packages: [], error: 'auth_failed' };
32
+ }
33
+ if (response.status === 404) {
34
+ return { success: false, packages: [], error: 'packages_json_not_found' };
35
+ }
36
+ if (!response.ok) {
37
+ return { success: false, packages: [], error: `http_${response.status}` };
38
+ }
39
+ const packagesJson = await response.json();
40
+ // Check if repository uses provider-includes (lazy loading)
41
+ if (packagesJson['providers-url'] && packagesJson['provider-includes']) {
42
+ // Large repository with lazy loading
43
+ return await syncWithProviderIncludes(baseUrl, packagesJson, authHeaders, packageFilter);
44
+ }
45
+ // Direct packages - parse all
46
+ const packages = parseComposerPackagesJson(packagesJson, baseUrl);
47
+ return { success: true, packages, strategy: 'composer_repo' };
48
+ }
49
+ catch (error) {
50
+ const logger = getLogger();
51
+ logger.error('Composer repository sync error', { url }, error instanceof Error ? error : new Error(String(error)));
52
+ return { success: false, packages: [], error: 'network_error' };
53
+ }
54
+ }
55
+ /**
56
+ * Sync packages from a repository using provider-includes (lazy loading)
57
+ * This is used by large repositories like Magento Marketplace
58
+ */
59
+ async function syncWithProviderIncludes(baseUrl, packagesJson, authHeaders, packageFilter) {
60
+ const providersUrl = packagesJson['providers-url'];
61
+ const providerIncludes = packagesJson['provider-includes'];
62
+ // Parse package filter
63
+ const targetPackages = packageFilter
64
+ ? packageFilter.split(',').map(p => p.trim()).filter(p => p.length > 0)
65
+ : [];
66
+ // If no filter provided, we'll sync all packages from provider files
67
+ const syncAllPackages = targetPackages.length === 0;
68
+ // Step 1: Fetch all provider files to build package-to-hash mapping
69
+ const packageHashes = new Map();
70
+ for (const [providerPath, { sha256 }] of Object.entries(providerIncludes)) {
71
+ // Replace %hash% placeholder with actual hash
72
+ const providerUrl = `${baseUrl}/${providerPath.replace('%hash%', sha256)}`;
73
+ try {
74
+ const response = await pRetry(() => fetch(providerUrl, {
75
+ headers: {
76
+ ...authHeaders,
77
+ Accept: 'application/json',
78
+ 'User-Agent': COMPOSER_USER_AGENT,
79
+ },
80
+ }), { retries: 2 });
81
+ if (!response.ok) {
82
+ const logger = getLogger();
83
+ logger.warn('Failed to fetch provider file', { providerUrl, status: response.status });
84
+ continue;
85
+ }
86
+ const providerData = await response.json();
87
+ // Extract package hashes - all packages if no filter, or only filtered packages
88
+ for (const [pkgName, { sha256: pkgHash }] of Object.entries(providerData.providers || {})) {
89
+ if (syncAllPackages || targetPackages.includes(pkgName)) {
90
+ packageHashes.set(pkgName, pkgHash);
91
+ }
92
+ }
93
+ }
94
+ catch (error) {
95
+ const logger = getLogger();
96
+ logger.warn('Error fetching provider file', { providerUrl, error: error instanceof Error ? error.message : String(error) });
97
+ }
98
+ }
99
+ // Log sync strategy
100
+ const logger = getLogger();
101
+ if (syncAllPackages) {
102
+ logger.info('Syncing all packages from provider-includes', { packageCount: packageHashes.size });
103
+ }
104
+ else {
105
+ logger.info('Syncing filtered packages via provider-includes', { targetCount: targetPackages.length });
106
+ // Check if we found all requested packages (only when filtering)
107
+ const missingPackages = targetPackages.filter(pkg => !packageHashes.has(pkg));
108
+ if (missingPackages.length > 0) {
109
+ logger.warn('Some packages not found in provider files', { missingPackages });
110
+ }
111
+ }
112
+ if (packageHashes.size === 0) {
113
+ return {
114
+ success: false,
115
+ packages: [],
116
+ error: 'no_packages_found',
117
+ };
118
+ }
119
+ // Step 2: Fetch metadata for each package using providers-url
120
+ const allPackages = [];
121
+ for (const [packageName, packageHash] of packageHashes) {
122
+ // Build package URL from providers-url template
123
+ // Format: /p/%package%$%hash%.json
124
+ const packageUrl = `${baseUrl}${providersUrl
125
+ .replace('%package%', packageName)
126
+ .replace('%hash%', packageHash)}`;
127
+ try {
128
+ const response = await pRetry(() => fetch(packageUrl, {
129
+ headers: {
130
+ ...authHeaders,
131
+ Accept: 'application/json',
132
+ 'User-Agent': COMPOSER_USER_AGENT,
133
+ },
134
+ }), { retries: 2 });
135
+ if (!response.ok) {
136
+ const logger = getLogger();
137
+ logger.warn('Failed to fetch package metadata', { packageUrl, status: response.status });
138
+ continue;
139
+ }
140
+ const packageData = await response.json();
141
+ // Parse package versions - handle both array format (Packagist p2) and object format (traditional repos)
142
+ const packageVersions = packageData.packages?.[packageName] || {};
143
+ // Normalize versions to handle both array and object formats
144
+ const versionsArray = Array.isArray(packageVersions)
145
+ ? packageVersions.map((metadata) => ({ version: metadata.version || String(metadata), metadata }))
146
+ : Object.entries(packageVersions).map(([key, val]) => ({
147
+ version: val?.version || key,
148
+ metadata: val,
149
+ }));
150
+ for (const { version, metadata } of versionsArray) {
151
+ // Transform dist URL to absolute URL
152
+ let distUrl = resolveDistUrl(baseUrl, metadata.dist?.url, packageName, version);
153
+ allPackages.push({
154
+ name: packageName,
155
+ version,
156
+ time: metadata.time,
157
+ description: metadata.description,
158
+ license: metadata.license,
159
+ type: metadata.type,
160
+ homepage: metadata.homepage,
161
+ dist: distUrl
162
+ ? {
163
+ type: metadata.dist?.type || 'zip',
164
+ url: distUrl,
165
+ reference: metadata.dist?.reference,
166
+ }
167
+ : undefined,
168
+ require: metadata.require,
169
+ 'require-dev': metadata['require-dev'],
170
+ });
171
+ }
172
+ const logger = getLogger();
173
+ logger.info('Fetched package versions', { packageName, versionCount: Object.keys(packageVersions).length });
174
+ }
175
+ catch (error) {
176
+ const logger = getLogger();
177
+ logger.warn('Error fetching package', { packageName, error: error instanceof Error ? error.message : String(error) });
178
+ }
179
+ }
180
+ if (allPackages.length === 0) {
181
+ return {
182
+ success: false,
183
+ packages: [],
184
+ error: 'no_package_versions_found',
185
+ };
186
+ }
187
+ return {
188
+ success: true,
189
+ packages: allPackages,
190
+ strategy: 'composer_repo_providers',
191
+ };
192
+ }
193
+ /**
194
+ * Resolve dist URL to an absolute URL
195
+ * Handles: absolute URLs, protocol-relative URLs, relative paths, and constructs fallback archive URLs
196
+ */
197
+ function resolveDistUrl(baseUrl, rawUrl, packageName, version) {
198
+ // If we have a valid absolute URL, use it
199
+ if (rawUrl && (rawUrl.startsWith('http://') || rawUrl.startsWith('https://'))) {
200
+ return rawUrl;
201
+ }
202
+ // Handle protocol-relative URLs (//example.com/path)
203
+ if (rawUrl && rawUrl.startsWith('//')) {
204
+ return `https:${rawUrl}`;
205
+ }
206
+ // Handle relative URLs starting with /
207
+ if (rawUrl && rawUrl.startsWith('/')) {
208
+ // Remove trailing slash from baseUrl to avoid double slashes
209
+ return `${baseUrl}${rawUrl}`;
210
+ }
211
+ // Handle other relative URLs
212
+ if (rawUrl && rawUrl.length > 0) {
213
+ return `${baseUrl}/${rawUrl}`;
214
+ }
215
+ // No dist URL provided - try to construct archive URL for Magento Marketplace format
216
+ // Format: /archives/vendor/package/vendor-package-version.zip
217
+ if (baseUrl.includes('repo.magento.com')) {
218
+ const [vendor, pkg] = packageName.split('/');
219
+ if (vendor && pkg) {
220
+ // Magento archive format: /archives/vendor/package/vendor-package-version.zip
221
+ // Version format may need adjustment (remove 'v' prefix if present, handle dev versions)
222
+ const cleanVersion = version.replace(/^v/, '');
223
+ return `${baseUrl}/archives/${vendor}/${pkg}/${vendor}-${pkg}-${cleanVersion}.zip`;
224
+ }
225
+ }
226
+ // No URL could be constructed
227
+ const logger = getLogger();
228
+ logger.warn('No dist URL available', { packageName, version, baseUrl });
229
+ return undefined;
230
+ }
231
+ /**
232
+ * Parse Composer packages.json and transform dist URLs if needed
233
+ */
234
+ function parseComposerPackagesJson(data, baseUrl) {
235
+ const packages = [];
236
+ for (const [packageName, versions] of Object.entries(data.packages || {})) {
237
+ // Normalize versions to handle both array format (Packagist p2) and object format (traditional repos)
238
+ const versionsArray = Array.isArray(versions)
239
+ ? versions.map((metadata) => ({ version: metadata.version || String(metadata), metadata }))
240
+ : Object.entries(versions).map(([key, val]) => ({
241
+ version: val?.version || key,
242
+ metadata: val,
243
+ }));
244
+ for (const { version, metadata } of versionsArray) {
245
+ // Transform dist URL to absolute URL
246
+ const distUrl = resolveDistUrl(baseUrl, metadata.dist?.url, packageName, version);
247
+ packages.push({
248
+ name: packageName,
249
+ version,
250
+ time: metadata.time,
251
+ description: metadata.description,
252
+ license: metadata.license,
253
+ type: metadata.type,
254
+ homepage: metadata.homepage,
255
+ dist: distUrl
256
+ ? {
257
+ type: metadata.dist?.type || 'zip',
258
+ url: distUrl,
259
+ reference: metadata.dist?.reference,
260
+ }
261
+ : undefined,
262
+ require: metadata.require,
263
+ 'require-dev': metadata['require-dev'],
264
+ });
265
+ }
266
+ }
267
+ return packages;
268
+ }
269
+ //# sourceMappingURL=composer-repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composer-repo.js","sourceRoot":"","sources":["../../../src/sync/strategies/composer-repo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,gBAAgB,EAAuB,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACpG,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAW,EACX,cAA8B,EAC9B,WAAmC,EACnC,aAAsB;IAEtB,8CAA8C;IAC9C,MAAM,WAAW,GAAG,gBAAgB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAElE,gBAAgB;IAChB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,GAAG,OAAO,gBAAgB,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAC3B,GAAG,EAAE,CACH,KAAK,CAAC,WAAW,EAAE;YACjB,OAAO,EAAE;gBACP,GAAG,WAAW;gBACd,MAAM,EAAE,kBAAkB;gBAC1B,YAAY,EAAE,mBAAmB;aAClC;SACF,CAAC,EACJ,EAAE,OAAO,EAAE,CAAC,EAAE,CACf,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;QAChE,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;QAC5E,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5E,CAAC;QAED,MAAM,YAAY,GAAyB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEjE,4DAA4D;QAC5D,IAAI,YAAY,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACvE,qCAAqC;YACrC,OAAO,MAAM,wBAAwB,CACnC,OAAO,EACP,YAAY,EACZ,WAAW,EACX,aAAa,CACd,CAAC;QACJ,CAAC;QAED,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,yBAAyB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAElE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAClE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,wBAAwB,CACrC,OAAe,EACf,YAAkC,EAClC,WAAwB,EACxB,aAAsB;IAEtB,MAAM,YAAY,GAAG,YAAY,CAAC,eAAe,CAAE,CAAC;IACpD,MAAM,gBAAgB,GAAG,YAAY,CAAC,mBAAmB,CAAE,CAAC;IAE5D,uBAAuB;IACvB,MAAM,cAAc,GAAG,aAAa;QAClC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACvE,CAAC,CAAC,EAAE,CAAC;IAEP,qEAAqE;IACrE,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC;IAEpD,oEAAoE;IACpE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEhD,KAAK,MAAM,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC1E,8CAA8C;QAC9C,MAAM,WAAW,GAAG,GAAG,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;QAE3E,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAC3B,GAAG,EAAE,CACH,KAAK,CAAC,WAAW,EAAE;gBACjB,OAAO,EAAE;oBACP,GAAG,WAAW;oBACd,MAAM,EAAE,kBAAkB;oBAC1B,YAAY,EAAE,mBAAmB;iBAClC;aACF,CAAC,EACJ,EAAE,OAAO,EAAE,CAAC,EAAE,CACf,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACvF,SAAS;YACX,CAAC;YAED,MAAM,YAAY,GAAiB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEzD,gFAAgF;YAChF,KAAK,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1F,IAAI,eAAe,IAAI,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxD,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9H,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE,EAAE,YAAY,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;IACnG,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE,EAAE,WAAW,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;QACvG,iEAAiE;QACjE,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9E,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,2CAA2C,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,mBAAmB;SAC3B,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,MAAM,WAAW,GAAsB,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,aAAa,EAAE,CAAC;QACvD,gDAAgD;QAChD,mCAAmC;QACnC,MAAM,UAAU,GAAG,GAAG,OAAO,GAAG,YAAY;aACzC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC;aACjC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;QAEpC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAC3B,GAAG,EAAE,CACH,KAAK,CAAC,UAAU,EAAE;gBAChB,OAAO,EAAE;oBACP,GAAG,WAAW;oBACd,MAAM,EAAE,kBAAkB;oBAC1B,YAAY,EAAE,mBAAmB;iBAClC;aACF,CAAC,EACJ,EAAE,OAAO,EAAE,CAAC,EAAE,CACf,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACzF,SAAS;YACX,CAAC;YAED,MAAM,WAAW,GAA4B,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnE,yGAAyG;YACzG,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAElE,6DAA6D;YAC7D,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;gBAClD,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAClG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;oBACnD,OAAO,EAAG,GAAW,EAAE,OAAO,IAAI,GAAG;oBACrC,QAAQ,EAAE,GAAG;iBACd,CAAC,CAAC,CAAC;YAER,KAAK,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,aAAa,EAAE,CAAC;gBAClD,qCAAqC;gBACrC,IAAI,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;gBAEhF,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,WAAW;oBACjB,OAAO;oBACP,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,IAAI,EAAE,OAAO;wBACX,CAAC,CAAC;4BACE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK;4BAClC,GAAG,EAAE,OAAO;4BACZ,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS;yBACpC;wBACH,CAAC,CAAC,SAAS;oBACb,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC;iBACvC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxH,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,2BAA2B;SACnC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,yBAAyB;KACpC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CACrB,OAAe,EACf,MAA0B,EAC1B,WAAmB,EACnB,OAAe;IAEf,0CAA0C;IAC1C,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC9E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,qDAAqD;IACrD,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,SAAS,MAAM,EAAE,CAAC;IAC3B,CAAC;IAED,uCAAuC;IACvC,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,6DAA6D;QAC7D,OAAO,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED,6BAA6B;IAC7B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC;IAChC,CAAC;IAED,qFAAqF;IACrF,8DAA8D;IAC9D,IAAI,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;YAClB,8EAA8E;YAC9E,yFAAyF;YACzF,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/C,OAAO,GAAG,OAAO,aAAa,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,YAAY,MAAM,CAAC;QACrF,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAChC,IAA0B,EAC1B,OAAe;IAEf,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1E,sGAAsG;QACtG,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC3C,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC3F,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5C,OAAO,EAAG,GAAW,EAAE,OAAO,IAAI,GAAG;gBACrC,QAAQ,EAAE,GAAG;aACd,CAAC,CAAC,CAAC;QAER,KAAK,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,aAAa,EAAE,CAAC;YAClD,qCAAqC;YACrC,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YAElF,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,WAAW;gBACjB,OAAO;gBACP,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,IAAI,EAAE,OAAO;oBACX,CAAC,CAAC;wBACE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK;wBAClC,GAAG,EAAE,OAAO;wBACZ,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS;qBACpC;oBACH,CAAC,CAAC,SAAS;gBACb,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { SyncResult } from '../types';
2
+ /**
3
+ * Sync via GitHub Repository API (fallback when Packages Registry unavailable)
4
+ */
5
+ export declare function syncViaGitHubApi(owner: string, repo: string, token: string, branch?: string, composerJsonPath?: string): Promise<SyncResult>;
6
+ //# sourceMappingURL=github-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-api.d.ts","sourceRoot":"","sources":["../../../src/sync/strategies/github-api.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAuD,MAAM,UAAU,CAAC;AAMhG;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAe,EACvB,gBAAgB,GAAE,MAA2B,GAC5C,OAAO,CAAC,UAAU,CAAC,CAsHrB"}
@@ -0,0 +1,137 @@
1
+ /*
2
+ * PACKAGE.broker
3
+ * Copyright (C) 2025 Łukasz Bajsarowicz
4
+ * Licensed under AGPL-3.0
5
+ */
6
+ import micromatch from 'micromatch';
7
+ import semver from 'semver';
8
+ import pRetry from 'p-retry';
9
+ import { getLogger } from '../../utils/logger';
10
+ /**
11
+ * Sync via GitHub Repository API (fallback when Packages Registry unavailable)
12
+ */
13
+ export async function syncViaGitHubApi(owner, repo, token, branch = 'main', composerJsonPath = '**/composer.json') {
14
+ const headers = {
15
+ Authorization: `Bearer ${token}`,
16
+ Accept: 'application/vnd.github+json',
17
+ 'User-Agent': 'CloudflareComposerProxy/1.0',
18
+ 'X-GitHub-Api-Version': '2022-11-28',
19
+ };
20
+ try {
21
+ // Step 1: Get repository tree
22
+ const treeResponse = await pRetry(() => fetch(`https://api.github.com/repos/${owner}/${repo}/git/trees/${branch}?recursive=1`, { headers }), { retries: 3 });
23
+ if (treeResponse.status === 401 || treeResponse.status === 403) {
24
+ return { success: false, packages: [], error: 'auth_failed' };
25
+ }
26
+ if (treeResponse.status === 404) {
27
+ return { success: false, packages: [], error: 'repo_not_found' };
28
+ }
29
+ if (!treeResponse.ok) {
30
+ return { success: false, packages: [], error: `tree_fetch_failed_${treeResponse.status}` };
31
+ }
32
+ const treeData = await treeResponse.json();
33
+ // Handle truncated repos (>100k files)
34
+ if (treeData.truncated) {
35
+ const logger = getLogger();
36
+ logger.warn('Repository has >100k files, tree truncated', { owner, repo });
37
+ // Could implement directory-by-directory traversal here
38
+ }
39
+ // Step 2: Find composer.json files using glob pattern
40
+ const composerFiles = findComposerJsonFiles(treeData.tree, composerJsonPath);
41
+ if (composerFiles.length === 0) {
42
+ return { success: false, packages: [], error: 'no_composer_json_found' };
43
+ }
44
+ // Step 3: Fetch each composer.json
45
+ const packages = [];
46
+ for (const file of composerFiles) {
47
+ const contentResponse = await pRetry(() => fetch(`https://api.github.com/repos/${owner}/${repo}/contents/${file.path}?ref=${branch}`, {
48
+ headers: {
49
+ ...headers,
50
+ Accept: 'application/vnd.github.raw+json',
51
+ },
52
+ }), { retries: 2 });
53
+ if (!contentResponse.ok)
54
+ continue;
55
+ const composerJson = await contentResponse.json();
56
+ // Step 4: Parse package info
57
+ if (composerJson.name) {
58
+ packages.push({
59
+ name: composerJson.name,
60
+ version: composerJson.version || `dev-${branch}`,
61
+ require: composerJson.require,
62
+ 'require-dev': composerJson['require-dev'],
63
+ description: composerJson.description,
64
+ dist: {
65
+ type: 'zip',
66
+ url: `https://api.github.com/repos/${owner}/${repo}/zipball/${branch}`,
67
+ reference: treeData.sha,
68
+ },
69
+ });
70
+ }
71
+ }
72
+ // Step 5: Get versions from tags
73
+ const versions = await getVersionsFromTags(owner, repo, token);
74
+ // Add versioned packages from tags
75
+ for (const [version, sha] of versions) {
76
+ for (const pkg of packages) {
77
+ if (semver.valid(version)) {
78
+ packages.push({
79
+ ...pkg,
80
+ version,
81
+ dist: {
82
+ type: 'zip',
83
+ url: `https://api.github.com/repos/${owner}/${repo}/zipball/${version}`,
84
+ reference: sha,
85
+ },
86
+ });
87
+ }
88
+ }
89
+ }
90
+ return { success: true, packages, strategy: 'github_api' };
91
+ }
92
+ catch (error) {
93
+ const logger = getLogger();
94
+ logger.error('GitHub API sync error', { owner, repo }, error instanceof Error ? error : new Error(String(error)));
95
+ return { success: false, packages: [], error: 'network_error' };
96
+ }
97
+ }
98
+ /**
99
+ * Find composer.json files using glob pattern matching
100
+ */
101
+ function findComposerJsonFiles(tree, globPattern) {
102
+ const blobPaths = tree.filter((item) => item.type === 'blob').map((item) => item.path);
103
+ const matchedPaths = micromatch(blobPaths, globPattern);
104
+ return tree.filter((item) => matchedPaths.includes(item.path));
105
+ }
106
+ /**
107
+ * Get versions from repository tags
108
+ */
109
+ async function getVersionsFromTags(owner, repo, token) {
110
+ const headers = {
111
+ Authorization: `Bearer ${token}`,
112
+ Accept: 'application/vnd.github+json',
113
+ 'User-Agent': 'CloudflareComposerProxy/1.0',
114
+ };
115
+ try {
116
+ const response = await pRetry(() => fetch(`https://api.github.com/repos/${owner}/${repo}/tags`, { headers }), { retries: 2 });
117
+ if (!response.ok) {
118
+ return new Map();
119
+ }
120
+ const tags = await response.json();
121
+ const versions = new Map();
122
+ for (const tag of tags) {
123
+ // Parse tag name as semver (e.g., "v1.2.3" → "1.2.3")
124
+ const version = semver.clean(tag.name) || tag.name;
125
+ if (semver.valid(version)) {
126
+ versions.set(version, tag.commit.sha);
127
+ }
128
+ }
129
+ return versions;
130
+ }
131
+ catch (error) {
132
+ const logger = getLogger();
133
+ logger.error('Error fetching tags', { owner, repo }, error instanceof Error ? error : new Error(String(error)));
134
+ return new Map();
135
+ }
136
+ }
137
+ //# sourceMappingURL=github-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-api.js","sourceRoot":"","sources":["../../../src/sync/strategies/github-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { SyncResult } from '../types';
2
+ /**
3
+ * Sync via GitHub Packages Composer Registry (preferred strategy)
4
+ * Single API call returns native Composer packages.json format
5
+ */
6
+ export declare function syncViaGitHubPackages(owner: string, token: string, targetPackages?: string[]): Promise<SyncResult>;
7
+ //# sourceMappingURL=github-packages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-packages.d.ts","sourceRoot":"","sources":["../../../src/sync/strategies/github-packages.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAyC,MAAM,UAAU,CAAC;AAKlF;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,UAAU,CAAC,CAsCrB"}
@@ -0,0 +1,66 @@
1
+ /*
2
+ * PACKAGE.broker
3
+ * Copyright (C) 2025 Łukasz Bajsarowicz
4
+ * Licensed under AGPL-3.0
5
+ */
6
+ import { COMPOSER_USER_AGENT } from '@package-broker/shared';
7
+ import pRetry from 'p-retry';
8
+ import { getLogger } from '../../utils/logger';
9
+ /**
10
+ * Sync via GitHub Packages Composer Registry (preferred strategy)
11
+ * Single API call returns native Composer packages.json format
12
+ */
13
+ export async function syncViaGitHubPackages(owner, token, targetPackages) {
14
+ const url = `https://composer.pkg.github.com/${owner}/packages.json`;
15
+ try {
16
+ const response = await pRetry(() => fetch(url, {
17
+ headers: {
18
+ Authorization: `Bearer ${token}`,
19
+ Accept: 'application/json',
20
+ 'User-Agent': COMPOSER_USER_AGENT,
21
+ },
22
+ }), { retries: 3 });
23
+ // GitHub Packages returns 404 if owner has no packages
24
+ if (response.status === 404) {
25
+ return { success: false, packages: [], error: 'no_packages_registry' };
26
+ }
27
+ if (response.status === 401 || response.status === 403) {
28
+ return { success: false, packages: [], error: 'auth_failed' };
29
+ }
30
+ if (!response.ok) {
31
+ return { success: false, packages: [], error: `http_${response.status}` };
32
+ }
33
+ const packagesJson = await response.json();
34
+ const packages = parseComposerPackagesJson(packagesJson, targetPackages);
35
+ return { success: true, packages, strategy: 'github_packages' };
36
+ }
37
+ catch (error) {
38
+ const logger = getLogger();
39
+ logger.error('GitHub Packages sync error', { owner, url }, error instanceof Error ? error : new Error(String(error)));
40
+ return { success: false, packages: [], error: 'network_error' };
41
+ }
42
+ }
43
+ /**
44
+ * Parse Composer packages.json structure
45
+ */
46
+ function parseComposerPackagesJson(data, filter) {
47
+ const packages = [];
48
+ for (const [packageName, versions] of Object.entries(data.packages || {})) {
49
+ // Apply filter if specified
50
+ if (filter && !filter.includes(packageName)) {
51
+ continue;
52
+ }
53
+ for (const [version, metadata] of Object.entries(versions)) {
54
+ packages.push({
55
+ name: packageName,
56
+ version,
57
+ dist: metadata.dist,
58
+ require: metadata.require,
59
+ 'require-dev': metadata['require-dev'],
60
+ description: metadata.description,
61
+ });
62
+ }
63
+ }
64
+ return packages;
65
+ }
66
+ //# sourceMappingURL=github-packages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-packages.js","sourceRoot":"","sources":["../../../src/sync/strategies/github-packages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './github-packages';
2
+ export * from './github-api';
3
+ export * from './composer-repo';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sync/strategies/index.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Sync strategies exports
2
+ export * from './github-packages';
3
+ export * from './github-api';
4
+ export * from './composer-repo';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sync/strategies/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,60 @@
1
+ export interface ComposerPackage {
2
+ name: string;
3
+ version: string;
4
+ time?: string;
5
+ description?: string;
6
+ license?: string | string[];
7
+ type?: string;
8
+ homepage?: string;
9
+ dist?: {
10
+ type: string;
11
+ url: string;
12
+ reference?: string;
13
+ };
14
+ require?: Record<string, string>;
15
+ 'require-dev'?: Record<string, string>;
16
+ autoload?: object;
17
+ readme?: string;
18
+ }
19
+ export interface SyncResult {
20
+ success: boolean;
21
+ packages: ComposerPackage[];
22
+ strategy?: string;
23
+ error?: string;
24
+ }
25
+ export interface GitHubTreeItem {
26
+ path: string;
27
+ type: 'blob' | 'tree';
28
+ sha: string;
29
+ }
30
+ export interface GitHubTreeResponse {
31
+ sha: string;
32
+ tree: GitHubTreeItem[];
33
+ truncated: boolean;
34
+ }
35
+ export interface ComposerPackagesJson {
36
+ packages: Record<string, Record<string, ComposerPackage>>;
37
+ 'providers-url'?: string;
38
+ 'provider-includes'?: Record<string, {
39
+ sha256: string;
40
+ }>;
41
+ 'providers-lazy-url'?: string;
42
+ 'metadata-url'?: string;
43
+ }
44
+ /**
45
+ * Provider file structure (from provider-includes)
46
+ * Contains package names and their SHA256 hashes for lazy loading
47
+ */
48
+ export interface ProviderFile {
49
+ providers: Record<string, {
50
+ sha256: string;
51
+ }>;
52
+ }
53
+ /**
54
+ * Package metadata fetched via providers-url
55
+ * Same structure as packages.json but for a single package
56
+ */
57
+ export interface ProviderPackageResponse {
58
+ packages: Record<string, Record<string, ComposerPackage>>;
59
+ }
60
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;CAC3D"}
@@ -0,0 +1,3 @@
1
+ // Sync types
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAAA,aAAa"}