@package-broker/core 0.17.3 → 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 +12 -9
  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
@@ -1,51 +0,0 @@
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 { name: nameParam, version } = c.req.valid('param');
36
- const name = decodeURIComponent(nameParam);
37
- const db = c.get('database');
38
- const [artifact] = await db
39
- .select({
40
- downloads: artifacts.download_count,
41
- last_downloaded: artifacts.last_downloaded_at
42
- })
43
- .from(artifacts)
44
- .where(and(eq(artifacts.package_name, name), eq(artifacts.version, version)))
45
- .limit(1);
46
- return c.json({
47
- downloads: artifact?.downloads || 0,
48
- last_downloaded: artifact?.last_downloaded || null
49
- });
50
- }
51
- //# sourceMappingURL=stats.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/routes/api/stats.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAKlB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAW3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,CAAgC;IAC7D,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE7B,4BAA4B;IAC5B,MAAM,CAAC,iBAAiB,CAAC,GAAG,MAAM,EAAE;SACjC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAQ,UAAU,EAAE,CAAC;SACxC,IAAI,CAAC,YAAY,CAAC;SAClB,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5C,MAAM,WAAW,GAAG,iBAAiB,EAAE,KAAK,IAAI,CAAC,CAAC;IAElD,8BAA8B;IAC9B,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAQ,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1F,MAAM,cAAc,GAAG,cAAc,EAAE,KAAK,IAAI,CAAC,CAAC;IAElD,yDAAyD;IACzD,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,EAAE;SAC/B,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAQ,OAAO,SAAS,CAAC,cAAc,GAAG,EAAE,CAAC;SAChE,IAAI,CAAC,SAAS,CAAC,CAAC;IAEnB,MAAM,cAAc,GAAG,eAAe,EAAE,KAAK,IAAI,CAAC,CAAC;IAEnD,OAAO,CAAC,CAAC,IAAI,CAAC;QACZ,YAAY,EAAE,WAAW;QACzB,eAAe,EAAE,cAAc;QAC/B,eAAe,EAAE,cAAc;KAChC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,CAAgC;IACpE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE7B,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE;SACxB,MAAM,CAAC;QACN,SAAS,EAAE,SAAS,CAAC,cAAc;QACnC,eAAe,EAAE,SAAS,CAAC,kBAAkB;KAC9C,CAAC;SACD,IAAI,CAAC,SAAS,CAAC;SACf,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,EAChC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAC/B,CACF;SACA,KAAK,CAAC,CAAC,CAAC,CAAC;IAEZ,OAAO,CAAC,CAAC,IAAI,CAAC;QACZ,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,CAAC;QACnC,eAAe,EAAE,QAAQ,EAAE,eAAe,IAAI,IAAI;KACnD,CAAC,CAAC;AACL,CAAC"}
@@ -1,40 +0,0 @@
1
- import type { OpenAPIContext } from './types';
2
- import { createTokenSchema, updateTokenSchema } from '@package-broker/shared';
3
- import type { DatabasePort } from '../../ports';
4
- export interface TokensRouteEnv {
5
- Bindings: {
6
- DB: D1Database;
7
- KV?: KVNamespace;
8
- };
9
- Variables: {
10
- database: DatabasePort;
11
- requestId?: string;
12
- session?: {
13
- userId: string;
14
- email: string;
15
- };
16
- };
17
- }
18
- /**
19
- * GET /api/tokens
20
- * List all tokens (without exposing actual tokens)
21
- */
22
- export declare function listTokens(c: OpenAPIContext<TokensRouteEnv>): Promise<Response>;
23
- /**
24
- * POST /api/tokens
25
- * Create a new token
26
- * Returns the token ONCE - it cannot be retrieved again
27
- */
28
- export declare function createToken(c: OpenAPIContext<TokensRouteEnv, ReturnType<typeof createTokenSchema.parse>>): Promise<Response>;
29
- /**
30
- * DELETE /api/tokens/:id
31
- * Revoke a token
32
- */
33
- export declare function deleteToken(c: OpenAPIContext<TokensRouteEnv>): Promise<Response>;
34
- /**
35
- * PATCH /api/tokens/:id
36
- * Update token description and/or rate_limit_max
37
- * Permissions cannot be changed after creation
38
- */
39
- export declare function updateToken(c: OpenAPIContext<TokensRouteEnv, ReturnType<typeof updateTokenSchema.parse>>): Promise<Response>;
40
- //# sourceMappingURL=tokens.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../src/routes/api/tokens.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWhD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU,CAAC;QACf,EAAE,CAAC,EAAE,WAAW,CAAC;KAClB,CAAC;IACF,SAAS,EAAE;QACT,QAAQ,EAAE,YAAY,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;KAC7C,CAAC;CACH;AAmBD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAerF;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,cAAc,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwDlI;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwBtF;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,cAAc,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmElI"}
@@ -1,187 +0,0 @@
1
- /*
2
- * PACKAGE.broker
3
- * Copyright (C) 2025 Łukasz Bajsarowicz
4
- * Licensed under AGPL-3.0
5
- */
6
- import { tokens } from '../../db/schema';
7
- import { eq } from 'drizzle-orm';
8
- import { sha256 } from '@noble/hashes/sha2.js';
9
- import { bytesToHex } from '@noble/hashes/utils.js';
10
- import { nanoid, customAlphabet } from 'nanoid';
11
- import { getAnalytics } from '../../utils/analytics';
12
- // Generate high-entropy tokens (64 characters, URL-safe)
13
- const generateToken = customAlphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 64);
14
- /**
15
- * Hash token using SHA-256
16
- */
17
- function hashToken(token) {
18
- const encoder = new TextEncoder();
19
- const data = encoder.encode(token);
20
- const hash = sha256(data);
21
- return bytesToHex(hash);
22
- }
23
- /**
24
- * Check if KV is available for rate limiting
25
- */
26
- function isKvAvailableForRateLimiting(kv) {
27
- return kv !== undefined && kv !== null;
28
- }
29
- /**
30
- * GET /api/tokens
31
- * List all tokens (without exposing actual tokens)
32
- */
33
- export async function listTokens(c) {
34
- const db = c.get('database');
35
- const allTokens = await db.select().from(tokens).orderBy(tokens.created_at);
36
- const tokenList = allTokens.map((token) => ({
37
- id: token.id,
38
- description: token.description,
39
- permissions: token.permissions || 'readonly', // Fallback for existing tokens
40
- rate_limit_max: token.rate_limit_max,
41
- created_at: token.created_at,
42
- expires_at: token.expires_at,
43
- last_used_at: token.last_used_at,
44
- }));
45
- return c.json(tokenList);
46
- }
47
- /**
48
- * POST /api/tokens
49
- * Create a new token
50
- * Returns the token ONCE - it cannot be retrieved again
51
- */
52
- export async function createToken(c) {
53
- const validated = c.req.valid('json');
54
- // Validate: rate limiting requires KV
55
- if (validated.rate_limit_max !== null &&
56
- validated.rate_limit_max !== undefined &&
57
- validated.rate_limit_max > 0) {
58
- if (!isKvAvailableForRateLimiting(c.env.KV)) {
59
- return c.json({
60
- error: 'Bad Request',
61
- message: 'Rate limiting requires KV namespace to be configured. Please set rate_limit_max to null or 0, or configure KV namespace in your wrangler.toml.'
62
- }, 400);
63
- }
64
- }
65
- const db = c.get('database');
66
- const tokenId = nanoid();
67
- const token = generateToken(); // Generate high-entropy token
68
- const tokenHash = hashToken(token);
69
- const rateLimitMax = validated.rate_limit_max && validated.rate_limit_max > 0 ? validated.rate_limit_max : null;
70
- await db.insert(tokens).values({
71
- id: tokenId,
72
- description: validated.description,
73
- token_hash: tokenHash,
74
- permissions: validated.permissions || 'readonly',
75
- rate_limit_max: rateLimitMax,
76
- created_at: Math.floor(Date.now() / 1000),
77
- expires_at: validated.expires_at || null,
78
- });
79
- // Track token creation
80
- const analytics = getAnalytics();
81
- const requestId = c.get('requestId');
82
- const session = c.get('session');
83
- analytics.trackTokenCreated({
84
- requestId,
85
- tokenId,
86
- userId: session?.userId,
87
- });
88
- // Return token ONCE - it's never stored in plaintext
89
- return c.json({
90
- id: tokenId,
91
- token: token, // Only time token is returned
92
- description: validated.description,
93
- permissions: validated.permissions || 'readonly',
94
- rate_limit_max: rateLimitMax,
95
- created_at: Math.floor(Date.now() / 1000),
96
- expires_at: validated.expires_at || null,
97
- }, 201);
98
- }
99
- /**
100
- * DELETE /api/tokens/:id
101
- * Revoke a token
102
- */
103
- export async function deleteToken(c) {
104
- const { id } = c.req.valid('param');
105
- const db = c.get('database');
106
- // Check if exists
107
- const [token] = await db.select().from(tokens).where(eq(tokens.id, id)).limit(1);
108
- if (!token) {
109
- return c.json({ error: 'Not Found', message: 'Token not found' }, 404);
110
- }
111
- await db.delete(tokens).where(eq(tokens.id, id));
112
- // Track token revocation
113
- const analytics = getAnalytics();
114
- const requestId = c.get('requestId');
115
- const session = c.get('session');
116
- analytics.trackTokenDeleted({
117
- requestId,
118
- tokenId: id,
119
- userId: session?.userId,
120
- });
121
- return c.json({ message: 'Token revoked' });
122
- }
123
- /**
124
- * PATCH /api/tokens/:id
125
- * Update token description and/or rate_limit_max
126
- * Permissions cannot be changed after creation
127
- */
128
- export async function updateToken(c) {
129
- const { id } = c.req.valid('param');
130
- const validated = c.req.valid('json');
131
- // Validate: rate limiting requires KV
132
- if (validated.rate_limit_max !== null &&
133
- validated.rate_limit_max !== undefined &&
134
- validated.rate_limit_max > 0) {
135
- if (!isKvAvailableForRateLimiting(c.env.KV)) {
136
- return c.json({
137
- error: 'Bad Request',
138
- message: 'Rate limiting requires KV namespace to be configured. Please set rate_limit_max to null or 0, or configure KV namespace in your wrangler.toml.'
139
- }, 400);
140
- }
141
- }
142
- const db = c.get('database');
143
- // Check if token exists
144
- const [token] = await db.select().from(tokens).where(eq(tokens.id, id)).limit(1);
145
- if (!token) {
146
- return c.json({ error: 'Not Found', message: 'Token not found' }, 404);
147
- }
148
- // Build update object - only update provided fields
149
- const updateData = {};
150
- if (validated.description !== undefined) {
151
- updateData.description = validated.description;
152
- }
153
- if (validated.rate_limit_max !== undefined) {
154
- updateData.rate_limit_max =
155
- validated.rate_limit_max && validated.rate_limit_max > 0 ? validated.rate_limit_max : null;
156
- }
157
- // Only update if there are fields to update
158
- if (Object.keys(updateData).length > 0) {
159
- await db
160
- .update(tokens)
161
- .set(updateData)
162
- .where(eq(tokens.id, id));
163
- }
164
- // Fetch updated token
165
- const [updatedToken] = await db.select().from(tokens).where(eq(tokens.id, id)).limit(1);
166
- // Track token update (if analytics method exists)
167
- const analytics = getAnalytics();
168
- const requestId = c.get('requestId');
169
- const session = c.get('session');
170
- if (typeof analytics.trackTokenUpdated === 'function') {
171
- analytics.trackTokenUpdated({
172
- requestId,
173
- tokenId: id,
174
- userId: session?.userId,
175
- });
176
- }
177
- return c.json({
178
- id: updatedToken.id,
179
- description: updatedToken.description,
180
- permissions: updatedToken.permissions || 'readonly',
181
- rate_limit_max: updatedToken.rate_limit_max,
182
- created_at: updatedToken.created_at,
183
- expires_at: updatedToken.expires_at,
184
- last_used_at: updatedToken.last_used_at,
185
- });
186
- }
187
- //# sourceMappingURL=tokens.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/routes/api/tokens.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/routes/api/types.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC;;;;GAIG;AACH,MAAM,MAAM,cAAc,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG;IAClK,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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/routes/api/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1,6 +0,0 @@
1
- import type { OpenAPIContext } from './types';
2
- import { createUserRequestSchema } from '@package-broker/shared';
3
- export declare function listUsers(c: OpenAPIContext): Promise<Response>;
4
- export declare function createUser(c: OpenAPIContext<any, ReturnType<typeof createUserRequestSchema.parse>>): Promise<Response>;
5
- export declare function deleteUser(c: OpenAPIContext): Promise<Response>;
6
- //# sourceMappingURL=users.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/routes/api/users.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,wBAAsB,SAAS,CAAC,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAYpE;AAED,wBAAsB,UAAU,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4F5H;AAED,wBAAsB,UAAU,CAAC,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkBrE"}
@@ -1,115 +0,0 @@
1
- import { UserService } from '../../services/UserService';
2
- export async function listUsers(c) {
3
- const db = c.get('database');
4
- const userService = new UserService(db);
5
- // Check permissions (must be admin)
6
- const session = c.get('session');
7
- if (session.role !== 'admin') {
8
- return c.json({ error: 'Forbidden' }, 403);
9
- }
10
- const users = await userService.list();
11
- return c.json({ users });
12
- }
13
- export async function createUser(c) {
14
- const db = c.get('database');
15
- const userService = new UserService(db);
16
- // Check permissions
17
- const session = c.get('session');
18
- if (session.role !== 'admin') {
19
- return c.json({ error: 'Forbidden' }, 403);
20
- }
21
- const body = c.req.valid('json');
22
- const { email, password, role } = body;
23
- try {
24
- const user = await userService.create({
25
- email,
26
- password,
27
- role: role || 'viewer',
28
- });
29
- // Send invite email if SMTP is configured
30
- if (c.env.SMTP_HOST && c.env.SMTP_USER && c.env.SMTP_PASS) {
31
- try {
32
- const { EmailService } = await import('../../services/EmailService');
33
- const emailService = new EmailService({
34
- host: c.env.SMTP_HOST,
35
- port: parseInt(c.env.SMTP_PORT || '587'),
36
- user: c.env.SMTP_USER,
37
- pass: c.env.SMTP_PASS,
38
- from: c.env.SMTP_FROM || c.env.SMTP_USER,
39
- });
40
- const subject = 'Welcome to Composer Proxy';
41
- let text = '';
42
- let html = '';
43
- if (user?.invite_token) {
44
- // Invite Flow
45
- const origin = c.req.header('origin') || new URL(c.req.url).origin;
46
- const inviteLink = `${origin}/invite/${user.invite_token}`;
47
- text = `You have been invited to the Composer Proxy.\n\nPlease accept the invitation and set your password here:\n${inviteLink}`;
48
- html = `
49
- <div style="font-family: sans-serif; max-width: 600px; margin: 0 auto; color: #334155;">
50
- <h2 style="color: #0f172a;">Welcome to Composer Proxy</h2>
51
- <p>You have been invited to join the Composer Proxy.</p>
52
- <p>Please click the button below to accept the invitation and set your password:</p>
53
- <p style="margin: 24px 0;">
54
- <a href="${inviteLink}" style="background-color: #f97316; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px; display: inline-block; font-weight: bold;">Accept Invitation</a>
55
- </p>
56
- <p style="font-size: 0.9em; color: #64748b;">Or copy this link to your browser: <br> ${inviteLink}</p>
57
- <p style="font-size: 0.8em; color: #94a3b8; margin-top: 40px; border-top: 1px solid #e2e8f0; padding-top: 20px;">
58
- This invite expires in 7 days.
59
- </p>
60
- </div>
61
- `;
62
- }
63
- else if (password) {
64
- // Legacy/Manual Password Flow (if admin provided password)
65
- text = `You have been invited to the Composer Proxy.\n\nYour temporary password is: ${password}\n\nPlease log in and change your password immediately.`;
66
- html = `
67
- <div style="font-family: sans-serif; max-width: 600px; margin: 0 auto; color: #334155;">
68
- <h2>Welcome to Composer Proxy</h2>
69
- <p>You have been invited to the Composer Proxy.</p>
70
- <p>Your temporary password is: <strong>${password}</strong></p>
71
- <p>Please log in and change your password immediately.</p>
72
- </div>
73
- `;
74
- }
75
- if (text && html) {
76
- await emailService.send({ to: email, subject, text, html });
77
- }
78
- }
79
- catch (emailError) {
80
- console.error('Failed to send invite email:', emailError);
81
- }
82
- }
83
- return c.json({
84
- message: 'User created',
85
- user: {
86
- id: user?.id,
87
- email: user?.email,
88
- role: user?.role
89
- }
90
- });
91
- }
92
- catch (error) {
93
- if (error.message === 'User already exists') {
94
- return c.json({ error: 'User already exists' }, 409);
95
- }
96
- return c.json({ error: 'Failed to create user' }, 500);
97
- }
98
- }
99
- export async function deleteUser(c) {
100
- const db = c.get('database');
101
- const userService = new UserService(db);
102
- const { id: userId } = c.req.valid('param');
103
- // Check permissions
104
- const session = c.get('session');
105
- if (session.role !== 'admin') {
106
- return c.json({ error: 'Forbidden' }, 403);
107
- }
108
- // Prevent self-deletion
109
- if (session.userId === userId) {
110
- return c.json({ error: 'Cannot delete own account' }, 400);
111
- }
112
- await userService.delete(userId);
113
- return c.json({ message: 'User deleted' });
114
- }
115
- //# sourceMappingURL=users.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"users.js","sourceRoot":"","sources":["../../../src/routes/api/users.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import type { StorageDriver } from './driver';
2
- export interface R2DriverConfig {
3
- bucket: R2Bucket;
4
- }
5
- /**
6
- * R2 storage driver implementation
7
- */
8
- export declare class R2Driver implements StorageDriver {
9
- private config;
10
- constructor(config: R2DriverConfig);
11
- get(key: string): Promise<ReadableStream | null>;
12
- put(key: string, data: ReadableStream | ArrayBuffer | Uint8Array): Promise<void>;
13
- delete(key: string): Promise<void>;
14
- exists(key: string): Promise<boolean>;
15
- }
16
- //# sourceMappingURL=r2-driver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"r2-driver.d.ts","sourceRoot":"","sources":["../../src/storage/r2-driver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,QAAS,YAAW,aAAa;IAChC,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAEpC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAQhD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAI5C"}
@@ -1,28 +0,0 @@
1
- // Cloudflare R2 storage driver
2
- /**
3
- * R2 storage driver implementation
4
- */
5
- export class R2Driver {
6
- config;
7
- constructor(config) {
8
- this.config = config;
9
- }
10
- async get(key) {
11
- const object = await this.config.bucket.get(key);
12
- if (!object) {
13
- return null;
14
- }
15
- return object.body;
16
- }
17
- async put(key, data) {
18
- await this.config.bucket.put(key, data);
19
- }
20
- async delete(key) {
21
- await this.config.bucket.delete(key);
22
- }
23
- async exists(key) {
24
- const object = await this.config.bucket.head(key);
25
- return object !== null;
26
- }
27
- }
28
- //# sourceMappingURL=r2-driver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"r2-driver.js","sourceRoot":"","sources":["../../src/storage/r2-driver.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAQ/B;;GAEG;AACH,MAAM,OAAO,QAAQ;IACC;IAApB,YAAoB,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAE9C,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,IAA+C;QACpE,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,OAAO,MAAM,KAAK,IAAI,CAAC;IACzB,CAAC;CACF"}