@dasasian/firebase-structured-logger 0.6.0 → 0.8.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 (40) hide show
  1. package/README.md +669 -103
  2. package/dist/client/logger.d.ts.map +1 -1
  3. package/dist/client/logger.js +16 -2
  4. package/dist/client/logger.js.map +1 -1
  5. package/dist/functions/httpHandler.d.ts +89 -0
  6. package/dist/functions/httpHandler.d.ts.map +1 -0
  7. package/dist/functions/httpHandler.js +115 -0
  8. package/dist/functions/httpHandler.js.map +1 -0
  9. package/dist/functions/index.d.ts +5 -2
  10. package/dist/functions/index.d.ts.map +1 -1
  11. package/dist/functions/index.js +6 -1
  12. package/dist/functions/index.js.map +1 -1
  13. package/dist/functions/logHandler.d.ts +55 -3
  14. package/dist/functions/logHandler.d.ts.map +1 -1
  15. package/dist/functions/logHandler.js +51 -8
  16. package/dist/functions/logHandler.js.map +1 -1
  17. package/dist/functions/logger.d.ts +13 -0
  18. package/dist/functions/logger.d.ts.map +1 -1
  19. package/dist/functions/logger.js +128 -14
  20. package/dist/functions/logger.js.map +1 -1
  21. package/dist/functions/sourceMapCache.d.ts +39 -3
  22. package/dist/functions/sourceMapCache.d.ts.map +1 -1
  23. package/dist/functions/sourceMapCache.js +176 -12
  24. package/dist/functions/sourceMapCache.js.map +1 -1
  25. package/dist/functions/traceContext.d.ts +54 -0
  26. package/dist/functions/traceContext.d.ts.map +1 -0
  27. package/dist/functions/traceContext.js +141 -0
  28. package/dist/functions/traceContext.js.map +1 -0
  29. package/dist/shared/paths.d.ts +59 -0
  30. package/dist/shared/paths.d.ts.map +1 -0
  31. package/dist/shared/paths.js +126 -0
  32. package/dist/shared/paths.js.map +1 -0
  33. package/dist/tools/index.js +13 -4
  34. package/dist/tools/index.js.map +1 -1
  35. package/dist/tools/uploadSourceMaps.d.ts +24 -1
  36. package/dist/tools/uploadSourceMaps.d.ts.map +1 -1
  37. package/dist/tools/uploadSourceMaps.js +31 -4
  38. package/dist/tools/uploadSourceMaps.js.map +1 -1
  39. package/package.json +12 -6
  40. package/skills/query-logs/SKILL.md +14 -1
@@ -34,17 +34,70 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.LOG_FILENAME = void 0;
37
+ exports.writeJsonLine = writeJsonLine;
37
38
  exports.initLogger = initLogger;
38
39
  exports.cleanLabels = cleanLabels;
39
40
  exports.writeLog = writeLog;
40
41
  exports.createLogWriter = createLogWriter;
41
42
  const fs = __importStar(require("fs"));
42
43
  const path = __importStar(require("path"));
43
- const logger_1 = require("firebase-functions/logger");
44
44
  const ulid_1 = require("ulid");
45
45
  const severity_1 = require("../shared/severity");
46
46
  const error_1 = require("../shared/error");
47
47
  const sourceMapCache_1 = require("./sourceMapCache");
