@mushi-mushi/core 1.25.0 → 1.27.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 +12 -1
- package/SECURITY.md +49 -0
- package/dist/index.cjs +100 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +131 -2
- package/dist/index.d.ts +131 -2
- package/dist/index.js +94 -8
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/dist/index.d.cts
CHANGED
|
@@ -46,7 +46,52 @@ interface MushiConfig {
|
|
|
46
46
|
* when omitted (legacy Vercel Analytics wiring).
|
|
47
47
|
*/
|
|
48
48
|
appVersion?: string;
|
|
49
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Probabilistic sampling rate for session-replay recording (rrweb/lite).
|
|
51
|
+
* Range 0–1, default 1 (record all sessions). The sampling decision is made
|
|
52
|
+
* once at session init — a sampled-out session never loads the rrweb chunk,
|
|
53
|
+
* reducing bundle cost and CPU for excluded users.
|
|
54
|
+
*
|
|
55
|
+
* Independent of `sampleRate` (error reporting). A session can have replay
|
|
56
|
+
* on but errors sampled, or vice versa.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* replaySampleRate: 0.2 // record replay for ~20% of sessions
|
|
60
|
+
*/
|
|
61
|
+
replaySampleRate?: number;
|
|
62
|
+
/**
|
|
63
|
+
* Probabilistic sampling rate for automatic (non-user-initiated) error
|
|
64
|
+
* reports. Range 0–1, default 1 (send all). User-initiated feedback reports
|
|
65
|
+
* are always sent regardless of this value.
|
|
66
|
+
*
|
|
67
|
+
* Examples:
|
|
68
|
+
* sampleRate: 0.1 → send ~10% of auto-captured errors
|
|
69
|
+
* sampleRate: 1 → send all (default)
|
|
70
|
+
* sampleRate: 0 → send none (disables automatic capture; feedback unaffected)
|
|
71
|
+
*
|
|
72
|
+
* When rate limiting or circuit breaker is also active, the stricter of the
|
|
73
|
+
* two gates applies. Use sampleRate for sustained high-volume apps; use
|
|
74
|
+
* rate limiting for burst protection.
|
|
75
|
+
*/
|
|
76
|
+
sampleRate?: number;
|
|
77
|
+
/**
|
|
78
|
+
* Hook called before ANY report (error, exception, or user feedback) is
|
|
79
|
+
* sent. Return null to cancel the report; return the (possibly modified)
|
|
80
|
+
* report to proceed. Async version supported — resolution is awaited before
|
|
81
|
+
* submission. Runs AFTER built-in PII scrubbing.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* beforeSend: (report) => {
|
|
85
|
+
* if (report.category === 'bug' && report.description.includes('internal')) return null
|
|
86
|
+
* return { ...report, description: sanitize(report.description) }
|
|
87
|
+
* }
|
|
88
|
+
*/
|
|
89
|
+
beforeSend?: (report: MushiReport) => MushiReport | null | Promise<MushiReport | null>;
|
|
90
|
+
/**
|
|
91
|
+
* @deprecated Use `beforeSend` instead. `beforeSendFeedback` is kept for
|
|
92
|
+
* backwards compatibility and applies only to user-submitted feedback reports.
|
|
93
|
+
* `beforeSend` covers all report types and takes precedence when both are set.
|
|
94
|
+
*/
|
|
50
95
|
beforeSendFeedback?: (report: MushiReport) => MushiReport | null | Promise<MushiReport | null>;
|
|
51
96
|
/** Called once if the app crashed during the previous session. */
|
|
52
97
|
onCrashedLastRun?: (crashed: boolean) => void;
|
|
@@ -774,6 +819,13 @@ interface MushiBreadcrumb {
|
|
|
774
819
|
message: string;
|
|
775
820
|
/** Optional structured payload — kept small to keep ingest cheap. */
|
|
776
821
|
data?: Record<string, unknown>;
|
|
822
|
+
/**
|
|
823
|
+
* Correlation ID linking this breadcrumb to the `MushiNetworkEntry` and
|
|
824
|
+
* `MushiConsoleEntry` entries emitted during the same network request's
|
|
825
|
+
* lifetime (Phase 3b). Set for `fetch` / `xhr` category crumbs and for
|
|
826
|
+
* console entries captured while a request was in-flight.
|
|
827
|
+
*/
|
|
828
|
+
correlationId?: string;
|
|
777
829
|
}
|
|
778
830
|
/**
|
|
779
831
|
* Snapshot of Sentry's current scope at report submission. Captured by
|
|
@@ -985,6 +1037,13 @@ interface MushiConsoleEntry {
|
|
|
985
1037
|
message: string;
|
|
986
1038
|
timestamp: number;
|
|
987
1039
|
stack?: string;
|
|
1040
|
+
/**
|
|
1041
|
+
* Correlation ID linking this console entry to the network request that was
|
|
1042
|
+
* active when this log was emitted (e.g. the fetch whose catch block called
|
|
1043
|
+
* console.error). Matches `MushiNetworkEntry.correlationId`. Set by the SDK's
|
|
1044
|
+
* active-request tracker (Phase 3b).
|
|
1045
|
+
*/
|
|
1046
|
+
correlationId?: string;
|
|
988
1047
|
}
|
|
989
1048
|
interface MushiNetworkEntry {
|
|
990
1049
|
method: string;
|
|
@@ -1002,6 +1061,17 @@ interface MushiNetworkEntry {
|
|
|
1002
1061
|
* Used to correlate this network entry with a backend span in the admin console.
|
|
1003
1062
|
*/
|
|
1004
1063
|
traceId?: string;
|
|
1064
|
+
/**
|
|
1065
|
+
* Whether this entry was captured by the fetch interceptor or the XHR interceptor
|
|
1066
|
+
* (Phase 3a). Used for row-level provenance badges in the console UI.
|
|
1067
|
+
*/
|
|
1068
|
+
captureMethod?: 'fetch' | 'xhr';
|
|
1069
|
+
/**
|
|
1070
|
+
* Correlation ID shared with `MushiConsoleEntry.correlationId` and
|
|
1071
|
+
* `MushiBreadcrumb.correlationId` for entries emitted during this request's
|
|
1072
|
+
* lifetime (Phase 3b). Enables "highlight all logs/crumbs from this request."
|
|
1073
|
+
*/
|
|
1074
|
+
correlationId?: string;
|
|
1005
1075
|
}
|
|
1006
1076
|
interface MushiPerformanceMetrics {
|
|
1007
1077
|
fcp?: number;
|
|
@@ -2037,6 +2107,14 @@ declare function createPiiScrubber(config?: PiiScrubberConfig): {
|
|
|
2037
2107
|
scrubObject: <T extends Record<string, unknown>>(obj: T, keys: string[]) => T;
|
|
2038
2108
|
};
|
|
2039
2109
|
declare function scrubPii(text: string, config?: PiiScrubberConfig): string;
|
|
2110
|
+
/**
|
|
2111
|
+
* Scrub the query-string portion(s) of a URL — both the standard `?…` part
|
|
2112
|
+
* and any `?…` inside the hash fragment (hash routers like RealWorld's
|
|
2113
|
+
* `#/path?query` carry their query inside the fragment). Path segments and
|
|
2114
|
+
* param keys are left untouched; only values are redacted. Accepts absolute
|
|
2115
|
+
* or relative URLs and never throws.
|
|
2116
|
+
*/
|
|
2117
|
+
declare function scrubUrl(url: string, config?: PiiScrubberConfig): string;
|
|
2040
2118
|
|
|
2041
2119
|
/**
|
|
2042
2120
|
* Ring-buffer breadcrumb store. Capped at `max` entries (default 50);
|
|
@@ -2270,6 +2348,13 @@ declare const MUSHI_BANNER_NEON: {
|
|
|
2270
2348
|
declare const MUSHI_ON_ACCENT = "#FAF7F0";
|
|
2271
2349
|
/** Pure white for assistant bubbles on accent backgrounds. */
|
|
2272
2350
|
declare const MUSHI_INVERSE = "#ffffff";
|
|
2351
|
+
/** Disabled control fill (inactive category chips, muted buttons). */
|
|
2352
|
+
declare const MUSHI_CONTROL_DISABLED: {
|
|
2353
|
+
readonly light: "#d1d1d6";
|
|
2354
|
+
readonly dark: "#3a3a3c";
|
|
2355
|
+
};
|
|
2356
|
+
/** Drop-shadow ink for RN shadowColor (sumi black). */
|
|
2357
|
+
declare const MUSHI_SHADOW_INK = "#000000";
|
|
2273
2358
|
/** Submit-button depth shadow (accent ink, mode-specific). */
|
|
2274
2359
|
declare const MUSHI_ACCENT_SHADOW: {
|
|
2275
2360
|
readonly light: "#9A2A1E";
|
|
@@ -2340,6 +2425,48 @@ declare const MUSHI_MOTION: {
|
|
|
2340
2425
|
readonly durationFast: 200;
|
|
2341
2426
|
readonly durationPanel: 300;
|
|
2342
2427
|
};
|
|
2428
|
+
/**
|
|
2429
|
+
* Full duration vocabulary (ms). MUSHI_MOTION retains its two values for
|
|
2430
|
+
* back-compat; this set adds the missing steps for micro-interactions and
|
|
2431
|
+
* expressive animations without changing the RN / Capacitor snapshot.
|
|
2432
|
+
*/
|
|
2433
|
+
declare const MUSHI_DURATION: {
|
|
2434
|
+
/** Fastest — tooltip show, chip hover tint */
|
|
2435
|
+
readonly instant: 120;
|
|
2436
|
+
/** Default micro-interaction — most hover / focus transitions */
|
|
2437
|
+
readonly fast: 200;
|
|
2438
|
+
/** Button bloom, option-row wipe */
|
|
2439
|
+
readonly base: 220;
|
|
2440
|
+
/** Panel enter / exit */
|
|
2441
|
+
readonly panel: 300;
|
|
2442
|
+
/** Deliberate — success stamp press, page-level transitions */
|
|
2443
|
+
readonly slow: 420;
|
|
2444
|
+
/** Stamp ring draw, long ambient animations */
|
|
2445
|
+
readonly ring: 700;
|
|
2446
|
+
};
|
|
2447
|
+
/** Border widths (px) — editorial weight scale. */
|
|
2448
|
+
declare const MUSHI_BORDER: {
|
|
2449
|
+
readonly hairline: 1;
|
|
2450
|
+
readonly regular: 1.5;
|
|
2451
|
+
readonly strong: 2;
|
|
2452
|
+
/** Hanko stamp border (FAB inset accent stripe, stamp ring) */
|
|
2453
|
+
readonly stamp: 3;
|
|
2454
|
+
};
|
|
2455
|
+
/** Opacity scale — disabled, muted, scrim, overlay states. */
|
|
2456
|
+
declare const MUSHI_OPACITY: {
|
|
2457
|
+
readonly disabled: 0.4;
|
|
2458
|
+
readonly muted: 0.6;
|
|
2459
|
+
readonly scrim: 0.72;
|
|
2460
|
+
readonly overlay: 0.88;
|
|
2461
|
+
};
|
|
2462
|
+
/** Letter-spacing scale — mono captions to wide stamp labels. */
|
|
2463
|
+
declare const MUSHI_LETTER_SPACING: {
|
|
2464
|
+
readonly tight: "-0.01em";
|
|
2465
|
+
readonly normal: "0";
|
|
2466
|
+
readonly label: "0.02em";
|
|
2467
|
+
readonly stamp: "0.08em";
|
|
2468
|
+
readonly wide: "0.16em";
|
|
2469
|
+
};
|
|
2343
2470
|
/**
|
|
2344
2471
|
* Launcher geometry — the numbers that previously diverged between platforms
|
|
2345
2472
|
* (banner height, FAB size, default gutter, panel width). Centralising them
|
|
@@ -2393,6 +2520,8 @@ interface MushiTokenSnapshot {
|
|
|
2393
2520
|
type: typeof MUSHI_TYPE;
|
|
2394
2521
|
z: typeof MUSHI_Z;
|
|
2395
2522
|
motion: typeof MUSHI_MOTION;
|
|
2523
|
+
/** Full duration vocabulary — complements `motion` for micro / stamp steps. */
|
|
2524
|
+
duration: typeof MUSHI_DURATION;
|
|
2396
2525
|
geometry: typeof MUSHI_GEOMETRY;
|
|
2397
2526
|
copy: typeof MUSHI_COPY;
|
|
2398
2527
|
}
|
|
@@ -2503,4 +2632,4 @@ declare function projectInitialsThemeIndex(projectId: string): number;
|
|
|
2503
2632
|
*/
|
|
2504
2633
|
declare function readPageFaviconHref(): string | null;
|
|
2505
2634
|
|
|
2506
|
-
export { type ApiClientOptions, type BreadcrumbBuffer, type BreadcrumbBufferOptions, DEFAULT_API_ENDPOINT, DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT, type EnvConfigDiagnostics, type EnvNearMiss, type LogEntry, type LogFormat, type LogLevel, type Logger, type LoggerOptions, MAX_REPORT_PAYLOAD_BYTES, MAX_SCREENSHOT_DATA_URL_BYTES, MUSHI_ACCENT_SHADOW, MUSHI_BANNER_BRAND_BORDER, MUSHI_BANNER_NEON, MUSHI_COLORS_DARK, MUSHI_COLORS_LIGHT, MUSHI_COPY, MUSHI_GEOMETRY, MUSHI_IDENTITY_TOKEN_PREFIX, MUSHI_INTERNAL_HEADER, MUSHI_INTERNAL_INIT_MARKER, MUSHI_INVERSE, MUSHI_MOTION, MUSHI_ON_ACCENT, MUSHI_PROJECT_HEADER, MUSHI_RADIUS, MUSHI_REPORTER_STATUS, MUSHI_SDK_PACKAGE_HEADER, MUSHI_SDK_VERSION_HEADER, MUSHI_SPACING, MUSHI_TIER_COLORS, MUSHI_TYPE, MUSHI_USER_TOKEN_HEADER, MUSHI_Z, type MushiActivityEvent, type MushiApiCascadeConfig, type MushiApiClient, type MushiApiResponse, type MushiAssistantConfig, type MushiAssistantReply, type MushiAssistantStep, type MushiBannerConfig, type MushiBannerLink, type MushiBetaChangelogEntry, type MushiBetaModeConfig, type MushiBreadcrumb, type MushiCaptureConfig, type MushiCaptureEventInput, type MushiCaptureExceptionOptions, type MushiColorPalette, type MushiConfig, type MushiConsoleEntry, type MushiCooldownConfig, type MushiCrossAppReport, type MushiCustomCategory, type MushiDiagnosticsResult, type MushiDiscoverInventoryConfig, type MushiDiscoveryEventPayload, type MushiEnvironment, type MushiEventHandler, type MushiEventType, type MushiHallOfFameEntry, type MushiIdentityClaims, type MushiIntegrationsConfig, type MushiInternalRequestKind, type MushiLeaderboardEntry, type MushiNetworkEntry, type MushiOfflineConfig, type MushiOnDeviceClassifier, type MushiOnDeviceClassifierInput, type MushiOnDeviceClassifierResult, type MushiPageContext, type MushiPerformanceMetrics, type MushiPreFilterConfig, type MushiPreset, type MushiPrivacyConfig, type MushiProactiveConfig, type MushiRegion, type MushiReport, type MushiReportBuilder, type MushiReportCategory, type MushiReportStatus, type MushiReporterComment, type MushiReporterReport, type MushiReputationResult, type MushiRewardsConfig, type MushiRuntimeSdkConfig, type MushiSDKInstance, type MushiSdkVersionInfo, type MushiSelectedElement, type MushiSentryConfig, type MushiSentryContext, type MushiSessionEventPayload, type MushiTesterReputation, type MushiThemeMode, type MushiTierResult, type MushiTimelineEntry, type MushiTimelineKind, type MushiTokenSnapshot, type MushiTracePropagationConfig, type MushiUrlMatcher, type MushiWidgetAnchor, type MushiWidgetConfig, type NormalisedException, type OfflineQueue, type PayloadGuardResult, type PiiScrubberConfig, type PreFilterResult, type ProjectFaviconSource, REGION_ENDPOINTS, type RateLimiter, type RateLimiterConfig, type ResolvedEnvConfig, type SessionTrackerOptions, buildIdentityClaims, buildSdkIngestHeaders, captureEnvironment, checkReportPayloadSize, createApiClient, createBreadcrumbBuffer, createLogger, createOfflineQueue, createPiiScrubber, createPreFilter, createRateLimiter, destroySessionTracker, diagnoseEnvConfig, estimateJsonBytes, expandPreset, faviconUrlCandidates, formatBytes, getDeviceFingerprintHash, getReporterToken, getSessionId, githubRepoDomainHint, hmacSha256Hex, initSessionTracker, isLikelyGenericFavicon, isUntrustedFaviconUrl, mushiPalette, mushiTokens, newUuid, noopLogger, normaliseThrown, originToDomain, parseIdentityToken, projectFaviconUrlCandidates, projectInitials, projectInitialsThemeIndex, readPageFaviconHref, resolveEnvConfig, resolveProjectDomain, resolveProjectFaviconDomains, resolveRegionEndpoint, resolveWidgetAccent, safeWidgetHex, scrubPii, sha256Hex, trackPageView, updateSessionIdentity, validateConfig };
|
|
2635
|
+
export { type ApiClientOptions, type BreadcrumbBuffer, type BreadcrumbBufferOptions, DEFAULT_API_ENDPOINT, DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT, type EnvConfigDiagnostics, type EnvNearMiss, type LogEntry, type LogFormat, type LogLevel, type Logger, type LoggerOptions, MAX_REPORT_PAYLOAD_BYTES, MAX_SCREENSHOT_DATA_URL_BYTES, MUSHI_ACCENT_SHADOW, MUSHI_BANNER_BRAND_BORDER, MUSHI_BANNER_NEON, MUSHI_BORDER, MUSHI_COLORS_DARK, MUSHI_COLORS_LIGHT, MUSHI_CONTROL_DISABLED, MUSHI_COPY, MUSHI_DURATION, MUSHI_GEOMETRY, MUSHI_IDENTITY_TOKEN_PREFIX, MUSHI_INTERNAL_HEADER, MUSHI_INTERNAL_INIT_MARKER, MUSHI_INVERSE, MUSHI_LETTER_SPACING, MUSHI_MOTION, MUSHI_ON_ACCENT, MUSHI_OPACITY, MUSHI_PROJECT_HEADER, MUSHI_RADIUS, MUSHI_REPORTER_STATUS, MUSHI_SDK_PACKAGE_HEADER, MUSHI_SDK_VERSION_HEADER, MUSHI_SHADOW_INK, MUSHI_SPACING, MUSHI_TIER_COLORS, MUSHI_TYPE, MUSHI_USER_TOKEN_HEADER, MUSHI_Z, type MushiActivityEvent, type MushiApiCascadeConfig, type MushiApiClient, type MushiApiResponse, type MushiAssistantConfig, type MushiAssistantReply, type MushiAssistantStep, type MushiBannerConfig, type MushiBannerLink, type MushiBetaChangelogEntry, type MushiBetaModeConfig, type MushiBreadcrumb, type MushiCaptureConfig, type MushiCaptureEventInput, type MushiCaptureExceptionOptions, type MushiColorPalette, type MushiConfig, type MushiConsoleEntry, type MushiCooldownConfig, type MushiCrossAppReport, type MushiCustomCategory, type MushiDiagnosticsResult, type MushiDiscoverInventoryConfig, type MushiDiscoveryEventPayload, type MushiEnvironment, type MushiEventHandler, type MushiEventType, type MushiHallOfFameEntry, type MushiIdentityClaims, type MushiIntegrationsConfig, type MushiInternalRequestKind, type MushiLeaderboardEntry, type MushiNetworkEntry, type MushiOfflineConfig, type MushiOnDeviceClassifier, type MushiOnDeviceClassifierInput, type MushiOnDeviceClassifierResult, type MushiPageContext, type MushiPerformanceMetrics, type MushiPreFilterConfig, type MushiPreset, type MushiPrivacyConfig, type MushiProactiveConfig, type MushiRegion, type MushiReport, type MushiReportBuilder, type MushiReportCategory, type MushiReportStatus, type MushiReporterComment, type MushiReporterReport, type MushiReputationResult, type MushiRewardsConfig, type MushiRuntimeSdkConfig, type MushiSDKInstance, type MushiSdkVersionInfo, type MushiSelectedElement, type MushiSentryConfig, type MushiSentryContext, type MushiSessionEventPayload, type MushiTesterReputation, type MushiThemeMode, type MushiTierResult, type MushiTimelineEntry, type MushiTimelineKind, type MushiTokenSnapshot, type MushiTracePropagationConfig, type MushiUrlMatcher, type MushiWidgetAnchor, type MushiWidgetConfig, type NormalisedException, type OfflineQueue, type PayloadGuardResult, type PiiScrubberConfig, type PreFilterResult, type ProjectFaviconSource, REGION_ENDPOINTS, type RateLimiter, type RateLimiterConfig, type ResolvedEnvConfig, type SessionTrackerOptions, buildIdentityClaims, buildSdkIngestHeaders, captureEnvironment, checkReportPayloadSize, createApiClient, createBreadcrumbBuffer, createLogger, createOfflineQueue, createPiiScrubber, createPreFilter, createRateLimiter, destroySessionTracker, diagnoseEnvConfig, estimateJsonBytes, expandPreset, faviconUrlCandidates, formatBytes, getDeviceFingerprintHash, getReporterToken, getSessionId, githubRepoDomainHint, hmacSha256Hex, initSessionTracker, isLikelyGenericFavicon, isUntrustedFaviconUrl, mushiPalette, mushiTokens, newUuid, noopLogger, normaliseThrown, originToDomain, parseIdentityToken, projectFaviconUrlCandidates, projectInitials, projectInitialsThemeIndex, readPageFaviconHref, resolveEnvConfig, resolveProjectDomain, resolveProjectFaviconDomains, resolveRegionEndpoint, resolveWidgetAccent, safeWidgetHex, scrubPii, scrubUrl, sha256Hex, trackPageView, updateSessionIdentity, validateConfig };
|
package/dist/index.d.ts
CHANGED
|
@@ -46,7 +46,52 @@ interface MushiConfig {
|
|
|
46
46
|
* when omitted (legacy Vercel Analytics wiring).
|
|
47
47
|
*/
|
|
48
48
|
appVersion?: string;
|
|
49
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Probabilistic sampling rate for session-replay recording (rrweb/lite).
|
|
51
|
+
* Range 0–1, default 1 (record all sessions). The sampling decision is made
|
|
52
|
+
* once at session init — a sampled-out session never loads the rrweb chunk,
|
|
53
|
+
* reducing bundle cost and CPU for excluded users.
|
|
54
|
+
*
|
|
55
|
+
* Independent of `sampleRate` (error reporting). A session can have replay
|
|
56
|
+
* on but errors sampled, or vice versa.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* replaySampleRate: 0.2 // record replay for ~20% of sessions
|
|
60
|
+
*/
|
|
61
|
+
replaySampleRate?: number;
|
|
62
|
+
/**
|
|
63
|
+
* Probabilistic sampling rate for automatic (non-user-initiated) error
|
|
64
|
+
* reports. Range 0–1, default 1 (send all). User-initiated feedback reports
|
|
65
|
+
* are always sent regardless of this value.
|
|
66
|
+
*
|
|
67
|
+
* Examples:
|
|
68
|
+
* sampleRate: 0.1 → send ~10% of auto-captured errors
|
|
69
|
+
* sampleRate: 1 → send all (default)
|
|
70
|
+
* sampleRate: 0 → send none (disables automatic capture; feedback unaffected)
|
|
71
|
+
*
|
|
72
|
+
* When rate limiting or circuit breaker is also active, the stricter of the
|
|
73
|
+
* two gates applies. Use sampleRate for sustained high-volume apps; use
|
|
74
|
+
* rate limiting for burst protection.
|
|
75
|
+
*/
|
|
76
|
+
sampleRate?: number;
|
|
77
|
+
/**
|
|
78
|
+
* Hook called before ANY report (error, exception, or user feedback) is
|
|
79
|
+
* sent. Return null to cancel the report; return the (possibly modified)
|
|
80
|
+
* report to proceed. Async version supported — resolution is awaited before
|
|
81
|
+
* submission. Runs AFTER built-in PII scrubbing.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* beforeSend: (report) => {
|
|
85
|
+
* if (report.category === 'bug' && report.description.includes('internal')) return null
|
|
86
|
+
* return { ...report, description: sanitize(report.description) }
|
|
87
|
+
* }
|
|
88
|
+
*/
|
|
89
|
+
beforeSend?: (report: MushiReport) => MushiReport | null | Promise<MushiReport | null>;
|
|
90
|
+
/**
|
|
91
|
+
* @deprecated Use `beforeSend` instead. `beforeSendFeedback` is kept for
|
|
92
|
+
* backwards compatibility and applies only to user-submitted feedback reports.
|
|
93
|
+
* `beforeSend` covers all report types and takes precedence when both are set.
|
|
94
|
+
*/
|
|
50
95
|
beforeSendFeedback?: (report: MushiReport) => MushiReport | null | Promise<MushiReport | null>;
|
|
51
96
|
/** Called once if the app crashed during the previous session. */
|
|
52
97
|
onCrashedLastRun?: (crashed: boolean) => void;
|
|
@@ -774,6 +819,13 @@ interface MushiBreadcrumb {
|
|
|
774
819
|
message: string;
|
|
775
820
|
/** Optional structured payload — kept small to keep ingest cheap. */
|
|
776
821
|
data?: Record<string, unknown>;
|
|
822
|
+
/**
|
|
823
|
+
* Correlation ID linking this breadcrumb to the `MushiNetworkEntry` and
|
|
824
|
+
* `MushiConsoleEntry` entries emitted during the same network request's
|
|
825
|
+
* lifetime (Phase 3b). Set for `fetch` / `xhr` category crumbs and for
|
|
826
|
+
* console entries captured while a request was in-flight.
|
|
827
|
+
*/
|
|
828
|
+
correlationId?: string;
|
|
777
829
|
}
|
|
778
830
|
/**
|
|
779
831
|
* Snapshot of Sentry's current scope at report submission. Captured by
|
|
@@ -985,6 +1037,13 @@ interface MushiConsoleEntry {
|
|
|
985
1037
|
message: string;
|
|
986
1038
|
timestamp: number;
|
|
987
1039
|
stack?: string;
|
|
1040
|
+
/**
|
|
1041
|
+
* Correlation ID linking this console entry to the network request that was
|
|
1042
|
+
* active when this log was emitted (e.g. the fetch whose catch block called
|
|
1043
|
+
* console.error). Matches `MushiNetworkEntry.correlationId`. Set by the SDK's
|
|
1044
|
+
* active-request tracker (Phase 3b).
|
|
1045
|
+
*/
|
|
1046
|
+
correlationId?: string;
|
|
988
1047
|
}
|
|
989
1048
|
interface MushiNetworkEntry {
|
|
990
1049
|
method: string;
|
|
@@ -1002,6 +1061,17 @@ interface MushiNetworkEntry {
|
|
|
1002
1061
|
* Used to correlate this network entry with a backend span in the admin console.
|
|
1003
1062
|
*/
|
|
1004
1063
|
traceId?: string;
|
|
1064
|
+
/**
|
|
1065
|
+
* Whether this entry was captured by the fetch interceptor or the XHR interceptor
|
|
1066
|
+
* (Phase 3a). Used for row-level provenance badges in the console UI.
|
|
1067
|
+
*/
|
|
1068
|
+
captureMethod?: 'fetch' | 'xhr';
|
|
1069
|
+
/**
|
|
1070
|
+
* Correlation ID shared with `MushiConsoleEntry.correlationId` and
|
|
1071
|
+
* `MushiBreadcrumb.correlationId` for entries emitted during this request's
|
|
1072
|
+
* lifetime (Phase 3b). Enables "highlight all logs/crumbs from this request."
|
|
1073
|
+
*/
|
|
1074
|
+
correlationId?: string;
|
|
1005
1075
|
}
|
|
1006
1076
|
interface MushiPerformanceMetrics {
|
|
1007
1077
|
fcp?: number;
|
|
@@ -2037,6 +2107,14 @@ declare function createPiiScrubber(config?: PiiScrubberConfig): {
|
|
|
2037
2107
|
scrubObject: <T extends Record<string, unknown>>(obj: T, keys: string[]) => T;
|
|
2038
2108
|
};
|
|
2039
2109
|
declare function scrubPii(text: string, config?: PiiScrubberConfig): string;
|
|
2110
|
+
/**
|
|
2111
|
+
* Scrub the query-string portion(s) of a URL — both the standard `?…` part
|
|
2112
|
+
* and any `?…` inside the hash fragment (hash routers like RealWorld's
|
|
2113
|
+
* `#/path?query` carry their query inside the fragment). Path segments and
|
|
2114
|
+
* param keys are left untouched; only values are redacted. Accepts absolute
|
|
2115
|
+
* or relative URLs and never throws.
|
|
2116
|
+
*/
|
|
2117
|
+
declare function scrubUrl(url: string, config?: PiiScrubberConfig): string;
|
|
2040
2118
|
|
|
2041
2119
|
/**
|
|
2042
2120
|
* Ring-buffer breadcrumb store. Capped at `max` entries (default 50);
|
|
@@ -2270,6 +2348,13 @@ declare const MUSHI_BANNER_NEON: {
|
|
|
2270
2348
|
declare const MUSHI_ON_ACCENT = "#FAF7F0";
|
|
2271
2349
|
/** Pure white for assistant bubbles on accent backgrounds. */
|
|
2272
2350
|
declare const MUSHI_INVERSE = "#ffffff";
|
|
2351
|
+
/** Disabled control fill (inactive category chips, muted buttons). */
|
|
2352
|
+
declare const MUSHI_CONTROL_DISABLED: {
|
|
2353
|
+
readonly light: "#d1d1d6";
|
|
2354
|
+
readonly dark: "#3a3a3c";
|
|
2355
|
+
};
|
|
2356
|
+
/** Drop-shadow ink for RN shadowColor (sumi black). */
|
|
2357
|
+
declare const MUSHI_SHADOW_INK = "#000000";
|
|
2273
2358
|
/** Submit-button depth shadow (accent ink, mode-specific). */
|
|
2274
2359
|
declare const MUSHI_ACCENT_SHADOW: {
|
|
2275
2360
|
readonly light: "#9A2A1E";
|
|
@@ -2340,6 +2425,48 @@ declare const MUSHI_MOTION: {
|
|
|
2340
2425
|
readonly durationFast: 200;
|
|
2341
2426
|
readonly durationPanel: 300;
|
|
2342
2427
|
};
|
|
2428
|
+
/**
|
|
2429
|
+
* Full duration vocabulary (ms). MUSHI_MOTION retains its two values for
|
|
2430
|
+
* back-compat; this set adds the missing steps for micro-interactions and
|
|
2431
|
+
* expressive animations without changing the RN / Capacitor snapshot.
|
|
2432
|
+
*/
|
|
2433
|
+
declare const MUSHI_DURATION: {
|
|
2434
|
+
/** Fastest — tooltip show, chip hover tint */
|
|
2435
|
+
readonly instant: 120;
|
|
2436
|
+
/** Default micro-interaction — most hover / focus transitions */
|
|
2437
|
+
readonly fast: 200;
|
|
2438
|
+
/** Button bloom, option-row wipe */
|
|
2439
|
+
readonly base: 220;
|
|
2440
|
+
/** Panel enter / exit */
|
|
2441
|
+
readonly panel: 300;
|
|
2442
|
+
/** Deliberate — success stamp press, page-level transitions */
|
|
2443
|
+
readonly slow: 420;
|
|
2444
|
+
/** Stamp ring draw, long ambient animations */
|
|
2445
|
+
readonly ring: 700;
|
|
2446
|
+
};
|
|
2447
|
+
/** Border widths (px) — editorial weight scale. */
|
|
2448
|
+
declare const MUSHI_BORDER: {
|
|
2449
|
+
readonly hairline: 1;
|
|
2450
|
+
readonly regular: 1.5;
|
|
2451
|
+
readonly strong: 2;
|
|
2452
|
+
/** Hanko stamp border (FAB inset accent stripe, stamp ring) */
|
|
2453
|
+
readonly stamp: 3;
|
|
2454
|
+
};
|
|
2455
|
+
/** Opacity scale — disabled, muted, scrim, overlay states. */
|
|
2456
|
+
declare const MUSHI_OPACITY: {
|
|
2457
|
+
readonly disabled: 0.4;
|
|
2458
|
+
readonly muted: 0.6;
|
|
2459
|
+
readonly scrim: 0.72;
|
|
2460
|
+
readonly overlay: 0.88;
|
|
2461
|
+
};
|
|
2462
|
+
/** Letter-spacing scale — mono captions to wide stamp labels. */
|
|
2463
|
+
declare const MUSHI_LETTER_SPACING: {
|
|
2464
|
+
readonly tight: "-0.01em";
|
|
2465
|
+
readonly normal: "0";
|
|
2466
|
+
readonly label: "0.02em";
|
|
2467
|
+
readonly stamp: "0.08em";
|
|
2468
|
+
readonly wide: "0.16em";
|
|
2469
|
+
};
|
|
2343
2470
|
/**
|
|
2344
2471
|
* Launcher geometry — the numbers that previously diverged between platforms
|
|
2345
2472
|
* (banner height, FAB size, default gutter, panel width). Centralising them
|
|
@@ -2393,6 +2520,8 @@ interface MushiTokenSnapshot {
|
|
|
2393
2520
|
type: typeof MUSHI_TYPE;
|
|
2394
2521
|
z: typeof MUSHI_Z;
|
|
2395
2522
|
motion: typeof MUSHI_MOTION;
|
|
2523
|
+
/** Full duration vocabulary — complements `motion` for micro / stamp steps. */
|
|
2524
|
+
duration: typeof MUSHI_DURATION;
|
|
2396
2525
|
geometry: typeof MUSHI_GEOMETRY;
|
|
2397
2526
|
copy: typeof MUSHI_COPY;
|
|
2398
2527
|
}
|
|
@@ -2503,4 +2632,4 @@ declare function projectInitialsThemeIndex(projectId: string): number;
|
|
|
2503
2632
|
*/
|
|
2504
2633
|
declare function readPageFaviconHref(): string | null;
|
|
2505
2634
|
|
|
2506
|
-
export { type ApiClientOptions, type BreadcrumbBuffer, type BreadcrumbBufferOptions, DEFAULT_API_ENDPOINT, DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT, type EnvConfigDiagnostics, type EnvNearMiss, type LogEntry, type LogFormat, type LogLevel, type Logger, type LoggerOptions, MAX_REPORT_PAYLOAD_BYTES, MAX_SCREENSHOT_DATA_URL_BYTES, MUSHI_ACCENT_SHADOW, MUSHI_BANNER_BRAND_BORDER, MUSHI_BANNER_NEON, MUSHI_COLORS_DARK, MUSHI_COLORS_LIGHT, MUSHI_COPY, MUSHI_GEOMETRY, MUSHI_IDENTITY_TOKEN_PREFIX, MUSHI_INTERNAL_HEADER, MUSHI_INTERNAL_INIT_MARKER, MUSHI_INVERSE, MUSHI_MOTION, MUSHI_ON_ACCENT, MUSHI_PROJECT_HEADER, MUSHI_RADIUS, MUSHI_REPORTER_STATUS, MUSHI_SDK_PACKAGE_HEADER, MUSHI_SDK_VERSION_HEADER, MUSHI_SPACING, MUSHI_TIER_COLORS, MUSHI_TYPE, MUSHI_USER_TOKEN_HEADER, MUSHI_Z, type MushiActivityEvent, type MushiApiCascadeConfig, type MushiApiClient, type MushiApiResponse, type MushiAssistantConfig, type MushiAssistantReply, type MushiAssistantStep, type MushiBannerConfig, type MushiBannerLink, type MushiBetaChangelogEntry, type MushiBetaModeConfig, type MushiBreadcrumb, type MushiCaptureConfig, type MushiCaptureEventInput, type MushiCaptureExceptionOptions, type MushiColorPalette, type MushiConfig, type MushiConsoleEntry, type MushiCooldownConfig, type MushiCrossAppReport, type MushiCustomCategory, type MushiDiagnosticsResult, type MushiDiscoverInventoryConfig, type MushiDiscoveryEventPayload, type MushiEnvironment, type MushiEventHandler, type MushiEventType, type MushiHallOfFameEntry, type MushiIdentityClaims, type MushiIntegrationsConfig, type MushiInternalRequestKind, type MushiLeaderboardEntry, type MushiNetworkEntry, type MushiOfflineConfig, type MushiOnDeviceClassifier, type MushiOnDeviceClassifierInput, type MushiOnDeviceClassifierResult, type MushiPageContext, type MushiPerformanceMetrics, type MushiPreFilterConfig, type MushiPreset, type MushiPrivacyConfig, type MushiProactiveConfig, type MushiRegion, type MushiReport, type MushiReportBuilder, type MushiReportCategory, type MushiReportStatus, type MushiReporterComment, type MushiReporterReport, type MushiReputationResult, type MushiRewardsConfig, type MushiRuntimeSdkConfig, type MushiSDKInstance, type MushiSdkVersionInfo, type MushiSelectedElement, type MushiSentryConfig, type MushiSentryContext, type MushiSessionEventPayload, type MushiTesterReputation, type MushiThemeMode, type MushiTierResult, type MushiTimelineEntry, type MushiTimelineKind, type MushiTokenSnapshot, type MushiTracePropagationConfig, type MushiUrlMatcher, type MushiWidgetAnchor, type MushiWidgetConfig, type NormalisedException, type OfflineQueue, type PayloadGuardResult, type PiiScrubberConfig, type PreFilterResult, type ProjectFaviconSource, REGION_ENDPOINTS, type RateLimiter, type RateLimiterConfig, type ResolvedEnvConfig, type SessionTrackerOptions, buildIdentityClaims, buildSdkIngestHeaders, captureEnvironment, checkReportPayloadSize, createApiClient, createBreadcrumbBuffer, createLogger, createOfflineQueue, createPiiScrubber, createPreFilter, createRateLimiter, destroySessionTracker, diagnoseEnvConfig, estimateJsonBytes, expandPreset, faviconUrlCandidates, formatBytes, getDeviceFingerprintHash, getReporterToken, getSessionId, githubRepoDomainHint, hmacSha256Hex, initSessionTracker, isLikelyGenericFavicon, isUntrustedFaviconUrl, mushiPalette, mushiTokens, newUuid, noopLogger, normaliseThrown, originToDomain, parseIdentityToken, projectFaviconUrlCandidates, projectInitials, projectInitialsThemeIndex, readPageFaviconHref, resolveEnvConfig, resolveProjectDomain, resolveProjectFaviconDomains, resolveRegionEndpoint, resolveWidgetAccent, safeWidgetHex, scrubPii, sha256Hex, trackPageView, updateSessionIdentity, validateConfig };
|
|
2635
|
+
export { type ApiClientOptions, type BreadcrumbBuffer, type BreadcrumbBufferOptions, DEFAULT_API_ENDPOINT, DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT, type EnvConfigDiagnostics, type EnvNearMiss, type LogEntry, type LogFormat, type LogLevel, type Logger, type LoggerOptions, MAX_REPORT_PAYLOAD_BYTES, MAX_SCREENSHOT_DATA_URL_BYTES, MUSHI_ACCENT_SHADOW, MUSHI_BANNER_BRAND_BORDER, MUSHI_BANNER_NEON, MUSHI_BORDER, MUSHI_COLORS_DARK, MUSHI_COLORS_LIGHT, MUSHI_CONTROL_DISABLED, MUSHI_COPY, MUSHI_DURATION, MUSHI_GEOMETRY, MUSHI_IDENTITY_TOKEN_PREFIX, MUSHI_INTERNAL_HEADER, MUSHI_INTERNAL_INIT_MARKER, MUSHI_INVERSE, MUSHI_LETTER_SPACING, MUSHI_MOTION, MUSHI_ON_ACCENT, MUSHI_OPACITY, MUSHI_PROJECT_HEADER, MUSHI_RADIUS, MUSHI_REPORTER_STATUS, MUSHI_SDK_PACKAGE_HEADER, MUSHI_SDK_VERSION_HEADER, MUSHI_SHADOW_INK, MUSHI_SPACING, MUSHI_TIER_COLORS, MUSHI_TYPE, MUSHI_USER_TOKEN_HEADER, MUSHI_Z, type MushiActivityEvent, type MushiApiCascadeConfig, type MushiApiClient, type MushiApiResponse, type MushiAssistantConfig, type MushiAssistantReply, type MushiAssistantStep, type MushiBannerConfig, type MushiBannerLink, type MushiBetaChangelogEntry, type MushiBetaModeConfig, type MushiBreadcrumb, type MushiCaptureConfig, type MushiCaptureEventInput, type MushiCaptureExceptionOptions, type MushiColorPalette, type MushiConfig, type MushiConsoleEntry, type MushiCooldownConfig, type MushiCrossAppReport, type MushiCustomCategory, type MushiDiagnosticsResult, type MushiDiscoverInventoryConfig, type MushiDiscoveryEventPayload, type MushiEnvironment, type MushiEventHandler, type MushiEventType, type MushiHallOfFameEntry, type MushiIdentityClaims, type MushiIntegrationsConfig, type MushiInternalRequestKind, type MushiLeaderboardEntry, type MushiNetworkEntry, type MushiOfflineConfig, type MushiOnDeviceClassifier, type MushiOnDeviceClassifierInput, type MushiOnDeviceClassifierResult, type MushiPageContext, type MushiPerformanceMetrics, type MushiPreFilterConfig, type MushiPreset, type MushiPrivacyConfig, type MushiProactiveConfig, type MushiRegion, type MushiReport, type MushiReportBuilder, type MushiReportCategory, type MushiReportStatus, type MushiReporterComment, type MushiReporterReport, type MushiReputationResult, type MushiRewardsConfig, type MushiRuntimeSdkConfig, type MushiSDKInstance, type MushiSdkVersionInfo, type MushiSelectedElement, type MushiSentryConfig, type MushiSentryContext, type MushiSessionEventPayload, type MushiTesterReputation, type MushiThemeMode, type MushiTierResult, type MushiTimelineEntry, type MushiTimelineKind, type MushiTokenSnapshot, type MushiTracePropagationConfig, type MushiUrlMatcher, type MushiWidgetAnchor, type MushiWidgetConfig, type NormalisedException, type OfflineQueue, type PayloadGuardResult, type PiiScrubberConfig, type PreFilterResult, type ProjectFaviconSource, REGION_ENDPOINTS, type RateLimiter, type RateLimiterConfig, type ResolvedEnvConfig, type SessionTrackerOptions, buildIdentityClaims, buildSdkIngestHeaders, captureEnvironment, checkReportPayloadSize, createApiClient, createBreadcrumbBuffer, createLogger, createOfflineQueue, createPiiScrubber, createPreFilter, createRateLimiter, destroySessionTracker, diagnoseEnvConfig, estimateJsonBytes, expandPreset, faviconUrlCandidates, formatBytes, getDeviceFingerprintHash, getReporterToken, getSessionId, githubRepoDomainHint, hmacSha256Hex, initSessionTracker, isLikelyGenericFavicon, isUntrustedFaviconUrl, mushiPalette, mushiTokens, newUuid, noopLogger, normaliseThrown, originToDomain, parseIdentityToken, projectFaviconUrlCandidates, projectInitials, projectInitialsThemeIndex, readPageFaviconHref, resolveEnvConfig, resolveProjectDomain, resolveProjectFaviconDomains, resolveRegionEndpoint, resolveWidgetAccent, safeWidgetHex, scrubPii, scrubUrl, sha256Hex, trackPageView, updateSessionIdentity, validateConfig };
|
package/dist/index.js
CHANGED
|
@@ -503,9 +503,9 @@ function isRetryable(error) {
|
|
|
503
503
|
|
|
504
504
|
// src/region.ts
|
|
505
505
|
var REGION_ENDPOINTS = {
|
|
506
|
-
us:
|
|
507
|
-
eu:
|
|
508
|
-
jp:
|
|
506
|
+
us: DEFAULT_API_ENDPOINT,
|
|
507
|
+
eu: DEFAULT_API_ENDPOINT,
|
|
508
|
+
jp: DEFAULT_API_ENDPOINT
|
|
509
509
|
};
|
|
510
510
|
var ROUTING_CACHE_KEY = "mushi_region_v1";
|
|
511
511
|
var ROUTING_CACHE_TTL_MS = 24 * 60 * 60 * 1e3;
|
|
@@ -697,6 +697,8 @@ var KNOWN_CONFIG_KEYS = [
|
|
|
697
697
|
"debug",
|
|
698
698
|
"enabled",
|
|
699
699
|
"appVersion",
|
|
700
|
+
"sampleRate",
|
|
701
|
+
"beforeSend",
|
|
700
702
|
"beforeSendFeedback",
|
|
701
703
|
"onCrashedLastRun"
|
|
702
704
|
];
|
|
@@ -2034,6 +2036,46 @@ function createPiiScrubber(config = {}) {
|
|
|
2034
2036
|
function scrubPii(text, config) {
|
|
2035
2037
|
return createPiiScrubber(config).scrub(text);
|
|
2036
2038
|
}
|
|
2039
|
+
var SENSITIVE_QUERY_KEY_SUBSTRING_RE = /token|jwt|passw|pwd|secret|api[-_]?key|apikey|auth|session|signature|email|phone|ssn/i;
|
|
2040
|
+
var SENSITIVE_QUERY_KEY_EXACT_RE = /^(?:key|code|sig)$/i;
|
|
2041
|
+
function isSensitiveQueryKey(key) {
|
|
2042
|
+
let decoded = key;
|
|
2043
|
+
try {
|
|
2044
|
+
decoded = decodeURIComponent(key);
|
|
2045
|
+
} catch {
|
|
2046
|
+
}
|
|
2047
|
+
return SENSITIVE_QUERY_KEY_SUBSTRING_RE.test(decoded) || SENSITIVE_QUERY_KEY_EXACT_RE.test(decoded);
|
|
2048
|
+
}
|
|
2049
|
+
function scrubQueryPairs(query, scrub) {
|
|
2050
|
+
return query.split("&").map((pair) => {
|
|
2051
|
+
const eq = pair.indexOf("=");
|
|
2052
|
+
if (eq === -1) return pair;
|
|
2053
|
+
const key = pair.slice(0, eq);
|
|
2054
|
+
const value = pair.slice(eq + 1);
|
|
2055
|
+
if (value.length === 0) return pair;
|
|
2056
|
+
if (isSensitiveQueryKey(key)) return `${key}=[Scrubbed]`;
|
|
2057
|
+
let decoded = value;
|
|
2058
|
+
try {
|
|
2059
|
+
decoded = decodeURIComponent(value);
|
|
2060
|
+
} catch {
|
|
2061
|
+
}
|
|
2062
|
+
const scrubbed = scrub(decoded);
|
|
2063
|
+
if (scrubbed !== decoded) return `${key}=${encodeURIComponent(scrubbed)}`;
|
|
2064
|
+
return pair;
|
|
2065
|
+
}).join("&");
|
|
2066
|
+
}
|
|
2067
|
+
function scrubUrl(url, config) {
|
|
2068
|
+
if (!url || !url.includes("?") && !url.includes("#")) return url;
|
|
2069
|
+
const { scrub } = createPiiScrubber(config);
|
|
2070
|
+
const scrubPart = (part) => {
|
|
2071
|
+
const qIdx = part.indexOf("?");
|
|
2072
|
+
if (qIdx === -1) return part;
|
|
2073
|
+
return part.slice(0, qIdx + 1) + scrubQueryPairs(part.slice(qIdx + 1), scrub);
|
|
2074
|
+
};
|
|
2075
|
+
const hashIdx = url.indexOf("#");
|
|
2076
|
+
if (hashIdx === -1) return scrubPart(url);
|
|
2077
|
+
return scrubPart(url.slice(0, hashIdx)) + scrubPart(url.slice(hashIdx));
|
|
2078
|
+
}
|
|
2037
2079
|
|
|
2038
2080
|
// src/breadcrumbs.ts
|
|
2039
2081
|
var DEFAULT_MAX = 50;
|
|
@@ -2117,8 +2159,10 @@ var MUSHI_COLORS_LIGHT = {
|
|
|
2117
2159
|
accent: "#E03C2C",
|
|
2118
2160
|
accentWash: "rgba(224,60,44,0.08)",
|
|
2119
2161
|
accentInk: "#7A1F15",
|
|
2120
|
-
|
|
2121
|
-
|
|
2162
|
+
/** Aligned with brand.tokens.json `jade` (was Tailwind green-600 — drifted). */
|
|
2163
|
+
ok: "#2D7A55",
|
|
2164
|
+
/** Aligned with brand.tokens.json `viz-danger` (was Tailwind red-600 — drifted). */
|
|
2165
|
+
danger: "#B83232"
|
|
2122
2166
|
};
|
|
2123
2167
|
var MUSHI_COLORS_DARK = {
|
|
2124
2168
|
paper: "#0F0E0C",
|
|
@@ -2132,8 +2176,10 @@ var MUSHI_COLORS_DARK = {
|
|
|
2132
2176
|
accent: "#FF5A47",
|
|
2133
2177
|
accentWash: "rgba(255,90,71,0.12)",
|
|
2134
2178
|
accentInk: "#FFE5E0",
|
|
2135
|
-
|
|
2136
|
-
|
|
2179
|
+
/** Aligned with brand.tokens.json `dark-jade`. */
|
|
2180
|
+
ok: "#3A9E6E",
|
|
2181
|
+
/** Aligned with brand.tokens.json `dark-viz-danger`. */
|
|
2182
|
+
danger: "#E05555"
|
|
2137
2183
|
};
|
|
2138
2184
|
var MUSHI_TIER_COLORS = {
|
|
2139
2185
|
free: MUSHI_COLORS_LIGHT.inkMuted,
|
|
@@ -2149,6 +2195,11 @@ var MUSHI_BANNER_NEON = {
|
|
|
2149
2195
|
};
|
|
2150
2196
|
var MUSHI_ON_ACCENT = "#FAF7F0";
|
|
2151
2197
|
var MUSHI_INVERSE = "#ffffff";
|
|
2198
|
+
var MUSHI_CONTROL_DISABLED = {
|
|
2199
|
+
light: "#d1d1d6",
|
|
2200
|
+
dark: "#3a3a3c"
|
|
2201
|
+
};
|
|
2202
|
+
var MUSHI_SHADOW_INK = "#000000";
|
|
2152
2203
|
var MUSHI_ACCENT_SHADOW = {
|
|
2153
2204
|
light: "#9A2A1E",
|
|
2154
2205
|
dark: "#7A1F15"
|
|
@@ -2214,6 +2265,40 @@ var MUSHI_MOTION = {
|
|
|
2214
2265
|
durationFast: 200,
|
|
2215
2266
|
durationPanel: 300
|
|
2216
2267
|
};
|
|
2268
|
+
var MUSHI_DURATION = {
|
|
2269
|
+
/** Fastest — tooltip show, chip hover tint */
|
|
2270
|
+
instant: 120,
|
|
2271
|
+
/** Default micro-interaction — most hover / focus transitions */
|
|
2272
|
+
fast: 200,
|
|
2273
|
+
/** Button bloom, option-row wipe */
|
|
2274
|
+
base: 220,
|
|
2275
|
+
/** Panel enter / exit */
|
|
2276
|
+
panel: 300,
|
|
2277
|
+
/** Deliberate — success stamp press, page-level transitions */
|
|
2278
|
+
slow: 420,
|
|
2279
|
+
/** Stamp ring draw, long ambient animations */
|
|
2280
|
+
ring: 700
|
|
2281
|
+
};
|
|
2282
|
+
var MUSHI_BORDER = {
|
|
2283
|
+
hairline: 1,
|
|
2284
|
+
regular: 1.5,
|
|
2285
|
+
strong: 2,
|
|
2286
|
+
/** Hanko stamp border (FAB inset accent stripe, stamp ring) */
|
|
2287
|
+
stamp: 3
|
|
2288
|
+
};
|
|
2289
|
+
var MUSHI_OPACITY = {
|
|
2290
|
+
disabled: 0.4,
|
|
2291
|
+
muted: 0.6,
|
|
2292
|
+
scrim: 0.72,
|
|
2293
|
+
overlay: 0.88
|
|
2294
|
+
};
|
|
2295
|
+
var MUSHI_LETTER_SPACING = {
|
|
2296
|
+
tight: "-0.01em",
|
|
2297
|
+
normal: "0",
|
|
2298
|
+
label: "0.02em",
|
|
2299
|
+
stamp: "0.08em",
|
|
2300
|
+
wide: "0.16em"
|
|
2301
|
+
};
|
|
2217
2302
|
var MUSHI_GEOMETRY = {
|
|
2218
2303
|
bannerHeight: 36,
|
|
2219
2304
|
fabSize: 52,
|
|
@@ -2259,6 +2344,7 @@ function mushiTokens(mode) {
|
|
|
2259
2344
|
type: MUSHI_TYPE,
|
|
2260
2345
|
z: MUSHI_Z,
|
|
2261
2346
|
motion: MUSHI_MOTION,
|
|
2347
|
+
duration: MUSHI_DURATION,
|
|
2262
2348
|
geometry: MUSHI_GEOMETRY,
|
|
2263
2349
|
copy: MUSHI_COPY
|
|
2264
2350
|
};
|
|
@@ -2493,6 +2579,6 @@ function isSafeFaviconHref(href) {
|
|
|
2493
2579
|
}
|
|
2494
2580
|
}
|
|
2495
2581
|
|
|
2496
|
-
export { DEFAULT_API_ENDPOINT, DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT, MAX_REPORT_PAYLOAD_BYTES, MAX_SCREENSHOT_DATA_URL_BYTES, MUSHI_ACCENT_SHADOW, MUSHI_BANNER_BRAND_BORDER, MUSHI_BANNER_NEON, MUSHI_COLORS_DARK, MUSHI_COLORS_LIGHT, MUSHI_COPY, MUSHI_GEOMETRY, MUSHI_IDENTITY_TOKEN_PREFIX, MUSHI_INTERNAL_HEADER, MUSHI_INTERNAL_INIT_MARKER, MUSHI_INVERSE, MUSHI_MOTION, MUSHI_ON_ACCENT, MUSHI_PROJECT_HEADER, MUSHI_RADIUS, MUSHI_REPORTER_STATUS, MUSHI_SDK_PACKAGE_HEADER, MUSHI_SDK_VERSION_HEADER, MUSHI_SPACING, MUSHI_TIER_COLORS, MUSHI_TYPE, MUSHI_USER_TOKEN_HEADER, MUSHI_Z, REGION_ENDPOINTS, buildIdentityClaims, buildSdkIngestHeaders, captureEnvironment, checkReportPayloadSize, createApiClient, createBreadcrumbBuffer, createLogger, createOfflineQueue, createPiiScrubber, createPreFilter, createRateLimiter, destroySessionTracker, diagnoseEnvConfig, estimateJsonBytes, expandPreset, faviconUrlCandidates, formatBytes, getDeviceFingerprintHash, getReporterToken, getSessionId, githubRepoDomainHint, hmacSha256Hex, initSessionTracker, isLikelyGenericFavicon, isUntrustedFaviconUrl, mushiPalette, mushiTokens, newUuid, noopLogger, normaliseThrown, originToDomain, parseIdentityToken, projectFaviconUrlCandidates, projectInitials, projectInitialsThemeIndex, readPageFaviconHref, resolveEnvConfig, resolveProjectDomain, resolveProjectFaviconDomains, resolveRegionEndpoint, resolveWidgetAccent, safeWidgetHex, scrubPii, sha256Hex, trackPageView, updateSessionIdentity, validateConfig };
|
|
2582
|
+
export { DEFAULT_API_ENDPOINT, DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT, MAX_REPORT_PAYLOAD_BYTES, MAX_SCREENSHOT_DATA_URL_BYTES, MUSHI_ACCENT_SHADOW, MUSHI_BANNER_BRAND_BORDER, MUSHI_BANNER_NEON, MUSHI_BORDER, MUSHI_COLORS_DARK, MUSHI_COLORS_LIGHT, MUSHI_CONTROL_DISABLED, MUSHI_COPY, MUSHI_DURATION, MUSHI_GEOMETRY, MUSHI_IDENTITY_TOKEN_PREFIX, MUSHI_INTERNAL_HEADER, MUSHI_INTERNAL_INIT_MARKER, MUSHI_INVERSE, MUSHI_LETTER_SPACING, MUSHI_MOTION, MUSHI_ON_ACCENT, MUSHI_OPACITY, MUSHI_PROJECT_HEADER, MUSHI_RADIUS, MUSHI_REPORTER_STATUS, MUSHI_SDK_PACKAGE_HEADER, MUSHI_SDK_VERSION_HEADER, MUSHI_SHADOW_INK, MUSHI_SPACING, MUSHI_TIER_COLORS, MUSHI_TYPE, MUSHI_USER_TOKEN_HEADER, MUSHI_Z, REGION_ENDPOINTS, buildIdentityClaims, buildSdkIngestHeaders, captureEnvironment, checkReportPayloadSize, createApiClient, createBreadcrumbBuffer, createLogger, createOfflineQueue, createPiiScrubber, createPreFilter, createRateLimiter, destroySessionTracker, diagnoseEnvConfig, estimateJsonBytes, expandPreset, faviconUrlCandidates, formatBytes, getDeviceFingerprintHash, getReporterToken, getSessionId, githubRepoDomainHint, hmacSha256Hex, initSessionTracker, isLikelyGenericFavicon, isUntrustedFaviconUrl, mushiPalette, mushiTokens, newUuid, noopLogger, normaliseThrown, originToDomain, parseIdentityToken, projectFaviconUrlCandidates, projectInitials, projectInitialsThemeIndex, readPageFaviconHref, resolveEnvConfig, resolveProjectDomain, resolveProjectFaviconDomains, resolveRegionEndpoint, resolveWidgetAccent, safeWidgetHex, scrubPii, scrubUrl, sha256Hex, trackPageView, updateSessionIdentity, validateConfig };
|
|
2497
2583
|
//# sourceMappingURL=index.js.map
|
|
2498
2584
|
//# sourceMappingURL=index.js.map
|