ugly-app 0.1.303 → 0.1.304

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 (119) hide show
  1. package/coverage/{server/Storage.ts.html → Storage.ts.html} +64 -112
  2. package/coverage/clover.xml +42 -4530
  3. package/coverage/coverage-final.json +1 -78
  4. package/coverage/index.html +14 -239
  5. package/dist/cli/deployRemote.d.ts.map +1 -1
  6. package/dist/cli/deployRemote.js +29 -40
  7. package/dist/cli/deployRemote.js.map +1 -1
  8. package/dist/cli/version.d.ts +1 -1
  9. package/dist/cli/version.js +1 -1
  10. package/dist/client/bootstrapApp.js.map +1 -1
  11. package/dist/server/App.js +4 -4
  12. package/dist/server/App.js.map +1 -1
  13. package/dist/server/Auth.d.ts.map +1 -1
  14. package/dist/server/Auth.js +0 -1
  15. package/dist/server/Auth.js.map +1 -1
  16. package/dist/server/Email.js +2 -2
  17. package/dist/server/Email.js.map +1 -1
  18. package/dist/server/EventCounter.js +1 -1
  19. package/dist/server/EventCounter.js.map +1 -1
  20. package/package.json +1 -1
  21. package/src/cli/deployRemote.ts +35 -38
  22. package/src/cli/version.ts +1 -1
  23. package/src/server/App.ts +3 -3
  24. package/src/server/Auth.ts +0 -2
  25. package/src/server/Email.ts +2 -2
  26. package/src/server/EventCounter.ts +1 -1
  27. package/coverage/client/AppProvider.tsx.html +0 -802
  28. package/coverage/client/FeedbackContext.ts.html +0 -133
  29. package/coverage/client/LoginPopup.tsx.html +0 -325
  30. package/coverage/client/Router.tsx.html +0 -2197
  31. package/coverage/client/Screenshot.ts.html +0 -790
  32. package/coverage/client/ViewFlipper.tsx.html +0 -778
  33. package/coverage/client/animation/Animated.tsx.html +0 -544
  34. package/coverage/client/animation/animatedValue.ts.html +0 -721
  35. package/coverage/client/animation/index.html +0 -131
  36. package/coverage/client/audio/index.html +0 -131
  37. package/coverage/client/audio/useSTT.ts.html +0 -448
  38. package/coverage/client/audio/useTTS.ts.html +0 -382
  39. package/coverage/client/components/Button.tsx.html +0 -379
  40. package/coverage/client/components/FeedbackButton.tsx.html +0 -631
  41. package/coverage/client/components/Input.tsx.html +0 -286
  42. package/coverage/client/components/Modal.tsx.html +0 -277
  43. package/coverage/client/components/Text.tsx.html +0 -349
  44. package/coverage/client/components/Toast.tsx.html +0 -235
  45. package/coverage/client/components/index.html +0 -206
  46. package/coverage/client/components/zIndex.ts.html +0 -118
  47. package/coverage/client/createSocket.ts.html +0 -2323
  48. package/coverage/client/index.html +0 -206
  49. package/coverage/collab/server/CollabServer.ts.html +0 -1675
  50. package/coverage/collab/server/index.html +0 -116
  51. package/coverage/server/Auth.ts.html +0 -988
  52. package/coverage/server/Cache.ts.html +0 -568
  53. package/coverage/server/DB.ts.html +0 -1549
  54. package/coverage/server/Email.ts.html +0 -466
  55. package/coverage/server/EmailTemplate.ts.html +0 -223
  56. package/coverage/server/EventLogAdmin.ts.html +0 -1432
  57. package/coverage/server/Postgres.ts.html +0 -172
  58. package/coverage/server/PostgresDB.ts.html +0 -874
  59. package/coverage/server/PostgresFilter.ts.html +0 -571
  60. package/coverage/server/PostgresOperators.ts.html +0 -460
  61. package/coverage/server/PostgresPipeline.ts.html +0 -871
  62. package/coverage/server/PostgresSchema.ts.html +0 -238
  63. package/coverage/server/PostgresSearch.ts.html +0 -412
  64. package/coverage/server/PushNotification.ts.html +0 -583
  65. package/coverage/server/Qdrant.ts.html +0 -415
  66. package/coverage/server/RateLimit.ts.html +0 -1087
  67. package/coverage/server/Router.ts.html +0 -520
  68. package/coverage/server/ScheduledTask.ts.html +0 -238
  69. package/coverage/server/SchemaCheck.ts.html +0 -481
  70. package/coverage/server/Socket.ts.html +0 -1468
  71. package/coverage/server/StoreHandlers.ts.html +0 -607
  72. package/coverage/server/ai/ImageGenClient.ts.html +0 -142
  73. package/coverage/server/ai/ProviderBalance.ts.html +0 -193
  74. package/coverage/server/ai/TextGenClient.ts.html +0 -244
  75. package/coverage/server/ai/WebSearchClient.ts.html +0 -190
  76. package/coverage/server/ai/index.html +0 -191
  77. package/coverage/server/ai/index.ts.html +0 -187
  78. package/coverage/server/ai/providers/UglyBotImageGenProvider.ts.html +0 -292
  79. package/coverage/server/ai/providers/UglyBotTextGenProvider.ts.html +0 -496
  80. package/coverage/server/ai/providers/UglyBotWebSearchProvider.ts.html +0 -418
  81. package/coverage/server/ai/providers/index.html +0 -146
  82. package/coverage/server/ai/types.ts.html +0 -520
  83. package/coverage/server/billing/BillingGateway.ts.html +0 -868
  84. package/coverage/server/billing/BillingLedger.ts.html +0 -910
  85. package/coverage/server/billing/CreditStore.ts.html +0 -577
  86. package/coverage/server/billing/LimitEnforcer.ts.html +0 -1237
  87. package/coverage/server/billing/UserLimitCache.ts.html +0 -388
  88. package/coverage/server/billing/index.html +0 -191
  89. package/coverage/server/billing/types.ts.html +0 -889
  90. package/coverage/server/embeddings/EmbeddingClient.ts.html +0 -217
  91. package/coverage/server/embeddings/index.html +0 -131
  92. package/coverage/server/embeddings/providers/OpenAI.ts.html +0 -196
  93. package/coverage/server/embeddings/providers/index.html +0 -116
  94. package/coverage/server/embeddings/registry.ts.html +0 -151
  95. package/coverage/server/index.html +0 -431
  96. package/coverage/shared/Api.ts.html +0 -478
  97. package/coverage/shared/Audio.ts.html +0 -1318
  98. package/coverage/shared/DB.ts.html +0 -2095
  99. package/coverage/shared/Errors.ts.html +0 -145
  100. package/coverage/shared/Experiment.ts.html +0 -298
  101. package/coverage/shared/FrameworkRequests.ts.html +0 -538
  102. package/coverage/shared/ImageGen.ts.html +0 -1861
  103. package/coverage/shared/Router.ts.html +0 -538
  104. package/coverage/shared/SchemaDiff.ts.html +0 -634
  105. package/coverage/shared/SchemaSerializer.ts.html +0 -517
  106. package/coverage/shared/TextGen.ts.html +0 -3076
  107. package/coverage/shared/Voice.ts.html +0 -331
  108. package/coverage/shared/WebSearch.ts.html +0 -169
  109. package/coverage/shared/index.html +0 -311
  110. package/coverage/shared/index.ts.html +0 -529
  111. package/coverage/three/server/VideoEncoder.ts.html +0 -2245
  112. package/coverage/three/server/index.html +0 -116
  113. package/coverage/three/shared/CameraController.ts.html +0 -1519
  114. package/coverage/three/shared/PostProcessing.ts.html +0 -1771
  115. package/coverage/three/shared/index.html +0 -131
  116. package/coverage/webrtc/server/VideoRoomServer.ts.html +0 -1726
  117. package/coverage/webrtc/server/index.html +0 -116
  118. package/coverage/worker/TaskHost.ts.html +0 -865
  119. package/coverage/worker/index.html +0 -116
