@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.
- package/README.md +669 -103
- package/dist/client/logger.d.ts.map +1 -1
- package/dist/client/logger.js +16 -2
- package/dist/client/logger.js.map +1 -1
- package/dist/functions/httpHandler.d.ts +89 -0
- package/dist/functions/httpHandler.d.ts.map +1 -0
- package/dist/functions/httpHandler.js +115 -0
- package/dist/functions/httpHandler.js.map +1 -0
- package/dist/functions/index.d.ts +5 -2
- package/dist/functions/index.d.ts.map +1 -1
- package/dist/functions/index.js +6 -1
- package/dist/functions/index.js.map +1 -1
- package/dist/functions/logHandler.d.ts +55 -3
- package/dist/functions/logHandler.d.ts.map +1 -1
- package/dist/functions/logHandler.js +51 -8
- package/dist/functions/logHandler.js.map +1 -1
- package/dist/functions/logger.d.ts +13 -0
- package/dist/functions/logger.d.ts.map +1 -1
- package/dist/functions/logger.js +128 -14
- package/dist/functions/logger.js.map +1 -1
- package/dist/functions/sourceMapCache.d.ts +39 -3
- package/dist/functions/sourceMapCache.d.ts.map +1 -1
- package/dist/functions/sourceMapCache.js +176 -12
- package/dist/functions/sourceMapCache.js.map +1 -1
- package/dist/functions/traceContext.d.ts +54 -0
- package/dist/functions/traceContext.d.ts.map +1 -0
- package/dist/functions/traceContext.js +141 -0
- package/dist/functions/traceContext.js.map +1 -0
- package/dist/shared/paths.d.ts +59 -0
- package/dist/shared/paths.d.ts.map +1 -0
- package/dist/shared/paths.js +126 -0
- package/dist/shared/paths.js.map +1 -0
- package/dist/tools/index.js +13 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/uploadSourceMaps.d.ts +24 -1
- package/dist/tools/uploadSourceMaps.d.ts.map +1 -1
- package/dist/tools/uploadSourceMaps.js +31 -4
- package/dist/tools/uploadSourceMaps.js.map +1 -1
- package/package.json +12 -6
- package/skills/query-logs/SKILL.md +14 -1
package/dist/functions/logger.js
CHANGED
|
@@ -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(
|
|
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
|
|
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
|
-
|
|
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 (
|
|
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:
|
|
220
|
-
// This avoids server-side stack injection and
|
|
221
|
-
// automatic trace context injection for
|
|
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".
|
|
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
|
-
|
|
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
|
-
...
|
|
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
|
-
*
|
|
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":"
|
|
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
|
|
43
|
-
|
|
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
|
-
*
|
|
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
|
-
|
|
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 =
|
|
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
|
-
//
|
|
161
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"sourceMapCache.js","sourceRoot":"","sources":["../../src/functions/sourceMapCache.ts"],"names":[],"mappings":"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"}
|