@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 @@
1
+ {"version":3,"file":"packages.js","sourceRoot":"","sources":["../../../src/routes/api/packages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { Context } from 'hono';
2
+ import type { DatabasePort } from '../../ports';
3
+ export interface RepositoriesRouteEnv {
4
+ Bindings: {
5
+ DB: D1Database;
6
+ KV: KVNamespace;
7
+ QUEUE?: Queue;
8
+ ENCRYPTION_KEY: string;
9
+ };
10
+ Variables: {
11
+ database: DatabasePort;
12
+ storage: any;
13
+ requestId?: string;
14
+ session?: {
15
+ userId: string;
16
+ email: string;
17
+ };
18
+ };
19
+ }
20
+ /**
21
+ * GET /api/repositories
22
+ * List all repositories
23
+ */
24
+ export declare function listRepositories(c: Context<RepositoriesRouteEnv>): Promise<Response>;
25
+ /**
26
+ * POST /api/repositories
27
+ * Create a new repository
28
+ */
29
+ export declare function createRepository(c: Context<RepositoriesRouteEnv>): Promise<Response>;
30
+ /**
31
+ * GET /api/repositories/:id
32
+ * Get a single repository
33
+ */
34
+ export declare function getRepository(c: Context<RepositoriesRouteEnv>): Promise<Response>;
35
+ /**
36
+ * DELETE /api/repositories/:id
37
+ * Delete a repository (cascade deletes artifacts and packages)
38
+ */
39
+ export declare function deleteRepository(c: Context<RepositoriesRouteEnv>): Promise<Response>;
40
+ /**
41
+ * PUT /api/repositories/:id
42
+ * Update a repository
43
+ */
44
+ export declare function updateRepository(c: Context<RepositoriesRouteEnv>): Promise<Response>;
45
+ /**
46
+ * GET /api/repositories/:id/verify
47
+ * Verify repository connection (validates credentials only)
48
+ */
49
+ export declare function verifyRepository(c: Context<RepositoriesRouteEnv>): Promise<Response>;
50
+ /**
51
+ * POST /api/repositories/:id/sync
52
+ * Test repository connection (repurposed from sync - only validates credentials)
53
+ * Packages are loaded lazily on first request
54
+ */
55
+ export declare function syncRepositoryNow(c: Context<RepositoriesRouteEnv>): Promise<Response>;
56
+ //# sourceMappingURL=repositories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositories.d.ts","sourceRoot":"","sources":["../../../src/routes/api/repositories.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAUhD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU,CAAC;QACf,EAAE,EAAE,WAAW,CAAC;QAChB,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,EAAE;QACT,QAAQ,EAAE,YAAY,CAAC;QACvB,OAAO,EAAE,GAAG,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;KAC7C,CAAC;CACH;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmB1F;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoD1F;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsBvF;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CA8B1F;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkF1F;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiB1F;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4D3F"}
@@ -0,0 +1,317 @@
1
+ /*
2
+ * PACKAGE.broker
3
+ * Copyright (C) 2025 Łukasz Bajsarowicz
4
+ * Licensed under AGPL-3.0
5
+ */
6
+ import { repositories } from '../../db/schema';
7
+ import { eq } from 'drizzle-orm';
8
+ import { createRepositorySchema, updateRepositorySchema } from '@package-broker/shared';
9
+ import { encryptCredentials } from '../../utils/encryption';
10
+ import { nanoid } from 'nanoid';
11
+ import { buildAuthHeaders, COMPOSER_USER_AGENT } from '@package-broker/shared';
12
+ import { decryptCredentials } from '../../utils/encryption';
13
+ import { getAnalytics } from '../../utils/analytics';
14
+ /**
15
+ * GET /api/repositories
16
+ * List all repositories
17
+ */
18
+ export async function listRepositories(c) {
19
+ const db = c.get('database');
20
+ const allRepos = await db.select().from(repositories).orderBy(repositories.created_at);
21
+ // Don't return encrypted credentials
22
+ const repos = allRepos.map((repo) => ({
23
+ id: repo.id,
24
+ url: repo.url,
25
+ vcs_type: repo.vcs_type,
26
+ credential_type: repo.credential_type,
27
+ composer_json_path: repo.composer_json_path,
28
+ package_filter: repo.package_filter,
29
+ status: repo.status,
30
+ error_message: repo.error_message,
31
+ last_synced_at: repo.last_synced_at,
32
+ created_at: repo.created_at,
33
+ }));
34
+ return c.json(repos);
35
+ }
36
+ /**
37
+ * POST /api/repositories
38
+ * Create a new repository
39
+ */
40
+ export async function createRepository(c) {
41
+ const body = await c.req.json();
42
+ const validated = createRepositorySchema.parse(body);
43
+ // Encrypt credentials
44
+ const encryptedCredentials = await encryptCredentials(JSON.stringify(validated.auth_credentials), c.env.ENCRYPTION_KEY);
45
+ const db = c.get('database');
46
+ const repoId = nanoid();
47
+ await db.insert(repositories).values({
48
+ id: repoId,
49
+ url: validated.url,
50
+ vcs_type: validated.vcs_type,
51
+ credential_type: validated.credential_type,
52
+ auth_credentials: encryptedCredentials,
53
+ composer_json_path: validated.composer_json_path || null,
54
+ package_filter: validated.package_filter || null,
55
+ status: 'pending', // Will be validated on first sync/test
56
+ created_at: Math.floor(Date.now() / 1000),
57
+ });
58
+ const [repo] = await db.select().from(repositories).where(eq(repositories.id, repoId)).limit(1);
59
+ // Track repository creation
60
+ const analytics = getAnalytics();
61
+ const requestId = c.get('requestId');
62
+ const session = c.get('session');
63
+ analytics.trackRepositoryCreated({
64
+ requestId,
65
+ repoId,
66
+ userId: session?.userId,
67
+ });
68
+ return c.json({
69
+ id: repo.id,
70
+ url: repo.url,
71
+ vcs_type: repo.vcs_type,
72
+ credential_type: repo.credential_type,
73
+ composer_json_path: repo.composer_json_path,
74
+ package_filter: repo.package_filter,
75
+ status: repo.status,
76
+ error_message: repo.error_message,
77
+ last_synced_at: repo.last_synced_at,
78
+ created_at: repo.created_at,
79
+ }, 201);
80
+ }
81
+ /**
82
+ * GET /api/repositories/:id
83
+ * Get a single repository
84
+ */
85
+ export async function getRepository(c) {
86
+ const id = c.req.param('id');
87
+ const db = c.get('database');
88
+ const [repo] = await db.select().from(repositories).where(eq(repositories.id, id)).limit(1);
89
+ if (!repo) {
90
+ return c.json({ error: 'Not Found', message: 'Repository not found' }, 404);
91
+ }
92
+ return c.json({
93
+ id: repo.id,
94
+ url: repo.url,
95
+ vcs_type: repo.vcs_type,
96
+ credential_type: repo.credential_type,
97
+ composer_json_path: repo.composer_json_path,
98
+ package_filter: repo.package_filter,
99
+ status: repo.status,
100
+ error_message: repo.error_message,
101
+ last_synced_at: repo.last_synced_at,
102
+ created_at: repo.created_at,
103
+ });
104
+ }
105
+ /**
106
+ * DELETE /api/repositories/:id
107
+ * Delete a repository (cascade deletes artifacts and packages)
108
+ */
109
+ export async function deleteRepository(c) {
110
+ const id = c.req.param('id');
111
+ const db = c.get('database');
112
+ // Prevent deletion of Packagist repository
113
+ if (id === 'packagist') {
114
+ return c.json({ error: 'Forbidden', message: 'The Public Packagist repository cannot be deleted' }, 403);
115
+ }
116
+ // Check if exists
117
+ const [repo] = await db.select().from(repositories).where(eq(repositories.id, id)).limit(1);
118
+ if (!repo) {
119
+ return c.json({ error: 'Not Found', message: 'Repository not found' }, 404);
120
+ }
121
+ // Cascade delete will handle artifacts and packages
122
+ await db.delete(repositories).where(eq(repositories.id, id));
123
+ // Track repository deletion
124
+ const analytics = getAnalytics();
125
+ const requestId = c.get('requestId');
126
+ const session = c.get('session');
127
+ analytics.trackRepositoryDeleted({
128
+ requestId,
129
+ repoId: id,
130
+ userId: session?.userId,
131
+ });
132
+ return c.json({ message: 'Repository deleted' });
133
+ }
134
+ /**
135
+ * PUT /api/repositories/:id
136
+ * Update a repository
137
+ */
138
+ export async function updateRepository(c) {
139
+ const id = c.req.param('id');
140
+ const body = await c.req.json();
141
+ const validated = updateRepositorySchema.parse(body);
142
+ // Prevent editing of Packagist repository
143
+ if (id === 'packagist') {
144
+ return c.json({ error: 'Forbidden', message: 'The Public Packagist repository cannot be edited' }, 403);
145
+ }
146
+ const db = c.get('database');
147
+ // Check if exists
148
+ const [existing] = await db.select().from(repositories).where(eq(repositories.id, id)).limit(1);
149
+ if (!existing) {
150
+ return c.json({ error: 'Not Found', message: 'Repository not found' }, 404);
151
+ }
152
+ // Build update object with only provided fields
153
+ const updateData = {};
154
+ if (validated.url !== undefined) {
155
+ updateData.url = validated.url;
156
+ }
157
+ if (validated.vcs_type !== undefined) {
158
+ updateData.vcs_type = validated.vcs_type;
159
+ }
160
+ if (validated.credential_type !== undefined) {
161
+ updateData.credential_type = validated.credential_type;
162
+ }
163
+ if (validated.auth_credentials !== undefined) {
164
+ // Encrypt new credentials
165
+ updateData.auth_credentials = await encryptCredentials(JSON.stringify(validated.auth_credentials), c.env.ENCRYPTION_KEY);
166
+ }
167
+ if (validated.composer_json_path !== undefined) {
168
+ updateData.composer_json_path = validated.composer_json_path || null;
169
+ }
170
+ if (validated.package_filter !== undefined) {
171
+ updateData.package_filter = validated.package_filter || null;
172
+ }
173
+ // Only update if there are changes
174
+ if (Object.keys(updateData).length > 0) {
175
+ await db.update(repositories).set(updateData).where(eq(repositories.id, id));
176
+ }
177
+ // Fetch updated repository
178
+ const [repo] = await db.select().from(repositories).where(eq(repositories.id, id)).limit(1);
179
+ // Track repository update
180
+ const analytics = getAnalytics();
181
+ const requestId = c.get('requestId');
182
+ const session = c.get('session');
183
+ analytics.trackRepositoryUpdated({
184
+ requestId,
185
+ repoId: id,
186
+ userId: session?.userId,
187
+ });
188
+ return c.json({
189
+ id: repo.id,
190
+ url: repo.url,
191
+ vcs_type: repo.vcs_type,
192
+ credential_type: repo.credential_type,
193
+ composer_json_path: repo.composer_json_path,
194
+ package_filter: repo.package_filter,
195
+ status: repo.status,
196
+ error_message: repo.error_message,
197
+ last_synced_at: repo.last_synced_at,
198
+ created_at: repo.created_at,
199
+ });
200
+ }
201
+ /**
202
+ * GET /api/repositories/:id/verify
203
+ * Verify repository connection (validates credentials only)
204
+ */
205
+ export async function verifyRepository(c) {
206
+ const id = c.req.param('id');
207
+ const db = c.get('database');
208
+ const [repo] = await db.select().from(repositories).where(eq(repositories.id, id)).limit(1);
209
+ if (!repo) {
210
+ return c.json({ error: 'Not Found', message: 'Repository not found' }, 404);
211
+ }
212
+ // Validate credentials by attempting to fetch packages.json
213
+ const result = await validateRepositoryCredentials(repo, c.env.ENCRYPTION_KEY);
214
+ return c.json({
215
+ verified: result.success,
216
+ message: result.success ? 'Connection verified successfully' : result.error || 'Verification failed',
217
+ });
218
+ }
219
+ /**
220
+ * POST /api/repositories/:id/sync
221
+ * Test repository connection (repurposed from sync - only validates credentials)
222
+ * Packages are loaded lazily on first request
223
+ */
224
+ export async function syncRepositoryNow(c) {
225
+ const id = c.req.param('id');
226
+ const db = c.get('database');
227
+ // Prevent testing of Packagist repository
228
+ if (id === 'packagist') {
229
+ return c.json({ error: 'Forbidden', message: 'The Public Packagist repository cannot be tested' }, 403);
230
+ }
231
+ const [repo] = await db.select().from(repositories).where(eq(repositories.id, id)).limit(1);
232
+ if (!repo) {
233
+ return c.json({ error: 'Not Found', message: 'Repository not found' }, 404);
234
+ }
235
+ // Update status to syncing (for UI feedback)
236
+ await db
237
+ .update(repositories)
238
+ .set({ status: 'syncing' })
239
+ .where(eq(repositories.id, id));
240
+ // Validate credentials only (no full package sync)
241
+ const result = await validateRepositoryCredentials(repo, c.env.ENCRYPTION_KEY);
242
+ if (!result.success) {
243
+ // Update status to error
244
+ await db
245
+ .update(repositories)
246
+ .set({
247
+ status: 'error',
248
+ error_message: result.error || 'Connection test failed',
249
+ last_synced_at: Math.floor(Date.now() / 1000),
250
+ })
251
+ .where(eq(repositories.id, id));
252
+ return c.json({
253
+ message: 'Connection test failed',
254
+ status: 'error',
255
+ error: result.error,
256
+ }, 400);
257
+ }
258
+ // Update status to active
259
+ await db
260
+ .update(repositories)
261
+ .set({
262
+ status: 'active',
263
+ error_message: null,
264
+ last_synced_at: Math.floor(Date.now() / 1000),
265
+ })
266
+ .where(eq(repositories.id, id));
267
+ // Clear any cached packages.json to force refresh
268
+ await c.env.KV.delete('packages:all:packages.json');
269
+ await c.env.KV.delete('packages:all:metadata');
270
+ return c.json({
271
+ message: 'Connection verified successfully. Packages will be loaded on-demand when requested.',
272
+ status: 'active',
273
+ });
274
+ }
275
+ /**
276
+ * Validate repository credentials by attempting to fetch packages.json
277
+ */
278
+ async function validateRepositoryCredentials(repo, encryptionKey) {
279
+ try {
280
+ // Decrypt credentials
281
+ const credentialsJson = await decryptCredentials(repo.auth_credentials, encryptionKey);
282
+ const credentials = JSON.parse(credentialsJson);
283
+ // Build auth headers
284
+ const authHeaders = buildAuthHeaders(repo.credential_type, credentials);
285
+ // Normalize URL
286
+ const baseUrl = repo.url.replace(/\/$/, '');
287
+ const packagesUrl = `${baseUrl}/packages.json`;
288
+ // Attempt to fetch packages.json
289
+ const response = await fetch(packagesUrl, {
290
+ headers: {
291
+ ...authHeaders,
292
+ Accept: 'application/json',
293
+ 'User-Agent': COMPOSER_USER_AGENT,
294
+ },
295
+ });
296
+ if (response.status === 401 || response.status === 403) {
297
+ return { success: false, error: 'Authentication failed. Please check your credentials.' };
298
+ }
299
+ if (response.status === 404) {
300
+ return { success: false, error: 'packages.json not found at repository URL.' };
301
+ }
302
+ if (!response.ok) {
303
+ return { success: false, error: `HTTP ${response.status}: ${response.statusText}` };
304
+ }
305
+ // Try to parse the response to ensure it's valid JSON
306
+ await response.json();
307
+ return { success: true };
308
+ }
309
+ catch (error) {
310
+ console.error('Repository validation error:', error);
311
+ return {
312
+ success: false,
313
+ error: error instanceof Error ? error.message : 'Unknown error during validation',
314
+ };
315
+ }
316
+ }
317
+ //# sourceMappingURL=repositories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositories.js","sourceRoot":"","sources":["../../../src/routes/api/repositories.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { Context } from 'hono';
2
+ export interface SettingsRouteEnv {
3
+ Bindings: {
4
+ KV?: KVNamespace;
5
+ };
6
+ }
7
+ export declare const PACKAGE_CACHING_KEY = "settings:package_caching_enabled";
8
+ /**
9
+ * GET /api/settings
10
+ * Get all settings including KV availability
11
+ */
12
+ export declare function getSettings(c: Context<SettingsRouteEnv>): Promise<Response>;
13
+ /**
14
+ * PUT /api/settings/packagist-mirroring
15
+ * Enable or disable public Packagist mirroring
16
+ */
17
+ export declare function updatePackagistMirroring(c: Context<SettingsRouteEnv>): Promise<Response>;
18
+ /**
19
+ * Check if Packagist mirroring is enabled
20
+ * Used by the p2 route to determine whether to proxy to Packagist
21
+ */
22
+ export declare function isPackagistMirroringEnabled(kv: KVNamespace | undefined): Promise<boolean>;
23
+ /**
24
+ * Check if package caching is enabled
25
+ * Used to optionally disable KV caching for packages (useful when hitting rate limits)
26
+ */
27
+ export declare function isPackageCachingEnabled(kv: KVNamespace | undefined): Promise<boolean>;
28
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/routes/api/settings.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE;QACR,EAAE,CAAC,EAAE,WAAW,CAAC;KAClB,CAAC;CACH;AAKD,eAAO,MAAM,mBAAmB,qCAA8C,CAAC;AAS/E;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAcjF;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAsBnB;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,EAAE,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/F;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAO3F"}
@@ -0,0 +1,81 @@
1
+ /*
2
+ * PACKAGE.broker
3
+ * Copyright (C) 2025 Łukasz Bajsarowicz
4
+ * Licensed under AGPL-3.0
5
+ */
6
+ // KV keys for settings
7
+ const SETTINGS_PREFIX = 'settings:';
8
+ const PACKAGIST_MIRRORING_KEY = `${SETTINGS_PREFIX}packagist_mirroring_enabled`;
9
+ export const PACKAGE_CACHING_KEY = `${SETTINGS_PREFIX}package_caching_enabled`;
10
+ /**
11
+ * Check if KV is available and operational
12
+ */
13
+ function isKvAvailable(kv) {
14
+ return kv !== undefined && kv !== null;
15
+ }
16
+ /**
17
+ * GET /api/settings
18
+ * Get all settings including KV availability
19
+ */
20
+ export async function getSettings(c) {
21
+ const kvAvailable = isKvAvailable(c.env.KV);
22
+ const packagistMirroringEnabled = kvAvailable && c.env.KV
23
+ ? await c.env.KV.get(PACKAGIST_MIRRORING_KEY)
24
+ : null;
25
+ const packageCachingEnabled = kvAvailable && c.env.KV
26
+ ? await c.env.KV.get(PACKAGE_CACHING_KEY)
27
+ : null;
28
+ return c.json({
29
+ kv_available: kvAvailable,
30
+ packagist_mirroring_enabled: packagistMirroringEnabled === 'true',
31
+ package_caching_enabled: packageCachingEnabled !== 'false', // Default to true if KV available
32
+ });
33
+ }
34
+ /**
35
+ * PUT /api/settings/packagist-mirroring
36
+ * Enable or disable public Packagist mirroring
37
+ */
38
+ export async function updatePackagistMirroring(c) {
39
+ const body = await c.req.json();
40
+ if (typeof body.enabled !== 'boolean') {
41
+ return c.json({ error: 'Bad Request', message: 'enabled must be a boolean' }, 400);
42
+ }
43
+ if (!isKvAvailable(c.env.KV) || !c.env.KV) {
44
+ return c.json({
45
+ error: 'Service Unavailable',
46
+ message: 'KV namespace is required for this setting. Please configure KV in your wrangler.toml.'
47
+ }, 503);
48
+ }
49
+ await c.env.KV.put(PACKAGIST_MIRRORING_KEY, String(body.enabled));
50
+ return c.json({
51
+ packagist_mirroring_enabled: body.enabled,
52
+ message: body.enabled
53
+ ? 'Public Packagist mirroring enabled'
54
+ : 'Public Packagist mirroring disabled',
55
+ });
56
+ }
57
+ /**
58
+ * Check if Packagist mirroring is enabled
59
+ * Used by the p2 route to determine whether to proxy to Packagist
60
+ */
61
+ export async function isPackagistMirroringEnabled(kv) {
62
+ if (!isKvAvailable(kv) || !kv) {
63
+ return false; // Default to false if KV unavailable
64
+ }
65
+ const value = await kv.get(PACKAGIST_MIRRORING_KEY);
66
+ // Default to true if not set (backwards compatible)
67
+ return value === null || value === 'true';
68
+ }
69
+ /**
70
+ * Check if package caching is enabled
71
+ * Used to optionally disable KV caching for packages (useful when hitting rate limits)
72
+ */
73
+ export async function isPackageCachingEnabled(kv) {
74
+ if (!isKvAvailable(kv) || !kv) {
75
+ return false; // Default to false if KV unavailable
76
+ }
77
+ const value = await kv.get(PACKAGE_CACHING_KEY);
78
+ // Default to true if not set (backwards compatible)
79
+ return value !== 'false';
80
+ }
81
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/routes/api/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Context } from 'hono';
2
+ import type { DatabasePort } from '../../ports';
3
+ export interface StatsRouteEnv {
4
+ Bindings: {
5
+ DB: D1Database;
6
+ };
7
+ Variables: {
8
+ database: DatabasePort;
9
+ };
10
+ }
11
+ /**
12
+ * GET /api/stats
13
+ * Get dashboard statistics
14
+ */
15
+ export declare function getStats(c: Context<StatsRouteEnv>): Promise<Response>;
16
+ /**
17
+ * GET /packages/:name/:version/stats
18
+ * Get download stats for a specific package version
19
+ */
20
+ export declare function getPackageStats(c: Context<StatsRouteEnv>): Promise<Response>;
21
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/routes/api/stats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU,CAAC;KAChB,CAAC;IACF,SAAS,EAAE;QACT,QAAQ,EAAE,YAAY,CAAC;KACxB,CAAC;CACH;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CA2B3E;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwBlF"}
@@ -0,0 +1,52 @@
1
+ // Stats API route
2
+ import { repositories, artifacts, packages } from '../../db/schema';
3
+ import { eq, sql, and } from 'drizzle-orm';
4
+ /**
5
+ * GET /api/stats
6
+ * Get dashboard statistics
7
+ */
8
+ export async function getStats(c) {
9
+ const db = c.get('database');
10
+ // Active repositories count
11
+ const [activeReposResult] = await db
12
+ .select({ count: sql `count(*)` })
13
+ .from(repositories)
14
+ .where(eq(repositories.status, 'active'));
15
+ const activeRepos = activeReposResult?.count ?? 0;
16
+ // Total cached packages count
17
+ const [packagesResult] = await db.select({ count: sql `count(*)` }).from(packages);
18
+ const cachedPackages = packagesResult?.count ?? 0;
19
+ // Total downloads (sum of download_count from artifacts)
20
+ const [downloadsResult] = await db
21
+ .select({ total: sql `sum(${artifacts.download_count})` })
22
+ .from(artifacts);
23
+ const totalDownloads = downloadsResult?.total ?? 0;
24
+ return c.json({
25
+ active_repos: activeRepos,
26
+ cached_packages: cachedPackages,
27
+ total_downloads: totalDownloads,
28
+ });
29
+ }
30
+ /**
31
+ * GET /packages/:name/:version/stats
32
+ * Get download stats for a specific package version
33
+ */
34
+ export async function getPackageStats(c) {
35
+ const nameParam = c.req.param('name');
36
+ const version = c.req.param('version');
37
+ const name = decodeURIComponent(nameParam);
38
+ const db = c.get('database');
39
+ const [artifact] = await db
40
+ .select({
41
+ downloads: artifacts.download_count,
42
+ last_downloaded: artifacts.last_downloaded_at
43
+ })
44
+ .from(artifacts)
45
+ .where(and(eq(artifacts.package_name, name), eq(artifacts.version, version)))
46
+ .limit(1);
47
+ return c.json({
48
+ downloads: artifact?.downloads || 0,
49
+ last_downloaded: artifact?.last_downloaded || null
50
+ });
51
+ }
52
+ //# sourceMappingURL=stats.js.map