@@ -3,15 +3,15 @@
3
3
  <html lang="en">
4
4
 
5
5
  <head>
6
- <title>Code coverage report for server/Storage.ts</title>
6
+ <title>Code coverage report for Storage.ts</title>
7
7
  <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../prettify.css" />
9
- <link rel="stylesheet" href="../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
8
+ <link rel="stylesheet" href="prettify.css" />
9
+ <link rel="stylesheet" href="base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
11
11
  <meta name="viewport" content="width=device-width, initial-scale=1" />
12
12
  <style type='text/css'>
13
13
  .coverage-summary .sorter {
14
- background-image: url(../sort-arrow-sprite.png);
14
+ background-image: url(sort-arrow-sprite.png);
15
15
  }
16
16
  </style>
17
17
  </head>
@@ -19,34 +19,34 @@
19
19
  <body>
20
20
  <div class='wrapper'>
21
21
  <div class='pad1'>
22
- <h1><a href="../index.html">All files</a> / <a href="index.html">server</a> Storage.ts</h1>
22
+ <h1><a href="index.html">All files</a> Storage.ts</h1>
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">97.5% </span>
26
+ <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>39/40</span>
28
+ <span class='fraction'>36/36</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">96.66% </span>
33
+ <span class="strong">94.44% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>29/30</span>
35
+ <span class='fraction'>17/18</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">90.9% </span>
40
+ <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>10/11</span>
42
+ <span class='fraction'>11/11</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">97.43% </span>
47
+ <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>38/39</span>
49
+ <span class='fraction'>36/36</span>
50
50
  </div>
