@mongrov/core 0.7.0 → 0.9.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 +52 -0
- package/dist/context/logging-provider.d.ts +15 -3
- package/dist/context/logging-provider.d.ts.map +1 -1
- package/dist/context/logging-provider.js +31 -10
- package/dist/context/logging-provider.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +8 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +86 -13
- package/dist/logger.js.map +1 -1
- package/dist/session-marker.d.ts +55 -0
- package/dist/session-marker.d.ts.map +1 -0
- package/dist/session-marker.js +99 -0
- package/dist/session-marker.js.map +1 -0
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -60,6 +60,26 @@ function MyScreen() {
|
|
|
60
60
|
}
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
+
### One logger for React and non-React code
|
|
64
|
+
|
|
65
|
+
Code outside the tree (a database, an auth client, module-level helpers)
|
|
66
|
+
needs a logger before the first render. Create it once and hand the same
|
|
67
|
+
instance to the provider, so there is one ring buffer for `exportLogs`, one
|
|
68
|
+
file writer and one sessionId:
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
// logger.ts
|
|
72
|
+
export const logger = createLogger({ appVersion: '1.0.0', ringBuffer: true, file: true })
|
|
73
|
+
|
|
74
|
+
// _layout.tsx
|
|
75
|
+
<LoggingProvider logger={logger}>
|
|
76
|
+
<Stack />
|
|
77
|
+
</LoggingProvider>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
The app owns a logger passed this way: the provider wires screen tracking,
|
|
81
|
+
connectivity reports and the background flush to it, but never destroys it.
|
|
82
|
+
|
|
63
83
|
## Configuration
|
|
64
84
|
|
|
65
85
|
```typescript
|
|
@@ -82,6 +102,9 @@ interface LoggerConfig {
|
|
|
82
102
|
// Callback hooks
|
|
83
103
|
onError?: (entry: LogEntry) => void
|
|
84
104
|
onException?: (error: Error, context?: Record<string, unknown>) => void
|
|
105
|
+
|
|
106
|
+
// Report how the previous session ended (default false; needs expo-file-system)
|
|
107
|
+
sessionMarker?: boolean
|
|
85
108
|
}
|
|
86
109
|
```
|
|
87
110
|
|
|
@@ -110,6 +133,33 @@ including pre-0.7 `logs-YYYY-MM-DD.txt` day files.
|
|
|
110
133
|
{ file: { maxSizeMB: 10, retentionDays: 14, maxFileSizeKB: 512 } }
|
|
111
134
|
```
|
|
112
135
|
|
|
136
|
+
### Session Marker
|
|
137
|
+
|
|
138
|
+
`sessionMarker: true` keeps a small `session-marker.json` next to the file logs
|
|
139
|
+
(`file.directory` when set) recording this session's id and state: `running` at
|
|
140
|
+
start and on every return to the foreground, `backgrounded` when the app goes to
|
|
141
|
+
the background, `closed` on `destroy()`. The logger follows `AppState` itself, so
|
|
142
|
+
a logger created at module load, before any provider, is covered.
|
|
143
|
+
|
|
144
|
+
At the next start, the previous session's last state is reported once:
|
|
145
|
+
|
|
146
|
+
| Previous state | Logged |
|
|
147
|
+
|---|---|
|
|
148
|
+
| `running` (died in the foreground: crash, OOM, watchdog) | `logger.session.unclean-exit` at **warn** |
|
|
149
|
+
| `backgrounded` (the OS reclaimed it; routine on iOS) | `logger.session.ended-in-background` at info |
|
|
150
|
+
| `closed`, or no marker | nothing |
|
|
151
|
+
|
|
152
|
+
Both carry `{ previousSessionId, startedAt, lastSeenAt, lastCrashReportId }`.
|
|
153
|
+
`lastCrashReportId` is whatever the app passed to `logger.setLastCrashReportId(id)`
|
|
154
|
+
(e.g. the Sentry event id from `beforeSend`), so the warn can name the report.
|
|
155
|
+
Marker failures are reported once (`[Logger] session marker failed`) and never
|
|
156
|
+
throw into callers.
|
|
157
|
+
|
|
158
|
+
```typescript
|
|
159
|
+
const logger = createLogger({ appVersion, ringBuffer: true, file: true, sessionMarker: true })
|
|
160
|
+
logger.sessionId // the id every entry carries as context.sessionId
|
|
161
|
+
```
|
|
162
|
+
|
|
113
163
|
### Webhook Transport
|
|
114
164
|
|
|
115
165
|
Generic HTTP POST with batching and offline queue.
|
|
@@ -160,6 +210,8 @@ const logger = createLogger({
|
|
|
160
210
|
| `setUser(userId)` | Set user ID in context |
|
|
161
211
|
| `setScreen(screenName)` | Set current screen in context |
|
|
162
212
|
| `setContext(key, value)` | Set custom context key |
|
|
213
|
+
| `setLastCrashReportId(id)` | Keep a crash report id for the next start's `unclean-exit` (needs `sessionMarker`) |
|
|
214
|
+
| `sessionId` | This session's id (every entry's `context.sessionId`) |
|
|
163
215
|
| `getLogs(filter?)` | Get logs from ring buffer |
|
|
164
216
|
| `exportLogs(filter?)` | Export logs as JSON string |
|
|
165
217
|
| `flush()` | Force-push queued webhook entries |
|
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
import type { Logger } from '../logger';
|
|
2
2
|
import type { LoggerConfig } from '../types';
|
|
3
3
|
import * as React from 'react';
|
|
4
|
-
|
|
5
|
-
config: LoggerConfig;
|
|
4
|
+
type LoggingProviderProps = {
|
|
6
5
|
children: React.ReactNode;
|
|
6
|
+
} & ({
|
|
7
|
+
config: LoggerConfig;
|
|
8
|
+
logger?: never;
|
|
7
9
|
}
|
|
8
|
-
|
|
10
|
+
/**
|
|
11
|
+
* A logger the app created itself (`createLogger`), so code outside React
|
|
12
|
+
* (db, auth, device machines, module-level loggers) and the tree share ONE
|
|
13
|
+
* instance: one ring buffer for `exportLogs`, one file writer, one
|
|
14
|
+
* sessionId. The app owns it: the provider never destroys it.
|
|
15
|
+
*/
|
|
16
|
+
| {
|
|
17
|
+
logger: Logger;
|
|
18
|
+
config?: never;
|
|
19
|
+
});
|
|
20
|
+
export declare function LoggingProvider(props: LoggingProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
9
21
|
export declare function useLogger(): Logger;
|
|
10
22
|
export {};
|
|
11
23
|
//# sourceMappingURL=logging-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging-provider.d.ts","sourceRoot":"","sources":["../../src/context/logging-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,
|
|
1
|
+
{"version":3,"file":"logging-provider.d.ts","sourceRoot":"","sources":["../../src/context/logging-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,GAAG,CACA;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE;AAC1C;;;;;GAKG;GACD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,CACrC,CAAA;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAI1D;AAoGD,wBAAgB,SAAS,IAAI,MAAM,CAMlC"}
|
|
@@ -4,7 +4,16 @@ import { AppState } from 'react-native';
|
|
|
4
4
|
import { createLogger } from '../logger';
|
|
5
5
|
import { setNetworkStateLogger } from '../network-state';
|
|
6
6
|
const LoggerContext = createContext(null);
|
|
7
|
-
export function LoggingProvider(
|
|
7
|
+
export function LoggingProvider(props) {
|
|
8
|
+
if (props.logger)
|
|
9
|
+
return _jsx(SharedLoggingProvider, { logger: props.logger, children: props.children });
|
|
10
|
+
return _jsx(OwnedLoggingProvider, { config: props.config, children: props.children });
|
|
11
|
+
}
|
|
12
|
+
function SharedLoggingProvider({ logger, children }) {
|
|
13
|
+
useLoggerLifecycle(logger);
|
|
14
|
+
return (_jsx(LoggerContext.Provider, { value: logger, children: children }));
|
|
15
|
+
}
|
|
16
|
+
function OwnedLoggingProvider({ config, children }) {
|
|
8
17
|
// The config is read when a logger is created; later changes to it are not
|
|
9
18
|
// applied to a live logger.
|
|
10
19
|
const configRef = useRef(config);
|
|
@@ -23,6 +32,24 @@ export function LoggingProvider({ config, children }) {
|
|
|
23
32
|
setLogger(createLogger(configRef.current));
|
|
24
33
|
return;
|
|
25
34
|
}
|
|
35
|
+
return () => {
|
|
36
|
+
destroyedRef.current = true;
|
|
37
|
+
logger.destroy().catch((error) => {
|
|
38
|
+
// The logger is going away; its last batch may not reach the webhook.
|
|
39
|
+
if (__DEV__)
|
|
40
|
+
console.warn('[Logger] destroy failed', String(error));
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
}, [logger]);
|
|
44
|
+
useLoggerLifecycle(logger);
|
|
45
|
+
return (_jsx(LoggerContext.Provider, { value: logger, children: children }));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* What the provider wires around a logger, whoever owns it: connectivity
|
|
49
|
+
* reports, screen tracking, and a flush when the app goes to the background.
|
|
50
|
+
*/
|
|
51
|
+
function useLoggerLifecycle(logger) {
|
|
52
|
+
useEffect(() => {
|
|
26
53
|
// Connectivity changes and polling failures land in this logger.
|
|
27
54
|
setNetworkStateLogger(logger);
|
|
28
55
|
// Try to track screen via expo-router
|
|
@@ -43,13 +70,7 @@ export function LoggingProvider({ config, children }) {
|
|
|
43
70
|
}
|
|
44
71
|
return () => {
|
|
45
72
|
unsubscribe?.();
|
|
46
|
-
destroyedRef.current = true;
|
|
47
73
|
setNetworkStateLogger(null);
|
|
48
|
-
logger.destroy().catch((error) => {
|
|
49
|
-
// The logger is going away; its last batch may not reach the webhook.
|
|
50
|
-
if (__DEV__)
|
|
51
|
-
console.warn('[Logger] destroy failed', String(error));
|
|
52
|
-
});
|
|
53
74
|
};
|
|
54
75
|
}, [logger]);
|
|
55
76
|
// iOS may suspend or kill a backgrounded app at any moment (a BLE sync
|
|
@@ -59,14 +80,14 @@ export function LoggingProvider({ config, children }) {
|
|
|
59
80
|
const subscription = AppState.addEventListener('change', (state) => {
|
|
60
81
|
if (state !== 'background' && state !== 'inactive')
|
|
61
82
|
return;
|
|
83
|
+
// The logger is alive here, so the failure goes into it (and to the
|
|
84
|
+
// console in dev, as every line does).
|
|
62
85
|
logger.flush().catch((error) => {
|
|
63
|
-
|
|
64
|
-
console.warn('[Logger] flush on background failed', String(error));
|
|
86
|
+
logger.warn('[Logger] flush on background failed', { error: String(error) });
|
|
65
87
|
});
|
|
66
88
|
});
|
|
67
89
|
return () => subscription.remove();
|
|
68
90
|
}, [logger]);
|
|
69
|
-
return (_jsx(LoggerContext.Provider, { value: logger, children: children }));
|
|
70
91
|
}
|
|
71
92
|
export function useLogger() {
|
|
72
93
|
const logger = useContext(LoggerContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging-provider.js","sourceRoot":"","sources":["../../src/context/logging-provider.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD,MAAM,aAAa,GAAG,aAAa,CAAgB,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"logging-provider.js","sourceRoot":"","sources":["../../src/context/logging-provider.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export type { Logger } from './logger';
|
|
|
5
5
|
export { addNetworkStateListener, getNetworkState, setNetworkStateLogger, useNetworkState } from './network-state';
|
|
6
6
|
export { OfflineQueue } from './offline-queue';
|
|
7
7
|
export { defaultRedact, REDACTED } from './redact';
|
|
8
|
+
export type { SessionRecord, SessionState } from './session-marker';
|
|
8
9
|
export { FileTransport } from './transports/file';
|
|
9
10
|
export { RingBufferTransport } from './transports/ring-buffer';
|
|
10
11
|
export { WebhookTransport } from './transports/webhook';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAEvE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEtC,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGlH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAEvE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEtC,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGlH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAElD,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAGvD,YAAY,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,aAAa,GACd,MAAM,SAAS,CAAA"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAGvE,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGvC,sDAAsD;AACtD,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAElH,8CAA8C;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,yEAAyE;AACzE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAGvE,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGvC,sDAAsD;AACtD,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAElH,8CAA8C;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,yEAAyE;AACzE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGlD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,sCAAsC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA"}
|
package/dist/logger.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ import type { LogEntry, LogFilter, LoggerConfig } from './types';
|
|
|
9
9
|
*/
|
|
10
10
|
export declare function sanitizeLogData(data?: Record<string, unknown>): Record<string, unknown> | undefined;
|
|
11
11
|
export interface Logger {
|
|
12
|
+
/** This logger's session; every entry carries it as `context.sessionId`. */
|
|
13
|
+
readonly sessionId: string;
|
|
12
14
|
debug: (message: string, data?: Record<string, unknown>) => void;
|
|
13
15
|
info: (message: string, data?: Record<string, unknown>) => void;
|
|
14
16
|
warn: (message: string, data?: Record<string, unknown>) => void;
|
|
@@ -17,6 +19,12 @@ export interface Logger {
|
|
|
17
19
|
setUser: (userId: string) => void;
|
|
18
20
|
setScreen: (screenName: string) => void;
|
|
19
21
|
setContext: (key: string, value: string) => void;
|
|
22
|
+
/**
|
|
23
|
+
* The id of the last crash report the app sent (e.g. a Sentry event id),
|
|
24
|
+
* kept in the session marker so the next start's
|
|
25
|
+
* `logger.session.unclean-exit` can name it. No-op without `sessionMarker`.
|
|
26
|
+
*/
|
|
27
|
+
setLastCrashReportId: (id: string) => void;
|
|
20
28
|
getLogs: (filter?: LogFilter) => LogEntry[];
|
|
21
29
|
exportLogs: (filter?: LogFilter) => string;
|
|
22
30
|
/**
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,QAAQ,EACR,SAAS,EACT,YAAY,EAIb,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,QAAQ,EACR,SAAS,EACT,YAAY,EAIb,MAAM,SAAS,CAAA;AAiHhB;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAYnG;AAsDD,MAAM,WAAW,MAAM;IACrB,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAChE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC/D,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC/D,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAChE,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAE3E,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChD;;;;OAIG;IACH,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAE1C,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,QAAQ,EAAE,CAAA;IAC3C,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,MAAM,CAAA;IAC1C;;;;OAIG;IACH,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IAErC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA0TzD"}
|
package/dist/logger.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FailureGate } from './internal-log';
|
|
2
2
|
import { defaultRedact } from './redact';
|
|
3
|
+
import { SessionMarker } from './session-marker';
|
|
3
4
|
import { FileTransport } from './transports/file';
|
|
4
5
|
import { RingBufferTransport } from './transports/ring-buffer';
|
|
5
6
|
import { WebhookTransport } from './transports/webhook';
|
|
@@ -19,13 +20,13 @@ function isLogLevel(value) {
|
|
|
19
20
|
*/
|
|
20
21
|
function resolveMinLevel(configured, fallback) {
|
|
21
22
|
if (configured == null || configured === '')
|
|
22
|
-
return fallback;
|
|
23
|
+
return { level: fallback, unknown: false };
|
|
23
24
|
const normalized = typeof configured === 'string' ? configured.trim().toLowerCase() : configured;
|
|
24
25
|
if (isLogLevel(normalized))
|
|
25
|
-
return normalized;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return fallback;
|
|
26
|
+
return { level: normalized, unknown: false };
|
|
27
|
+
// Reported through the logger once it exists (below), so a bad
|
|
28
|
+
// `EXPO_PUBLIC_LOG_LEVEL` in a release build is in the export, not lost.
|
|
29
|
+
return { level: fallback, unknown: true };
|
|
29
30
|
}
|
|
30
31
|
const MAX_DEPTH = 6;
|
|
31
32
|
const MAX_CAUSE_DEPTH = 3;
|
|
@@ -171,7 +172,7 @@ function isDev() {
|
|
|
171
172
|
}
|
|
172
173
|
export function createLogger(config) {
|
|
173
174
|
const dev = isDev();
|
|
174
|
-
const minLevel = resolveMinLevel(config.minLevel, dev ? 'debug' : 'info');
|
|
175
|
+
const { level: minLevel, unknown: minLevelUnknown } = resolveMinLevel(config.minLevel, dev ? 'debug' : 'info');
|
|
175
176
|
const minLevelNum = LEVEL_ORDER[minLevel];
|
|
176
177
|
const sessionId = generateSessionId();
|
|
177
178
|
const platform = getPlatform();
|
|
@@ -227,6 +228,61 @@ export function createLogger(config) {
|
|
|
227
228
|
}
|
|
228
229
|
if (fileUnavailable !== null)
|
|
229
230
|
log('warn', '[Logger] file transport unavailable; file log disabled', { error: fileUnavailable });
|
|
231
|
+
// Session marker: did the previous session end cleanly?
|
|
232
|
+
let sessionMarker = null;
|
|
233
|
+
let appStateSubscription = null;
|
|
234
|
+
if (config.sessionMarker) {
|
|
235
|
+
const fileConfig = typeof config.file === 'object' ? config.file : undefined;
|
|
236
|
+
try {
|
|
237
|
+
sessionMarker = new SessionMarker(sessionId, fileConfig?.directory, internalLogger('session-marker'));
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
log('warn', '[Logger] session marker unavailable', { error: String(error) });
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (sessionMarker) {
|
|
244
|
+
const marker = sessionMarker;
|
|
245
|
+
marker.start().then(({ record, unreadable }) => {
|
|
246
|
+
if (unreadable) {
|
|
247
|
+
log('info', 'logger.session.marker-unreadable');
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
if (!record || record.state === 'closed')
|
|
251
|
+
return;
|
|
252
|
+
const previous = {
|
|
253
|
+
previousSessionId: record.sessionId,
|
|
254
|
+
startedAt: record.startedAt,
|
|
255
|
+
lastSeenAt: record.updatedAt,
|
|
256
|
+
lastCrashReportId: record.lastCrashReportId ?? null,
|
|
257
|
+
};
|
|
258
|
+
// Foreground death (crash, OOM, watchdog) is the case worth a warn; the
|
|
259
|
+
// OS reclaiming a backgrounded app is routine, so it is info.
|
|
260
|
+
if (record.state === 'running')
|
|
261
|
+
log('warn', 'logger.session.unclean-exit', previous, true);
|
|
262
|
+
else
|
|
263
|
+
log('info', 'logger.session.ended-in-background', previous);
|
|
264
|
+
});
|
|
265
|
+
// Checkpoints follow the app's own lifecycle, so a logger created at
|
|
266
|
+
// module load (before any provider) is covered too. `inactive` is a
|
|
267
|
+
// transient iOS state (an incoming call, Control Centre) and is ignored.
|
|
268
|
+
try {
|
|
269
|
+
const { AppState } = require('react-native');
|
|
270
|
+
if (AppState && typeof AppState.addEventListener === 'function') {
|
|
271
|
+
appStateSubscription = AppState.addEventListener('change', (state) => {
|
|
272
|
+
if (state === 'background')
|
|
273
|
+
void marker.mark('backgrounded');
|
|
274
|
+
else if (state === 'active')
|
|
275
|
+
void marker.mark('running');
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
// expected: no react-native (tests, node): the marker still records
|
|
281
|
+
// start and destroy.
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
if (minLevelUnknown)
|
|
285
|
+
log('warn', '[Logger] unknown minLevel; using the default', { configured: String(config.minLevel), using: minLevel });
|
|
230
286
|
function buildEntry(level, message, data) {
|
|
231
287
|
const entry = {
|
|
232
288
|
id: generateId(),
|
|
@@ -252,7 +308,17 @@ export function createLogger(config) {
|
|
|
252
308
|
for (const transport of transports) {
|
|
253
309
|
if (transport.name === skip)
|
|
254
310
|
continue;
|
|
255
|
-
transport
|
|
311
|
+
// A custom transport that throws synchronously, or returns no promise,
|
|
312
|
+
// must not throw into the caller of `logger.*`. Called synchronously
|
|
313
|
+
// still: the ring buffer must hold the line by the time `log` returns.
|
|
314
|
+
let sent;
|
|
315
|
+
try {
|
|
316
|
+
sent = Promise.resolve(transport.send([entry]));
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
sent = Promise.reject(error);
|
|
320
|
+
}
|
|
321
|
+
sent.then(() => {
|
|
256
322
|
const failed = sendFailures.get(transport.name)?.recover() ?? 0;
|
|
257
323
|
if (failed > 0)
|
|
258
324
|
report(transport.name, 'info', '[Logger] transport recovered', { transport: transport.name, failedSends: failed });
|
|
@@ -313,6 +379,7 @@ export function createLogger(config) {
|
|
|
313
379
|
};
|
|
314
380
|
}
|
|
315
381
|
const logger = {
|
|
382
|
+
sessionId,
|
|
316
383
|
debug: (message, data) => log('debug', message, data),
|
|
317
384
|
info: (message, data) => log('info', message, data),
|
|
318
385
|
warn: (message, data) => log('warn', message, data),
|
|
@@ -321,12 +388,12 @@ export function createLogger(config) {
|
|
|
321
388
|
// JS callers hand over whatever was thrown; a non-Error must not turn
|
|
322
389
|
// into an `undefined` message.
|
|
323
390
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
324
|
-
//
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
}, true);
|
|
391
|
+
// The same serialization as any logged Error, so own fields (`code`,
|
|
392
|
+
// `status`) and `cause` survive; it used to keep only stack and name.
|
|
393
|
+
// The error's fields go last: a context key can no longer overwrite
|
|
394
|
+
// `stack` or `name`. Recorded whatever `minLevel` says.
|
|
395
|
+
const { name, stack, message: _message, ...detail } = serializeError(err, new WeakSet(), 0, 0);
|
|
396
|
+
log('error', err.message, { ...context, ...detail, name, stack }, true);
|
|
330
397
|
if (config.onException) {
|
|
331
398
|
try {
|
|
332
399
|
config.onException(err, context);
|
|
@@ -346,6 +413,9 @@ export function createLogger(config) {
|
|
|
346
413
|
;
|
|
347
414
|
extraContext[key] = value;
|
|
348
415
|
},
|
|
416
|
+
setLastCrashReportId(id) {
|
|
417
|
+
void sessionMarker?.setLastCrashReportId(id);
|
|
418
|
+
},
|
|
349
419
|
getLogs(filter) {
|
|
350
420
|
if (!ringBuffer) {
|
|
351
421
|
throw new Error('Ring buffer not configured. Enable ringBuffer in LoggerConfig.');
|
|
@@ -371,6 +441,9 @@ export function createLogger(config) {
|
|
|
371
441
|
}
|
|
372
442
|
},
|
|
373
443
|
async destroy() {
|
|
444
|
+
appStateSubscription?.remove();
|
|
445
|
+
appStateSubscription = null;
|
|
446
|
+
await sessionMarker?.mark('closed');
|
|
374
447
|
if (webhookTransport) {
|
|
375
448
|
await webhookTransport.destroy();
|
|
376
449
|
}
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,MAAM,WAAW,GAA6B;IAC5C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAA;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,WAAW,CAAA;AAC1D,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,UAAmB,EAAE,QAAkB;IAC9D,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,KAAK,EAAE;QACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC5C,MAAM,UAAU,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,CAAA;IAChG,IAAI,UAAU,CAAC,UAAU,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC9C,+DAA+D;IAC/D,yEAAyE;IACzE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AAC3C,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,CAAA;AACnB,MAAM,eAAe,GAAG,CAAC,CAAA;AACzB,6EAA6E;AAC7E,6EAA6E;AAC7E,MAAM,iBAAiB,GAAG,IAAI,CAAA;AAC9B,MAAM,gBAAgB,GAAG,IAAI,CAAA;AAC7B,MAAM,eAAe,GAAG,EAAE,CAAA;AAE1B,SAAS,SAAS,CAAC,IAAY,EAAE,GAAG,GAAG,iBAAiB;IACtD,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;AACzF,CAAC;AAED,SAAS,cAAc,CAAC,KAAY,EAAE,IAAqB,EAAE,KAAa,EAAE,UAAkB;IAC5F,MAAM,GAAG,GAA4B,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAA;IAC5F,IAAI,KAAK,CAAC,KAAK;QACb,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAA;IACtD,2EAA2E;IAC3E,wBAAwB;IACxB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;YACf,GAAG,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;IACpD,CAAC;IACD,MAAM,KAAK,GAAI,KAA6B,CAAC,KAAK,CAAA;IAClD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,GAAG,CAAC,KAAK,GAAG,UAAU,IAAI,eAAe;YACvC,CAAC,CAAC,wBAAwB;YAC1B,CAAC,CAAC,KAAK,YAAY,KAAK;gBACtB,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;gBACxD,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;IAC7C,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,IAAqB,EAAE,KAAa;IACzE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QACvC,OAAO,KAAK,CAAA;IACd,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,KAAK,CAAC,CAAA;QACzB,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,KAAK,CAAA;QACd,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;QACzB,KAAK,UAAU;YACb,OAAO,aAAa,KAAK,CAAC,IAAI,IAAI,WAAW,GAAG,CAAA;QAClD,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;IAC3B,CAAC;IACD,MAAM,GAAG,GAAG,KAAe,CAAA;IAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACf,OAAO,YAAY,CAAA;IACrB,IAAI,KAAK,IAAI,SAAS;QACpB,OAAO,kBAAkB,CAAA;IAC3B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACb,IAAI,CAAC;QACH,IAAI,GAAG,YAAY,KAAK;YACtB,OAAO,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QAC5C,IAAI,GAAG,YAAY,IAAI;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAA;QACzE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;YAC7F,IAAI,GAAG,CAAC,MAAM,GAAG,eAAe;gBAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,eAAe,QAAQ,CAAC,CAAA;YACvD,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,GAAG,GAA4B,EAAE,CAAA;QACvC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;YAC3C,GAAG,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QACjD,OAAO,GAAG,CAAA;IACZ,CAAC;YACO,CAAC;QACP,uEAAuE;QACvE,4BAA4B;QAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,IAA8B;IAC5D,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;QACrC,OAAO,SAAS,CAAA;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;QACjD,OAAO,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YACnE,CAAC,CAAC,GAA8B;YAChC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;IACpB,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;IAC1C,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAmB;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACzC,CAAC;IACD,MAAM,CAAC;QACL,sDAAsD;QACtD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAClC,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YACvC,CAAC;YACD,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC,SAAS,CAAC;oBACpB,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,IAAI,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;iBACxC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YACb,CAAC;QACH,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAA;IACrC,CAAC;AACH,CAAC;AAED,IAAI,OAAO,GAAG,CAAC,CAAA;AACf,SAAS,UAAU;IACjB,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AACrC,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;AACnE,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;QAC5C,OAAO,QAAQ,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAA;IACtD,CAAC;IACD,MAAM,CAAC;QACL,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,SAAS,KAAK;IACZ,IAAI,CAAC;QACH,OAAO,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;IACzD,CAAC;IACD,MAAM,CAAC;QACL,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAkCD,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,MAAM,GAAG,GAAG,KAAK,EAAE,CAAA;IACnB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAC9G,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;IAEzC,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAA;IACrC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,aAAa,CAAA;IAE9E,kBAAkB;IAClB,MAAM,GAAG,GAAe;QACtB,SAAS;QACT,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ;KACT,CAAA;IAED,MAAM,YAAY,GAA2B,EAAE,CAAA;IAE/C,sEAAsE;IACtE,0CAA0C;IAC1C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAA;IAEnD,uEAAuE;IACvE,yEAAyE;IACzE,UAAU;IACV,IAAI,SAAS,GAAG,KAAK,CAAA;IAErB,wBAAwB;IACxB,MAAM,UAAU,GAAmB,EAAE,CAAA;IACrC,IAAI,UAAU,GAA+B,IAAI,CAAA;IACjD,IAAI,aAAa,GAAyB,IAAI,CAAA;IAC9C,IAAI,gBAAgB,GAA4B,IAAI,CAAA;IACpD,IAAI,eAAe,GAAkB,IAAI,CAAA;IAEzC,cAAc;IACd,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,QAAQ,GACV,OAAO,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAA;QACnE,UAAU,GAAG,IAAI,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACtD,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC7B,CAAC;IAED,iBAAiB;IACjB,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,UAAU,GACZ,OAAO,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA;QACvD,IAAI,CAAC;YACH,aAAa,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;YACrE,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAChC,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACb,kEAAkE;YAClE,oDAAoD;YACpD,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,CAAA;QAClF,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IACnC,CAAC;IAED,oBAAoB;IACpB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;IACvC,CAAC;IAED,IAAI,eAAe,KAAK,IAAI;QAC1B,GAAG,CAAC,MAAM,EAAE,wDAAwD,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAA;IAEnG,wDAAwD;IACxD,IAAI,aAAa,GAAyB,IAAI,CAAA;IAC9C,IAAI,oBAAoB,GAAkC,IAAI,CAAA;IAC9D,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,MAAM,UAAU,GAA2B,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;QACpG,IAAI,CAAC;YACH,aAAa,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAA;QACvG,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACb,GAAG,CAAC,MAAM,EAAE,qCAAqC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC9E,CAAC;IACH,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,aAAa,CAAA;QAC5B,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE;YAC7C,IAAI,UAAU,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAA;gBAC/C,OAAM;YACR,CAAC;YACD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ;gBACtC,OAAM;YACR,MAAM,QAAQ,GAAG;gBACf,iBAAiB,EAAE,MAAM,CAAC,SAAS;gBACnC,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,UAAU,EAAE,MAAM,CAAC,SAAS;gBAC5B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,IAAI;aACpD,CAAA;YACD,wEAAwE;YACxE,8DAA8D;YAC9D,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;gBAC5B,GAAG,CAAC,MAAM,EAAE,6BAA6B,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;;gBAE1D,GAAG,CAAC,MAAM,EAAE,oCAAoC,EAAE,QAAQ,CAAC,CAAA;QAC/D,CAAC,CAAC,CAAA;QACF,qEAAqE;QACrE,oEAAoE;QACpE,yEAAyE;QACzE,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;YAC5C,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;gBAChE,oBAAoB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;oBAC3E,IAAI,KAAK,KAAK,YAAY;wBACxB,KAAK,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;yBAC7B,IAAI,KAAK,KAAK,QAAQ;wBACzB,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;gBAC/B,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QACD,MAAM,CAAC;YACL,oEAAoE;YACpE,qBAAqB;QACvB,CAAC;IACH,CAAC;IACD,IAAI,eAAe;QACjB,GAAG,CAAC,MAAM,EAAE,8CAA8C,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;IAEvH,SAAS,UAAU,CAAC,KAAe,EAAE,OAAe,EAAE,IAA8B;QAClF,MAAM,KAAK,GAAa;YACtB,EAAE,EAAE,UAAU,EAAE;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK;YACL,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;YAC3B,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,YAAY,EAA2B;SAC9D,CAAA;QACD,IAAI,CAAC,MAAM;YACT,OAAO,KAAK,CAAA;QACd,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;QACtB,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACb,qEAAqE;YACrE,8DAA8D;YAC9D,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;YACjC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAA;QACzE,CAAC;IACH,CAAC;IAED,SAAS,KAAK,CAAC,KAAe,EAAE,IAAa;QAC3C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI;gBACzB,SAAQ;YACV,uEAAuE;YACvE,qEAAqE;YACrE,uEAAuE;YACvE,IAAI,IAAmB,CAAA;YACvB,IAAI,CAAC;gBACH,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACjD,CAAC;YACD,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC9B,CAAC;YACD,IAAI,CAAC,IAAI,CACP,GAAG,EAAE;gBACH,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;gBAC/D,IAAI,MAAM,GAAG,CAAC;oBACZ,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,8BAA8B,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;YACtH,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;gBACjB,IAAI,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;gBAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,IAAI,GAAG,IAAI,WAAW,EAAE,CAAA;oBACxB,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;gBACxC,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,EAAE;oBACb,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,gCAAgC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YAC1H,CAAC,CACF,CAAA;QACH,CAAC;IACH,CAAC;IAED,SAAS,SAAS,CAAC,KAAe,EAAE,OAAe,EAAE,IAA8B;QACjF,MAAM,SAAS,GAAG,KAAK,KAAK,OAAO;YACjC,CAAC,CAAC,OAAO,CAAC,KAAK;YACf,CAAC,CAAC,KAAK,KAAK,MAAM;gBAChB,CAAC,CAAC,OAAO,CAAC,IAAI;gBACd,CAAC,CAAC,KAAK,KAAK,OAAO;oBACjB,CAAC,CAAC,OAAO,CAAC,KAAK;oBACf,CAAC,CAAC,OAAO,CAAC,GAAG,CAAA;QACnB,SAAS,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;IAC9D,CAAC;IAED;;;OAGG;IACH,SAAS,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,IAA8B,EAAE,KAAK,GAAG,KAAK;QAC1F,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW;YACjE,OAAM;QACR,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAC9C,IAAI,GAAG;YACL,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC7C,KAAK,CAAC,KAAK,CAAC,CAAA;IACd,CAAC;IAED,2EAA2E;IAC3E,SAAS,MAAM,CAAC,MAAc,EAAE,KAAe,EAAE,OAAe,EAAE,IAA8B;QAC9F,IAAI,SAAS,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW;YAC/C,OAAM;QACR,SAAS,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;YAC9C,IAAI,GAAG;gBACL,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC7C,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACtB,CAAC;gBACO,CAAC;YACP,SAAS,GAAG,KAAK,CAAA;QACnB,CAAC;IACH,CAAC;IAED,SAAS,cAAc,CAAC,MAAc;QACpC,OAAO;YACL,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;YAChE,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;YAC9D,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;YAC9D,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;SACjE,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAW;QACrB,SAAS;QACT,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;QACrD,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;QACnD,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;QACnD,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;QAErD,gBAAgB,CAAC,KAAY,EAAE,OAAiC;YAC9D,sEAAsE;YACtE,+BAA+B;YAC/B,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YACrE,qEAAqE;YACrE,sEAAsE;YACtE,oEAAoE;YACpE,wDAAwD;YACxD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YAC9F,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,CAAA;YACvE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBAClC,CAAC;gBACD,OAAO,SAAS,EAAE,CAAC;oBACjB,GAAG,CAAC,OAAO,EAAE,iCAAiC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;gBACrF,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,MAAc;YACpB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAA;QACrB,CAAC;QAED,SAAS,CAAC,UAAkB;YAC1B,GAAG,CAAC,UAAU,GAAG,UAAU,CAAA;QAC7B,CAAC;QAED,UAAU,CAAC,GAAW,EAAE,KAAa;YACnC,CAAC;YAAC,YAAuC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACxD,CAAC;QAED,oBAAoB,CAAC,EAAU;YAC7B,KAAK,aAAa,EAAE,oBAAoB,CAAC,EAAE,CAAC,CAAA;QAC9C,CAAC;QAED,OAAO,CAAC,MAAkB;YACxB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;YACnF,CAAC;YACD,OAAO,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QACtC,CAAC;QAED,UAAU,CAAC,MAAkB;YAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;YACnF,CAAC;YACD,OAAO,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;QACxD,CAAC;QAED,KAAK,CAAC,cAAc;YAClB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAA;YAChF,CAAC;YACD,OAAO,aAAa,CAAC,OAAO,EAAE,CAAA;QAChC,CAAC;QAED,KAAK,CAAC,KAAK;YACT,MAAM,aAAa,EAAE,KAAK,EAAE,CAAA;YAC5B,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,gBAAgB,CAAC,KAAK,EAAE,CAAA;YAChC,CAAC;QACH,CAAC;QAED,KAAK,CAAC,OAAO;YACX,oBAAoB,EAAE,MAAM,EAAE,CAAA;YAC9B,oBAAoB,GAAG,IAAI,CAAA;YAC3B,MAAM,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;YACnC,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAA;YAClC,CAAC;QACH,CAAC;KACF,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { InternalLogger } from './internal-log';
|
|
2
|
+
/**
|
|
3
|
+
* A small file that says whether the last session ended cleanly.
|
|
4
|
+
*
|
|
5
|
+
* Written `running` when a logger starts and on every return to the
|
|
6
|
+
* foreground, `backgrounded` when the app goes to the background, and
|
|
7
|
+
* `closed` on `destroy()`. A file still saying `running` at the next start
|
|
8
|
+
* means the process died in the foreground: a crash, an OOM kill, or a
|
|
9
|
+
* watchdog. That is the one case a crash report may never have reached
|
|
10
|
+
* Sentry, so it is logged as a warn with the previous session's id.
|
|
11
|
+
*
|
|
12
|
+
* `backgrounded` is NOT reported as unclean. iOS and Android reclaim
|
|
13
|
+
* backgrounded apps routinely (iOS kills one a BLE sync woke within seconds),
|
|
14
|
+
* so warning on every such end would bury the real crashes. It is logged at
|
|
15
|
+
* info instead, distinguishably, so support can still see how a session ended.
|
|
16
|
+
*/
|
|
17
|
+
export type SessionState = 'running' | 'backgrounded' | 'closed';
|
|
18
|
+
export interface SessionRecord {
|
|
19
|
+
sessionId: string;
|
|
20
|
+
startedAt: string;
|
|
21
|
+
state: SessionState;
|
|
22
|
+
/** When `state` last changed: the last moment the session is known alive. */
|
|
23
|
+
updatedAt: string;
|
|
24
|
+
/** Set through `Logger.setLastCrashReportId` (e.g. a Sentry event id). */
|
|
25
|
+
lastCrashReportId?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface PreviousSession {
|
|
28
|
+
record: SessionRecord | null;
|
|
29
|
+
/** The file existed but did not parse. */
|
|
30
|
+
unreadable: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** Not the FileTransport's `logs-*.txt` shape, so its cleanup and export skip it. */
|
|
33
|
+
export declare const SESSION_MARKER_FILE = "session-marker.json";
|
|
34
|
+
export declare class SessionMarker {
|
|
35
|
+
private readonly fs;
|
|
36
|
+
private readonly directory;
|
|
37
|
+
private readonly path;
|
|
38
|
+
private readonly log;
|
|
39
|
+
private readonly writeFailures;
|
|
40
|
+
private record;
|
|
41
|
+
private queue;
|
|
42
|
+
/** Throws when expo-file-system is missing; the logger reports that once. */
|
|
43
|
+
constructor(sessionId: string, directory: string | undefined, logger?: InternalLogger);
|
|
44
|
+
/**
|
|
45
|
+
* Reads what the previous session left, then marks this one `running`.
|
|
46
|
+
* Never rejects: a failure is reported and the previous session is unknown.
|
|
47
|
+
*/
|
|
48
|
+
start(): Promise<PreviousSession>;
|
|
49
|
+
/** Records the state change; resolves once it is on disk (or failed). */
|
|
50
|
+
mark(state: SessionState): Promise<void>;
|
|
51
|
+
setLastCrashReportId(id: string): Promise<void>;
|
|
52
|
+
private write;
|
|
53
|
+
private failed;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=session-marker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-marker.d.ts","sourceRoot":"","sources":["../src/session-marker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAGpD;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,cAAc,GAAG,QAAQ,CAAA;AAEhE,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,YAAY,CAAA;IACnB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAA;IACjB,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5B,0CAA0C;IAC1C,UAAU,EAAE,OAAO,CAAA;CACpB;AAkCD,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,wBAAwB,CAAA;AAExD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAkB;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,MAAM,CAAe;IAG7B,OAAO,CAAC,KAAK,CAAmC;IAEhD,6EAA6E;gBACjE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,cAAc;IASrF;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,eAAe,CAAC;IAuBvC,yEAAyE;IACzE,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxC,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,MAAM;CAIf"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { devConsoleLogger, FailureGate } from './internal-log';
|
|
2
|
+
function loadFileSystem() {
|
|
3
|
+
try {
|
|
4
|
+
return require('expo-file-system/legacy');
|
|
5
|
+
}
|
|
6
|
+
catch {
|
|
7
|
+
try {
|
|
8
|
+
return require('expo-file-system');
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
throw new Error('@mongrov/core sessionMarker requires expo-file-system as a peer dependency');
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function isRecord(value) {
|
|
16
|
+
if (value === null || typeof value !== 'object')
|
|
17
|
+
return false;
|
|
18
|
+
const r = value;
|
|
19
|
+
return typeof r.sessionId === 'string'
|
|
20
|
+
&& typeof r.startedAt === 'string'
|
|
21
|
+
&& (r.state === 'running' || r.state === 'backgrounded' || r.state === 'closed');
|
|
22
|
+
}
|
|
23
|
+
/** Not the FileTransport's `logs-*.txt` shape, so its cleanup and export skip it. */
|
|
24
|
+
export const SESSION_MARKER_FILE = 'session-marker.json';
|
|
25
|
+
export class SessionMarker {
|
|
26
|
+
/** Throws when expo-file-system is missing; the logger reports that once. */
|
|
27
|
+
constructor(sessionId, directory, logger) {
|
|
28
|
+
this.writeFailures = new FailureGate();
|
|
29
|
+
// Writes run one after another, in call order, so a fast background →
|
|
30
|
+
// active flip can never land on disk as `backgrounded`.
|
|
31
|
+
this.queue = Promise.resolve();
|
|
32
|
+
this.fs = loadFileSystem();
|
|
33
|
+
this.directory = directory ?? `${this.fs.documentDirectory ?? ''}logs/`;
|
|
34
|
+
this.path = `${this.directory}${SESSION_MARKER_FILE}`;
|
|
35
|
+
this.log = logger ?? devConsoleLogger();
|
|
36
|
+
const now = new Date().toISOString();
|
|
37
|
+
this.record = { sessionId, startedAt: now, state: 'running', updatedAt: now };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Reads what the previous session left, then marks this one `running`.
|
|
41
|
+
* Never rejects: a failure is reported and the previous session is unknown.
|
|
42
|
+
*/
|
|
43
|
+
async start() {
|
|
44
|
+
let previous = { record: null, unreadable: false };
|
|
45
|
+
try {
|
|
46
|
+
const info = await this.fs.getInfoAsync(this.path);
|
|
47
|
+
if (info.exists) {
|
|
48
|
+
const text = await this.fs.readAsStringAsync(this.path);
|
|
49
|
+
let parsed;
|
|
50
|
+
try {
|
|
51
|
+
parsed = JSON.parse(text);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
parsed = null;
|
|
55
|
+
}
|
|
56
|
+
previous = isRecord(parsed) ? { record: parsed, unreadable: false } : { record: null, unreadable: true };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
this.failed('read', error);
|
|
61
|
+
}
|
|
62
|
+
await this.write();
|
|
63
|
+
return previous;
|
|
64
|
+
}
|
|
65
|
+
/** Records the state change; resolves once it is on disk (or failed). */
|
|
66
|
+
mark(state) {
|
|
67
|
+
if (this.record.state === state)
|
|
68
|
+
return this.queue;
|
|
69
|
+
this.record = { ...this.record, state, updatedAt: new Date().toISOString() };
|
|
70
|
+
return this.write();
|
|
71
|
+
}
|
|
72
|
+
setLastCrashReportId(id) {
|
|
73
|
+
this.record = { ...this.record, lastCrashReportId: id };
|
|
74
|
+
return this.write();
|
|
75
|
+
}
|
|
76
|
+
write() {
|
|
77
|
+
const snapshot = JSON.stringify(this.record);
|
|
78
|
+
this.queue = this.queue.then(async () => {
|
|
79
|
+
try {
|
|
80
|
+
const dir = await this.fs.getInfoAsync(this.directory);
|
|
81
|
+
if (!dir.exists)
|
|
82
|
+
await this.fs.makeDirectoryAsync(this.directory, { intermediates: true });
|
|
83
|
+
await this.fs.writeAsStringAsync(this.path, snapshot);
|
|
84
|
+
const failed = this.writeFailures.recover();
|
|
85
|
+
if (failed > 0)
|
|
86
|
+
this.log.info('[Logger] session marker recovered', { failedWrites: failed });
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
this.failed('write', error);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
return this.queue;
|
|
93
|
+
}
|
|
94
|
+
failed(op, error) {
|
|
95
|
+
if (this.writeFailures.fail())
|
|
96
|
+
this.log.error('[Logger] session marker failed', { op, error: String(error) });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=session-marker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-marker.js","sourceRoot":"","sources":["../src/session-marker.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -60,5 +60,14 @@ export interface LoggerConfig {
|
|
|
60
60
|
* to add app rules, or pass `false` to log verbatim.
|
|
61
61
|
*/
|
|
62
62
|
redact?: ((entry: LogEntry) => LogEntry) | false;
|
|
63
|
+
/**
|
|
64
|
+
* Record whether the previous session ended cleanly (needs
|
|
65
|
+
* expo-file-system). At start a previous session still marked `running`
|
|
66
|
+
* (the process died in the foreground) is logged once at warn as
|
|
67
|
+
* `logger.session.unclean-exit`; one that ended in the background is
|
|
68
|
+
* logged at info. The marker lives next to the file logs (`file.directory`
|
|
69
|
+
* when set). Default off: no file IO.
|
|
70
|
+
*/
|
|
71
|
+
sessionMarker?: boolean;
|
|
63
72
|
}
|
|
64
73
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,QAAQ,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,OAAO,EAAE,UAAU,CAAA;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7C;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAA;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAA;IACvC,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAA;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IACvE;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC,GAAG,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,QAAQ,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,OAAO,EAAE,UAAU,CAAA;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7C;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAA;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAA;IACvC,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAA;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IACvE;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC,GAAG,KAAK,CAAA;IAChD;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mongrov/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Structured logging for React Native / Expo — ring buffer, file, and webhook transports with offline queue. Includes dev-tools UI components.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|