48
+ const paths_js_1 = require("../shared/paths.js");
49
+ const traceContext_1 = require("./traceContext");
50
+ /**
51
+ * OPTIONAL PEER — firebase-functions is loaded lazily, on purpose.
52
+ *
53
+ * On Cloud Functions it is always installed, and its `write()` is the only way to
54
+ * attach the trace id of the current invocation: every v2 trigger (HTTP, callable,
55
+ * Firestore, Pub/Sub, scheduler…) reads it from the incoming request and keeps it in
56
+ * a store the package does not export. So where it exists, we use it.
57
+ *
58
+ * On Cloud Run, or any Node server behind `createHttpLogHandler`, it is not installed,
59
+ * and a top-level import made this whole entry point fail on `require` there (#39).
60
+ * Without it, `writeJsonLine` does the same job and traceContext supplies the trace.
61
+ *
62
+ * `require` rather than `await import`: `writeLog` is synchronous, and in this
63
+ * CommonJS build a dynamic import compiles to `require` anyway.
64
+ */
65
+ function loadFirebaseWrite() {
66
+ try {
67
+ return require("firebase-functions/logger").write;
68
+ }
69
+ catch {
70
+ return null;
71
+ }
72
+ }
73
+ let entryWriter;
74
+ function writeEntry(entry) {
75
+ entryWriter ??= loadFirebaseWrite() ?? writeJsonLine;
76
+ entryWriter(entry);
77
+ }
78
+ /**
79
+ * What firebase-functions' `write()` does, minus the trace id: one JSON line, WARNING
80
+ * and above to stderr and the rest to stdout (its console mapping), and a
81
+ * self-referencing object written as "[Circular]" rather than throwing. Cloud Run's log
82
+ * agent promotes `severity`, `message` and the `logging.googleapis.com/*` keys exactly
83
+ * as Cloud Functions does.
84
+ *
85
+ * Writes to the streams, not `console`: firebase-functions' compat module patches
86
+ * `console`, and a patched `console.error` would wrap this line a second time.
87
+ */
88
+ function writeJsonLine(entry) {
89
+ const seen = new WeakSet();
90
+ const line = JSON.stringify(entry, (_key, value) => {
91
+ if (typeof value !== "object" || value === null)
92
+ return value;
93
+ if (seen.has(value))
94
+ return "[Circular]";
95
+ seen.add(value);
96
+ return value;
97
+ });
98
+ const toStderr = (0, severity_1.isLogSeverity)(entry.severity) && severity_1.SEVERITY_ORDER[entry.severity] <= severity_1.SEVERITY_ORDER.WARNING;
99
+ (toStderr ? process.stderr : process.stdout).write(line + "\n");
100
+ }
48
101
  const IS_EMULATOR = process.env.FUNCTIONS_EMULATOR === "true";
49
102
  exports.LOG_FILENAME = "dev.jsonl";
50
103
  let globalConfig = null;
@@ -101,10 +154,9 @@ function rotateLogFile(logDir, maxRotatedFiles) {
101
154
  console.warn("[fsl] Failed to rotate log file:", err);
102
155
  }
103
156
  }