51
51
 
52
52
 
@@ -198,23 +198,7 @@
198
198
  <a name='L133'></a><a href='#L133'>133</a>
199
199
  <a name='L134'></a><a href='#L134'>134</a>
200
200
  <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
201
+ <a name='L136'></a><a href='#L136'>136</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
218
202
  <span class="cline-any cline-neutral">&nbsp;</span>
219
203
  <span class="cline-any cline-neutral">&nbsp;</span>
220
204
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -222,25 +206,24 @@
222
206
  <span class="cline-any cline-neutral">&nbsp;</span>
223
207
  <span class="cline-any cline-neutral">&nbsp;</span>
224
208
  <span class="cline-any cline-neutral">&nbsp;</span>
225
- <span class="cline-any cline-yes">2x</span>
226
- <span class="cline-any cline-neutral">&nbsp;</span>
209
+ <span class="cline-any cline-yes">1x</span>
227
210
  <span class="cline-any cline-neutral">&nbsp;</span>
228
- <span class="cline-any cline-no">&nbsp;</span>
229
211
  <span class="cline-any cline-neutral">&nbsp;</span>
212
+ <span class="cline-any cline-yes">11x</span>
230
213
  <span class="cline-any cline-neutral">&nbsp;</span>
231
214
  <span class="cline-any cline-neutral">&nbsp;</span>
232
- <span class="cline-any cline-yes">20x</span>
233
215
  <span class="cline-any cline-neutral">&nbsp;</span>
216
+ <span class="cline-any cline-yes">28x</span>
234
217
  <span class="cline-any cline-neutral">&nbsp;</span>
235
218
  <span class="cline-any cline-neutral">&nbsp;</span>
236
- <span class="cline-any cline-yes">33x</span>
237
219
  <span class="cline-any cline-neutral">&nbsp;</span>
220
+ <span class="cline-any cline-yes">28x</span>
238
221
  <span class="cline-any cline-neutral">&nbsp;</span>
239
222
  <span class="cline-any cline-neutral">&nbsp;</span>
240
223
  <span class="cline-any cline-neutral">&nbsp;</span>
241
224
  <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-yes">24x</span>
243
225
  <span class="cline-any cline-neutral">&nbsp;</span>
226
+ <span class="cline-any cline-yes">29x</span>
244
227
  <span class="cline-any cline-neutral">&nbsp;</span>
245
228
  <span class="cline-any cline-neutral">&nbsp;</span>
246
229
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -251,36 +234,22 @@
251
234
  <span class="cline-any cline-neutral">&nbsp;</span>
252
235
  <span class="cline-any cline-neutral">&nbsp;</span>
253
236
  <span class="cline-any cline-neutral">&nbsp;</span>
237
+ <span class="cline-any cline-yes">17x</span>
254
238
  <span class="cline-any cline-neutral">&nbsp;</span>
255
239
  <span class="cline-any cline-neutral">&nbsp;</span>
256
- <span class="cline-any cline-yes">13x</span>
257
- <span class="cline-any cline-neutral">&nbsp;</span>
258
- <span class="cline-any cline-yes">8x</span>
259
- <span class="cline-any cline-neutral">&nbsp;</span>
260
240
  <span class="cline-any cline-neutral">&nbsp;</span>
