@package-broker/core 0.17.4 → 0.19.5

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 (334) hide show
  1. package/dist/cache/index.d.ts +0 -1
  2. package/dist/cache/index.d.ts.map +1 -1
  3. package/dist/cache/index.js +0 -1
  4. package/dist/cache/index.js.map +1 -1
  5. package/dist/cache/memory-driver.d.ts +1 -1
  6. package/dist/cache/memory-driver.d.ts.map +1 -1
  7. package/dist/cache/memory-driver.js +4 -2
  8. package/dist/cache/memory-driver.js.map +1 -1
  9. package/dist/db/create-database.d.ts +8 -0
  10. package/dist/db/create-database.d.ts.map +1 -0
  11. package/dist/db/create-database.js +13 -0
  12. package/dist/db/create-database.js.map +1 -0
  13. package/dist/db/index.d.ts +0 -1
  14. package/dist/db/index.d.ts.map +1 -1
  15. package/dist/db/index.js +0 -1
  16. package/dist/db/index.js.map +1 -1
  17. package/dist/db/schema.d.ts +557 -0
  18. package/dist/db/schema.d.ts.map +1 -1
  19. package/dist/db/schema.js +72 -2
  20. package/dist/db/schema.js.map +1 -1
  21. package/dist/factory.d.ts.map +1 -1
  22. package/dist/factory.js +22 -2
  23. package/dist/factory.js.map +1 -1
  24. package/dist/index.d.ts +2 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +2 -2
  27. package/dist/index.js.map +1 -1
  28. package/dist/jobs/processor.js +1 -1
  29. package/dist/jobs/processor.js.map +1 -1
  30. package/dist/kernel/container.d.ts +12 -0
  31. package/dist/kernel/container.d.ts.map +1 -0
  32. package/dist/kernel/container.js +43 -0
  33. package/dist/kernel/container.js.map +1 -0
  34. package/dist/kernel/events.d.ts +17 -0
  35. package/dist/kernel/events.d.ts.map +1 -0
  36. package/dist/kernel/events.js +54 -0
  37. package/dist/kernel/events.js.map +1 -0
  38. package/dist/kernel/hooks.d.ts +14 -0
  39. package/dist/kernel/hooks.d.ts.map +1 -0
  40. package/dist/kernel/hooks.js +31 -0
  41. package/dist/kernel/hooks.js.map +1 -0
  42. package/dist/kernel/index.d.ts +5 -0
  43. package/dist/kernel/index.d.ts.map +1 -0
  44. package/dist/kernel/index.js +5 -0
  45. package/dist/kernel/index.js.map +1 -0
  46. package/dist/kernel/plugin.d.ts +21 -0
  47. package/dist/kernel/plugin.d.ts.map +1 -0
  48. package/dist/kernel/plugin.js +30 -0
  49. package/dist/kernel/plugin.js.map +1 -0
  50. package/dist/middleware/auth.d.ts +2 -0
  51. package/dist/middleware/auth.d.ts.map +1 -1
  52. package/dist/middleware/auth.js +20 -5
  53. package/dist/middleware/auth.js.map +1 -1
  54. package/dist/modules/admin/admin.handlers.d.ts +1 -1
  55. package/dist/modules/admin/admin.handlers.d.ts.map +1 -1
  56. package/dist/modules/artifacts/artifacts.handlers.d.ts +1 -1
  57. package/dist/modules/artifacts/artifacts.handlers.d.ts.map +1 -1
  58. package/dist/modules/auth/auth.handlers.js +1 -1
  59. package/dist/modules/auth/auth.handlers.js.map +1 -1
  60. package/dist/modules/composer/index.d.ts.map +1 -1
  61. package/dist/modules/composer/index.js +5 -0
  62. package/dist/modules/composer/index.js.map +1 -1
  63. package/dist/modules/composer/tenant-composer.d.ts +32 -0
  64. package/dist/modules/composer/tenant-composer.d.ts.map +1 -0
  65. package/dist/modules/composer/tenant-composer.js +198 -0
  66. package/dist/modules/composer/tenant-composer.js.map +1 -0
  67. package/dist/modules/import/import.handlers.d.ts +4 -0
  68. package/dist/modules/import/import.handlers.d.ts.map +1 -0
  69. package/dist/modules/import/import.handlers.js +16 -0
  70. package/dist/modules/import/import.handlers.js.map +1 -0
  71. package/dist/{routes/api/openapi/settings.d.ts → modules/import/import.routes.d.ts} +20 -35
  72. package/dist/modules/import/import.routes.d.ts.map +1 -0
  73. package/dist/modules/import/import.routes.js +63 -0
  74. package/dist/modules/import/import.routes.js.map +1 -0
  75. package/dist/modules/import/index.d.ts +8 -0
  76. package/dist/modules/import/index.d.ts.map +1 -0
  77. package/dist/modules/import/index.js +8 -0
  78. package/dist/modules/import/index.js.map +1 -0
  79. package/dist/modules/organizations/index.d.ts +8 -0
  80. package/dist/modules/organizations/index.d.ts.map +1 -0
  81. package/dist/modules/organizations/index.js +22 -0
  82. package/dist/modules/organizations/index.js.map +1 -0
  83. package/dist/modules/organizations/organizations.handlers.d.ts +24 -0
  84. package/dist/modules/organizations/organizations.handlers.d.ts.map +1 -0
  85. package/dist/modules/organizations/organizations.handlers.js +278 -0
  86. package/dist/modules/organizations/organizations.handlers.js.map +1 -0
  87. package/dist/modules/organizations/organizations.routes.d.ts +596 -0
  88. package/dist/modules/organizations/organizations.routes.d.ts.map +1 -0
  89. package/dist/modules/organizations/organizations.routes.js +263 -0
  90. package/dist/modules/organizations/organizations.routes.js.map +1 -0
  91. package/dist/modules/packages/packages.handlers.d.ts +1 -1
  92. package/dist/modules/packages/packages.handlers.d.ts.map +1 -1
  93. package/dist/modules/packages/packages.handlers.js +3 -69
  94. package/dist/modules/packages/packages.handlers.js.map +1 -1
  95. package/dist/modules/repositories/repositories.handlers.d.ts +1 -1
  96. package/dist/modules/repositories/repositories.handlers.d.ts.map +1 -1
  97. package/dist/modules/repositories/repositories.handlers.js +74 -3
  98. package/dist/modules/repositories/repositories.handlers.js.map +1 -1
  99. package/dist/modules/repositories/repositories.routes.d.ts +12 -0
  100. package/dist/modules/repositories/repositories.routes.d.ts.map +1 -1
  101. package/dist/modules/system/index.d.ts.map +1 -1
  102. package/dist/modules/system/index.js +2 -1
  103. package/dist/modules/system/index.js.map +1 -1
  104. package/dist/modules/system/system.handlers.d.ts +11 -1
  105. package/dist/modules/system/system.handlers.d.ts.map +1 -1
  106. package/dist/modules/system/system.handlers.js +31 -1
  107. package/dist/modules/system/system.handlers.js.map +1 -1
  108. package/dist/modules/system/system.routes.d.ts +34 -4
  109. package/dist/modules/system/system.routes.d.ts.map +1 -1
  110. package/dist/modules/system/system.routes.js +21 -1
  111. package/dist/modules/system/system.routes.js.map +1 -1
  112. package/dist/modules/tenants/index.d.ts +8 -0
  113. package/dist/modules/tenants/index.d.ts.map +1 -0
  114. package/dist/modules/tenants/index.js +21 -0
  115. package/dist/modules/tenants/index.js.map +1 -0
  116. package/dist/modules/tenants/tenants.handlers.d.ts +24 -0
  117. package/dist/modules/tenants/tenants.handlers.d.ts.map +1 -0
  118. package/dist/modules/tenants/tenants.handlers.js +268 -0
  119. package/dist/modules/tenants/tenants.handlers.js.map +1 -0
  120. package/dist/modules/tenants/tenants.routes.d.ts +486 -0
  121. package/dist/modules/tenants/tenants.routes.d.ts.map +1 -0
  122. package/dist/modules/tenants/tenants.routes.js +227 -0
  123. package/dist/modules/tenants/tenants.routes.js.map +1 -0
  124. package/dist/modules/tokens/tokens.handlers.d.ts +1 -1
  125. package/dist/modules/tokens/tokens.handlers.d.ts.map +1 -1
  126. package/dist/modules/users/users.handlers.d.ts +1 -1
  127. package/dist/modules/users/users.handlers.d.ts.map +1 -1
  128. package/dist/modules/users/users.handlers.js +1 -1
  129. package/dist/modules/users/users.handlers.js.map +1 -1
  130. package/dist/plugins/security-advisories/advisory-db.d.ts +85 -0
  131. package/dist/plugins/security-advisories/advisory-db.d.ts.map +1 -0
  132. package/dist/plugins/security-advisories/advisory-db.js +161 -0
  133. package/dist/plugins/security-advisories/advisory-db.js.map +1 -0
  134. package/dist/plugins/security-advisories/advisory-service.d.ts +44 -0
  135. package/dist/plugins/security-advisories/advisory-service.d.ts.map +1 -0
  136. package/dist/plugins/security-advisories/advisory-service.js +122 -0
  137. package/dist/plugins/security-advisories/advisory-service.js.map +1 -0
  138. package/dist/plugins/security-advisories/advisory.handlers.d.ts +13 -0
  139. package/dist/plugins/security-advisories/advisory.handlers.d.ts.map +1 -0
  140. package/dist/plugins/security-advisories/advisory.handlers.js +87 -0
  141. package/dist/plugins/security-advisories/advisory.handlers.js.map +1 -0
  142. package/dist/plugins/security-advisories/advisory.module.d.ts +4 -0
  143. package/dist/plugins/security-advisories/advisory.module.d.ts.map +1 -0
  144. package/dist/plugins/security-advisories/advisory.module.js +13 -0
  145. package/dist/plugins/security-advisories/advisory.module.js.map +1 -0
  146. package/dist/plugins/security-advisories/advisory.routes.d.ts +73 -0
  147. package/dist/plugins/security-advisories/advisory.routes.d.ts.map +1 -0
  148. package/dist/plugins/security-advisories/advisory.routes.js +76 -0
  149. package/dist/plugins/security-advisories/advisory.routes.js.map +1 -0
  150. package/dist/plugins/security-advisories/index.d.ts +31 -0
  151. package/dist/plugins/security-advisories/index.d.ts.map +1 -0
  152. package/dist/plugins/security-advisories/index.js +100 -0
  153. package/dist/plugins/security-advisories/index.js.map +1 -0
  154. package/dist/ports.d.ts +39 -21
  155. package/dist/ports.d.ts.map +1 -1
  156. package/dist/queue/consumer.js +2 -2
  157. package/dist/queue/consumer.js.map +1 -1
  158. package/dist/queue/memory-driver.d.ts +3 -2
  159. package/dist/queue/memory-driver.d.ts.map +1 -1
  160. package/dist/queue/memory-driver.js.map +1 -1
  161. package/dist/routes/composer.d.ts.map +1 -1
  162. package/dist/routes/composer.js +71 -19
  163. package/dist/routes/composer.js.map +1 -1
  164. package/dist/routes/dist.d.ts.map +1 -1
  165. package/dist/routes/dist.js +26 -80
  166. package/dist/routes/dist.js.map +1 -1
  167. package/dist/routes/index.d.ts +0 -1
  168. package/dist/routes/index.d.ts.map +1 -1
  169. package/dist/routes/index.js +0 -1
  170. package/dist/routes/index.js.map +1 -1
  171. package/dist/services/GitHubOrgImporter.d.ts +21 -0
  172. package/dist/services/GitHubOrgImporter.d.ts.map +1 -0
  173. package/dist/services/GitHubOrgImporter.js +51 -0
  174. package/dist/services/GitHubOrgImporter.js.map +1 -0
  175. package/dist/services/TokenScopeService.d.ts +15 -0
  176. package/dist/services/TokenScopeService.d.ts.map +1 -0
  177. package/dist/services/TokenScopeService.js +42 -0
  178. package/dist/services/TokenScopeService.js.map +1 -0
  179. package/dist/storage/index.d.ts +0 -1
  180. package/dist/storage/index.d.ts.map +1 -1
  181. package/dist/storage/index.js +0 -1
  182. package/dist/storage/index.js.map +1 -1
  183. package/dist/sync/repository-sync.d.ts.map +1 -1
  184. package/dist/sync/repository-sync.js +35 -23
  185. package/dist/sync/repository-sync.js.map +1 -1
  186. package/dist/sync/strategies/git-ssh.d.ts +17 -0
  187. package/dist/sync/strategies/git-ssh.d.ts.map +1 -0
  188. package/dist/sync/strategies/git-ssh.js +325 -0
  189. package/dist/sync/strategies/git-ssh.js.map +1 -0
  190. package/dist/{routes/api/types.d.ts → types/openapi.d.ts} +3 -4
  191. package/dist/types/openapi.d.ts.map +1 -0
  192. package/dist/{routes/api/types.js → types/openapi.js} +1 -1
  193. package/dist/types/openapi.js.map +1 -0
  194. package/dist/utils/background.d.ts +7 -0
  195. package/dist/utils/background.d.ts.map +1 -0
  196. package/dist/utils/background.js +11 -0
  197. package/dist/utils/background.js.map +1 -0
  198. package/dist/utils/environment.d.ts +15 -0
  199. package/dist/utils/environment.d.ts.map +1 -0
  200. package/dist/utils/environment.js +38 -0
  201. package/dist/utils/environment.js.map +1 -0
  202. package/dist/utils/index.d.ts +1 -0
  203. package/dist/utils/index.d.ts.map +1 -1
  204. package/dist/utils/index.js +1 -0
  205. package/dist/utils/index.js.map +1 -1
  206. package/dist/utils/package-filter.d.ts +7 -0
  207. package/dist/utils/package-filter.d.ts.map +1 -0
  208. package/dist/utils/package-filter.js +23 -0
  209. package/dist/utils/package-filter.js.map +1 -0
  210. package/dist/utils/package-validator.d.ts +3 -3
  211. package/dist/utils/package-validator.d.ts.map +1 -1
  212. package/dist/utils/package-validator.js +4 -37
  213. package/dist/utils/package-validator.js.map +1 -1
  214. package/dist/utils/upstream-fetch.d.ts +8 -0
  215. package/dist/utils/upstream-fetch.d.ts.map +1 -1
  216. package/dist/utils/upstream-fetch.js +42 -0
  217. package/dist/utils/upstream-fetch.js.map +1 -1
  218. package/dist/utils/zip-utils.d.ts +13 -0
  219. package/dist/utils/zip-utils.d.ts.map +1 -0
  220. package/dist/utils/zip-utils.js +66 -0
  221. package/dist/utils/zip-utils.js.map +1 -0
  222. package/dist/vcs/bitbucket-provider.d.ts +19 -0
  223. package/dist/vcs/bitbucket-provider.d.ts.map +1 -0
  224. package/dist/vcs/bitbucket-provider.js +249 -0
  225. package/dist/vcs/bitbucket-provider.js.map +1 -0
  226. package/dist/vcs/github-provider.d.ts +16 -0
  227. package/dist/vcs/github-provider.d.ts.map +1 -0
  228. package/dist/vcs/github-provider.js +117 -0
  229. package/dist/vcs/github-provider.js.map +1 -0
  230. package/dist/vcs/gitlab-provider.d.ts +17 -0
  231. package/dist/vcs/gitlab-provider.d.ts.map +1 -0
  232. package/dist/vcs/gitlab-provider.js +216 -0
  233. package/dist/vcs/gitlab-provider.js.map +1 -0
  234. package/dist/vcs/index.d.ts +10 -0
  235. package/dist/vcs/index.d.ts.map +1 -0
  236. package/dist/vcs/index.js +24 -0
  237. package/dist/vcs/index.js.map +1 -0
  238. package/dist/vcs/registry.d.ts +32 -0
  239. package/dist/vcs/registry.d.ts.map +1 -0
  240. package/dist/vcs/registry.js +47 -0
  241. package/dist/vcs/registry.js.map +1 -0
  242. package/dist/workflows/package-storage.d.ts.map +1 -1
  243. package/dist/workflows/package-storage.js +3 -3
  244. package/dist/workflows/package-storage.js.map +1 -1
  245. package/package.json +11 -8
  246. package/dist/cache/kv-driver.d.ts +0 -16
  247. package/dist/cache/kv-driver.d.ts.map +0 -1
  248. package/dist/cache/kv-driver.js +0 -23
  249. package/dist/cache/kv-driver.js.map +0 -1
  250. package/dist/db/d1-driver.d.ts +0 -3
  251. package/dist/db/d1-driver.d.ts.map +0 -1
  252. package/dist/db/d1-driver.js +0 -7
  253. package/dist/db/d1-driver.js.map +0 -1
  254. package/dist/routes/api/artifacts.d.ts +0 -27
  255. package/dist/routes/api/artifacts.d.ts.map +0 -1
  256. package/dist/routes/api/artifacts.js +0 -57
  257. package/dist/routes/api/artifacts.js.map +0 -1
  258. package/dist/routes/api/auth.d.ts +0 -52
  259. package/dist/routes/api/auth.d.ts.map +0 -1
  260. package/dist/routes/api/auth.js +0 -277
  261. package/dist/routes/api/auth.js.map +0 -1
  262. package/dist/routes/api/index.d.ts +0 -10
  263. package/dist/routes/api/index.d.ts.map +0 -1
  264. package/dist/routes/api/index.js +0 -11
  265. package/dist/routes/api/index.js.map +0 -1
  266. package/dist/routes/api/openapi/artifacts.d.ts +0 -80
  267. package/dist/routes/api/openapi/artifacts.d.ts.map +0 -1
  268. package/dist/routes/api/openapi/artifacts.js +0 -73
  269. package/dist/routes/api/openapi/artifacts.js.map +0 -1
  270. package/dist/routes/api/openapi/auth.d.ts +0 -187
  271. package/dist/routes/api/openapi/auth.d.ts.map +0 -1
  272. package/dist/routes/api/openapi/auth.js +0 -135
  273. package/dist/routes/api/openapi/auth.js.map +0 -1
  274. package/dist/routes/api/openapi/health.d.ts +0 -23
  275. package/dist/routes/api/openapi/health.d.ts.map +0 -1
  276. package/dist/routes/api/openapi/health.js +0 -25
  277. package/dist/routes/api/openapi/health.js.map +0 -1
  278. package/dist/routes/api/openapi/index.d.ts +0 -10
  279. package/dist/routes/api/openapi/index.d.ts.map +0 -1
  280. package/dist/routes/api/openapi/index.js +0 -16
  281. package/dist/routes/api/openapi/index.js.map +0 -1
  282. package/dist/routes/api/openapi/packages.d.ts +0 -172
  283. package/dist/routes/api/openapi/packages.d.ts.map +0 -1
  284. package/dist/routes/api/openapi/packages.js +0 -126
  285. package/dist/routes/api/openapi/packages.js.map +0 -1
  286. package/dist/routes/api/openapi/repositories.d.ts +0 -451
  287. package/dist/routes/api/openapi/repositories.d.ts.map +0 -1
  288. package/dist/routes/api/openapi/repositories.js +0 -238
  289. package/dist/routes/api/openapi/repositories.js.map +0 -1
  290. package/dist/routes/api/openapi/settings.d.ts.map +0 -1
  291. package/dist/routes/api/openapi/settings.js +0 -72
  292. package/dist/routes/api/openapi/settings.js.map +0 -1
  293. package/dist/routes/api/openapi/stats.d.ts +0 -59
  294. package/dist/routes/api/openapi/stats.d.ts.map +0 -1
  295. package/dist/routes/api/openapi/stats.js +0 -53
  296. package/dist/routes/api/openapi/stats.js.map +0 -1
  297. package/dist/routes/api/openapi/tokens.d.ts +0 -202
  298. package/dist/routes/api/openapi/tokens.d.ts.map +0 -1
  299. package/dist/routes/api/openapi/tokens.js +0 -132
  300. package/dist/routes/api/openapi/tokens.js.map +0 -1
  301. package/dist/routes/api/openapi/users.d.ts +0 -190
  302. package/dist/routes/api/openapi/users.d.ts.map +0 -1
  303. package/dist/routes/api/openapi/users.js +0 -126
  304. package/dist/routes/api/openapi/users.js.map +0 -1
  305. package/dist/routes/api/packages.d.ts +0 -50
  306. package/dist/routes/api/packages.d.ts.map +0 -1
  307. package/dist/routes/api/packages.js +0 -708
  308. package/dist/routes/api/packages.js.map +0 -1
  309. package/dist/routes/api/repositories.d.ts +0 -58
  310. package/dist/routes/api/repositories.d.ts.map +0 -1
  311. package/dist/routes/api/repositories.js +0 -321
  312. package/dist/routes/api/repositories.js.map +0 -1
  313. package/dist/routes/api/settings.d.ts +0 -29
  314. package/dist/routes/api/settings.d.ts.map +0 -1
  315. package/dist/routes/api/settings.js +0 -81
  316. package/dist/routes/api/settings.js.map +0 -1
  317. package/dist/routes/api/stats.d.ts +0 -21
  318. package/dist/routes/api/stats.d.ts.map +0 -1
  319. package/dist/routes/api/stats.js +0 -51
  320. package/dist/routes/api/stats.js.map +0 -1
  321. package/dist/routes/api/tokens.d.ts +0 -40
  322. package/dist/routes/api/tokens.d.ts.map +0 -1
  323. package/dist/routes/api/tokens.js +0 -187
  324. package/dist/routes/api/tokens.js.map +0 -1
  325. package/dist/routes/api/types.d.ts.map +0 -1
  326. package/dist/routes/api/types.js.map +0 -1
  327. package/dist/routes/api/users.d.ts +0 -6
  328. package/dist/routes/api/users.d.ts.map +0 -1
  329. package/dist/routes/api/users.js +0 -115
  330. package/dist/routes/api/users.js.map +0 -1
  331. package/dist/storage/r2-driver.d.ts +0 -16
  332. package/dist/storage/r2-driver.d.ts.map +0 -1
  333. package/dist/storage/r2-driver.js +0 -28
  334. package/dist/storage/r2-driver.js.map +0 -1