104
- async function uploadLogAttachments(logId, logAttachments) {
105
- const bucket = (0, sourceMapCache_1.getBucket)();
157
+ async function uploadLogAttachments(bucket, logId, logAttachments) {
106
158
  await Promise.all(Object.entries(logAttachments).map(async ([name, data]) => {
107
- const file = bucket.file(`logAttachments/${logId}/${name}`);
159
+ const file = bucket.file((0, paths_js_1.attachmentPath)(logId, name, (0, sourceMapCache_1.getAttachmentPrefix)()));
108
160
  await file.save(Buffer.from(data, "base64"));
109
161
  }));
110
162
  }
@@ -149,7 +201,7 @@ function cleanLabels(labels) {
149
201
  function writeLog(payload) {
150
202
  // An unrecognised severity is not merely mislabelled — it is fatal. Both
151
203
  // dispatches look the value up in a fixed table: CONSOLE_FN below, and
152
- // firebase-functions' own CONSOLE_SEVERITY inside ffWrite. A miss resolves to
204
+ // firebase-functions' own CONSOLE_SEVERITY inside its write(). A miss resolves to
153
205
  // undefined and calling it throws, which Logger.send()'s catch then swallows,
154
206
  // so the entry disappears with no useful diagnostic — and only in production,
155
207
  // since the emulator takes the other branch.
@@ -173,14 +225,26 @@ function writeLog(payload) {
173
225
  return;
174
226
  }
175
227
  const logId = (0, ulid_1.ulid)();
176
- const hasAttachments = payload.attachments && Object.keys(payload.attachments).length > 0;
228
+ // Resolved before the labels, so `hasAttachments` is only claimed when there is
229
+ // somewhere to put them. With no Storage the attachments are dropped (warned once
230
+ // by getAttachmentBucket) and the entry is still written.
231
+ let attachmentBucket = null;
232
+ if (payload.attachments && Object.keys(payload.attachments).length > 0) {
233
+ try {
234
+ attachmentBucket = (0, sourceMapCache_1.getAttachmentBucket)();
235
+ }
236
+ catch (err) {
237
+ console.warn("[fsl] Log attachment upload failed:", err);
238
+ }
239
+ }
240
+ const hasAttachments = attachmentBucket !== null;
177
241
  const labels = {
178
242
  ...payload.labels,
179
243
  logId,
180
244
  ...(hasAttachments ? { hasAttachments: "true" } : {}),
181
245
  };
182
- if (hasAttachments) {
183
- uploadLogAttachments(logId, payload.attachments).catch((err) => {
246
+ if (attachmentBucket) {
247
+ uploadLogAttachments(attachmentBucket, logId, payload.attachments).catch((err) => {
184
248
  console.warn("[fsl] Log attachment upload failed:", err);
185
249
  });
186
250
  }
@@ -216,21 +280,71 @@ function writeLog(payload) {
216
280
  CONSOLE_FN[severity](`[${severity}] ${payload.message}`, labels);
217
281
  return;
218
282
  }
219
- // Production: use firebase-functions/logger write() directly, bypassing entryFromArgs.
220
- // This avoids server-side stack injection and jsonPayload nesting, while preserving
221
- // automatic trace context injection for request correlation in Cloud Logging.
283
+ // Production: firebase-functions' write() where it is installed, writeJsonLine
284
+ // where it is not (see loadFirebaseWrite) — bypassing entryFromArgs. This avoids server-side stack injection and
285
+ // jsonPayload nesting, while preserving automatic trace context injection for
286
+ // request correlation in Cloud Logging.
222
287
  //
223
- // Labels MUST be emitted under "logging.googleapis.com/labels". ffWrite does no
288
+ // Labels MUST be emitted under "logging.googleapis.com/labels". write() does no
224
289
  // mapping — it JSON-stringifies the object straight to stdout — and Cloud Logging
225
290
  // only promotes specifically-named fields to the LogEntry. A plain `labels` key is
226
291
  // not one of them, so it lands in jsonPayload.labels and `labels.appId="..."`
227
292
  // filters match nothing. Verified live: the smoke run's entry labels contained only
228
293
  // Cloud Functions' own platform labels until this changed.
229
- (0, logger_1.write)({
294
+ // Cloud Error Reporting reads Cloud Logging and groups by exception type plus
295
+ // the five top-most frames — the fingerprint we would otherwise build. It
296
+ // looks for `stack_trace` at the TOP level of jsonPayload; ours lives one
297
+ // level down under `error`, so it has never been seen (#31).
298
+ //
299
+ // Moved, not duplicated. The stack is the largest field in an entry capped at
300
+ // 256 KB, and two copies of it buys nothing — so a reportable error carries its
301
+ // stack at `stack_trace` and its `error` object loses the `stack` key.
302
+ //
303
+ // A non-reportable entry keeps the stack where it was. It has to go somewhere,
304
+ // and the alternative — emitting `stack_trace` for warnings too — would likely
305
+ // turn every warning into something a person has to resolve in the Error
306
+ // Reporting console. The smoke run measures whether that is true; until it
307
+ // does, the cautious shape is the one that ships.
308
+ //
309
+ // ERROR and above only. A WARNING carrying a stack is not an error someone
310
+ // should have to resolve, and neither is a NOTICE feedback report — turning
311
+ // either into an Error Reporting group would be a regression of a deliberate
312
+ // product decision.
313
+ const stack = payload.jsonPayload?.error?.stack;
314
+ const reportable = stack && severity_1.SEVERITY_ORDER[severity] <= severity_1.SEVERITY_ORDER.ERROR && !(0, severity_1.isFeedback)(payload.labels);
315
+ const service = labels.appId ?? globalConfig?.appId;
316
+ const isReported = Boolean(reportable && service);
317
+ const errorReporting = isReported
318
+ ? {
319
+ stack_trace: stack,
320
+ serviceContext: {
321
+ service: service,
322
+ ...(labels.releaseId ? { version: labels.releaseId } : {}),
323
+ },
324
+ }
325
+ : {};
326
+ // Strip the now-redundant copy. Rebuilt rather than mutated: payload is the
327
+ // caller's object and writeLog has no business editing it.
328
+ const jsonPayload = isReported
329
+ ? (() => {
330
+ const { error, ...rest } = payload.jsonPayload;
331
+ const { stack: _dropped, ...errorWithoutStack } = error;
332
+ return { ...rest, error: errorWithoutStack };
333
+ })()
334
+ : payload.jsonPayload;
335
+ // Set the trace ourselves when we have one. write() attaches this from
336
+ // firebase-functions' own store, which is only populated inside their request
337
+ // wrapper — empty on Cloud Run and anything behind createHttpLogHandler. When
338
+ // theirs IS populated it overwrites this, which is the right precedence: inside
339
+ // Cloud Functions their value is authoritative.
340
+ const trace = (0, traceContext_1.traceField)();
341
+ writeEntry({
230
342
  severity,
231
343
  message: payload.message,
232
344
  "logging.googleapis.com/labels": labels,
233
- ...payload.jsonPayload,
345
+ ...(trace ? { "logging.googleapis.com/trace": trace } : {}),
346
+ ...errorReporting,
347
+ ...jsonPayload,
234
348
  });
235
349
  }
236
350
  function logAttachmentsToBase64(logAttachments) {
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/functions/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/functions/logger.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,9 @@
1
1
  import type { Bucket } from '@google-cloud/storage';
2
2
  import type { EncodedSourceMap } from '@jridgewell/trace-mapping';
3
+ /** Which step of the chain Storage resolves to. */
4
+ export type StorageSource = 'firebase-admin' | 'google-cloud-storage' | 'none';
5
+ /** Which step of the chain a lookup for `bucketName` would take. */
6
+ export declare function storageSource(bucketName?: string | undefined): StorageSource;
3
7
  interface CacheEntry {
4
8
  map: EncodedSourceMap | null;
5
9
  bytes: number;
@@ -21,13 +25,43 @@ export declare const __cacheForTests: {
21
25
  };
22
26
  export declare function configureSourceMapBucket(bucketName: string): void;
23
27
  /**
24
- * Resolve the configured Storage bucket, falling back to the project default.
28
+ * Where attachments are written.
29
+ *
30
+ * Global on purpose, and global in the API so the shape does not lie. The
31
+ * upload happens in `writeLog`, which is reached from every log call — including
32
+ * `logError()` inside a handler that never went through `createClientLogHandler`
33
+ * — so there is no per-instance config for it to read. Accepting this as a field
34
+ * on the handler would let a second handler silently retarget the first's
35
+ * attachments, which is the module-scoped-state trap in CLAUDE.md.
36
+ *
37
+ * Unset fields keep today's behaviour: the bucket falls back to
38
+ * `configureSourceMapBucket`'s value and then to the project default, and the
39
+ * prefix to `logAttachments/`. Never calling this changes nothing.
40
+ */
41
+ export declare function configureAttachments(options: {
42
+ bucket?: string;
43
+ prefix?: string;
44
+ }): void;
45
+ /**
46
+ * Bucket for attachments: explicit, then the source-map bucket, then the project
47
+ * default. Null when there is no Storage at all — see loadFirebaseAdminStorage.
48
+ */
49
+ export declare function getAttachmentBucket(): Bucket | null;
50
+ /** Prefix for attachments, defaulting to the documented one. */
51
+ export declare function getAttachmentPrefix(): string | undefined;
52
+ /** Reset attachment config. Tests only — production configures once at module load. */
53
+ export declare function resetAttachmentConfig(): void;
54
+ /**
55
+ * Resolve the configured Storage bucket, falling back to the project default — or
56
+ * null when the chain ends with no Storage (see loadFirebaseAdminStorage).
25
57
  *
26
58
  * The return type is spelled out rather than inferred: without it the emitted
27
59
  * `.d.ts` would need to name `Bucket` from a path inside `node_modules`, which
28
60
  * TypeScript 7 rejects as non-portable (TS2883).
29
61
  */
30
- export declare function getBucket(bucketName?: string | undefined): Bucket;
62
+ export declare function getBucket(bucketName?: string | undefined): Bucket | null;
63
+ /** Forget which Storage the chain resolved to, and the warning. Tests only. */
64
+ export declare function resetStorageResolution(): void;
31
65
  /**
32
66
  * Get source map — checks embedded first (instant), then Storage (for old releases).
33
67
  */
@@ -49,7 +83,9 @@ export declare function getBucket(bucketName?: string | undefined): Bucket;
49
83
  * That is strictly better than preferring embedded in every case, and it leaves
50
84
  * the unversioned setup working exactly as before.
51
85
  */
52
- export declare function getSourceMap(releaseId: string, fileName: string, bucketName?: string): Promise<EncodedSourceMap | null>;
86
+ export declare function getSourceMap(releaseId: string, fileName: string, bucketName?: string, prefix?: string): Promise<EncodedSourceMap | null>;
87
+ /** Reset the warn-once sets. Tests only. */
88
+ export declare function resetSourceMapWarnings(): void;
53
89
  export declare function clearSourceMapCache(): void;
54
90
  export {};
55
91
  //# sourceMappingURL=sourceMapCache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sourceMapCache.d.ts","sourceRoot":"","sources":["../../src/functions/sourceMapCache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAkBjE,UAAU,UAAU;IAClB,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC5B,KAAK,EAAE,MAAM,CAAA;CACd;AAgCD;;;;GAIG;AACH,eAAO,MAAM,eAAe;eACf,MAAM;eACN,MAAM,OAAO,gBAAgB,GAAG,IAAI,SAAS,MAAM;;;;;;;CAG/D,CAAA;AAuBD,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,UAAU,qBAAgB,GAAG,MAAM,CAE5D;AA6ED;;GAEG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAgBlC;AAiBD,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C"}
1
+ {"version":3,"file":"sourceMapCache.d.ts","sourceRoot":"","sources":["../../src/functions/sourceMapCache.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAkCjE,mDAAmD;AACnD,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,MAAM,CAAA;AAY9E,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,UAAU,qBAAgB,GAAG,aAAa,CAGvE;AAkBD,UAAU,UAAU;IAClB,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC5B,KAAK,EAAE,MAAM,CAAA;CACd;AAgCD;;;;GAIG;AACH,eAAO,MAAM,eAAe;eACf,MAAM;eACN,MAAM,OAAO,gBAAgB,GAAG,IAAI,SAAS,MAAM;;;;;;;CAG/D,CAAA;AAuBD,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAGxF;AAKD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEnD;AAED,gEAAgE;AAChE,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAExD;AAED,uFAAuF;AACvF,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,UAAU,qBAAgB,GAAG,MAAM,GAAG,IAAI,CASnE;AAmBD,+EAA+E;AAC/E,wBAAgB,sBAAsB,IAAI,IAAI,CAI7C;AAuFD;;GAEG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAkBlC;AA6CD,4CAA4C;AAC5C,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAiBD,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C"}
@@ -34,13 +34,64 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.__cacheForTests = void 0;
37
+ exports.storageSource = storageSource;
37
38
  exports.configureSourceMapBucket = configureSourceMapBucket;
39
+ exports.configureAttachments = configureAttachments;
40
+ exports.getAttachmentBucket = getAttachmentBucket;
41
+ exports.getAttachmentPrefix = getAttachmentPrefix;
42
+ exports.resetAttachmentConfig = resetAttachmentConfig;
38
43
  exports.getBucket = getBucket;
44
+ exports.resetStorageResolution = resetStorageResolution;
39
45
  exports.getSourceMap = getSourceMap;
46
+ exports.resetSourceMapWarnings = resetSourceMapWarnings;
40
47
  exports.clearSourceMapCache = clearSourceMapCache;
41
48
  const fs = __importStar(require("fs"));
42
- const path = __importStar(require("path"));
43
- const storage_1 = require("firebase-admin/storage");
49
+ const paths_js_1 = require("../shared/paths.js");
50
+ /**
51
+ * OPTIONAL PEER — firebase-admin is loaded lazily, on purpose.
52
+ *
53
+ * Storage is needed for two things only: maps of releases older than the deployed one,
54
+ * and attachments. A top-level import made the whole `/functions` entry point fail on
55
+ * `require` on a backend without firebase-admin, even one that never touches Storage
56
+ * (#39). So Storage is resolved on first use, down a chain:
57
+ *
58
+ * 1. firebase-admin installed -> its Storage, and its default bucket (today's path)
59
+ * 2. not installed, a bucket named -> @google-cloud/storage with that bucket
60
+ * 3. neither -> no Storage; warned once, see warnNoStorage
61
+ *
62
+ * Step 2 needs the name because only firebase-admin knows the app's default bucket.
63
+ * @google-cloud/storage is a regular dependency (the `fsl` CLI uses it); it is loaded
64
+ * lazily too, because it is heavy and a Cloud Functions instance never needs it.
65
+ *
66
+ * `require` rather than `await import`: `getBucket` is synchronous, and in this
67
+ * CommonJS build a dynamic import compiles to `require` anyway.
68
+ */
69
+ function loadFirebaseAdminStorage() {
70
+ try {
71
+ return require('firebase-admin/storage');
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ }
77
+ function loadCloudStorage() {
78
+ return require('@google-cloud/storage');
79
+ }
80
+ // undefined = not yet resolved. Resolved once: a package is either installed or not
81
+ // for the life of the process, and this sits on the per-error path.
82
+ let adminStorage;
83
+ let cloudStorage;
84
+ function resolveAdminStorage() {
85
+ if (adminStorage === undefined)
86
+ adminStorage = loadFirebaseAdminStorage();
87
+ return adminStorage;
88
+ }
89
+ /** Which step of the chain a lookup for `bucketName` would take. */
90
+ function storageSource(bucketName = defaultBucket) {
91
+ if (resolveAdminStorage())
92
+ return 'firebase-admin';
93
+ return bucketName ? 'google-cloud-storage' : 'none';
94
+ }
44
95
  /**
45
96
  * Storage-map cache, bounded by approximate bytes with LRU eviction.
46
97
  *
@@ -118,14 +169,83 @@ function configureSourceMapBucket(bucketName) {
118
169
  defaultBucket = bucketName;
119
170
  }
120
171
  /**
121
- * Resolve the configured Storage bucket, falling back to the project default.
172
+ * Where attachments are written.
173
+ *
174
+ * Global on purpose, and global in the API so the shape does not lie. The
175
+ * upload happens in `writeLog`, which is reached from every log call — including
176
+ * `logError()` inside a handler that never went through `createClientLogHandler`
177
+ * — so there is no per-instance config for it to read. Accepting this as a field
178
+ * on the handler would let a second handler silently retarget the first's
179
+ * attachments, which is the module-scoped-state trap in CLAUDE.md.
180
+ *
181
+ * Unset fields keep today's behaviour: the bucket falls back to
182
+ * `configureSourceMapBucket`'s value and then to the project default, and the
183
+ * prefix to `logAttachments/`. Never calling this changes nothing.
184
+ */
185
+ function configureAttachments(options) {
186
+ if (options.bucket !== undefined)
187
+ attachmentBucket = options.bucket;
188
+ if (options.prefix !== undefined)
189
+ attachmentPrefix = options.prefix;
190
+ }
191
+ let attachmentBucket;
192
+ let attachmentPrefix;
193
+ /**
194
+ * Bucket for attachments: explicit, then the source-map bucket, then the project
195
+ * default. Null when there is no Storage at all — see loadFirebaseAdminStorage.
196
+ */
197
+ function getAttachmentBucket() {
198
+ return getBucket(attachmentBucket ?? defaultBucket);
199
+ }
200
+ /** Prefix for attachments, defaulting to the documented one. */
201
+ function getAttachmentPrefix() {
202
+ return attachmentPrefix;
203
+ }
204
+ /** Reset attachment config. Tests only — production configures once at module load. */
205
+ function resetAttachmentConfig() {
206
+ attachmentBucket = undefined;
207
+ attachmentPrefix = undefined;
208
+ }
209
+ /**
210
+ * Resolve the configured Storage bucket, falling back to the project default — or
211
+ * null when the chain ends with no Storage (see loadFirebaseAdminStorage).
122
212
  *
123
213
  * The return type is spelled out rather than inferred: without it the emitted
124
214
  * `.d.ts` would need to name `Bucket` from a path inside `node_modules`, which
125
215
  * TypeScript 7 rejects as non-portable (TS2883).
126
216
  */
127
217
  function getBucket(bucketName = defaultBucket) {
128
- return bucketName ? (0, storage_1.getStorage)().bucket(bucketName) : (0, storage_1.getStorage)().bucket();
218
+ const admin = resolveAdminStorage();
219
+ if (admin)
220
+ return bucketName ? admin.getStorage().bucket(bucketName) : admin.getStorage().bucket();
221
+ if (bucketName) {
222
+ cloudStorage ??= new (loadCloudStorage().Storage)();
223
+ return cloudStorage.bucket(bucketName);
224
+ }
225
+ warnNoStorage();
226
+ return null;
227
+ }
228
+ let warnedNoStorage = false;
229
+ /**
230
+ * Say once that there is no Storage, and what that costs. Nothing fails without it —
231
+ * which is exactly why it has to be said: errors from older releases simply stay
232
+ * minified and attachments simply vanish.
233
+ */
234
+ function warnNoStorage() {
235
+ if (warnedNoStorage)
236
+ return;
237
+ warnedNoStorage = true;
238
+ console.warn('[fsl] No Storage: firebase-admin is not installed and no bucket is named.');
239
+ console.warn("[fsl] Only the source maps embedded in this deploy resolve; errors from older");
240
+ console.warn('[fsl] releases stay minified, and attachments are dropped (the log entry is kept).');
241
+ console.warn('[fsl] Fix: name a bucket (createHttpLogHandler({ bucketName }) or');
242
+ console.warn('[fsl] configureAttachments({ bucket })), or install firebase-admin.');
243
+ }
244
+ /** Forget which Storage the chain resolved to, and the warning. Tests only. */
245
+ function resetStorageResolution() {
246
+ adminStorage = undefined;
247
+ cloudStorage = undefined;
248
+ warnedNoStorage = false;
129
249
  }
130
250
  /**
131
251
  * Load source map from embedded current release directory (instant for current release).
@@ -145,7 +265,7 @@ function readEmbeddedRelease() {
145
265
  if (embeddedRelease !== undefined)
146
266
  return embeddedRelease;
147
267
  try {
148
- const markerPath = path.join(process.cwd(), 'sourcemaps', 'current', '.release');
268
+ const markerPath = (0, paths_js_1.embeddedMarkerPath)(process.cwd());
149
269
  embeddedRelease = fs.existsSync(markerPath)
150
270
  ? fs.readFileSync(markerPath, 'utf-8').trim() || null
151
271
  : null;
@@ -157,8 +277,9 @@ function readEmbeddedRelease() {
157
277
  }
158
278
  function readEmbeddedSourceMap(fileName) {
159
279
  try {
160
- // Looks for sourcemaps/current/{fileName}.map relative to the Cloud Function working directory
161
- const mapPath = path.join(process.cwd(), 'sourcemaps', 'current', `${fileName}.map`);
280
+ // Resolved against the process working directory — the deployed backend's,
281
+ // whether that is Cloud Functions or anything else that ships the directory.
282
+ const mapPath = (0, paths_js_1.embeddedMapPath)(process.cwd(), fileName);
162
283
  if (!fs.existsSync(mapPath))
163
284
  return null;
164
285
  return JSON.parse(fs.readFileSync(mapPath, 'utf-8'));
@@ -170,15 +291,23 @@ function readEmbeddedSourceMap(fileName) {
170
291
  /**
171
292
  * Load source map from Firebase Storage (for older releases).
172
293
  */
173
- async function loadStorageSourceMap(releaseId, fileName, bucketName) {
294
+ async function loadStorageSourceMap(releaseId, fileName, bucketName, prefix) {
174
295
  // The bucket is part of the key: the same release/file in two buckets is two
175
296
  // different maps, and caching them under one key would serve the wrong one.
176
- const cacheKey = `${bucketName ?? defaultBucket ?? ''}/${releaseId}/${fileName}`;
297
+ // The prefix is part of the key for the same reason the bucket is: the same
298
+ // release and file under two prefixes are two different objects.
299
+ const cacheKey = `${bucketName ?? defaultBucket ?? ''}/${prefix ?? ''}/${releaseId}/${fileName}`;
177
300
  const hit = cacheGet(cacheKey);
178
301
  if (hit)
179
302
  return hit.map;
180
303
  try {
181
- const file = getBucket(bucketName).file(`sourcemaps/${releaseId}/${fileName}.map`);
304
+ // Inside the try: firebase-admin throws here, synchronously, when there is no
305
+ // initialised app or no default bucket — a miss, not a crash.
306
+ const bucket = getBucket(bucketName);
307
+ // No Storage at all: not a miss to cache — warnNoStorage has already said why.
308
+ if (!bucket)
309
+ return null;
310
+ const file = bucket.file((0, paths_js_1.storageMapPath)(releaseId, fileName, prefix));
182
311
  const [exists] = await file.exists();
183
312
  if (!exists) {
184
313
  cacheSet(cacheKey, null, 0);
@@ -218,22 +347,57 @@ async function loadStorageSourceMap(releaseId, fileName, bucketName) {
218
347
  * That is strictly better than preferring embedded in every case, and it leaves
219
348
  * the unversioned setup working exactly as before.
220
349
  */
221
- async function getSourceMap(releaseId, fileName, bucketName) {
350
+ async function getSourceMap(releaseId, fileName, bucketName, prefix) {
222
351
  const embedded = loadEmbeddedSourceMap(fileName);
223
352
  const marker = readEmbeddedRelease();
224
353
  // No marker means we cannot tell whether this stack belongs to the embedded
225
354
  // release. Older deploys have none, so keep the previous behaviour.
226
355
  if (embedded && (marker === null || marker === releaseId))
227
356
  return embedded;
228
- const stored = await loadStorageSourceMap(releaseId, fileName, bucketName);
357
+ const stored = await loadStorageSourceMap(releaseId, fileName, bucketName, prefix);
229
358
  if (stored)
230
359
  return stored;
231
360
  if (embedded) {
232
361
  warnReleaseFallback(releaseId, marker);
233
362
  return embedded;
234
363
  }
364
+ warnNothingResolved(releaseId, fileName, bucketName, prefix);
235
365
  return null;
236
366
  }
367
+ // Warn once per (release, prefix). This sits on the per-error path.
368
+ const warnedMisses = new Set();
369
+ /**
370
+ * Say so when a stack could not be symbolicated from anywhere.
371
+ *
372
+ * Silence here is the expensive failure. A wrong bucket, a wrong prefix, a
373
+ * release whose maps were never uploaded and an `fsl` step missing from the
374
+ * deploy script all produce the same thing — a minified stack, and no signal
375
+ * which of the four it was. With the prefix configurable (#35) there is one more
376
+ * way to land here, and the two ends are checked against each other by nothing.
377
+ *
378
+ * So name the exact places that were looked in. A prefix mismatch is obvious the
379
+ * moment you see the object name that was tried.
380
+ */
381
+ function warnNothingResolved(releaseId, fileName, bucketName, prefix) {
382
+ const key = `${releaseId}|${prefix ?? ''}`;
383
+ if (warnedMisses.has(key))
384
+ return;
385
+ warnedMisses.add(key);
386
+ const bucket = bucketName ?? defaultBucket ?? '<project default>';
387
+ const storage = storageSource(bucketName) === 'none'
388
+ ? 'not available (no firebase-admin, no bucket named)'
389
+ : `gs://${bucket}/${(0, paths_js_1.storageMapPath)(releaseId, fileName, prefix)} (not found)`;
390
+ console.warn(`[fsl] No source map for '${fileName}' at release '${releaseId}' — this stack stays minified.`);
391
+ console.warn(`[fsl] embedded: ${(0, paths_js_1.embeddedMapPath)(process.cwd(), fileName)} (not found)`);
392
+ console.warn(`[fsl] storage: ${storage}`);
393
+ console.warn('[fsl] Check that the deploy runs `fsl upload-sourcemaps`, and that its --prefix');
394
+ console.warn('[fsl] and --bucket match createClientLogHandler({ sourceMaps }). Nothing verifies that for you.');
395
+ }
396
+ /** Reset the warn-once sets. Tests only. */
397
+ function resetSourceMapWarnings() {
398
+ warnedMisses.clear();
399
+ warnedFallbacks.clear();
400
+ }
237
401
  // Warn once per (release, marker) pair — this sits on the per-error path.
238
402
  const warnedFallbacks = new Set();
239
403
  function warnReleaseFallback(releaseId, marker) {
@@ -1 +1 @@
1
- {"version":3,"file":"sourceMapCache.js","sourceRoot":"","sources":["../../src/functions/sourceMapCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sourceMapCache.js","sourceRoot":"","sources":["../../src/functions/sourceMapCache.ts"],"names":[],"mappings":"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"}