241
+ <span class="cline-any cline-yes">25x</span>
242
+ <span class="cline-any cline-yes">12x</span>
243
+ <span class="cline-any cline-yes">12x</span>
261
244
  <span class="cline-any cline-neutral">&nbsp;</span>
262
245
  <span class="cline-any cline-neutral">&nbsp;</span>
263
246
  <span class="cline-any cline-yes">13x</span>
264
- <span class="cline-any cline-yes">2x</span>
265
- <span class="cline-any cline-neutral">&nbsp;</span>
266
- <span class="cline-any cline-neutral">&nbsp;</span>
267
- <span class="cline-any cline-yes">6x</span>
268
247
  <span class="cline-any cline-neutral">&nbsp;</span>
269
248
  <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-yes">25x</span>
270
250
  <span class="cline-any cline-neutral">&nbsp;</span>
271
- <span class="cline-any cline-yes">18x</span>
272
- <span class="cline-any cline-yes">7x</span>
273
- <span class="cline-any cline-yes">7x</span>
274
- <span class="cline-any cline-neutral">&nbsp;</span>
275
- <span class="cline-any cline-neutral">&nbsp;</span>
276
- <span class="cline-any cline-yes">11x</span>
277
- <span class="cline-any cline-neutral">&nbsp;</span>
278
- <span class="cline-any cline-neutral">&nbsp;</span>
279
- <span class="cline-any cline-neutral">&nbsp;</span>
280
- <span class="cline-any cline-neutral">&nbsp;</span>
281
- <span class="cline-any cline-yes">18x</span>
282
- <span class="cline-any cline-yes">2x</span>
283
- <span class="cline-any cline-neutral">&nbsp;</span>
251
+ <span class="cline-any cline-yes">4x</span>
252
+ <span class="cline-any cline-yes">4x</span>
284
253
  <span class="cline-any cline-neutral">&nbsp;</span>
285
254
  <span class="cline-any cline-yes">9x</span>
286
255
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -305,12 +274,12 @@
305
274
  <span class="cline-any cline-neutral">&nbsp;</span>
306
275
  <span class="cline-any cline-neutral">&nbsp;</span>
307
276
  <span class="cline-any cline-neutral">&nbsp;</span>
308
- <span class="cline-any cline-yes">24x</span>
277
+ <span class="cline-any cline-yes">29x</span>
309
278
  <span class="cline-any cline-neutral">&nbsp;</span>
310
- <span class="cline-any cline-yes">24x</span>
279
+ <span class="cline-any cline-yes">29x</span>
311
280
  <span class="cline-any cline-neutral">&nbsp;</span>
312
- <span class="cline-any cline-yes">7x</span>
313
- <span class="cline-any cline-yes">7x</span>
281
+ <span class="cline-any cline-yes">8x</span>
282
+ <span class="cline-any cline-yes">8x</span>
314
283
  <span class="cline-any cline-neutral">&nbsp;</span>
315
284
  <span class="cline-any cline-neutral">&nbsp;</span>
316
285
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -318,50 +287,49 @@
318
287
  <span class="cline-any cline-neutral">&nbsp;</span>
319
288
  <span class="cline-any cline-neutral">&nbsp;</span>
320
289
  <span class="cline-any cline-neutral">&nbsp;</span>
321
- <span class="cline-any cline-yes">5x</span>
290
+ <span class="cline-any cline-yes">8x</span>
322
291
  <span class="cline-any cline-neutral">&nbsp;</span>
323
292
  <span class="cline-any cline-neutral">&nbsp;</span>
324
293
  <span class="cline-any cline-neutral">&nbsp;</span>
325
- <span class="cline-any cline-yes">2x</span>
326
- <span class="cline-any cline-yes">2x</span>
327
- <span class="cline-any cline-yes">2x</span>
328
- <span class="cline-any cline-yes">2x</span>
329
- <span class="cline-any cline-yes">2x</span>
294
+ <span class="cline-any cline-yes">3x</span>
295
+ <span class="cline-any cline-yes">3x</span>
296
+ <span class="cline-any cline-yes">3x</span>
297
+ <span class="cline-any cline-yes">3x</span>
298
+ <span class="cline-any cline-yes">3x</span>
330
299
  <span class="cline-any cline-neutral">&nbsp;</span>
