@trokky/trokky 3.0.0 → 3.2.0

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 (100) hide show
  1. package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.d.ts +132 -0
  2. package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.d.ts.map +1 -0
  3. package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.js +811 -0
  4. package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.js.map +1 -0
  5. package/dist/adapters/cloudflare-d1/index.d.ts +5 -0
  6. package/dist/adapters/cloudflare-d1/index.d.ts.map +1 -0
  7. package/dist/adapters/cloudflare-d1/index.js +12 -0
  8. package/dist/adapters/cloudflare-d1/index.js.map +1 -0
  9. package/dist/adapters/cloudflare-d1/rate-limit-store.d.ts +46 -0
  10. package/dist/adapters/cloudflare-d1/rate-limit-store.d.ts.map +1 -0
  11. package/dist/adapters/cloudflare-d1/rate-limit-store.js +96 -0
  12. package/dist/adapters/cloudflare-d1/rate-limit-store.js.map +1 -0
  13. package/dist/adapters/cloudflare-d1/types.d.ts +69 -0
  14. package/dist/adapters/cloudflare-d1/types.d.ts.map +1 -0
  15. package/dist/adapters/cloudflare-d1/types.js +2 -0
  16. package/dist/adapters/cloudflare-d1/types.js.map +1 -0
  17. package/dist/adapters/cloudflare-r2/cloudflare-r2-adapter.d.ts +86 -0
  18. package/dist/adapters/cloudflare-r2/cloudflare-r2-adapter.d.ts.map +1 -0
  19. package/dist/adapters/cloudflare-r2/cloudflare-r2-adapter.js +493 -0
  20. package/dist/adapters/cloudflare-r2/cloudflare-r2-adapter.js.map +1 -0
  21. package/dist/adapters/cloudflare-r2/index.d.ts +3 -0
  22. package/dist/adapters/cloudflare-r2/index.d.ts.map +1 -0
  23. package/dist/adapters/cloudflare-r2/index.js +11 -0
  24. package/dist/adapters/cloudflare-r2/index.js.map +1 -0
  25. package/dist/adapters/cloudflare-r2/types.d.ts +43 -0
  26. package/dist/adapters/cloudflare-r2/types.d.ts.map +1 -0
  27. package/dist/adapters/cloudflare-r2/types.js +2 -0
  28. package/dist/adapters/cloudflare-r2/types.js.map +1 -0
  29. package/dist/core/media/image-processor.d.ts.map +1 -1
  30. package/dist/core/media/image-processor.js +5 -13
  31. package/dist/core/media/image-processor.js.map +1 -1
  32. package/dist/core/media/processors/sharp.d.ts.map +1 -1
  33. package/dist/core/media/processors/sharp.js +13 -2
  34. package/dist/core/media/processors/sharp.js.map +1 -1
  35. package/dist/core/media/processors/types.d.ts +1 -1
  36. package/dist/core/media/processors/types.d.ts.map +1 -1
  37. package/dist/core/security/rate-limit-store.d.ts +56 -0
  38. package/dist/core/security/rate-limit-store.d.ts.map +1 -0
  39. package/dist/core/security/rate-limit-store.js +55 -0
  40. package/dist/core/security/rate-limit-store.js.map +1 -0
  41. package/dist/core/security/rate-limiter.d.ts +30 -2
  42. package/dist/core/security/rate-limiter.d.ts.map +1 -1
  43. package/dist/core/security/rate-limiter.js +50 -19
  44. package/dist/core/security/rate-limiter.js.map +1 -1
  45. package/dist/core/services/media-service.d.ts +34 -0
  46. package/dist/core/services/media-service.d.ts.map +1 -1
  47. package/dist/core/services/media-service.js +172 -120
  48. package/dist/core/services/media-service.js.map +1 -1
  49. package/dist/core/utils/retry.d.ts +45 -0
  50. package/dist/core/utils/retry.d.ts.map +1 -0
  51. package/dist/core/utils/retry.js +47 -0
  52. package/dist/core/utils/retry.js.map +1 -0
  53. package/dist/integrations/express/config.d.ts +31 -14
  54. package/dist/integrations/express/config.d.ts.map +1 -1
  55. package/dist/integrations/express/config.js +25 -8
  56. package/dist/integrations/express/config.js.map +1 -1
  57. package/dist/integrations/express/integration.d.ts.map +1 -1
  58. package/dist/integrations/express/integration.js +13 -6
  59. package/dist/integrations/express/integration.js.map +1 -1
  60. package/dist/integrations/express/server.d.ts.map +1 -1
  61. package/dist/integrations/express/server.js +5 -2
  62. package/dist/integrations/express/server.js.map +1 -1
  63. package/dist/integrations/express/types.d.ts +0 -5
  64. package/dist/integrations/express/types.d.ts.map +1 -1
  65. package/dist/integrations/workers/adapter.d.ts +28 -0
  66. package/dist/integrations/workers/adapter.d.ts.map +1 -0
  67. package/dist/integrations/workers/adapter.js +111 -0
  68. package/dist/integrations/workers/adapter.js.map +1 -0
  69. package/dist/integrations/workers/index.d.ts +22 -0
  70. package/dist/integrations/workers/index.d.ts.map +1 -0
  71. package/dist/integrations/workers/index.js +60 -0
  72. package/dist/integrations/workers/index.js.map +1 -0
  73. package/dist/routes/auth/auth-flow-store.d.ts +17 -0
  74. package/dist/routes/auth/auth-flow-store.d.ts.map +1 -1
  75. package/dist/routes/auth/auth-flow-store.js +27 -0
  76. package/dist/routes/auth/auth-flow-store.js.map +1 -1
  77. package/dist/routes/auth/oauth.d.ts.map +1 -1
  78. package/dist/routes/auth/oauth.js +5 -12
  79. package/dist/routes/auth/oauth.js.map +1 -1
  80. package/dist/routes/auth/passkey.d.ts.map +1 -1
  81. package/dist/routes/auth/passkey.js +5 -8
  82. package/dist/routes/auth/passkey.js.map +1 -1
  83. package/dist/structure/validation/schemas.d.ts +69 -69
  84. package/package.json +20 -1
  85. package/dist/core/media/processors/cloudflare-images.d.ts +0 -83
  86. package/dist/core/media/processors/cloudflare-images.d.ts.map +0 -1
  87. package/dist/core/media/processors/cloudflare-images.js +0 -241
  88. package/dist/core/media/processors/cloudflare-images.js.map +0 -1
  89. package/dist/core/media/processors/cloudflare-transform-store.d.ts +0 -127
  90. package/dist/core/media/processors/cloudflare-transform-store.d.ts.map +0 -1
  91. package/dist/core/media/processors/cloudflare-transform-store.js +0 -237
  92. package/dist/core/media/processors/cloudflare-transform-store.js.map +0 -1
  93. package/dist/core/media/processors/cloudflare-transformations.d.ts +0 -81
  94. package/dist/core/media/processors/cloudflare-transformations.d.ts.map +0 -1
  95. package/dist/core/media/processors/cloudflare-transformations.js +0 -144
  96. package/dist/core/media/processors/cloudflare-transformations.js.map +0 -1
  97. package/dist/core/media/processors/workers-images.d.ts +0 -112
  98. package/dist/core/media/processors/workers-images.d.ts.map +0 -1
  99. package/dist/core/media/processors/workers-images.js +0 -257
  100. package/dist/core/media/processors/workers-images.js.map +0 -1
