@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,134 @@
1
+ /*
2
+ * PACKAGE.broker
3
+ * Copyright (C) 2025 Łukasz Bajsarowicz
4
+ * Licensed under AGPL-3.0
5
+ */
6
+ class Logger {
7
+ logLevel;
8
+ requestId;
9
+ constructor(logLevel = 'info') {
10
+ this.logLevel = logLevel;
11
+ }
12
+ /**
13
+ * Set request ID for correlation across log entries
14
+ */
15
+ setRequestId(requestId) {
16
+ this.requestId = requestId;
17
+ }
18
+ /**
19
+ * Get current request ID
20
+ */
21
+ getRequestId() {
22
+ return this.requestId;
23
+ }
24
+ /**
25
+ * Set log level
26
+ */
27
+ setLevel(level) {
28
+ this.logLevel = level;
29
+ }
30
+ /**
31
+ * Check if a log level should be emitted
32
+ */
33
+ shouldLog(level) {
34
+ const levels = ['debug', 'info', 'warn', 'error'];
35
+ const currentIndex = levels.indexOf(this.logLevel);
36
+ const messageIndex = levels.indexOf(level);
37
+ return messageIndex >= currentIndex;
38
+ }
39
+ /**
40
+ * Create log entry
41
+ */
42
+ createLogEntry(level, message, context, error) {
43
+ const entry = {
44
+ level,
45
+ message,
46
+ timestamp: new Date().toISOString(),
47
+ };
48
+ if (this.requestId) {
49
+ entry.requestId = this.requestId;
50
+ }
51
+ if (context && Object.keys(context).length > 0) {
52
+ entry.context = context;
53
+ }
54
+ if (error) {
55
+ entry.error = {
56
+ message: error.message,
57
+ name: error.name,
58
+ stack: error.stack,
59
+ };
60
+ }
61
+ return entry;
62
+ }
63
+ /**
64
+ * Emit log entry
65
+ */
66
+ emit(level, message, context, error) {
67
+ if (!this.shouldLog(level)) {
68
+ return;
69
+ }
70
+ const entry = this.createLogEntry(level, message, context, error);
71
+ const jsonString = JSON.stringify(entry);
72
+ // Use appropriate console method based on level
73
+ switch (level) {
74
+ case 'debug':
75
+ console.log(jsonString);
76
+ break;
77
+ case 'info':
78
+ console.log(jsonString);
79
+ break;
80
+ case 'warn':
81
+ console.warn(jsonString);
82
+ break;
83
+ case 'error':
84
+ console.error(jsonString);
85
+ break;
86
+ }
87
+ }
88
+ /**
89
+ * Log debug message
90
+ */
91
+ debug(message, context) {
92
+ this.emit('debug', message, context);
93
+ }
94
+ /**
95
+ * Log info message
96
+ */
97
+ info(message, context) {
98
+ this.emit('info', message, context);
99
+ }
100
+ /**
101
+ * Log warning message
102
+ */
103
+ warn(message, context) {
104
+ this.emit('warn', message, context);
105
+ }
106
+ /**
107
+ * Log error message
108
+ */
109
+ error(message, context, error) {
110
+ this.emit('error', message, context, error);
111
+ }
112
+ }
113
+ // Create singleton instance
114
+ let loggerInstance = null;
115
+ /**
116
+ * Get logger instance
117
+ * Creates a new instance if one doesn't exist
118
+ */
119
+ export function getLogger(logLevel) {
120
+ if (!loggerInstance) {
121
+ loggerInstance = new Logger(logLevel);
122
+ }
123
+ if (logLevel) {
124
+ loggerInstance.setLevel(logLevel);
125
+ }
126
+ return loggerInstance;
127
+ }
128
+ /**
129
+ * Create a new logger instance (useful for testing)
130
+ */
131
+ export function createLogger(logLevel = 'info') {
132
+ return new Logger(logLevel);
133
+ }
134
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ProviderPackageResponse } from '../sync/types';
2
+ export interface UpstreamRepository {
3
+ id: string;
4
+ url: string;
5
+ vcs_type: string;
6
+ credential_type: string;
7
+ auth_credentials: string;
8
+ package_filter?: string | null;
9
+ }
10
+ /**
11
+ * Fetch package metadata from an upstream Composer repository
12
+ * Supports both direct packages.json and provider-includes/providers-lazy-url
13
+ */
14
+ export declare function fetchPackageFromUpstream(repo: UpstreamRepository, packageName: string, encryptionKey: string): Promise<ProviderPackageResponse | null>;
15
+ //# sourceMappingURL=upstream-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream-fetch.d.ts","sourceRoot":"","sources":["../../src/utils/upstream-fetch.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAsC,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAIjG,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,kBAAkB,EACxB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CA0EzC"}
@@ -0,0 +1,108 @@
1
+ /*
2
+ * PACKAGE.broker
3
+ * Copyright (C) 2025 Łukasz Bajsarowicz
4
+ * Licensed under AGPL-3.0
5
+ */
6
+ // Utility for fetching package metadata from upstream Composer repositories
7
+ import { buildAuthHeaders, COMPOSER_USER_AGENT } from '@package-broker/shared';
8
+ import { decryptCredentials } from './encryption';
9
+ import pRetry from 'p-retry';
10
+ /**
11
+ * Fetch package metadata from an upstream Composer repository
12
+ * Supports both direct packages.json and provider-includes/providers-lazy-url
13
+ */
14
+ export async function fetchPackageFromUpstream(repo, packageName, encryptionKey) {
15
+ const credentialsJson = JSON.parse(await decryptCredentials(repo.auth_credentials, encryptionKey));
16
+ const authHeaders = buildAuthHeaders(repo.credential_type, credentialsJson);
17
+ const baseUrl = repo.url.replace(/\/$/, '');
18
+ // First, get packages.json to understand repository structure
19
+ const packagesJsonUrl = `${baseUrl}/packages.json`;
20
+ const packagesRes = await pRetry(() => fetch(packagesJsonUrl, {
21
+ headers: {
22
+ ...authHeaders,
23
+ Accept: 'application/json',
24
+ 'User-Agent': COMPOSER_USER_AGENT,
25
+ },
26
+ }), { retries: 2 });
27
+ if (!packagesRes.ok) {
28
+ return null;
29
+ }
30
+ const packagesJson = await packagesRes.json();
31
+ // Check if uses providers-lazy-url (Composer 2 - preferred)
32
+ if (packagesJson['providers-lazy-url']) {
33
+ const lazyUrl = packagesJson['providers-lazy-url']
34
+ .replace('%package%', packageName);
35
+ const res = await pRetry(() => fetch(`${baseUrl}${lazyUrl}`, {
36
+ headers: {
37
+ ...authHeaders,
38
+ Accept: 'application/json',
39
+ 'User-Agent': COMPOSER_USER_AGENT,
40
+ },
41
+ }), { retries: 2 });
42
+ if (res.ok) {
43
+ return await res.json();
44
+ }
45
+ return null;
46
+ }
47
+ // Check if uses provider-includes (Composer 1)
48
+ if (packagesJson['providers-url'] && packagesJson['provider-includes']) {
49
+ return await fetchFromProviderIncludes(baseUrl, packagesJson, packageName, authHeaders);
50
+ }
51
+ // Direct packages - look in packages.json
52
+ if (packagesJson.packages?.[packageName]) {
53
+ return {
54
+ packages: {
55
+ [packageName]: packagesJson.packages[packageName],
56
+ },
57
+ };
58
+ }
59
+ return null;
60
+ }
61
+ /**
62
+ * Fetch package metadata using provider-includes pattern
63
+ */
64
+ async function fetchFromProviderIncludes(baseUrl, packagesJson, packageName, authHeaders) {
65
+ const providersUrl = packagesJson['providers-url'];
66
+ const providerIncludes = packagesJson['provider-includes'];
67
+ // Find which provider file contains this package
68
+ for (const [providerPath, { sha256 }] of Object.entries(providerIncludes)) {
69
+ const providerUrl = `${baseUrl}/${providerPath.replace('%hash%', sha256)}`;
70
+ try {
71
+ const response = await pRetry(() => fetch(providerUrl, {
72
+ headers: {
73
+ ...authHeaders,
74
+ Accept: 'application/json',
75
+ 'User-Agent': COMPOSER_USER_AGENT,
76
+ },
77
+ }), { retries: 2 });
78
+ if (!response.ok) {
79
+ continue;
80
+ }
81
+ const providerData = await response.json();
82
+ // Check if this provider file contains our package
83
+ if (providerData.providers?.[packageName]) {
84
+ const packageHash = providerData.providers[packageName].sha256;
85
+ // Fetch package metadata using providers-url
86
+ const packageUrl = `${baseUrl}${providersUrl
87
+ .replace('%package%', packageName)
88
+ .replace('%hash%', packageHash)}`;
89
+ const packageRes = await pRetry(() => fetch(packageUrl, {
90
+ headers: {
91
+ ...authHeaders,
92
+ Accept: 'application/json',
93
+ 'User-Agent': COMPOSER_USER_AGENT,
94
+ },
95
+ }), { retries: 2 });
96
+ if (packageRes.ok) {
97
+ return await packageRes.json();
98
+ }
99
+ }
100
+ }
101
+ catch (error) {
102
+ console.warn(`Error fetching provider file ${providerUrl}:`, error);
103
+ continue;
104
+ }
105
+ }
106
+ return null;
107
+ }
108
+ //# sourceMappingURL=upstream-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream-fetch.js","sourceRoot":"","sources":["../../src/utils/upstream-fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { PackageStorageWorkflow } from './package-storage';
2
+ export type { PackageStorageEnv, PackageStorageParams } from './package-storage';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflows/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /*
2
+ * PACKAGE.broker
3
+ * Copyright (C) 2025 Łukasz Bajsarowicz
4
+ * Licensed under AGPL-3.0
5
+ */
6
+ // Workflows - Durable background processing
7
+ export { PackageStorageWorkflow } from './package-storage';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflows/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,4CAA4C;AAE5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { WorkflowEntrypoint, WorkflowStep, WorkflowEvent } from 'cloudflare:workers';
2
+ /**
3
+ * Environment for the Package Storage Workflow
4
+ */
5
+ export interface PackageStorageEnv {
6
+ DB: D1Database;
7
+ KV?: KVNamespace;
8
+ ENCRYPTION_KEY: string;
9
+ }
10
+ /**
11
+ * Parameters passed to the workflow when triggered
12
+ */
13
+ export interface PackageStorageParams {
14
+ /** Package name in vendor/package format */
15
+ packageName: string;
16
+ /** Raw package data from upstream (Packagist or Composer repo) */
17
+ packageData: any;
18
+ /** Repository ID (e.g., 'packagist' or repo UUID) */
19
+ repoId: string;
20
+ /** Proxy base URL for transforming dist URLs */
21
+ proxyBaseUrl: string;
22
+ }
23
+ /**
24
+ * PackageStorageWorkflow - Handles CPU-intensive D1 storage in background
25
+ *
26
+ * This workflow is triggered after a package is fetched from upstream.
27
+ * It runs with higher CPU limits than the main Worker request handler,
28
+ * allowing for reliable storage of packages with many versions.
29
+ *
30
+ * Benefits:
31
+ * - Automatic retries on failure
32
+ * - Higher CPU time limits (15 minutes vs 10ms on Free tier)
33
+ * - Durable execution - survives Worker restarts
34
+ * - Observable progress and status
35
+ */
36
+ export declare class PackageStorageWorkflow extends WorkflowEntrypoint<PackageStorageEnv, PackageStorageParams> {
37
+ run(event: WorkflowEvent<PackageStorageParams>, step: WorkflowStep): Promise<{
38
+ storedCount: number;
39
+ errorCount: number;
40
+ }>;
41
+ /**
42
+ * Ensure repository exists in database
43
+ * For Packagist, creates the repository entry if missing
44
+ */
45
+ private ensureRepository;
46
+ }
47
+ //# sourceMappingURL=package-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-storage.d.ts","sourceRoot":"","sources":["../../src/workflows/package-storage.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOrF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,UAAU,CAAC;IACf,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,WAAW,EAAE,GAAG,CAAC;IACjB,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,sBAAuB,SAAQ,kBAAkB,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;IAC/F,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,YAAY;;;;IA2ExE;;;OAGG;YACW,gBAAgB;CA4D/B"}
@@ -0,0 +1,136 @@
1
+ /*
2
+ * PACKAGE.broker
3
+ * Copyright (C) 2025 Łukasz Bajsarowicz
4
+ * Licensed under AGPL-3.0
5
+ */
6
+ // Package Storage Workflow - Durable background processing for D1 storage
7
+ import { WorkflowEntrypoint } from 'cloudflare:workers';
8
+ import { createD1Database } from '../db';
9
+ import { repositories } from '../db/schema';
10
+ import { eq } from 'drizzle-orm';
11
+ import { encryptCredentials } from '../utils/encryption';
12
+ import { getLogger } from '../utils/logger';
13
+ /**
14
+ * PackageStorageWorkflow - Handles CPU-intensive D1 storage in background
15
+ *
16
+ * This workflow is triggered after a package is fetched from upstream.
17
+ * It runs with higher CPU limits than the main Worker request handler,
18
+ * allowing for reliable storage of packages with many versions.
19
+ *
20
+ * Benefits:
21
+ * - Automatic retries on failure
22
+ * - Higher CPU time limits (15 minutes vs 10ms on Free tier)
23
+ * - Durable execution - survives Worker restarts
24
+ * - Observable progress and status
25
+ */
26
+ export class PackageStorageWorkflow extends WorkflowEntrypoint {
27
+ async run(event, step) {
28
+ const { packageName, packageData, repoId, proxyBaseUrl } = event.payload;
29
+ const logger = getLogger();
30
+ logger.info('Workflow started: storing package', { packageName, repoId });
31
+ // Step 1: Ensure repository exists (with retries)
32
+ await step.do('ensure-repository', {
33
+ retries: {
34
+ limit: 3,
35
+ delay: '1 second',
36
+ backoff: 'exponential',
37
+ },
38
+ timeout: '30 seconds',
39
+ }, async () => {
40
+ const db = createD1Database(this.env.DB);
41
+ await this.ensureRepository(db, repoId);
42
+ logger.debug('Repository ensured', { repoId });
43
+ });
44
+ // Step 2: Store packages in D1 (with retries for reliability)
45
+ const result = await step.do('store-packages', {
46
+ retries: {
47
+ limit: 5,
48
+ delay: '2 seconds',
49
+ backoff: 'exponential',
50
+ },
51
+ timeout: '10 minutes', // Package storage can take time for large packages
52
+ }, async () => {
53
+ const db = createD1Database(this.env.DB);
54
+ const { transformPackageDistUrls } = await import('../routes/composer');
55
+ const { storedCount, errors } = await transformPackageDistUrls(packageData, repoId, proxyBaseUrl, db);
56
+ logger.info('Stored package versions via workflow', {
57
+ packageName,
58
+ repoId,
59
+ storedCount,
60
+ errorCount: errors.length,
61
+ });
62
+ if (errors.length > 0) {
63
+ logger.warn('Package storage errors in workflow', {
64
+ packageName,
65
+ repoId,
66
+ errors: errors.slice(0, 5), // Log first 5 errors to avoid log bloat
67
+ totalErrors: errors.length,
68
+ });
69
+ }
70
+ return { storedCount, errorCount: errors.length };
71
+ });
72
+ logger.info('Workflow completed: package stored', {
73
+ packageName,
74
+ repoId,
75
+ ...result
76
+ });
77
+ return result;
78
+ }
79
+ /**
80
+ * Ensure repository exists in database
81
+ * For Packagist, creates the repository entry if missing
82
+ */
83
+ async ensureRepository(db, repoId) {
84
+ // For Packagist, we need to ensure the repository entry exists
85
+ if (repoId === 'packagist') {
86
+ // Cache check via KV to avoid D1 query
87
+ if (this.env.KV) {
88
+ const cached = await this.env.KV.get('packagist_repo_exists');
89
+ if (cached === 'true') {
90
+ return; // Repository exists
91
+ }
92
+ }
93
+ const [existing] = await db
94
+ .select()
95
+ .from(repositories)
96
+ .where(eq(repositories.id, 'packagist'))
97
+ .limit(1);
98
+ if (existing) {
99
+ // Cache the result
100
+ if (this.env.KV) {
101
+ await this.env.KV.put('packagist_repo_exists', 'true', { expirationTtl: 3600 });
102
+ }
103
+ return;
104
+ }
105
+ // Create Packagist repository entry
106
+ const emptyCredentials = await encryptCredentials('{}', this.env.ENCRYPTION_KEY);
107
+ await db.insert(repositories).values({
108
+ id: 'packagist',
109
+ url: 'https://repo.packagist.org',
110
+ vcs_type: 'composer',
111
+ credential_type: 'none',
112
+ auth_credentials: emptyCredentials,
113
+ composer_json_path: null,
114
+ package_filter: null,
115
+ status: 'active',
116
+ created_at: Math.floor(Date.now() / 1000),
117
+ });
118
+ // Cache after creation
119
+ if (this.env.KV) {
120
+ await this.env.KV.put('packagist_repo_exists', 'true', { expirationTtl: 3600 });
121
+ }
122
+ }
123
+ else {
124
+ // For other repositories, just verify it exists
125
+ const [existing] = await db
126
+ .select()
127
+ .from(repositories)
128
+ .where(eq(repositories.id, repoId))
129
+ .limit(1);
130
+ if (!existing) {
131
+ throw new Error(`Repository ${repoId} not found`);
132
+ }
133
+ }
134
+ }
135
+ }
136
+ //# sourceMappingURL=package-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-storage.js","sourceRoot":"","sources":["../../src/workflows/package-storage.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@package-broker/core",
3
+ "version": "0.2.15",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js",
11
+ "default": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "package.json",
17
+ "README.md"
18
+ ],
19
+ "scripts": {
20
+ "lint": "echo 'no linting configured'",
21
+ "build": "tsc -p tsconfig.build.json",
22
+ "clean": "rm -rf dist",
23
+ "typecheck": "tsc --noEmit",
24
+ "db:generate": "drizzle-kit generate",
25
+ "db:push": "drizzle-kit push",
26
+ "db:studio": "drizzle-kit studio",
27
+ "prepublishOnly": "npm run clean && npm run build"
28
+ },
29
+ "dependencies": {
30
+ "@package-broker/shared": "*",
31
+ "@noble/hashes": "^1.3.3",
32
+ "@types/nodemailer": "^7.0.4",
33
+ "aws4fetch": "^1.0.19",
34
+ "drizzle-orm": "^0.29.0",
35
+ "fflate": "^0.8.2",
36
+ "hono": "^4.0.0",
37
+ "micromatch": "^4.0.5",
38
+ "nanoid": "^5.1.6",
39
+ "nodemailer": "^7.0.11",
40
+ "otplib": "^12.0.1",
41
+ "p-retry": "^6.2.0",
42
+ "qrcode": "^1.5.4",
43
+ "semver": "^7.5.4",
44
+ "zod": "^3.22.4"
45
+ },
46
+ "devDependencies": {
47
+ "@cloudflare/workers-types": "^4.20240125.0",
48
+ "@types/micromatch": "^4.0.10",
49
+ "@types/qrcode": "^1.5.6",
50
+ "@types/semver": "^7.7.1",
51
+ "drizzle-kit": "^0.20.6",
52
+ "typescript": "^5.3.3"
53
+ },
54
+ "repository": {
55
+ "type": "git",
56
+ "url": "https://github.com/package-broker/server",
57
+ "directory": "packages/core"
58
+ },
59
+ "publishConfig": {
60
+ "access": "public"
61
+ }
62
+ }