331
300
  <span class="cline-any cline-neutral">&nbsp;</span>
332
301
  <span class="cline-any cline-neutral">&nbsp;</span>
333
302
  <span class="cline-any cline-neutral">&nbsp;</span>
334
303
  <span class="cline-any cline-neutral">&nbsp;</span>
335
304
  <span class="cline-any cline-neutral">&nbsp;</span>
336
- <span class="cline-any cline-yes">2x</span>
305
+ <span class="cline-any cline-yes">3x</span>
337
306
  <span class="cline-any cline-neutral">&nbsp;</span>
338
307
  <span class="cline-any cline-neutral">&nbsp;</span>
339
- <span class="cline-any cline-yes">2x</span>
308
+ <span class="cline-any cline-yes">3x</span>
340
309
  <span class="cline-any cline-neutral">&nbsp;</span>
341
310
  <span class="cline-any cline-neutral">&nbsp;</span>
342
311
  <span class="cline-any cline-neutral">&nbsp;</span>
343
- <span class="cline-any cline-yes">9x</span>
312
+ <span class="cline-any cline-yes">11x</span>
344
313
  <span class="cline-any cline-neutral">&nbsp;</span>
345
314
  <span class="cline-any cline-neutral">&nbsp;</span>
346
315
  <span class="cline-any cline-neutral">&nbsp;</span>
347
- <span class="cline-any cline-yes">2x</span>
348
- <span class="cline-any cline-yes">2x</span>
316
+ <span class="cline-any cline-yes">3x</span>
317
+ <span class="cline-any cline-yes">3x</span>
349
318
  <span class="cline-any cline-neutral">&nbsp;</span>
350
319
  <span class="cline-any cline-neutral">&nbsp;</span>
351
320
  <span class="cline-any cline-neutral">&nbsp;</span>
352
- <span class="cline-any cline-yes">2x</span>
321
+ <span class="cline-any cline-yes">3x</span>
353
322
  <span class="cline-any cline-neutral">&nbsp;</span>
354
323
  <span class="cline-any cline-neutral">&nbsp;</span>
355
324
  <span class="cline-any cline-neutral">&nbsp;</span>
325
+ <span class="cline-any cline-yes">3x</span>
326
+ <span class="cline-any cline-yes">3x</span>
356
327
  <span class="cline-any cline-yes">2x</span>
357
328
  <span class="cline-any cline-yes">2x</span>
358
- <span class="cline-any cline-yes">1x</span>
359
- <span class="cline-any cline-neutral">&nbsp;</span>
360
- <span class="cline-any cline-yes">1x</span>
361
329
  <span class="cline-any cline-neutral">&nbsp;</span>
362
330
  <span class="cline-any cline-neutral">&nbsp;</span>
363
- <span class="cline-any cline-yes">2x</span>
364
- <span class="cline-any cline-yes">2x</span>
331
+ <span class="cline-any cline-yes">3x</span>
332
+ <span class="cline-any cline-yes">3x</span>
365
333
  <span class="cline-any cline-neutral">&nbsp;</span>
366
334
  <span class="cline-any cline-neutral">&nbsp;</span>
367
335
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -375,12 +343,12 @@ import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
375
343
  &nbsp;
376
344
  let _storagePrefix = '';
377
345
  &nbsp;
378
- export function <span class="fstat-no" title="function not covered" >setStoragePrefix(p</span>refix: string): void {
379
- <span class="cstat-no" title="statement not covered" > _storagePrefix = prefix;</span>
346
+ export function setStoragePrefix(prefix: string): void {
347
+ _storagePrefix = prefix;
380
348
  }
381
349
  &nbsp;
382
350
  function prefixKey(key: string): string {
383
- return _storagePrefix ? <span class="branch-0 cbranch-no" title="branch not covered" >`${_storagePrefix}/${key}` : k</span>ey;
351
+ return _storagePrefix ? `${_storagePrefix}/${key}` : key;
384
352
  }
385
353
  &nbsp;
386
354
  function isDev(): boolean {
@@ -395,27 +363,13 @@ function getS3Client(): S3Client {
395
363
  endpoint: process.env['MINIO_ENDPOINT'] ?? 'http://localhost:9000',
396
364
  credentials: { accessKeyId: 'minioadmin', secretAccessKey: 'minioadmin' },
397
365
  forcePathStyle: true,
398
- // Disable automatic CRC32 checksums — SDK v3.700+ bakes an empty-body
399
- // checksum into presigned URLs, which causes 403s when the actual upload
400
- // has a real body (e.g. image files via presignedPut).
401
366
  requestChecksumCalculation: 'WHEN_REQUIRED',
402
367
  responseChecksumValidation: 'WHEN_REQUIRED',
403
368
  });
404
369
  }