@@ -1,4 +1,5 @@
1
1
  import { SecurityValidator } from '../security/validation.js';
2
+ import { withRetry } from '../utils/retry.js';
2
3
  import { mediaUploaded, mediaDeleted } from '../events/index.js';
3
4
  import { DocumentNotFoundError, InvalidInputError } from '../errors/index.js';
4
5
  /**
@@ -29,90 +30,52 @@ export class MediaService {
29
30
  const mediaFile = await this.deps.mediaStorage.uploadFile(file, metadata);
30
31
  // Process image if it's an image file
31
32
  if (file.type.startsWith('image/')) {
32
- try {
33
- const processedImage = await this.deps.getImageProcessor().processImage(file, {
34
- id: metadata.id,
35
- filename: metadata.filename,
36
- path: metadata.filename // Use filename as fallback since we don't have the full path here
37
- });
38
- // Save variant files directly to storage without creating separate MediaFile records
39
- const savedVariants = {};
40
- for (const [variantName, variantData] of Object.entries(processedImage.variants)) {
41
- if (variantData.buffer) {
42
- try {
43
- // Save variant file directly using storage adapter's variant support
44
- if (this.deps.mediaStorage.saveVariantFile) {
45
- const variantPath = await this.deps.mediaStorage.saveVariantFile(metadata.id, variantName, variantData.buffer, variantData.format);
46
- // Store variant info without URL - let frontend handle URL construction
47
- savedVariants[variantName] = {
48
- width: variantData.width,
49
- height: variantData.height,
50
- format: variantData.format,
51
- size: variantData.size
52
- };
53
- this.deps.logger.info('Variant file saved directly', {
54
- parentId: metadata.id,
55
- variantName,
56
- path: variantPath
57
- });
58
- }
59
- else {
60
- // Fallback: just store metadata without physical files for now
61
- savedVariants[variantName] = {
62
- url: variantData.url,
63
- width: variantData.width,
64
- height: variantData.height,
65
- format: variantData.format,
66
- size: variantData.size
67
- };
68
- this.deps.logger.warn('Storage adapter does not support variant files - storing metadata only', {
69
- parentId: metadata.id,
70
- variantName
71
- });
72
- }
73
- }
74
- catch (variantError) {
75
- this.deps.logger.warn('Failed to save variant file', {
76
- parentId: metadata.id,
77
- variantName,
78
- error: variantError instanceof Error ? variantError.message : 'Unknown error'
79
- });
80
- }
81
- }
82
- }
83
- // Store processed image metadata in the media file
84
- mediaFile.metadata = {
85
- ...mediaFile.metadata,
86
- imageVariants: savedVariants,
87
- originalDimensions: {
88
- width: processedImage.original.width,
89
- height: processedImage.original.height
90
- }
91
- };
92
- // Save the updated metadata back to storage
33
+ const outcome = await this.generateVariants(metadata.id, file, {
34
+ id: metadata.id,
35
+ filename: metadata.filename,
36
+ // Use filename as fallback since we don't have the full path here
37
+ path: metadata.filename
38
+ });
39
+ mediaFile.metadata = {
40
+ ...mediaFile.metadata,
41
+ imageVariants: outcome.variants,
42
+ ...(outcome.originalDimensions ? { originalDimensions: outcome.originalDimensions } : {}),
43
+ ...(outcome.report ? { imageProcessing: outcome.report } : {})
44
+ };
45
+ // Persist the variant metadata. Without this the variant files exist in storage and
46
+ // nothing references them, which is invisible until someone notices missing thumbnails —
47
+ // so it retries, and a final failure is reported rather than logged and forgotten.
48
+ if (this.deps.mediaStorage.updateFile) {
49
+ const update = this.deps.mediaStorage.updateFile.bind(this.deps.mediaStorage);
93
50
  try {
94
- if (this.deps.mediaStorage.updateFile) {
95
- await this.deps.mediaStorage.updateFile(mediaFile.id, mediaFile.metadata);
96
- }
51
+ await withRetry(() => update(mediaFile.id, mediaFile.metadata), this.retryOptions('persist image variant metadata', { fileId: metadata.id }));
97
52
  this.deps.logger.info('Image variants metadata saved', {
98
53
  fileId: metadata.id,
99
- variantCount: Object.keys(processedImage.variants).length
54
+ variantCount: Object.keys(outcome.variants).length
100
55
  });
101
56
  }
102
57
  catch (updateError) {
103
- this.deps.logger.warn('Failed to save image variants metadata', {
58
+ const message = updateError instanceof Error ? updateError.message : 'Unknown error';
59
+ // The upload itself succeeded and the original is stored, so throwing here would tell
60
+ // the caller to re-upload a file that is already safe. Report it on the record the
61
+ // caller receives instead, and at error level rather than as a warning.
62
+ this.deps.logger.error('Image variants metadata could not be saved', {
104
63
  fileId: metadata.id,
105
- error: updateError instanceof Error ? updateError.message : 'Unknown error'
64
+ error: message
106
65
  });
66
+ mediaFile.metadata = {
67
+ ...mediaFile.metadata,
68
+ imageProcessing: {
69
+ status: 'failed',
70
+ failures: [
71
+ ...(outcome.report?.failures ?? []),
72
+ { stage: 'persist-metadata', error: message }
73
+ ],
74
+ failedAt: new Date().toISOString()
75
+ }
76
+ };
107
77
  }
108
78
  }
109
- catch (error) {
110
- // Log error but don't fail the upload - image processing is optional
111
- this.deps.logger.warn('Image processing failed', {
112
- fileId: metadata.id,
113
- error: error instanceof Error ? error.message : 'Unknown error'
114
- });
115
- }
116
79
  }
117
80
  // Emit media uploaded event
118
81
  if (this.deps.eventsEnabled) {
@@ -128,6 +91,113 @@ export class MediaService {
128
91
  }
129
92
  return mediaFile;
130
93
  }
94
+ /**
95
+ * Retry policy for the remote-backed steps of media processing.
96
+ *
97
+ * Cloudflare's Images service fails a small share of calls transiently — measured at roughly
98
+ * one in fifteen for a 6MB JPEG — and every one of those used to cost a thumbnail silently.
99
+ * Input the service will never accept is not retried: that is a permanent failure and should
100
+ * surface immediately rather than after three waits.
101
+ */
102
+ retryOptions(operation, context) {
103
+ return {
104
+ attempts: 3,
105
+ isRetryable: (error) => {
106
+ const message = error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();
107
+ const permanent = [
108
+ 'unsupported', 'invalid', 'too large', 'not an image', 'unsupported format', 'malformed'
109
+ ];
110
+ return !permanent.some(marker => message.includes(marker));
111
+ },
112
+ onRetry: ({ error, attempt, delayMs }) => {
113
+ this.deps.logger.warn(`Retrying: ${operation}`, {
114
+ ...context,
115
+ attempt,
116
+ delayMs,
117
+ error: error instanceof Error ? error.message : 'Unknown error'
118
+ });
119
+ }
120
+ };
121
+ }
122
+ /**
123
+ * Generate every variant for an image and write them to storage.
124
+ *
125
+ * Shared by upload and regeneration so both get the same retries and the same reporting. A
126
+ * failure never throws: the original file is already stored and is what the caller actually
127
+ * uploaded. But a failure is never swallowed either — it comes back in `report`, which the
128
+ * caller attaches to the media record, so an image with missing variants says so instead of
129
+ * looking complete.
130
+ */
131
+ async generateVariants(id, file, metadata) {
132
+ const failures = [];
133
+ let processedImage;
134
+ try {
135
+ processedImage = await withRetry(() => this.deps.getImageProcessor().processImage(file, metadata), this.retryOptions('process image', { fileId: id }));
136
+ }
137
+ catch (error) {
138
+ const message = error instanceof Error ? error.message : 'Unknown error';
139
+ this.deps.logger.error('Image processing failed after retries', { fileId: id, error: message });
140
+ return {
141
+ variants: {},
142
+ report: {
143
+ status: 'failed',
144
+ failures: [{ stage: 'process', error: message }],
145
+ failedAt: new Date().toISOString()
146
+ }
147
+ };
148
+ }
149
+ const variants = {};
150
+ const saveVariantFile = this.deps.mediaStorage.saveVariantFile?.bind(this.deps.mediaStorage);
151
+ for (const [variantName, variantData] of Object.entries(processedImage.variants)) {
152
+ if (!variantData.buffer)
153
+ continue;
154
+ if (!saveVariantFile) {
155
+ // No variant storage: keep the processor's own URL, which is all there is to keep.
156
+ variants[variantName] = {
157
+ url: variantData.url,
158
+ width: variantData.width,
159
+ height: variantData.height,
160
+ format: variantData.format,
161
+ size: variantData.size
162
+ };
163
+ this.deps.logger.warn('Storage adapter does not support variant files - storing metadata only', {
164
+ parentId: id,
165
+ variantName
166
+ });
167
+ continue;
168
+ }
169
+ try {
170
+ const variantPath = await withRetry(() => saveVariantFile(id, variantName, variantData.buffer, variantData.format), this.retryOptions('save variant file', { parentId: id, variantName }));
171
+ // Store variant info without URL - let frontend handle URL construction
172
+ variants[variantName] = {
173
+ width: variantData.width,
174
+ height: variantData.height,
175
+ format: variantData.format,
176
+ size: variantData.size
177
+ };
178
+ this.deps.logger.info('Variant file saved', { parentId: id, variantName, path: variantPath });
179
+ }
180
+ catch (variantError) {
181
+ const message = variantError instanceof Error ? variantError.message : 'Unknown error';
182
+ this.deps.logger.error('Variant file could not be saved after retries', {
183
+ parentId: id,
184
+ variantName,
185
+ error: message
186
+ });
187
+ failures.push({ stage: 'save-variant', variant: variantName, error: message });
188
+ }
189
+ }
190
+ return {
191
+ variants,
192
+ originalDimensions: {
193
+ width: processedImage.original.width,
194
+ height: processedImage.original.height
195
+ },
196
+ report: failures.length === 0
197
+ ? undefined
198
+ : { status: 'partial', failures, failedAt: new Date().toISOString() }
199
+ };
200
+ }
131
201
  async getMedia(id) {
132
202
  if (this.deps.rateLimiter) {
133
203
  await this.deps.rateLimiter.checkRateLimit('getMedia');
@@ -235,69 +305,51 @@ export class MediaService {
235
305
  const file = new File([new Uint8Array(fileContent)], mediaFile.filename, {
236
306
  type: mediaFile.contentType
237
307
  });
238
- // Process the image to generate new variants
239
- const processedImage = await this.deps.getImageProcessor().processImage(file, {
240
- id: mediaFile.id,
241
- filename: mediaFile.filename,
242
- path: mediaFile.metadata?.path || mediaFile.filename
243
- });
244
- // Delete existing variants first
308
+ // Delete existing variants first. A failure here is not fatal — the names are about to be
309
+ // overwritten anyway — but it is reported rather than dropped, because leftovers of a
310
+ // format no longer generated would linger in storage.
311
+ const staleVariantFailures = [];
245
312
  if (this.deps.mediaStorage.deleteVariantFiles) {
313
+ const deleteVariantFiles = this.deps.mediaStorage.deleteVariantFiles.bind(this.deps.mediaStorage);
246
314
  try {
247
- await this.deps.mediaStorage.deleteVariantFiles(id);
315
+ await withRetry(() => deleteVariantFiles(id), this.retryOptions('delete existing variants', { id }));
248
316
  this.deps.logger.info('Existing variants deleted', { id });
249
317
  }
250
318
  catch (deleteError) {
251
- this.deps.logger.warn('Failed to delete existing variants', { id, error: deleteError });
252
- }
253
- }
254
- // Save new variant files
255
- const savedVariants = {};
256
- for (const [variantName, variantData] of Object.entries(processedImage.variants)) {
257
- if (variantData.buffer) {
258
- try {
259
- if (this.deps.mediaStorage.saveVariantFile) {
260
- const variantPath = await this.deps.mediaStorage.saveVariantFile(id, variantName, variantData.buffer, variantData.format);
261
- // Store variant info without URL - let frontend handle URL construction
262
- savedVariants[variantName] = {
263
- width: variantData.width,
264
- height: variantData.height,
265
- format: variantData.format,
266
- size: variantData.size
267
- };
268
- this.deps.logger.info('New variant saved', {
269
- parentId: id,
270
- variantName,
271
- path: variantPath
272
- });
273
- }
274
- }
275
- catch (variantError) {
276
- this.deps.logger.warn('Failed to save new variant', {
277
- parentId: id,
278
- variantName,
279
- error: variantError instanceof Error ? variantError.message : 'Unknown error'
280
- });
281
- }
319
+ const message = deleteError instanceof Error ? deleteError.message : 'Unknown error';
320
+ this.deps.logger.error('Existing variants could not be deleted after retries', { id, error: message });
321
+ staleVariantFailures.push({ stage: 'save-variant', error: `stale variants left in place: ${message}` });
282
322
  }
283
323
  }
324
+ // The same generation path as upload, so retries and reporting cannot drift apart.
325
+ const outcome = await this.generateVariants(id, file, {
326
+ id: mediaFile.id,
327
+ filename: mediaFile.filename,
328
+ path: mediaFile.metadata?.path || mediaFile.filename
329
+ });
330
+ const failures = [...staleVariantFailures, ...(outcome.report?.failures ?? [])];
284
331
  // Update metadata with new variants
285
332
  const updatedMetadata = {
286
333
  ...mediaFile.metadata,
287
- imageVariants: savedVariants,
288
- originalDimensions: {
289
- width: processedImage.original.width,
290
- height: processedImage.original.height
291
- }
334
+ imageVariants: outcome.variants,
335
+ ...(outcome.originalDimensions ? { originalDimensions: outcome.originalDimensions } : {}),
336
+ imageProcessing: failures.length === 0
337
+ ? undefined
338
+ : {
339
+ status: outcome.report?.status ?? 'partial',
340
+ failures,
341
+ failedAt: new Date().toISOString()
342
+ }
292
343
  };
293
344
  // Save updated metadata
294
345
  const updatedMediaFile = await this.deps.mediaStorage.updateFile?.(id, updatedMetadata);
295
346
  if (!updatedMediaFile) {
296
347
  throw new Error('Failed to update media file metadata');
297
348
  }
298
- this.deps.logger.info('Variants regenerated successfully', {
349
+ this.deps.logger.info('Variants regenerated', {
299
350
  id,
300
- variantCount: Object.keys(savedVariants).length
351
+ variantCount: Object.keys(outcome.variants).length,
352
+ failureCount: failures.length
301
353
  });
302
354
  return updatedMediaFile;
303
355
  }
@@ -1 +1 @@
1
- {"version":3,"file":"media-service.js","sourceRoot":"","sources":["../../../src/core/services/media-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"media-service.js","sourceRoot":"","sources":["../../../src/core/services/media-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Retry with exponential backoff and jitter.
3
+ *
4
+ * This exists because remote media processing is not reliable enough to call once. Measured
5
+ * against Cloudflare's real Images service, roughly one call in fifteen of a 6MB JPEG fails
6
+ * with a transient error ("Network connection lost", "internal error; reference = ..."), and a
7
+ * single failure there used to mean an image silently ended up with no thumbnail.
8
+ *
9
+ * Jitter is not decoration. Variants are generated in a loop, so a batch that fails together
10
+ * would otherwise retry together, in step, and hit the same overloaded backend at the same
11
+ * moment. Each delay is therefore spread across half its window.
12
+ */
13
+ /** Options for {@link withRetry}. All have defaults chosen for a remote image transform. */
14
+ export interface RetryOptions {
15
+ /** Total attempts, first one included. One means no retry at all. @default 3 */
16
+ attempts?: number;
17
+ /** Delay before the first retry, doubling from there. @default 200 */
18
+ baseDelayMs?: number;
19
+ /** Ceiling on any single delay, so backoff cannot run away. @default 5000 */
20
+ maxDelayMs?: number;
21
+ /**
22
+ * Whether an error is worth retrying. Return false for anything a second attempt cannot fix —
23
+ * an unsupported format, a rejected size — so a permanent failure fails fast.
24
+ * @default everything is retryable
25
+ */
26
+ isRetryable?: (error: unknown) => boolean;
27
+ /** Called before sleeping, so a caller can log that it is about to retry. */
28
+ onRetry?: (details: {
29
+ error: unknown;
30
+ attempt: number;
31
+ delayMs: number;
32
+ }) => void;
33
+ /** Injectable for tests, so a suite never actually waits. */
34
+ sleep?: (ms: number) => Promise<void>;
35
+ /** Injectable for tests, so jitter can be made deterministic. @default Math.random */
36
+ random?: () => number;
37
+ }
38
+ /**
39
+ * Run `operation`, retrying transient failures with exponential backoff.
40
+ *
41
+ * Rethrows the last error once the attempts are spent, so a caller still sees a real failure —
42
+ * retrying is meant to absorb flakiness, never to hide it.
43
+ */
44
+ export declare function withRetry<T>(operation: () => Promise<T>, options?: RetryOptions): Promise<T>;
45
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/core/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,4FAA4F;AAC5F,MAAM,WAAW,YAAY;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAA;IACzC,6EAA6E;IAC7E,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACjF,6DAA6D;IAC7D,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;CACtB;AAID;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CA6BZ"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Retry with exponential backoff and jitter.
3
+ *
4
+ * This exists because remote media processing is not reliable enough to call once. Measured
5
+ * against Cloudflare's real Images service, roughly one call in fifteen of a 6MB JPEG fails
6
+ * with a transient error ("Network connection lost", "internal error; reference = ..."), and a
7
+ * single failure there used to mean an image silently ended up with no thumbnail.
8
+ *
9
+ * Jitter is not decoration. Variants are generated in a loop, so a batch that fails together
10
+ * would otherwise retry together, in step, and hit the same overloaded backend at the same
11
+ * moment. Each delay is therefore spread across half its window.
12
+ */
13
+ const defaultSleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
14
+ /**
15
+ * Run `operation`, retrying transient failures with exponential backoff.
16
+ *
17
+ * Rethrows the last error once the attempts are spent, so a caller still sees a real failure —
18
+ * retrying is meant to absorb flakiness, never to hide it.
19
+ */
20
+ export async function withRetry(operation, options = {}) {
21
+ const attempts = Math.max(1, options.attempts ?? 3);
22
+ const baseDelayMs = options.baseDelayMs ?? 200;
23
+ const maxDelayMs = options.maxDelayMs ?? 5000;
24
+ const isRetryable = options.isRetryable ?? (() => true);
25
+ const sleep = options.sleep ?? defaultSleep;
26
+ const random = options.random ?? Math.random;
27
+ let lastError;
28
+ for (let attempt = 1; attempt <= attempts; attempt++) {
29
+ try {
30
+ return await operation();
31
+ }
32
+ catch (error) {
33
+ lastError = error;
34
+ // The last attempt and an error nothing will fix both mean: stop now, surface it.
35
+ if (attempt === attempts || !isRetryable(error))
36
+ break;
37
+ const window = Math.min(maxDelayMs, baseDelayMs * 2 ** (attempt - 1));
38
+ // Equal jitter: half the window guaranteed, half spread, so concurrent callers separate
39
+ // without any of them retrying immediately.
40
+ const delayMs = Math.round(window / 2 + random() * (window / 2));
41
+ options.onRetry?.({ error, attempt, delayMs });
42
+ await sleep(delayMs);
43
+ }
44
+ }
45
+ throw lastError;
46
+ }
47
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/core/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAwBH,MAAM,YAAY,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAEnG;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,SAA2B,EAC3B,UAAwB,EAAE;IAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAA;IACnD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,GAAG,CAAA;IAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAA;IAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAAA;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAA;IAE5C,IAAI,SAAkB,CAAA;IACtB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;QACrD,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAA;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAA;YAEjB,kFAAkF;YAClF,IAAI,OAAO,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBAAE,MAAK;YAEtD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;YACrE,wFAAwF;YACxF,4CAA4C;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;YAEhE,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;YAC9C,MAAM,KAAK,CAAC,OAAO,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAA;AACjB,CAAC"}
@@ -261,6 +261,14 @@ export interface ServerConfig {
261
261
  * and lives at the top level of the config as `structure`.
262
262
  */
263
263
  export interface StudioConfig {
264
+ /**
265
+ * Public URL the Studio is reachable at, e.g. `https://cms.example.com/studio`.
266
+ * This is the one thing the server needs to know about where the site mounted
267
+ * the Studio: it derives the device-flow approval page (`<url>/auth/device`)
268
+ * and the base of links in system emails from it. Defaults to the
269
+ * `STUDIO_URL` environment variable.
270
+ */
271
+ url?: string;
264
272
  /** Studio branding (also merged with the branding stored in settings) */
265
273
  branding?: {
266
274
  title?: string;
@@ -271,17 +279,7 @@ export interface StudioConfig {
271
279
  accent?: string;
272
280
  };
273
281
  };
274
- /** Custom field types */
275
- fields?: any[];
276
- /** Studio behavior settings */
277
- settings?: {
278
- pageSize?: number;
279
- enableDrafts?: boolean;
280
- enableVersioning?: boolean;
281
- autoSave?: boolean;
282
- autosaveInterval?: number;
283
- };
284
- /** Session management */
282
+ /** Session management, served to the Studio over the API */
285
283
  session?: {
286
284
  refreshBuffer?: number;
287
285
  warningBuffer?: number;
@@ -289,6 +287,23 @@ export interface StudioConfig {
289
287
  inactivityTimeout?: number;
290
288
  };
291
289
  }
290
+ /**
291
+ * Keys under `studio` that no longer do anything. They are accepted and reported
292
+ * at boot rather than refused: nothing depended on them, so a site carrying
293
+ * them keeps starting while its owner cleans them up.
294
+ */
295
+ export declare const IGNORED_STUDIO_KEYS: Record<string, string>;
296
+ /** Names the `studio` keys that are accepted but do nothing. */
297
+ export declare function ignoredStudioKeys(studio: unknown): string[];
298
+ /**
299
+ * The Studio's public URL, from the config or the STUDIO_URL environment
300
+ * variable, without a trailing slash. Undefined when neither is set.
301
+ */
302
+ export declare function resolveStudioUrl(config: {
303
+ studio?: {
304
+ url?: string;
305
+ };
306
+ } | undefined): string | undefined;
292
307
  /**
293
308
  * Keys that used to live under `studio` and are refused since 3.0, with the
294
309
  * message the server prints so the migration is obvious.
@@ -533,8 +548,8 @@ export interface TrokkyConfig {
533
548
  issuer?: string;
534
549
  /**
535
550
  * Where the device-code flow sends a person to approve a sign-in (RFC 8628
536
- * `verification_uri`). Studio serves that page at `<studio mount>/auth/device`.
537
- * Default: `${issuer}/studio/auth/device`.
551
+ * `verification_uri`). Rarely needed: it is derived from `studio.url` as
552
+ * `<studio.url>/auth/device`, falling back to `${issuer}/studio/auth/device`.
538
553
  */
539
554
  verificationUri?: string;
540
555
  accessTokenTtl?: number;
@@ -599,7 +614,9 @@ export interface TrokkyConfigWithDefaults extends TrokkyConfig {
599
614
  trustProxy?: boolean | number | string;
600
615
  };
601
616
  structure?: any;
602
- studio: Required<StudioConfig>;
617
+ studio: Required<Omit<StudioConfig, 'url'>> & {
618
+ url?: string;
619
+ };
603
620
  /** i18n configuration with defaults applied */
604
621
  i18n: Required<I18nConfig>;
605
622
  mail?: MailConfig;