@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,99 @@
1
+ import { sqliteTable, text, integer, index, unique } from 'drizzle-orm/sqlite-core';
2
+ // Repositories table
3
+ export const repositories = sqliteTable('repositories', {
4
+ id: text('id').primaryKey(),
5
+ url: text('url').notNull(),
6
+ vcs_type: text('vcs_type').notNull(), // 'git', 'composer', 'artifact' - determines sync strategy
7
+ credential_type: text('credential_type').notNull(), // 'http_basic', 'github_token', 'gitlab_token', etc.
8
+ auth_credentials: text('auth_credentials').notNull(), // Encrypted JSON with credential-specific fields
9
+ composer_json_path: text('composer_json_path'), // Supports glob patterns like '{lib,src}/**/composer.json'
10
+ package_filter: text('package_filter'), // Comma-separated list of packages to sync (for repos with provider-includes)
11
+ status: text('status').default('pending'), // 'active', 'error', 'pending', 'syncing'
12
+ error_message: text('error_message'),
13
+ last_synced_at: integer('last_synced_at'),
14
+ created_at: integer('created_at').notNull(),
15
+ }, (table) => ({
16
+ statusIdx: index('idx_repositories_status').on(table.status),
17
+ lastSyncedIdx: index('idx_repositories_last_synced').on(table.last_synced_at),
18
+ credentialTypeIdx: index('idx_repositories_credential_type').on(table.credential_type),
19
+ vcsTypeIdx: index('idx_repositories_vcs_type').on(table.vcs_type),
20
+ }));
21
+ // Tokens table
22
+ export const tokens = sqliteTable('tokens', {
23
+ id: text('id').primaryKey(),
24
+ description: text('description').notNull(),
25
+ token_hash: text('token_hash').notNull(), // SHA-256 hash for high-entropy tokens
26
+ permissions: text('permissions').notNull().default('readonly'), // 'readonly' | 'write'
27
+ rate_limit_max: integer('rate_limit_max').default(1000), // requests per hour
28
+ created_at: integer('created_at').notNull(),
29
+ expires_at: integer('expires_at'),
30
+ last_used_at: integer('last_used_at'),
31
+ }, (table) => ({
32
+ tokenHashIdx: index('idx_tokens_token_hash').on(table.token_hash),
33
+ }));
34
+ // Artifacts table
35
+ export const artifacts = sqliteTable('artifacts', {
36
+ id: text('id').primaryKey(),
37
+ repo_id: text('repo_id')
38
+ .notNull()
39
+ .references(() => repositories.id, { onDelete: 'cascade' }),
40
+ package_name: text('package_name').notNull(),
41
+ version: text('version').notNull(),
42
+ file_key: text('file_key').notNull(), // R2/S3 key
43
+ size: integer('size'), // bytes
44
+ download_count: integer('download_count').default(0), // Number of downloads
45
+ created_at: integer('created_at').notNull(),
46
+ last_downloaded_at: integer('last_downloaded_at'),
47
+ }, (table) => ({
48
+ repoIdIdx: index('idx_artifacts_repo_id').on(table.repo_id),
49
+ packageNameIdx: index('idx_artifacts_package_name').on(table.package_name),
50
+ lastDownloadedIdx: index('idx_artifacts_last_downloaded').on(table.last_downloaded_at),
51
+ // Composite unique index for fast lookup in dist route
52
+ uniqueArtifactIdx: unique('artifacts_repo_package_version').on(table.repo_id, table.package_name, table.version),
53
+ }));
54
+ // Package metadata table (for UI queries)
55
+ export const packages = sqliteTable('packages', {
56
+ id: text('id').primaryKey(),
57
+ repo_id: text('repo_id')
58
+ .notNull()
59
+ .references(() => repositories.id, { onDelete: 'cascade' }),
60
+ name: text('name').notNull(),
61
+ version: text('version').notNull(),
62
+ dist_url: text('dist_url').notNull(),
63
+ source_dist_url: text('source_dist_url'), // Original source repository URL for on-demand mirroring
64
+ dist_reference: text('dist_reference'), // Reference/hash for mirror URL substitution (commit hash for git, generated hash for others)
65
+ description: text('description'),
66
+ license: text('license'), // JSON string for array support
67
+ package_type: text('package_type'), // "library", "magento2-module", etc.
68
+ homepage: text('homepage'),
69
+ released_at: integer('released_at'),
70
+ readme_content: text('readme_content'),
71
+ metadata: text('metadata'), // Complete upstream package metadata as JSON
72
+ created_at: integer('created_at').notNull(),
73
+ }, (table) => ({
74
+ repoIdIdx: index('idx_packages_repo_id').on(table.repo_id),
75
+ nameIdx: index('idx_packages_name').on(table.name),
76
+ // Unique constraint to prevent duplicate package+version entries
77
+ uniquePackageVersionIdx: unique('packages_name_version_unique').on(table.name, table.version),
78
+ }));
79
+ // Users table (formerly admin_users)
80
+ export const users = sqliteTable('users', {
81
+ id: text('id').primaryKey(),
82
+ email: text('email').notNull().unique(),
83
+ password_hash: text('password_hash').notNull(), // bcrypt or argon2 hash
84
+ role: text('role').default('admin').notNull(), // 'admin' | 'viewer'
85
+ status: text('status').default('active').notNull(), // 'active' | 'invited' | 'blocked'
86
+ two_factor_secret: text('two_factor_secret'),
87
+ two_factor_enabled: integer('two_factor_enabled', { mode: 'boolean' }).default(false),
88
+ recovery_codes: text('recovery_codes'), // Encrypted JSON array of recovery codes
89
+ invite_token: text('invite_token'), // Token for setting initial password
90
+ invite_expires_at: integer('invite_expires_at'), // Expiration timestamp for invite
91
+ created_at: integer('created_at').notNull(),
92
+ last_login_at: integer('last_login_at'),
93
+ }, (table) => ({
94
+ emailIdx: index('idx_users_email').on(table.email),
95
+ inviteTokenIdx: index('idx_users_invite_token').on(table.invite_token),
96
+ }));
97
+ // NO activity_log table - use Cloudflare Workers logs for debugging
98
+ // Workers logs are limited to last X entries and don't require database storage
99
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { Hono } from 'hono';
2
+ import { type StorageDriver, type DatabasePort } from './index';
3
+ export interface AppBindings {
4
+ DB?: any;
5
+ KV?: any;
6
+ QUEUE?: any;
7
+ ANALYTICS?: any;
8
+ LOG_LEVEL?: 'debug' | 'info' | 'warn' | 'error';
9
+ [key: string]: any;
10
+ }
11
+ export interface AppVariables {
12
+ storage: StorageDriver;
13
+ database: DatabasePort;
14
+ requestId?: string;
15
+ session?: {
16
+ userId: string;
17
+ email: string;
18
+ };
19
+ }
20
+ export type AppInstance = Hono<{
21
+ Bindings: AppBindings;
22
+ Variables: AppVariables;
23
+ }>;
24
+ /**
25
+ * Create the generic Hono application
26
+ * This factory function expects drivers to be injected via middleware or arguments,
27
+ * or it sets up the structure for them to be set.
28
+ */
29
+ export declare function createApp(options?: {
30
+ storage?: StorageDriver;
31
+ database?: DatabasePort;
32
+ onInit?: (app: AppInstance) => void;
33
+ }): AppInstance;
34
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAiDH,KAAK,aAAa,EAClB,KAAK,YAAY,EACpB,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,WAAW;IAExB,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,SAAS,CAAC,EAAE,GAAG,CAAC;IAEhB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAChD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC;AAEnF;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE;IAChC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACvC,GAAG,WAAW,CA0Id"}
@@ -0,0 +1,121 @@
1
+ import { Hono } from 'hono';
2
+ import { cors } from 'hono/cors';
3
+ import { composerVersionMiddleware, authMiddleware, distAuthMiddleware, requestIdMiddleware, packagesJsonRoute, p2PackageRoute, distRoute, distMirrorRoute, distLockfileRoute, healthRoute, listRepositories, createRepository, getRepository, updateRepository, deleteRepository, verifyRepository, syncRepositoryNow, listTokens, createToken, updateToken, deleteToken, listPackages, getPackage, getPackageReadme, getPackageChangelog, getPackageStats, addPackagesFromMirror, getStats, getSettings, updatePackagistMirroring, deleteArtifact, cleanupArtifacts, cleanupNumericVersions, loginRoute, logoutRoute, meRoute, setupRoute, setup2FARoute, enable2FARoute, disable2FARoute, listUsers, createUser, deleteUser, sessionMiddleware, checkAuthRequired, acceptInviteRoute, getLogger, } from './index';
4
+ /**
5
+ * Create the generic Hono application
6
+ * This factory function expects drivers to be injected via middleware or arguments,
7
+ * or it sets up the structure for them to be set.
8
+ */
9
+ export function createApp(options) {
10
+ const app = new Hono();
11
+ const logger = getLogger('info'); // Default logger, can vary per request if needed
12
+ // Global middleware
13
+ app.use('*', cors());
14
+ app.use('*', requestIdMiddleware);
15
+ app.onError(async (err, c) => {
16
+ const requestId = c.get('requestId');
17
+ logger.error('Unhandled error', {
18
+ url: c.req.url,
19
+ method: c.req.method,
20
+ path: new URL(c.req.url).pathname,
21
+ }, err instanceof Error ? err : new Error(String(err)));
22
+ return c.json({
23
+ error: 'Internal Server Error',
24
+ message: err.message,
25
+ ...(requestId && { requestId }),
26
+ }, 500);
27
+ });
28
+ // Custom Init hook (for setting generic drivers from outer scope)
29
+ if (options?.onInit) {
30
+ options.onInit(app);
31
+ }
32
+ else {
33
+ // If drivers provided directly, inject them
34
+ if (options?.database) {
35
+ app.use('*', async (c, next) => {
36
+ c.set('database', options.database);
37
+ await next();
38
+ });
39
+ }
40
+ if (options?.storage) {
41
+ app.use('*', async (c, next) => {
42
+ c.set('storage', options.storage);
43
+ await next();
44
+ });
45
+ }
46
+ }
47
+ // Health check (no auth required)
48
+ app.get('/health', healthRoute);
49
+ // API routes
50
+ const apiRoutes = new Hono();
51
+ // Auth routes (no session required)
52
+ apiRoutes.post('/auth/login', loginRoute);
53
+ apiRoutes.get('/auth/check', checkAuthRequired);
54
+ apiRoutes.post('/setup', setupRoute); /* Fresh install flow */
55
+ apiRoutes.post('/auth/invite/accept', acceptInviteRoute);
56
+ // Protected routes - require session
57
+ const protectedRoutes = new Hono();
58
+ // ** SESSION MIDDLEWARE **
59
+ protectedRoutes.use('*', async (c, next) => {
60
+ return sessionMiddleware(c, next);
61
+ });
62
+ // Auth routes (session required)
63
+ protectedRoutes.post('/auth/logout', logoutRoute);
64
+ protectedRoutes.get('/auth/me', meRoute);
65
+ protectedRoutes.post('/auth/2fa/setup', setup2FARoute);
66
+ protectedRoutes.post('/auth/2fa/enable', enable2FARoute);
67
+ protectedRoutes.post('/auth/2fa/disable', disable2FARoute);
68
+ // User Management
69
+ protectedRoutes.get('/users', listUsers);
70
+ protectedRoutes.post('/users', createUser);
71
+ protectedRoutes.delete('/users/:id', deleteUser);
72
+ // Repository routes
73
+ protectedRoutes.get('/repositories', listRepositories);
74
+ protectedRoutes.post('/repositories', createRepository);
75
+ protectedRoutes.get('/repositories/:id', getRepository);
76
+ protectedRoutes.put('/repositories/:id', updateRepository);
77
+ protectedRoutes.delete('/repositories/:id', deleteRepository);
78
+ protectedRoutes.get('/repositories/:id/verify', verifyRepository);
79
+ protectedRoutes.post('/repositories/:id/sync', syncRepositoryNow);
80
+ // Token routes
81
+ protectedRoutes.get('/tokens', listTokens);
82
+ protectedRoutes.post('/tokens', createToken);
83
+ protectedRoutes.patch('/tokens/:id', updateToken);
84
+ protectedRoutes.delete('/tokens/:id', deleteToken);
85
+ // Package routes
86
+ protectedRoutes.get('/packages', listPackages);
87
+ protectedRoutes.get('/packages/:name', getPackage);
88
+ protectedRoutes.get('/packages/:name/:version/readme', getPackageReadme);
89
+ protectedRoutes.get('/packages/:name/:version/changelog', getPackageChangelog);
90
+ protectedRoutes.get('/packages/:name/:version/stats', getPackageStats);
91
+ protectedRoutes.post('/packages/add-from-mirror', addPackagesFromMirror);
92
+ // Stats
93
+ protectedRoutes.get('/stats', getStats);
94
+ // Settings
95
+ protectedRoutes.get('/settings', getSettings);
96
+ protectedRoutes.put('/settings/packagist-mirroring', updatePackagistMirroring);
97
+ // Artifacts
98
+ protectedRoutes.delete('/artifacts/:id', deleteArtifact);
99
+ protectedRoutes.post('/artifacts/cleanup', cleanupArtifacts);
100
+ protectedRoutes.post('/packages/cleanup-numeric-versions', cleanupNumericVersions);
101
+ // Mount protected routes under /api
102
+ apiRoutes.route('/', protectedRoutes);
103
+ app.route('/api', apiRoutes);
104
+ // Composer routes
105
+ const composerAuth = async (c, next) => {
106
+ await composerVersionMiddleware(c, next);
107
+ };
108
+ const composerTokenAuth = async (c, next) => {
109
+ return authMiddleware(c, next);
110
+ };
111
+ app.get('/packages.json', composerAuth, composerTokenAuth, packagesJsonRoute);
112
+ app.get('/p2/:vendor/:package', composerAuth, composerTokenAuth, p2PackageRoute);
113
+ const distAuth = async (c, next) => {
114
+ return distAuthMiddleware(c, next);
115
+ };
116
+ app.get('/dist/m/:vendor/:package/:version', composerAuth, distAuth, distMirrorRoute);
117
+ app.get('/dist/:vendor/:package/:version/:reference', composerAuth, distAuth, distLockfileRoute);
118
+ app.get('/dist/:repo_id/:vendor/:package/:version', composerAuth, distAuth, distRoute);
119
+ return app;
120
+ }
121
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export * from './db';
2
+ export * from './middleware';
3
+ export * from './routes';
4
+ export * from './storage/index';
5
+ export * from './cache/index';
6
+ export * from './queue/index';
7
+ export * from './sync';
8
+ export * from './queue';
9
+ export * from './jobs';
10
+ export * from './utils';
11
+ export * from './workflows';
12
+ export * from './services/UserService';
13
+ export * from './services/EmailService';
14
+ export * from './ports';
15
+ export * from './factory';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,MAAM,CAAC;AACrB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ // Core package exports
2
+ export * from './db';
3
+ export * from './middleware';
4
+ export * from './routes';
5
+ export * from './storage/index';
6
+ export * from './cache/index';
7
+ export * from './queue/index';
8
+ export * from './sync';
9
+ export * from './queue';
10
+ export * from './jobs';
11
+ export * from './utils';
12
+ export * from './workflows';
13
+ export * from './services/UserService';
14
+ export * from './services/EmailService';
15
+ export * from './ports';
16
+ export * from './factory';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,uBAAuB;AAEvB,cAAc,MAAM,CAAC;AACrB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './processor';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAMA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ /*
2
+ * PACKAGE.broker
3
+ * Copyright (C) 2025 Łukasz Bajsarowicz
4
+ * Licensed under AGPL-3.0
5
+ */
6
+ export * from './processor';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { type SyncOptions } from '../sync/repository-sync';
2
+ /**
3
+ * Job types that can be processed
4
+ */
5
+ export type Job = {
6
+ type: 'update_token_last_used';
7
+ tokenId: string;
8
+ timestamp: number;
9
+ } | {
10
+ type: 'update_artifact_download';
11
+ artifactId: string;
12
+ timestamp: number;
13
+ } | {
14
+ type: 'sync_repository';
15
+ repoId: string;
16
+ };
17
+ /**
18
+ * Environment bindings required for job processing
19
+ */
20
+ export interface JobEnv {
21
+ DB: D1Database;
22
+ KV?: KVNamespace;
23
+ QUEUE?: Queue;
24
+ ENCRYPTION_KEY: string;
25
+ }
26
+ /**
27
+ * Job Processor interface - can be implemented for Queue or Sync execution
28
+ */
29
+ export interface JobProcessor {
30
+ /**
31
+ * Enqueue a job for processing
32
+ * May execute immediately (sync) or queue for later (async)
33
+ */
34
+ enqueue(job: Job): Promise<void>;
35
+ /**
36
+ * Enqueue multiple jobs for processing
37
+ * May execute in parallel (sync) or queue for later (async)
38
+ */
39
+ enqueueAll(jobs: Job[]): Promise<void>;
40
+ }
41
+ /**
42
+ * Create the appropriate job processor based on environment
43
+ * If QUEUE is available, uses QueueJobProcessor (async)
44
+ * Otherwise, uses SyncJobProcessor (immediate execution)
45
+ */
46
+ export declare function createJobProcessor(env: JobEnv, options?: {
47
+ syncOptions?: SyncOptions;
48
+ }): JobProcessor;
49
+ //# sourceMappingURL=processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/jobs/processor.ts"],"names":[],"mappings":"AAYA,OAAO,EAAgC,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGzF;;GAEG;AACH,MAAM,MAAM,GAAG,GACX;IACA,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,GACC;IACA,IAAI,EAAE,0BAA0B,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,GACC;IACA,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEJ;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,UAAU,CAAC;IACf,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,WAAW,CAAA;CAAE,GACtC,YAAY,CAKd"}
@@ -0,0 +1,118 @@
1
+ /*
2
+ * PACKAGE.broker
3
+ * Copyright (C) 2025 Łukasz Bajsarowicz
4
+ * Licensed under AGPL-3.0
5
+ */
6
+ // Job Processor - abstraction for sync/async job execution
7
+ // Automatically falls back to synchronous execution when Queues are unavailable
8
+ import { createD1Database as createDatabase } from '../db';
9
+ import { tokens, artifacts } from '../db/schema';
10
+ import { eq } from 'drizzle-orm';
11
+ import { syncRepository } from '../sync/repository-sync';
12
+ import { getLogger } from '../utils/logger';
13
+ /**
14
+ * Create the appropriate job processor based on environment
15
+ * If QUEUE is available, uses QueueJobProcessor (async)
16
+ * Otherwise, uses SyncJobProcessor (immediate execution)
17
+ */
18
+ export function createJobProcessor(env, options) {
19
+ if (env.QUEUE && typeof env.QUEUE.send === 'function') {
20
+ return new QueueJobProcessor(env.QUEUE);
21
+ }
22
+ return new SyncJobProcessor(env, options?.syncOptions);
23
+ }
24
+ /**
25
+ * Queue-based job processor - sends jobs to Cloudflare Queue
26
+ * Jobs are processed asynchronously by queue consumers
27
+ */
28
+ class QueueJobProcessor {
29
+ queue;
30
+ constructor(queue) {
31
+ this.queue = queue;
32
+ }
33
+ async enqueue(job) {
34
+ await this.queue.send(job);
35
+ }
36
+ async enqueueAll(jobs) {
37
+ // Queue supports batch sending
38
+ for (const job of jobs) {
39
+ await this.queue.send(job);
40
+ }
41
+ }
42
+ }
43
+ /**
44
+ * Synchronous job processor - executes jobs immediately
45
+ * Used when Queues are not available (free tier / local dev)
46
+ */
47
+ class SyncJobProcessor {
48
+ env;
49
+ syncOptions;
50
+ constructor(env, syncOptions) {
51
+ this.env = env;
52
+ this.syncOptions = syncOptions;
53
+ }
54
+ async enqueue(job) {
55
+ await this.processJob(job);
56
+ }
57
+ async enqueueAll(jobs) {
58
+ // Process jobs in parallel for better performance
59
+ await Promise.all(jobs.map((job) => this.processJob(job)));
60
+ }
61
+ async processJob(job) {
62
+ const db = createDatabase(this.env.DB);
63
+ const logger = getLogger();
64
+ try {
65
+ switch (job.type) {
66
+ case 'update_token_last_used':
67
+ await db
68
+ .update(tokens)
69
+ .set({ last_used_at: job.timestamp })
70
+ .where(eq(tokens.id, job.tokenId));
71
+ break;
72
+ case 'update_artifact_download':
73
+ // Increment download count and update last_downloaded_at
74
+ const [artifact] = await db
75
+ .select()
76
+ .from(artifacts)
77
+ .where(eq(artifacts.id, job.artifactId))
78
+ .limit(1);
79
+ if (artifact) {
80
+ await db
81
+ .update(artifacts)
82
+ .set({
83
+ download_count: (artifact.download_count || 0) + 1,
84
+ last_downloaded_at: job.timestamp,
85
+ })
86
+ .where(eq(artifacts.id, job.artifactId));
87
+ }
88
+ break;
89
+ case 'sync_repository':
90
+ if (!this.syncOptions) {
91
+ logger.warn('SyncJobProcessor: syncOptions not provided, skipping sync', { repoId: job.repoId });
92
+ return;
93
+ }
94
+ const syncEnv = {
95
+ DB: this.env.DB,
96
+ KV: this.env.KV,
97
+ QUEUE: this.env.QUEUE,
98
+ ENCRYPTION_KEY: this.env.ENCRYPTION_KEY,
99
+ };
100
+ const result = await syncRepository(job.repoId, syncEnv, this.syncOptions);
101
+ if (!result.success) {
102
+ logger.error('Sync failed for repo', { repoId: job.repoId, error: result.error });
103
+ }
104
+ else {
105
+ logger.info('Sync successful for repo', { repoId: job.repoId, packageCount: result.packages.length });
106
+ }
107
+ break;
108
+ default:
109
+ logger.warn('Unknown job type', { jobType: job.type });
110
+ }
111
+ }
112
+ catch (error) {
113
+ logger.error('Job processing error', { jobType: job.type }, error instanceof Error ? error : new Error(String(error)));
114
+ // Don't throw - we want to continue processing other jobs
115
+ }
116
+ }
117
+ }
118
+ //# sourceMappingURL=processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.js","sourceRoot":"","sources":["../../src/jobs/processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { Context } from 'hono';
2
+ import type { DatabasePort } from '../ports';
3
+ export interface AuthContext {
4
+ tokenId: string;
5
+ tokenDescription: string;
6
+ tokenPermissions: 'readonly' | 'write';
7
+ }
8
+ /**
9
+ * Dual authentication middleware for dist route
10
+ * Accepts either Composer token (Basic Auth) OR admin session (Bearer token)
11
+ */
12
+ export declare function distAuthMiddleware(c: Context<{
13
+ Bindings: {
14
+ DB: D1Database;
15
+ KV?: KVNamespace;
16
+ QUEUE?: Queue;
17
+ };
18
+ Variables: {
19
+ auth?: AuthContext;
20
+ session?: {
21
+ userId: string;
22
+ email: string;
23
+ };
24
+ database: DatabasePort;
25
+ };
26
+ }>, next: () => Promise<Response>): Promise<Response>;
27
+ /**
28
+ * Authentication middleware
29
+ * Validates Basic Auth -> D1 Token -> KV Rate Limit
30
+ */
31
+ export declare function authMiddleware(c: Context<{
32
+ Bindings: {
33
+ DB: D1Database;
34
+ KV?: KVNamespace;
35
+ QUEUE?: Queue;
36
+ };
37
+ Variables: {
38
+ auth: AuthContext;
39
+ database: DatabasePort;
40
+ requestId?: string;
41
+ };
42
+ }>, next: () => Promise<Response>): Promise<Response>;
43
+ /**
44
+ * Middleware to check token permissions
45
+ * Requires write permission for certain operations
46
+ */
47
+ export declare function checkTokenPermissions(requiredPermission: 'readonly' | 'write'): (c: Context<{
48
+ Variables: {
49
+ auth: AuthContext;
50
+ };
51
+ }>, next: () => Promise<Response>) => Promise<Response>;
52
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAQ,MAAM,MAAM,CAAC;AAG1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAI7C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,UAAU,GAAG,OAAO,CAAC;CACxC;AA+FD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,CAAC,EAAE,OAAO,CAAC;IACT,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU,CAAC;QACf,EAAE,CAAC,EAAE,WAAW,CAAC;QACjB,KAAK,CAAC,EAAE,KAAK,CAAC;KACf,CAAC;IACF,SAAS,EAAE;QACT,IAAI,CAAC,EAAE,WAAW,CAAC;QACnB,OAAO,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5C,QAAQ,EAAE,YAAY,CAAC;KACxB,CAAC;CACH,CAAC,EACF,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GAC5B,OAAO,CAAC,QAAQ,CAAC,CA6GnB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,CAAC,EAAE,OAAO,CAAC;IACT,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU,CAAC;QACf,EAAE,CAAC,EAAE,WAAW,CAAC;QACjB,KAAK,CAAC,EAAE,KAAK,CAAC;KACf,CAAC;IACF,SAAS,EAAE;QACT,IAAI,EAAE,WAAW,CAAC;QAClB,QAAQ,EAAE,YAAY,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC,EACF,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GAC5B,OAAO,CAAC,QAAQ,CAAC,CA0HnB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,kBAAkB,EAAE,UAAU,GAAG,OAAO,IAE1E,GAAG,OAAO,CAAC;IACT,SAAS,EAAE;QACT,IAAI,EAAE,WAAW,CAAC;KACnB,CAAC;CACH,CAAC,EACF,MAAM,MAAM,OAAO,CAAC,QAAQ,CAAC,KAC5B,OAAO,CAAC,QAAQ,CAAC,CAqBrB"}