405
370
  &nbsp;
406
371
  function getBucketName(bucket: 'public' | 'temp'): string {
407
- if (isDev()) return bucket;
408
- const name =
409
- bucket === 'public'
410
- ? process.env['STORAGE_PUBLIC_BUCKET'] ??
411
- process.env['CLOUDFLARE_R2_PUBLIC_BUCKET']
412
- : process.env['STORAGE_TEMP_BUCKET'] ??
413
- process.env['CLOUDFLARE_R2_TEMP_BUCKET'];
414
- if (!name)
415
- throw new Error(
416
- `[Storage] STORAGE_${bucket.toUpperCase()}_BUCKET required in production`,
417
- );
418
- return name;
372
+ return bucket;
419
373
  }
420
374
  &nbsp;
421
375
  function getBaseUrl(bucket: 'public' | 'temp'): string {
@@ -423,16 +377,15 @@ function getBaseUrl(bucket: 'public' | 'temp'): string {
423
377
  const endpoint = process.env['MINIO_ENDPOINT'] ?? 'http://localhost:9000';
424
378
  return `${endpoint}/${bucket}/`;
425
379
  }
426
- const url =
427
- bucket === 'public'
428
- ? process.env['STORAGE_PUBLIC_URL'] ??
429
- process.env['CLOUDFLARE_R2_PUBLIC_URL']
430
- : process.env['STORAGE_TEMP_URL'] ??
431
- process.env['CLOUDFLARE_R2_TEMP_URL'];
432
- if (!url)
433
- throw new Error(
434
- `[Storage] STORAGE_${bucket.toUpperCase()}_URL required in production`,
435
- );
380
+ // In production, the sidecar injects STORAGE_PUBLIC_URL / STORAGE_TEMP_URL
381
+ const url = bucket === 'public'
382
+ ? process.env['STORAGE_PUBLIC_URL']
383
+ : process.env['STORAGE_TEMP_URL'];
384
+ if (!url) {
385
+ // Fall back to sidecar endpoint if URLs not injected
386
+ const endpoint = process.env['MINIO_ENDPOINT'] ?? <span class="branch-1 cbranch-no" title="branch not covered" >'http://localhost:9000';</span>
387
+ return `${endpoint}/${bucket}/`;
388
+ }
436
389
  return url.endsWith('/') ? url : url + '/';
437
390
  }
438
391
  &nbsp;
@@ -507,7 +460,6 @@ export function createStorageClient(): StorageClient {
507
460
  let proxiedUploadUrl = uploadUrl;
508
461
  if (isDev()) {
509
462
  const parsed = new URL(uploadUrl);
510
- // Replace S3 origin with a same-origin path that Express will proxy
511
463
  proxiedUploadUrl = `/_s3${parsed.pathname}${parsed.search}`;
512
464
  }
513
465
  &nbsp;
@@ -523,16 +475,16 @@ export function createStorageClient(): StorageClient {
523
475
  <div class='footer quiet pad2 space-top1 center small'>
524
476
  Code coverage generated by
525
477
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
526
- at 2026-04-05T11:16:35.412Z
478
+ at 2026-04-08T15:50:02.828Z
527
479
  </div>
528
- <script src="../prettify.js"></script>
480
+ <script src="prettify.js"></script>
529
481
  <script>
530
482
  window.onload = function () {
531
483
  prettyPrint();
532
484
  };
533
485
  </script>
534
- <script src="../sorter.js"></script>
535
- <script src="../block-navigation.js"></script>
486
+ <script src="sorter.js"></script>
487
+ <script src="block-navigation.js"></script>
536
488
  </body>
537
489
  </html>
538
490