@@ -3,22 +3,22 @@
3
3
  * Copyright (C) 2025 Łukasz Bajsarowicz
4
4
  * Licensed under AGPL-3.0
5
5
  */
6
- // Main repository sync orchestrator
7
- import { createD1Database } from '../db';
6
+ import { createDatabase } from '../db/create-database';
8
7
  import { repositories, packages as packagesTable } from '../db/schema';
9
8
  import { eq, and } from 'drizzle-orm';
10
9
  import { decryptCredentials } from '../utils/encryption';
11
- import { syncGitHubRepository } from './github-sync';
12
10
  import { syncComposerRepository } from './strategies/composer-repo';
13
11
  import { nanoid } from 'nanoid';
14
12
  import { getLogger } from '../utils/logger';
15
13
  import { getAnalytics } from '../utils/analytics';
14
+ import { isSshSupported } from '../utils/environment';
15
+ import { getVcsProviderRegistry } from '../vcs/registry';
16
16
  /**
17
17
  * Sync a repository by ID
18
18
  * Called on-demand when packages.json is requested
19
19
  */
20
20
  export async function syncRepository(repoId, env, options) {
21
- const db = createD1Database(env.DB);
21
+ const db = createDatabase(env.DB);
22
22
  // Get repository details
23
23
  const [repo] = await db
24
24
  .select()
@@ -128,25 +128,37 @@ export async function syncRepository(repoId, env, options) {
128
128
  * Supports:
129
129
  * - Authenticated GitHub repos (github_token)
130
130
  * - Public GitHub repos (none credential type)
131
+ * - SSH key authentication (ssh_key) - Node.js only
131
132
  */
132
133
  async function syncGitRepository(url, credentialType, credentials, composerJsonPath) {
133
- // Parse URL to extract owner/repo
134
- const urlMatch = url.match(/github\.com[:/]([^/]+)\/([^/.]+)/);
135
- if (urlMatch) {
136
- const [, owner, repo] = urlMatch;
137
- // For 'none' credential type, pass null token (public repo access)
138
- const token = credentialType === 'none'
139
- ? null
140
- : (credentials.token || credentials.password || '');
141
- return syncGitHubRepository({
142
- owner,
143
- repo: repo.replace('.git', ''),
144
- token,
145
- composerJsonPath,
146
- });
134
+ // Handle SSH key authentication (Node.js only)
135
+ if (credentialType === 'ssh_key') {
136
+ if (!isSshSupported()) {
137
+ return {
138
+ success: false,
139
+ packages: [],
140
+ error: 'ssh_not_supported',
141
+ };
142
+ }
143
+ const privateKey = credentials.private_key;
144
+ if (!privateKey) {
145
+ return {
146
+ success: false,
147
+ packages: [],
148
+ error: 'ssh_key_required',
149
+ };
150
+ }
151
+ // Dynamically import SSH sync strategy (Node.js only)
152
+ const { syncViaGitSsh } = await import('./strategies/git-ssh');
153
+ return syncViaGitSsh(url, privateKey, credentials.passphrase, composerJsonPath || '**/composer.json');
154
+ }
155
+ // Resolve VCS provider from registry (supports GitHub, GitLab, Bitbucket)
156
+ const registry = getVcsProviderRegistry();
157
+ const provider = registry.resolve(url);
158
+ if (provider) {
159
+ return provider.syncRepository(url, credentials, credentialType, composerJsonPath);
147
160
  }
148
- // GitLab/Bitbucket would be handled similarly
149
- // For now, return error for unsupported Git hosts
161
+ // No registered provider matched the URL
150
162
  return {
151
163
  success: false,
152
164
  packages: [],
@@ -178,13 +190,13 @@ async function storePackages(db, repoId, packages, options) {
178
190
  const [existing] = await db
179
191
  .select()
180
192
  .from(packagesTable)
181
- .where(and(eq(packagesTable.name, pkg.name), eq(packagesTable.version, pkg.version)))
193
+ .where(and(eq(packagesTable.repo_id, repoId), eq(packagesTable.name, pkg.name), eq(packagesTable.version, pkg.version)))
182
194
  .limit(1);
183
195
  const now = Math.floor(Date.now() / 1000);
184
196
  const firstSeenAt = existing?.created_at || now;
185
197
  // Use upstream time if available, otherwise use first-seen date (created_at)
186
198
  const releasedAt = parseReleaseTime(pkg.time, firstSeenAt);
187
- // Upsert package (use unique constraint on name+version)
199
+ // Upsert package (use unique constraint on repo_id+name+version)
188
200
  try {
189
201
  await db.insert(packagesTable).values({
190
202
  id: nanoid(),
@@ -203,7 +215,7 @@ async function storePackages(db, repoId, packages, options) {
203
215
  metadata: pkg.rawMetadata ? JSON.stringify(pkg.rawMetadata) : null,
204
216
  created_at: firstSeenAt,
205
217
  }).onConflictDoUpdate({
206
- target: [packagesTable.name, packagesTable.version],
218
+ target: [packagesTable.repo_id, packagesTable.name, packagesTable.version],
207
219
  set: {
208
220
  dist_url: proxyDistUrl,
209
221
  source_dist_url: sourceDistUrl,
@@ -1 +1 @@
1
- {"version":3,"file":"repository-sync.js","sourceRoot":"","sources":["../../src/sync/repository-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository-sync.js","sourceRoot":"","sources":["../../src/sync/repository-sync.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAIpE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAczD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,GAAY,EACZ,OAAoB;IAEpB,MAAM,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAElC,yBAAyB;IACzB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE;SACpB,MAAM,EAAE;SACR,IAAI,CAAC,YAAY,CAAC;SAClB,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;SAClC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEZ,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IACnE,CAAC;IAED,2BAA2B;IAC3B,MAAM,EAAE;SACL,MAAM,CAAC,YAAY,CAAC;SACpB,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;SAC1B,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAEtC,mBAAmB;IACnB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,SAAS,CAAC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5F,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAEhD,IAAI,UAAsB,CAAC;QAE3B,8EAA8E;QAC9E,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC5B,UAAU,GAAG,MAAM,iBAAiB,CAClC,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,eAAiC,EACtC,WAAW,EACX,IAAI,CAAC,kBAAkB,IAAI,SAAS,CACrC,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACxC,UAAU,GAAG,MAAM,sBAAsB,CACvC,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,eAAiC,EACtC,WAAW,EACX,IAAI,CAAC,cAAc,IAAI,SAAS,CACjC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;QAC/E,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,yBAAyB;YACzB,MAAM,EAAE;iBACL,MAAM,CAAC,YAAY,CAAC;iBACpB,GAAG,CAAC;gBACH,MAAM,EAAE,OAAO;gBACf,aAAa,EAAE,UAAU,CAAC,KAAK;gBAC/B,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;aAC9C,CAAC;iBACD,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;YAEtC,qBAAqB;YACrB,SAAS,CAAC,0BAA0B,CAAC;gBACnC,MAAM;gBACN,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,eAAe;aAC3C,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,yCAAyC;QACzC,MAAM,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE9D,2BAA2B;QAC3B,MAAM,EAAE;aACL,MAAM,CAAC,YAAY,CAAC;aACpB,GAAG,CAAC;YACH,MAAM,EAAE,QAAQ;YAChB,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;SAC9C,CAAC;aACD,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAEtC,wCAAwC;QACxC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,MAAM,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACzE,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACnE,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,qBAAqB;QACrB,SAAS,CAAC,0BAA0B,CAAC;YACnC,MAAM;YACN,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM;YACxC,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,SAAS;SAC3C,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,QAAQ,EAAE,UAAU,CAAC,QAAQ;SAC9B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE3G,yBAAyB;QACzB,MAAM,EAAE;aACL,MAAM,CAAC,YAAY,CAAC;aACpB,GAAG,CAAC;YACH,MAAM,EAAE,OAAO;YACf,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;YACvE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;SAC9C,CAAC;aACD,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAEtC,qBAAqB;QACrB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,SAAS,CAAC,0BAA0B,CAAC;YACnC,MAAM;YACN,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,iBAAiB,CAC9B,GAAW,EACX,cAA8B,EAC9B,WAAmC,EACnC,gBAAyB;IAEzB,+CAA+C;IAC/C,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YACtB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,mBAAmB;aAC3B,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC;QAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,kBAAkB;aAC1B,CAAC;QACJ,CAAC;QAED,sDAAsD;QACtD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC/D,OAAO,aAAa,CAClB,GAAG,EACH,UAAU,EACV,WAAW,CAAC,UAAU,EACtB,gBAAgB,IAAI,kBAAkB,CACvC,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEvC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;IACrF,CAAC;IAED,yCAAyC;IACzC,OAAO;QACL,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,sBAAsB;KAC9B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAgB,EAAE,QAAiB;IAC3D,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,EAAY,EACZ,MAAc,EACd,QAA2B,EAC3B,OAAoB;IAEpB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,kCAAkC;QAClC,MAAM,YAAY,GAAG,GAAG,OAAO,CAAC,YAAY,SAAS,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,MAAM,CAAC;QAC7F,yDAAyD;QACzD,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC;QAE5C,kEAAkE;QAClE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE;aACxB,MAAM,EAAE;aACR,IAAI,CAAC,aAAa,CAAC;aACnB,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,EACjC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAChC,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CACvC,CACF;aACA,KAAK,CAAC,CAAC,CAAC,CAAC;QAEZ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,QAAQ,EAAE,UAAU,IAAI,GAAG,CAAC;QAEhD,6EAA6E;QAC7E,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAE3D,iEAAiE;QACjE,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;gBACpC,EAAE,EAAE,MAAM,EAAE;gBACZ,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,QAAQ,EAAE,YAAY;gBACtB,eAAe,EAAE,aAAa;gBAC9B,cAAc,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,IAAI,IAAI;gBAC3C,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,IAAI;gBACpC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;gBACzD,YAAY,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI;gBAC9B,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;gBAC9B,WAAW,EAAE,UAAU;gBACvB,cAAc,EAAE,GAAG,CAAC,MAAM,IAAI,IAAI;gBAClC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;gBAClE,UAAU,EAAE,WAAW;aACxB,CAAC,CAAC,kBAAkB,CAAC;gBACpB,MAAM,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC;gBAC1E,GAAG,EAAE;oBACH,QAAQ,EAAE,YAAY;oBACtB,eAAe,EAAE,aAAa;oBAC9B,cAAc,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,IAAI,IAAI;oBAC3C,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,IAAI;oBACpC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;oBACzD,YAAY,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI;oBAC9B,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;oBAC9B,WAAW,EAAE,UAAU;oBACvB,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;iBACnE;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5J,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Git SSH sync strategy
3
+ * Clones git repositories using SSH keys (Node.js only, not available in Cloudflare Workers)
4
+ *
5
+ * This module uses dynamic imports for Node.js-specific modules to avoid bundling issues
6
+ */
7
+ import type { SyncResult } from '../types';
8
+ /**
9
+ * Clone git repository using SSH key
10
+ * @param url - Git repository URL (SSH format: git@github.com:owner/repo.git or HTTPS)
11
+ * @param privateKey - SSH private key
12
+ * @param passphrase - Optional passphrase for encrypted private key
13
+ * @param composerJsonPath - Glob pattern for composer.json files
14
+ * @returns Sync result with packages
15
+ */
16
+ export declare function syncViaGitSsh(url: string, privateKey: string, passphrase?: string, composerJsonPath?: string): Promise<SyncResult>;
17
+ //# sourceMappingURL=git-ssh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-ssh.d.ts","sourceRoot":"","sources":["../../../src/sync/strategies/git-ssh.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,UAAU,CAAC;AAO5D;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,gBAAgB,GAAE,MAA2B,GAC5C,OAAO,CAAC,UAAU,CAAC,CA8ErB"}
@@ -0,0 +1,325 @@
1
+ /*
2
+ * PACKAGE.broker
3
+ * Copyright (C) 2025 Łukasz Bajsarowicz
4
+ * Licensed under AGPL-3.0
5
+ */
6
+ import { getLogger } from '../../utils/logger';
7
+ import micromatch from 'micromatch';
8
+ import semver from 'semver';
9
+ const logger = getLogger();
10
+ /**
11
+ * Clone git repository using SSH key
12
+ * @param url - Git repository URL (SSH format: git@github.com:owner/repo.git or HTTPS)
13
+ * @param privateKey - SSH private key
14
+ * @param passphrase - Optional passphrase for encrypted private key
15
+ * @param composerJsonPath - Glob pattern for composer.json files
16
+ * @returns Sync result with packages
17
+ */
18
+ export async function syncViaGitSsh(url, privateKey, passphrase, composerJsonPath = '**/composer.json') {
19
+ // Dynamically import Node.js modules (only available in Node.js environment)
20
+ const { writeFile, mkdir, rm, chmod } = await import('fs/promises');
21
+ const { join } = await import('path');
22
+ const { tmpdir } = await import('os');
23
+ const tempDir = join(tmpdir(), `package-broker-${Date.now()}-${Math.random().toString(36).slice(0, 7)}`);
24
+ const keyPath = join(tempDir, 'ssh_key');
25
+ let repoPath = null;
26
+ try {
27
+ // Create temporary directory
28
+ await mkdir(tempDir, { recursive: true });
29
+ // Write private key to temporary file
30
+ await writeFile(keyPath, privateKey, { mode: 0o600 });
31
+ await chmod(keyPath, 0o600);
32
+ // Validate sshpass availability when passphrase is provided
33
+ if (passphrase) {
34
+ const { execSync } = await import('child_process');
35
+ try {
36
+ execSync('which sshpass', { stdio: 'ignore' });
37
+ }
38
+ catch {
39
+ throw new Error('sshpass is required for passphrase-protected SSH keys but is not installed');
40
+ }
41
+ }
42
+ // Convert HTTPS URL to SSH format if needed
43
+ const sshUrl = convertToSshUrl(url);
44
+ repoPath = join(tempDir, 'repo');
45
+ // Clone repository using SSH
46
+ await cloneRepository(sshUrl, repoPath, keyPath, passphrase);
47
+ // Find and parse composer.json files
48
+ const packages = await findAndParseComposerFiles(repoPath, composerJsonPath);
49
+ if (packages.length === 0) {
50
+ return {
51
+ success: false,
52
+ packages: [],
53
+ error: 'no_composer_json_found',
54
+ };
55
+ }
56
+ logger.info('SSH git sync completed', {
57
+ url,
58
+ packageCount: packages.length,
59
+ });
60
+ return {
61
+ success: true,
62
+ packages,
63
+ strategy: 'git_ssh',
64
+ };
65
+ }
66
+ catch (error) {
67
+ logger.error('SSH git sync failed', { url, error: error instanceof Error ? error.message : String(error) });
68
+ return {
69
+ success: false,
70
+ packages: [],
71
+ error: error instanceof Error ? error.message : 'ssh_sync_failed',
72
+ };
73
+ }
74
+ finally {
75
+ // Clean up temporary files
76
+ try {
77
+ if (repoPath) {
78
+ await rm(repoPath, { recursive: true, force: true });
79
+ }
80
+ if (keyPath) {
81
+ await rm(keyPath, { force: true });
82
+ }
83
+ await rm(tempDir, { recursive: true, force: true });
84
+ }
85
+ catch (cleanupError) {
86
+ logger.warn('Failed to clean up temporary files', { tempDir, error: cleanupError instanceof Error ? cleanupError.message : String(cleanupError) });
87
+ }
88
+ }
89
+ }
90
+ /**
91
+ * Convert HTTPS URL to SSH format
92
+ * Example: https://github.com/owner/repo.git -> git@github.com:owner/repo.git
93
+ */
94
+ function convertToSshUrl(url) {
95
+ // If already SSH format, return as-is
96
+ if (url.startsWith('git@') || url.startsWith('ssh://')) {
97
+ return url;
98
+ }
99
+ // Convert HTTPS to SSH
100
+ const match = url.match(/https?:\/\/([^/]+)\/([^/]+)\/([^/]+?)(?:\.git)?\/?$/);
101
+ if (match) {
102
+ const [, host, owner, repo] = match;
103
+ return `git@${host}:${owner}/${repo}.git`;
104
+ }
105
+ // If conversion fails, return original URL (git clone will handle it)
106
+ return url;
107
+ }
108
+ /**
109
+ * Clone git repository using SSH key
110
+ */
111
+ /**
112
+ * Escape a string for use in shell command (basic escaping)
113
+ * Only escapes single quotes and wraps in single quotes
114
+ */
115
+ function escapeShellArg(arg) {
116
+ // Replace single quotes with '\'' (end quote, escaped quote, start quote)
117
+ return `'${arg.replace(/'/g, "'\\''")}'`;
118
+ }
119
+ async function cloneRepository(url, targetPath, keyPath, passphrase) {
120
+ const { spawn } = await import('child_process');
121
+ // Set up SSH command with key - properly escape keyPath
122
+ const escapedKeyPath = escapeShellArg(keyPath);
123
+ const sshCommand = `ssh -i ${escapedKeyPath} -o StrictHostKeyChecking=accept-new -o IdentitiesOnly=yes`;
124
+ const gitEnv = {
125
+ ...process.env,
126
+ GIT_SSH_COMMAND: passphrase
127
+ ? `sshpass -p ${escapeShellArg(passphrase)} ${sshCommand}`
128
+ : sshCommand,
129
+ };
130
+ // Clone repository
131
+ await new Promise((resolve, reject) => {
132
+ const gitProcess = spawn('git', ['clone', '--depth', '1', url, targetPath], {
133
+ env: gitEnv,
134
+ stdio: ['ignore', 'pipe', 'pipe'],
135
+ });
136
+ let stdout = '';
137
+ let stderr = '';
138
+ gitProcess.stdout?.on('data', (data) => {
139
+ stdout += data.toString();
140
+ });
141
+ gitProcess.stderr?.on('data', (data) => {
142
+ stderr += data.toString();
143
+ });
144
+ gitProcess.on('close', (code) => {
145
+ if (code === 0) {
146
+ resolve();
147
+ }
148
+ else {
149
+ reject(new Error(`Git clone failed: ${stderr || stdout || 'Unknown error'}`));
150
+ }
151
+ });
152
+ gitProcess.on('error', (error) => {
153
+ reject(new Error(`Failed to spawn git process: ${error.message}`));
154
+ });
155
+ });
156
+ // Fetch tags separately (shallow clone doesn't include them)
157
+ await new Promise((resolve) => {
158
+ const fetchTags = spawn('git', ['fetch', '--tags', '--depth', '1'], {
159
+ cwd: targetPath,
160
+ env: gitEnv,
161
+ stdio: ['ignore', 'pipe', 'pipe'],
162
+ });
163
+ fetchTags.on('close', (code) => {
164
+ if (code !== 0) {
165
+ logger.warn('Failed to fetch tags, versions may be limited', { url, code });
166
+ }
167
+ resolve();
168
+ });
169
+ fetchTags.on('error', () => resolve());
170
+ });
171
+ }
172
+ /**
173
+ * Recursively find files matching a name pattern
174
+ * Uses Node.js APIs instead of shell commands for security
175
+ */
176
+ async function findFilesRecursive(dirPath, fileName) {
177
+ const { readdir, stat } = await import('fs/promises');
178
+ const { join } = await import('path');
179
+ const files = [];
180
+ async function walkDir(currentPath) {
181
+ try {
182
+ const entries = await readdir(currentPath);
183
+ for (const entry of entries) {
184
+ const fullPath = join(currentPath, entry);
185
+ try {
186
+ const stats = await stat(fullPath);
187
+ if (stats.isDirectory()) {
188
+ await walkDir(fullPath);
189
+ }
190
+ else if (stats.isFile() && entry === fileName) {
191
+ files.push(fullPath);
192
+ }
193
+ }
194
+ catch {
195
+ // Skip files/dirs we can't access
196
+ continue;
197
+ }
198
+ }
199
+ }
200
+ catch {
201
+ // Skip directories we can't read
202
+ return;
203
+ }
204
+ }
205
+ await walkDir(dirPath);
206
+ return files;
207
+ }
208
+ /**
209
+ * Find and parse composer.json files from cloned repository
210
+ */
211
+ async function findAndParseComposerFiles(repoPath, pattern) {
212
+ try {
213
+ // Find all composer.json files using Node.js APIs (no shell commands)
214
+ const allFiles = await findFilesRecursive(repoPath, 'composer.json');
215
+ // Filter files by glob pattern
216
+ // Make paths relative to repoPath for pattern matching
217
+ const relativeFiles = allFiles.map((file) => {
218
+ const relative = file.replace(repoPath, '').replace(/^\//, '');
219
+ return relative;
220
+ });
221
+ const matchedFiles = micromatch(relativeFiles, pattern);
222
+ // Convert back to full paths
223
+ const { join } = await import('path');
224
+ const fullMatchedFiles = matchedFiles.map((file) => join(repoPath, file));
225
+ if (matchedFiles.length === 0) {
226
+ return [];
227
+ }
228
+ // Parse each composer.json file
229
+ const packages = [];
230
+ const { readFile } = await import('fs/promises');
231
+ for (const fullPath of fullMatchedFiles) {
232
+ try {
233
+ const content = await readFile(fullPath, 'utf-8');
234
+ const composerJson = JSON.parse(content);
235
+ if (composerJson.name) {
236
+ // Get version from git tags
237
+ const versions = await getVersionsFromTags(repoPath);
238
+ for (const version of versions) {
239
+ packages.push({
240
+ name: composerJson.name,
241
+ version,
242
+ description: composerJson.description,
243
+ license: composerJson.license,
244
+ type: composerJson.type,
245
+ homepage: composerJson.homepage,
246
+ require: composerJson.require,
247
+ 'require-dev': composerJson['require-dev'],
248
+ autoload: composerJson.autoload,
249
+ });
250
+ }
251
+ // If no versions found, add at least one entry
252
+ if (versions.length === 0) {
253
+ packages.push({
254
+ name: composerJson.name,
255
+ version: 'dev-main',
256
+ description: composerJson.description,
257
+ license: composerJson.license,
258
+ type: composerJson.type,
259
+ homepage: composerJson.homepage,
260
+ require: composerJson.require,
261
+ 'require-dev': composerJson['require-dev'],
262
+ autoload: composerJson.autoload,
263
+ });
264
+ }
265
+ }
266
+ }
267
+ catch (error) {
268
+ logger.warn('Failed to parse composer.json', { file: fullPath, error: error instanceof Error ? error.message : String(error) });
269
+ }
270
+ }
271
+ return packages;
272
+ }
273
+ catch (error) {
274
+ logger.error('Failed to find composer.json files', { repoPath, pattern, error: error instanceof Error ? error.message : String(error) });
275
+ return [];
276
+ }
277
+ }
278
+ /**
279
+ * Get versions from git tags
280
+ */
281
+ async function getVersionsFromTags(repoPath) {
282
+ const { spawn } = await import('child_process');
283
+ try {
284
+ // Use spawn with cwd option instead of shell cd command for security
285
+ return new Promise((resolve) => {
286
+ const gitProcess = spawn('git', ['tag', '-l'], {
287
+ cwd: repoPath, // Use cwd option instead of shell cd
288
+ stdio: ['ignore', 'pipe', 'pipe'],
289
+ });
290
+ let stdout = '';
291
+ let stderr = '';
292
+ gitProcess.stdout?.on('data', (data) => {
293
+ stdout += data.toString();
294
+ });
295
+ gitProcess.stderr?.on('data', (data) => {
296
+ stderr += data.toString();
297
+ });
298
+ gitProcess.on('close', (code) => {
299
+ if (code === 0) {
300
+ const tags = stdout.trim().split('\n').filter(Boolean);
301
+ // Filter and sort valid semver tags
302
+ const versions = tags
303
+ .map((tag) => tag.replace(/^v/, '')) // Remove 'v' prefix
304
+ .filter((tag) => semver.valid(tag))
305
+ .sort((a, b) => semver.rcompare(a, b))
306
+ .slice(0, 50); // Limit to 50 versions
307
+ resolve(versions);
308
+ }
309
+ else {
310
+ logger.warn('Failed to get git tags', { repoPath, stderr });
311
+ resolve([]);
312
+ }
313
+ });
314
+ gitProcess.on('error', (error) => {
315
+ logger.warn('Failed to spawn git tag process', { repoPath, error: error instanceof Error ? error.message : String(error) });
316
+ resolve([]);
317
+ });
318
+ });
319
+ }
320
+ catch (error) {
321
+ logger.warn('Failed to get git tags', { repoPath, error: error instanceof Error ? error.message : String(error) });
322
+ return [];
323
+ }
324
+ }
325
+ //# sourceMappingURL=git-ssh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-ssh.js","sourceRoot":"","sources":["../../../src/sync/strategies/git-ssh.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
1
  import type { Context } from 'hono';
2
2
  /**
3
- * Helper type for OpenAPI route handlers
4
- * When a route is registered with app.openapi(), c.req.valid() becomes available
5
- * This type assertion allows TypeScript to recognize it
3
+ * Helper type for OpenAPI route handlers.
4
+ * When a route is registered with app.openapi(), c.req.valid() becomes available.
6
5
  */
7
6
  export type OpenAPIContext<TEnv extends Record<string, any> = any, TJson = any, TParam = Record<string, string>, TQuery = Record<string, string>> = Context<TEnv> & {
8
7
  req: Context<TEnv>['req'] & {
@@ -14,4 +13,4 @@ export type OpenAPIContext<TEnv extends Record<string, any> = any, TJson = any,
14
13
  };
15
14
  };
16
15
  };
17
- //# sourceMappingURL=types.d.ts.map
16
+ //# sourceMappingURL=openapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/types/openapi.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC;;;GAGG;AACH,MAAM,MAAM,cAAc,CACxB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EACtC,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAC7B,OAAO,CAAC,IAAI,CAAC,GAAG;IAClB,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG;QAC1B,KAAK,EAAE;YACL,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;YACrB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC;YACvB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC;YACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;SACpB,CAAC;KACH,CAAC;CACH,CAAC"}
@@ -4,4 +4,4 @@
4
4
  * Licensed under AGPL-3.0
5
5
  */
6
6
  export {};
7
- //# sourceMappingURL=types.js.map
7
+ //# sourceMappingURL=openapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../src/types/openapi.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,7 @@
1
+ export interface BackgroundContext {
2
+ executionCtx: {
3
+ waitUntil(promise: Promise<unknown>): void;
4
+ };
5
+ }
6
+ export declare function runInBackground(c: BackgroundContext, promise: Promise<unknown>): void;
7
+ //# sourceMappingURL=background.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../src/utils/background.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE;QACZ,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;KAC5C,CAAC;CACH;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAQrF"}
@@ -0,0 +1,11 @@
1
+ export function runInBackground(c, promise) {
2
+ try {
3
+ c.executionCtx.waitUntil(promise);
4
+ }
5
+ catch {
6
+ promise.catch(() => {
7
+ // Ignore background task failures in runtimes without waitUntil.
8
+ });
9
+ }
10
+ }
11
+ //# sourceMappingURL=background.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background.js","sourceRoot":"","sources":["../../src/utils/background.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,eAAe,CAAC,CAAoB,EAAE,OAAyB;IAC7E,IAAI,CAAC;QACH,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;YACjB,iEAAiE;QACnE,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Environment detection utilities
3
+ * Used to determine if we're running in Cloudflare Workers or Node.js
4
+ */
5
+ /**
6
+ * Check if we're running in Cloudflare Workers environment
7
+ * Cloudflare Workers don't have Node.js process object
8
+ */
9
+ export declare function isCloudflareWorkers(): boolean;
10
+ /**
11
+ * Check if SSH key support is available
12
+ * SSH requires child_process which is only available in Node.js
13
+ */
14
+ export declare function isSshSupported(): boolean;
15
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/utils/environment.ts"],"names":[],"mappings":"AAMA;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAG7C;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAexC"}
@@ -0,0 +1,38 @@
1
+ /*
2
+ * PACKAGE.broker
3
+ * Copyright (C) 2025 Łukasz Bajsarowicz
4
+ * Licensed under AGPL-3.0
5
+ */
6
+ /**
7
+ * Environment detection utilities
8
+ * Used to determine if we're running in Cloudflare Workers or Node.js
9
+ */
10
+ /**
11
+ * Check if we're running in Cloudflare Workers environment
12
+ * Cloudflare Workers don't have Node.js process object
13
+ */
14
+ export function isCloudflareWorkers() {
15
+ // In Cloudflare Workers, process is undefined or doesn't have versions.node
16
+ return typeof process === 'undefined' || !process.versions?.node;
17
+ }
18
+ /**
19
+ * Check if SSH key support is available
20
+ * SSH requires child_process which is only available in Node.js
21
+ */
22
+ export function isSshSupported() {
23
+ if (isCloudflareWorkers()) {
24
+ return false;
25
+ }
26
+ // In Node.js, process.versions.node exists and child_process is available
27
+ // We can't actually import child_process here (would break Workers bundle),
28
+ // so we check for Node.js environment indicators
29
+ try {
30
+ return typeof process !== 'undefined' &&
31
+ typeof process.versions !== 'undefined' &&
32
+ typeof process.versions.node !== 'undefined';
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ }
38
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/utils/environment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,4EAA4E;IAC5E,OAAO,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,mBAAmB,EAAE,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0EAA0E;IAC1E,6EAA6E;IAC7E,iDAAiD;IACjD,IAAI,CAAC;QACH,OAAO,OAAO,OAAO,KAAK,WAAW;YAC9B,OAAO,OAAO,CAAC,QAAQ,KAAK,WAAW;YACvC,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -2,4 +2,5 @@ export * from './encryption';
2
2
  export * from './download';
3
3
  export * from './logger';
4
4
  export * from './analytics';
5
+ export * from './environment';
5
6
  //# sourceMappingURL=index.d.ts.map