@teamscala/service-boot 0.23.522 → 0.23.523

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/asset-proxy.ts +17 -2
package/package.json CHANGED
@@ -302,5 +302,5 @@
302
302
  "repository": "https://github.com/teamgbg/service-boot",
303
303
  "sideEffects": false,
304
304
  "type": "module",
305
- "version": "0.23.522"
305
+ "version": "0.23.523"
306
306
  }
@@ -7,8 +7,12 @@
7
7
  * Streams objects from the configured S3 bucket, converting PNG/JPEG
8
8
  * to WebP/AVIF when the browser declares support via Accept header.
9
9
  * Returns 404 for missing keys, 502 for S3 failures. Never redirects.
10
+ * Every non-2xx exit records which stage failed through the app logger:
11
+ * a 404 and a 502 are indistinguishable at the socket, so the fault plane
12
+ * (credential resolution vs store side) is only observable in the log.
10
13
  */
11
14
 
15
+ import { getAppLogger } from "@teamscala/logger/app-loggers";
12
16
  import { getClient } from "@teamscala/object-storage/create/client/get-client";
13
17
  import {
14
18
  buildEtag,
@@ -37,6 +41,9 @@ export async function handleAssetProxy(req: Request): Promise<Response> {
37
41
 
38
42
  const s3 = await getClient();
39
43
  if (!s3) {
44
+ getAppLogger().error("[asset-proxy] no storage client — credential resolution returned no client", {
45
+ key,
46
+ });
40
47
  return new Response("", { status: 502 });
41
48
  }
42
49
 
@@ -45,7 +52,11 @@ export async function handleAssetProxy(req: Request): Promise<Response> {
45
52
  let stats: Awaited<ReturnType<typeof file.stat>>;
46
53
  try {
47
54
  stats = await file.stat();
48
- } catch {
55
+ } catch (err) {
56
+ getAppLogger().error("[asset-proxy] store stat failed", {
57
+ error: err,
58
+ key,
59
+ });
49
60
  return new Response("Not Found", { status: 404 });
50
61
  }
51
62
 
@@ -117,7 +128,11 @@ export async function handleAssetProxy(req: Request): Promise<Response> {
117
128
  let body: ReadableStream<Uint8Array<ArrayBuffer>>;
118
129
  try {
119
130
  body = file.stream();
120
- } catch {
131
+ } catch (err) {
132
+ getAppLogger().error("[asset-proxy] store stream failed", {
133
+ error: err,
134
+ key,
135
+ });
121
136
  return new Response("", { status: 502 });
122
137
  }
123
138