@tracearr/shared 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +7 -0
  3. package/dist/catalogLetters.d.ts +3 -0
  4. package/dist/catalogLetters.d.ts.map +1 -0
  5. package/dist/catalogLetters.js +3 -0
  6. package/dist/catalogLetters.js.map +1 -0
  7. package/dist/constants.d.ts +475 -0
  8. package/dist/constants.d.ts.map +1 -0
  9. package/dist/constants.js +847 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/dynamicRange.d.ts +16 -0
  12. package/dist/dynamicRange.d.ts.map +1 -0
  13. package/dist/dynamicRange.js +46 -0
  14. package/dist/dynamicRange.js.map +1 -0
  15. package/dist/index.d.ts +17 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +68 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/media.d.ts +16 -0
  20. package/dist/media.d.ts.map +1 -0
  21. package/dist/media.js +18 -0
  22. package/dist/media.js.map +1 -0
  23. package/dist/resolution.d.ts +56 -0
  24. package/dist/resolution.d.ts.map +1 -0
  25. package/dist/resolution.js +130 -0
  26. package/dist/resolution.js.map +1 -0
  27. package/dist/schemas.d.ts +1702 -0
  28. package/dist/schemas.d.ts.map +1 -0
  29. package/dist/schemas.js +1057 -0
  30. package/dist/schemas.js.map +1 -0
  31. package/dist/serverScope.d.ts +27 -0
  32. package/dist/serverScope.d.ts.map +1 -0
  33. package/dist/serverScope.js +36 -0
  34. package/dist/serverScope.js.map +1 -0
  35. package/dist/types.d.ts +2484 -0
  36. package/dist/types.d.ts.map +1 -0
  37. package/dist/types.js +57 -0
  38. package/dist/types.js.map +1 -0
  39. package/dist/violations.d.ts +37 -0
  40. package/dist/violations.d.ts.map +1 -0
  41. package/dist/violations.js +377 -0
  42. package/dist/violations.js.map +1 -0
  43. package/package.json +46 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Dynamic Range Classification
3
+ *
4
+ * Normalizes a media server's HDR/SDR label - Plex's Media.videoDynamicRange
5
+ * attribute, or Jellyfin/Emby's VideoRangeType mapped to a display string -
6
+ * into one lowercase token that library_items.video_dynamic_range stores and
7
+ * the catalog HDR filter matches against. The token list is display
8
+ * vocabulary, not an exhaustive allowlist: normalizeDynamicRange falls back
9
+ * to lowercasing an unrecognized label rather than dropping it, so an HDR
10
+ * variant Tracearr hasn't named yet still counts as non-SDR.
11
+ */
12
+ export declare const DYNAMIC_RANGE_SDR_TOKEN = "sdr";
13
+ export declare const DYNAMIC_RANGE_TOKENS: readonly ["sdr", "hdr", "hdr10", "hdr10+", "hlg", "dolby vision"];
14
+ export type DynamicRangeToken = (typeof DYNAMIC_RANGE_TOKENS)[number];
15
+ export declare function normalizeDynamicRange(label: string | null | undefined): string | null;
16
+ //# sourceMappingURL=dynamicRange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamicRange.d.ts","sourceRoot":"","sources":["../src/dynamicRange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAE7C,eAAO,MAAM,oBAAoB,mEAOvB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAItE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAgBrF"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Dynamic Range Classification
3
+ *
4
+ * Normalizes a media server's HDR/SDR label - Plex's Media.videoDynamicRange
5
+ * attribute, or Jellyfin/Emby's VideoRangeType mapped to a display string -
6
+ * into one lowercase token that library_items.video_dynamic_range stores and
7
+ * the catalog HDR filter matches against. The token list is display
8
+ * vocabulary, not an exhaustive allowlist: normalizeDynamicRange falls back
9
+ * to lowercasing an unrecognized label rather than dropping it, so an HDR
10
+ * variant Tracearr hasn't named yet still counts as non-SDR.
11
+ */
12
+ export const DYNAMIC_RANGE_SDR_TOKEN = 'sdr';
13
+ export const DYNAMIC_RANGE_TOKENS = [
14
+ 'sdr',
15
+ 'hdr',
16
+ 'hdr10',
17
+ 'hdr10+',
18
+ 'hlg',
19
+ 'dolby vision',
20
+ ];
21
+ const KNOWN_TOKENS = DYNAMIC_RANGE_TOKENS;
22
+ export function normalizeDynamicRange(label) {
23
+ if (!label)
24
+ return null;
25
+ const lower = label.toLowerCase().trim();
26
+ if (!lower)
27
+ return null;
28
+ if (KNOWN_TOKENS.includes(lower))
29
+ return lower;
30
+ if (lower.startsWith('dolby vision') || lower === 'dovi' || lower === 'dv')
31
+ return 'dolby vision';
32
+ if (lower.includes('hdr10+'))
33
+ return 'hdr10+';
34
+ if (lower.includes('hdr10'))
35
+ return 'hdr10';
36
+ if (lower.includes('hlg'))
37
+ return 'hlg';
38
+ if (lower.includes('hdr'))
39
+ return 'hdr';
40
+ if (lower.includes('sdr'))
41
+ return DYNAMIC_RANGE_SDR_TOKEN;
42
+ // library_items.video_dynamic_range is varchar(20); an oversized unknown
43
+ // label must not fail the whole sync upsert batch.
44
+ return lower.slice(0, 20);
45
+ }
46
+ //# sourceMappingURL=dynamicRange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamicRange.js","sourceRoot":"","sources":["../src/dynamicRange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAE7C,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,KAAK;IACL,KAAK;IACL,OAAO;IACP,QAAQ;IACR,KAAK;IACL,cAAc;CACN,CAAC;AAIX,MAAM,YAAY,GAAsB,oBAAoB,CAAC;AAE7D,MAAM,UAAU,qBAAqB,CAAC,KAAgC;IACpE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,cAAc,CAAC;IAClG,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9C,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5C,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,uBAAuB,CAAC;IAE1D,yEAAyE;IACzE,mDAAmD;IACnD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @tracearr/shared - Shared types, schemas, and constants
3
+ */
4
+ export type { ServerType, Server, User, ServerUser, ServerUserWithIdentity, ServerUserDetail, ServerUserFullDetail, ViolationSummary, UserRole, AuthUser, SetupStatus, UserLocation, UserDevice, UserMergeResult, ServerUserSplitResult, MergeSuggestionIdentity, MergeSuggestion, SessionState, MediaType, Session, SessionSegment, SessionWithDetails, ActiveSession, SourceVideoDetails, SourceAudioDetails, StreamVideoDetails, StreamAudioDetails, TranscodeInfo, SubtitleInfo, StreamDetailFields, RuleType, ImpossibleTravelParams, SimultaneousLocationsParams, DeviceVelocityParams, ConcurrentStreamsParams, GeoRestrictionMode, GeoRestrictionParams, AccountInactivityUnit, AccountInactivityParams, RuleParams, Rule, Operator, ConditionField, ConditionValue, Condition, ConditionGroup, RuleConditions, ActionType, Action, LogOnlyAction, NotifyAction, AdjustTrustAction, SetTrustAction, ResetTrustAction, KillStreamAction, MessageClientAction, NotificationChannelV2, RuleActions, RuleV2, ActionResult, VideoResolution, DeviceType, Platform, MediaTypeEnum, TranscodingConditionValue, ViolationSeverity, Violation, ViolationWithDetails, ViolationSessionInfo, ConditionEvidence, GroupEvidence, DashboardStats, PlayStats, UserStats, LocationStats, LocationStatsSummary, LocationStatsResponse, LibraryStats, DayOfWeekStats, HourOfDayStats, QualityStats, TopUserStats, TopContentStats, PlatformStats, ServerResourceDataPoint, ServerResourceStats, ServerBandwidthDataPoint, ServerBandwidthStats, Settings, WebhookFormat, UnitSystem, TailscaleStatus, TailscaleExitNode, TailscaleInfo, TautulliImportProgress, TautulliImportResult, JellystatImportProgress, JellystatImportResult, LibrarySyncProgress, HeavyOpsWaitingFor, MaintenanceJobType, MaintenanceJobStatus, MaintenanceJobProgress, MaintenanceJobResult, RunningTaskType, RunningTask, RunningTasksResponse, ServerToClientEvents, ClientToServerEvents, PaginatedResponse, ApiError, HistoryAggregates, HistorySessionResponse, FilterOptionItem, UserFilterOption, ServerFilterOption, CountryOption, HistoryFilterOptions, RulesFilterOptions, MobileToken, MobileSession, MobileConfig, MobilePairRequest, MobilePairResponse, MobilePairTokenResponse, MobileQRPayload, NotificationEventType, NotificationPreferences, RateLimitStatus, NotificationPreferencesWithStatus, NotificationChannel, NotificationChannelRouting, EncryptedPushPayload, PushNotificationPayload, SSEConnectionState, PlexSSENotification, PlexPlaySessionNotification, PlexActivityNotification, PlexStatusNotification, PlexTranscodeNotification, PlexTimelineEntry, SSEConnectionStatus, ServerConnectionStatus, PluginIssue, TerminationTrigger, TerminationLogWithDetails, PlexDiscoveredConnection, PlexDiscoveredServer, PlexAvailableServersResponse, PlexConnectionError, PlexConnectionErrorCode, PlexAccount, PlexAccountsResponse, LinkPlexAccountRequest, LinkPlexAccountResponse, UnlinkPlexAccountResponse, VersionInfo, BackupMetadata, RestorePhase, RestoreProgress, BackupType, BackupListItem, BackupScheduleType, EngagementTier, UserBehaviorType, ContentEngagement, TopContentEngagement, ShowEngagement, UserEngagementProfile, EngagementTierBreakdown, EngagementStats, ShowStatsResponse, DeviceCompatibilityRow, DeviceCompatibilityResponse, DeviceCompatibilityMatrix, DeviceHealthRow, DeviceHealthResponse, TranscodeHotspotRow, TranscodeHotspotsResponse, TopTranscodingUserRow, TopTranscodingUsersResponse, DailyBandwidthRow, DailyBandwidthResponse, BandwidthTopUser, BandwidthTopUsersResponse, BandwidthSummaryServerKpis, BandwidthSummary, LibraryStatsResponse, GrowthDataPoint, LibraryGrowthResponse, QualityDataPoint, LibraryQualityResponse, StorageHistoryPoint, StoragePrediction, LibraryStorageResponse, MatchType, DuplicateItem, DuplicateItemVersion, DuplicateGroup, DuplicatesSummary, DuplicatesResponse, StaleCategory, StaleItem, StaleSummary, StaleResponse, WatchItem, WatchSummary, WatchResponse, CompletionStatus, CompletionItem, SeasonCompletion, SeriesCompletion, CompletionSummary, CompletionPaginationInfo, CompletionResponse, WatchedState, CatalogRowServerEntry, CatalogRow, CatalogResponseMeta, CatalogResponse, CatalogLetterBucket, CatalogLettersResponse, ShelfRow, RecentlyAddedShelfRow, MostPopularShelfRow, DeadWeightRow, ShelvesKpiWatchedInPeriod, ShelvesKpiNewlyAdded, ShelvesKpiDeadWeight, ShelvesKpis, ShelvesResponseMeta, ShelvesResponse, ShelvesPeriod, GenreRow, GenresResponse, MediaVersionEntry, MediaAvailabilityEntry, MediaDetailResponse, MediaChildEntry, MediaChildrenResponse, MediaStatsMeasures, MediaStatsWindow, MediaStatsResponse, MediaWatcherEntry, MediaWatchersResponse, MediaPlatformBreakdownEntry, MediaPlatformBreakdownResponse, SeasonHeatEpisode, SeasonHeatSeason, MediaSeasonHeatResponse, BingeShow, HourlyDistribution, MonthlyTrend, PatternsResponse, ValueCategory, RoiItem, RoiSummary, ValueThresholds, RoiResponse, TopMovie, TopMoviesSummary, TopMoviesResponse, TopShow, TopShowsSummary, TopShowsResponse, CodecEntry, CodecBreakdown, LibraryCodecsResponse, ResolutionEntry, ResolutionBreakdown, LibraryResolutionResponse, LibraryOption, LibrariesResponse, } from './types.js';
5
+ export { uuidSchema, serverIdsQuerySchema, libraryKeySchema, paginationSchema, booleanStringSchema, loginSchema, callbackSchema, createServerSchema, serverIdParamSchema, reorderServersSchema, updateServerSchema, updateUserSchema, updateUserIdentitySchema, userIdParamSchema, identityScopeQuerySchema, identityScopedPaginationSchema, mergeUsersBodySchema, mergeUserParamSchema, splitServerUserParamSchema, userSortFieldSchema, sessionQuerySchema, historyQuerySchema, historyAggregatesQuerySchema, filterOptionsQuerySchema, sessionIdParamSchema, terminateSessionBodySchema, impossibleTravelParamsSchema, simultaneousLocationsParamsSchema, deviceVelocityParamsSchema, concurrentStreamsParamsSchema, geoRestrictionParamsSchema, accountInactivityParamsSchema, ruleParamsSchema, createRuleSchema, updateRuleSchema, ruleIdParamSchema, createRuleV2Schema, updateRuleV2Schema, ruleConditionsSchema, hasAtMostOneScope, RULE_SCOPE_ERROR_MESSAGE, scopeAllowsCrossServerEnforcement, RULE_CROSS_SERVER_ENFORCEMENT_ERROR_MESSAGE, INACTIVITY_COMPATIBLE_FIELDS, bulkUpdateRulesSchema, bulkDeleteRulesSchema, bulkMigrateRulesSchema, violationSortFieldSchema, violationQuerySchema, violationIdParamSchema, serverIdFilterSchema, dashboardQuerySchema, timezoneSchema, statPeriodSchema, dateValidationRefinements, statsQuerySchema, locationStatsQuerySchema, updateSettingsSchema, tailscaleEnableSchema, tailscaleExitNodeSchema, tautulliImportSchema, jellystatPlayStateSchema, jellystatTranscodingInfoSchema, jellystatPlaybackActivitySchema, jellystatBackupSchema, jellystatImportBodySchema, importJobStatusSchema, engagementTierSchema, userBehaviorTypeSchema, engagementQuerySchema, showsQuerySchema, libraryStatsQuerySchema, libraryStatusQuerySchema, libraryGrowthQuerySchema, libraryQualityQuerySchema, libraryStorageQuerySchema, libraryDuplicatesQuerySchema, libraryStaleQuerySchema, libraryWatchQuerySchema, libraryRoiQuerySchema, libraryPatternsQuerySchema, libraryCompletionQuerySchema, topContentQuerySchema, shelvesQuerySchema, } from './schemas.js';
6
+ export type { LoginInput, CallbackInput, CreateServerInput, ReorderServersInput, UpdateServerInput, UpdateUserInput, UpdateUserIdentityInput, IdentityScopeQuery, MergeUsersBody, SessionQueryInput, HistoryQueryInput, HistoryAggregatesQueryInput, FilterOptionsQueryInput, CreateRuleInput, UpdateRuleInput, CreateRuleV2Input, UpdateRuleV2Input, BulkUpdateRulesInput, BulkDeleteRulesInput, BulkMigrateRulesInput, ViolationQueryInput, ViolationSortField, UserSortField, ServerIdFilterInput, DashboardQueryInput, StatPeriod, StatsQueryInput, LocationStatsQueryInput, UpdateSettingsInput, TautulliImportInput, JellystatPlayState, JellystatTranscodingInfo, JellystatPlaybackActivity, JellystatBackup, JellystatImportBody, ImportJobStatus, EngagementQueryInput, ShowsQueryInput, LibraryStatsQueryInput, LibraryStatusQueryInput, LibraryGrowthQueryInput, LibraryQualityQueryInput, LibraryStorageQueryInput, LibraryDuplicatesQueryInput, LibraryStaleQueryInput, LibraryWatchQueryInput, LibraryRoiQueryInput, LibraryPatternsQueryInput, LibraryCompletionQueryInput, TopContentQueryInput, ShelvesQueryInput, SessionTarget, } from './schemas.js';
7
+ export { RULE_DEFAULTS, RULE_DISPLAY_NAMES, IDENTITY_AWARE_CONDITION_FIELDS, SEVERITY_LEVELS, getSeverityPriority, type SeverityPriority, WS_EVENTS, REDIS_KEYS, setRedisPrefix, getRedisPrefix, CACHE_TTL, NOTIFICATION_EVENTS, API_VERSION, API_BASE_PATH, API_VERSION_V2, API_V2_BASE_PATH, JWT_CONFIG, POLLING_INTERVALS, POLLER_CONFIG, PAGINATION, GEOIP_CONFIG, TIME_MS, MERGE_SAME_SERVER_CONFIRMATION_REQUIRED, SESSION_LIMITS, SESSION_WRITE_RETRY, SERVER_STATS_CONFIG, BANDWIDTH_STATS_CONFIG, SSE_CONFIG, PLEX_SSE_EVENTS, SSE_STATE, UNIT_CONVERSION, kmToMiles, milesToKm, formatDistance, formatSpeed, formatBitrate, formatMediaTech, getResolutionLabel, formatResolutionDisplay, type ResolutionLabel, formatAudioChannels, getDistanceUnit, getSpeedUnit, toMetricDistance, fromMetricDistance, formatConditionFieldValue, SERVER_COLOR_PALETTE, SERVER_TYPE_BRAND_COLORS, pickServerColor, getClientTimezone, isValidTimezone, LEGACY_VERSION_SENTINEL, } from './constants.js';
8
+ export { ROLE_PERMISSIONS, LOGIN_ROLES, canLogin, hasMinRole, isOwner, isActive } from './types.js';
9
+ export { MEDIA_TYPES, DEFAULT_STREAM_DETAILS } from './types.js';
10
+ export { RESTORE_PHASES } from './types.js';
11
+ export { collectViolationSessions, getViolationDescription, getViolationDetails, formatEvidenceDescription, formatEvidenceDetails, formatUserList, CONDITION_FIELD_LABELS, OPERATOR_LABELS, } from './violations.js';
12
+ export { formatEpisodeLabel, type FormatEpisodeLabelOptions } from './media.js';
13
+ export { LETTER_RAIL_ALPHABET } from './catalogLetters.js';
14
+ export { RESOLUTION_TIERS, classifyByDimensions, normalizeResolutionLabel, resolutionTierRank, resolutionBucket, resolutionBucketSpellings, resolutionAboveSdSpellings, resolutionSpellingRanks, normalizeResolution, type ResolutionInput, type ResolutionBucket, } from './resolution.js';
15
+ export { DYNAMIC_RANGE_SDR_TOKEN, DYNAMIC_RANGE_TOKENS, normalizeDynamicRange, type DynamicRangeToken, } from './dynamicRange.js';
16
+ export { ALL_SERVERS, serverScopeFromIds, serverScopeKey, serverScopeParamEntries, type ServerScope, } from './serverScope.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @tracearr/shared - Shared types, schemas, and constants
3
+ */
4
+ // Schema exports
5
+ export {
6
+ // Common
7
+ uuidSchema, serverIdsQuerySchema, libraryKeySchema, paginationSchema, booleanStringSchema,
8
+ // Auth
9
+ loginSchema, callbackSchema,
10
+ // Server
11
+ createServerSchema, serverIdParamSchema, reorderServersSchema, updateServerSchema,
12
+ // User
13
+ updateUserSchema, updateUserIdentitySchema, userIdParamSchema, identityScopeQuerySchema, identityScopedPaginationSchema, mergeUsersBodySchema, mergeUserParamSchema, splitServerUserParamSchema, userSortFieldSchema,
14
+ // Session
15
+ sessionQuerySchema, historyQuerySchema, historyAggregatesQuerySchema, filterOptionsQuerySchema, sessionIdParamSchema, terminateSessionBodySchema,
16
+ // Rule
17
+ impossibleTravelParamsSchema, simultaneousLocationsParamsSchema, deviceVelocityParamsSchema, concurrentStreamsParamsSchema, geoRestrictionParamsSchema, accountInactivityParamsSchema, ruleParamsSchema, createRuleSchema, updateRuleSchema, ruleIdParamSchema,
18
+ // Rule V2
19
+ createRuleV2Schema, updateRuleV2Schema, ruleConditionsSchema, hasAtMostOneScope, RULE_SCOPE_ERROR_MESSAGE, scopeAllowsCrossServerEnforcement, RULE_CROSS_SERVER_ENFORCEMENT_ERROR_MESSAGE, INACTIVITY_COMPATIBLE_FIELDS,
20
+ // Bulk operations
21
+ bulkUpdateRulesSchema, bulkDeleteRulesSchema, bulkMigrateRulesSchema,
22
+ // Violation
23
+ violationSortFieldSchema, violationQuerySchema, violationIdParamSchema,
24
+ // Stats
25
+ serverIdFilterSchema, dashboardQuerySchema, timezoneSchema, statPeriodSchema, dateValidationRefinements, statsQuerySchema, locationStatsQuerySchema,
26
+ // Settings
27
+ updateSettingsSchema,
28
+ // Tailscale
29
+ tailscaleEnableSchema, tailscaleExitNodeSchema,
30
+ // Tautulli import
31
+ tautulliImportSchema,
32
+ // Jellystat import
33
+ jellystatPlayStateSchema, jellystatTranscodingInfoSchema, jellystatPlaybackActivitySchema, jellystatBackupSchema, jellystatImportBodySchema, importJobStatusSchema,
34
+ // Engagement tracking
35
+ engagementTierSchema, userBehaviorTypeSchema, engagementQuerySchema, showsQuerySchema,
36
+ // Library stats
37
+ libraryStatsQuerySchema, libraryStatusQuerySchema, libraryGrowthQuerySchema, libraryQualityQuerySchema, libraryStorageQuerySchema, libraryDuplicatesQuerySchema, libraryStaleQuerySchema, libraryWatchQuerySchema, libraryRoiQuerySchema, libraryPatternsQuerySchema, libraryCompletionQuerySchema, topContentQuerySchema, shelvesQuerySchema, } from './schemas.js';
38
+ // Constant exports
39
+ export { RULE_DEFAULTS, RULE_DISPLAY_NAMES, IDENTITY_AWARE_CONDITION_FIELDS, SEVERITY_LEVELS, getSeverityPriority, WS_EVENTS, REDIS_KEYS, setRedisPrefix, getRedisPrefix, CACHE_TTL, NOTIFICATION_EVENTS, API_VERSION, API_BASE_PATH, API_VERSION_V2, API_V2_BASE_PATH, JWT_CONFIG, POLLING_INTERVALS, POLLER_CONFIG, PAGINATION, GEOIP_CONFIG, TIME_MS, MERGE_SAME_SERVER_CONFIRMATION_REQUIRED, SESSION_LIMITS, SESSION_WRITE_RETRY, SERVER_STATS_CONFIG, BANDWIDTH_STATS_CONFIG,
40
+ // SSE
41
+ SSE_CONFIG, PLEX_SSE_EVENTS, SSE_STATE,
42
+ // Unit conversion
43
+ UNIT_CONVERSION, kmToMiles, milesToKm, formatDistance, formatSpeed, formatBitrate, formatMediaTech, getResolutionLabel, formatResolutionDisplay, formatAudioChannels, getDistanceUnit, getSpeedUnit, toMetricDistance, fromMetricDistance, formatConditionFieldValue,
44
+ // Server colors
45
+ SERVER_COLOR_PALETTE, SERVER_TYPE_BRAND_COLORS, pickServerColor,
46
+ // Timezone utilities
47
+ getClientTimezone, isValidTimezone,
48
+ // Multi-version media
49
+ LEGACY_VERSION_SENTINEL, } from './constants.js';
50
+ // Role helper exports
51
+ export { ROLE_PERMISSIONS, LOGIN_ROLES, canLogin, hasMinRole, isOwner, isActive } from './types.js';
52
+ // Session constants
53
+ export { MEDIA_TYPES, DEFAULT_STREAM_DETAILS } from './types.js';
54
+ // Backup constants
55
+ export { RESTORE_PHASES } from './types.js';
56
+ // Violation utilities
57
+ export { collectViolationSessions, getViolationDescription, getViolationDetails, formatEvidenceDescription, formatEvidenceDetails, formatUserList, CONDITION_FIELD_LABELS, OPERATOR_LABELS, } from './violations.js';
58
+ // Media display utilities
59
+ export { formatEpisodeLabel } from './media.js';
60
+ // Alphabet rail letters
61
+ export { LETTER_RAIL_ALPHABET } from './catalogLetters.js';
62
+ // Resolution classification
63
+ export { RESOLUTION_TIERS, classifyByDimensions, normalizeResolutionLabel, resolutionTierRank, resolutionBucket, resolutionBucketSpellings, resolutionAboveSdSpellings, resolutionSpellingRanks, normalizeResolution, } from './resolution.js';
64
+ // Dynamic range (HDR/SDR) classification
65
+ export { DYNAMIC_RANGE_SDR_TOKEN, DYNAMIC_RANGE_TOKENS, normalizeDynamicRange, } from './dynamicRange.js';
66
+ // Server-scope selection (cache-key and query-param builders)
67
+ export { ALL_SERVERS, serverScopeFromIds, serverScopeKey, serverScopeParamEntries, } from './serverScope.js';
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Media display formatting shared across web, mobile, and server notifications.
3
+ */
4
+ export interface FormatEpisodeLabelOptions {
5
+ /** When provided, the label is only produced if this equals 'episode'. */
6
+ mediaType?: string | null;
7
+ /** Use "S01 E02" instead of the default "S01E02". */
8
+ spaced?: boolean;
9
+ }
10
+ /**
11
+ * Format a season/episode pair into a zero-padded label (e.g. "S00E01").
12
+ * Season 0 and episode 0 are valid (Specials) and must render, not be hidden -
13
+ * only a genuinely missing (null/undefined) season or episode suppresses the label.
14
+ */
15
+ export declare function formatEpisodeLabel(seasonNumber: number | null | undefined, episodeNumber: number | null | undefined, options?: FormatEpisodeLabelOptions): string | null;
16
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,yBAAyB;IACxC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACvC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,OAAO,GAAE,yBAA8B,GACtC,MAAM,GAAG,IAAI,CAOf"}
package/dist/media.js ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Media display formatting shared across web, mobile, and server notifications.
3
+ */
4
+ /**
5
+ * Format a season/episode pair into a zero-padded label (e.g. "S00E01").
6
+ * Season 0 and episode 0 are valid (Specials) and must render, not be hidden -
7
+ * only a genuinely missing (null/undefined) season or episode suppresses the label.
8
+ */
9
+ export function formatEpisodeLabel(seasonNumber, episodeNumber, options = {}) {
10
+ if (options.mediaType !== undefined && options.mediaType !== 'episode')
11
+ return null;
12
+ if (seasonNumber == null || episodeNumber == null)
13
+ return null;
14
+ const season = String(seasonNumber).padStart(2, '0');
15
+ const episode = String(episodeNumber).padStart(2, '0');
16
+ return options.spaced ? `S${season} E${episode}` : `S${season}E${episode}`;
17
+ }
18
+ //# sourceMappingURL=media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,YAAuC,EACvC,aAAwC,EACxC,UAAqC,EAAE;IAEvC,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpF,IAAI,YAAY,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAE/D,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Resolution Classification
3
+ *
4
+ * Single source of truth for turning a media server's resolution label
5
+ * and/or video dimensions into a display resolution tier ("4K", "1080p",
6
+ * etc). Every classifier in the app (session ingest, library sync, rules,
7
+ * web/mobile display) should go through this module instead of hand-rolling
8
+ * its own width/height cutoffs.
9
+ */
10
+ /** Resolution tier rank (higher = better quality). Order is the vocabulary. */
11
+ export declare const RESOLUTION_TIERS: {
12
+ readonly '8K': 7;
13
+ readonly '4K': 6;
14
+ readonly '1440p': 5;
15
+ readonly '1080p': 4;
16
+ readonly '720p': 3;
17
+ readonly '480p': 2;
18
+ readonly SD: 1;
19
+ };
20
+ export type ResolutionLabel = keyof typeof RESOLUTION_TIERS;
21
+ export declare function classifyByDimensions(width: number | null | undefined, height: number | null | undefined): ResolutionLabel | null;
22
+ export declare function normalizeResolutionLabel(label: string | null | undefined): string | null;
23
+ /** Rank of a resolution label for magnitude comparisons, or null if unknown. */
24
+ export declare function resolutionTierRank(label: string | null | undefined): number | null;
25
+ /** The four-bucket vocabulary library snapshots and facet endpoints store. */
26
+ export type ResolutionBucket = '4k' | '1080p' | '720p' | 'sd';
27
+ /**
28
+ * Fold a stored resolution label into the four-bucket vocabulary. Tiers above
29
+ * 1080p (1440p, 8K) fold into 4k, the closest bucket, rather than dropping to
30
+ * sd. Unknown non-null labels count as sd; null stays null (no video).
31
+ */
32
+ export declare function resolutionBucket(label: string | null | undefined): ResolutionBucket | null;
33
+ /**
34
+ * Every known spelling that folds into the given bucket, lowercase. Backs the
35
+ * SQL IN-lists in resolutionBuckets.ts so database bucketing cannot drift
36
+ * from resolutionBucket(). The sd bucket has no list: in SQL it is the
37
+ * non-null complement of the other three.
38
+ */
39
+ export declare function resolutionBucketSpellings(bucket: Exclude<ResolutionBucket, 'sd'>): string[];
40
+ /** All spellings that rank above the sd bucket, for SQL complement predicates. */
41
+ export declare function resolutionAboveSdSpellings(): string[];
42
+ /** Known spellings paired with their tier rank, for SQL rank CASE expressions. */
43
+ export declare function resolutionSpellingRanks(): Array<{
44
+ spelling: string;
45
+ rank: number;
46
+ }>;
47
+ export interface ResolutionInput {
48
+ /** Resolution label from the media server (e.g. "1080", "4k", "sd") */
49
+ label?: string | null;
50
+ /** Video width in pixels */
51
+ width?: number | null;
52
+ /** Video height in pixels */
53
+ height?: number | null;
54
+ }
55
+ export declare function normalizeResolution(input: ResolutionInput): string | null;
56
+ //# sourceMappingURL=resolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution.d.ts","sourceRoot":"","sources":["../src/resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB;;;;;;;;CAQnB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAiB5D,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChC,eAAe,GAAG,IAAI,CAUxB;AA0BD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAWxF;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIlF;AAED,8EAA8E;AAC9E,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,gBAAgB,GAAG,IAAI,CAO1F;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,MAAM,EAAE,CAE3F;AAED,kFAAkF;AAClF,wBAAgB,0BAA0B,IAAI,MAAM,EAAE,CAErD;AAED,kFAAkF;AAClF,wBAAgB,uBAAuB,IAAI,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAKnF;AAED,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAOD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAOzE"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Resolution Classification
3
+ *
4
+ * Single source of truth for turning a media server's resolution label
5
+ * and/or video dimensions into a display resolution tier ("4K", "1080p",
6
+ * etc). Every classifier in the app (session ingest, library sync, rules,
7
+ * web/mobile display) should go through this module instead of hand-rolling
8
+ * its own width/height cutoffs.
9
+ */
10
+ /** Resolution tier rank (higher = better quality). Order is the vocabulary. */
11
+ export const RESOLUTION_TIERS = {
12
+ '8K': 7,
13
+ '4K': 6,
14
+ '1440p': 5,
15
+ '1080p': 4,
16
+ '720p': 3,
17
+ '480p': 2,
18
+ SD: 1,
19
+ };
20
+ const DIMENSION_LADDER = [
21
+ { label: '8K', minWidth: 6400, minHeight: 4000 },
22
+ { label: '4K', minWidth: 3800, minHeight: 2000 },
23
+ { label: '1440p', minWidth: 2500, minHeight: 1400 },
24
+ { label: '1080p', minWidth: 1800, minHeight: 1000 },
25
+ { label: '720p', minWidth: 1200, minHeight: 700 },
26
+ { label: '480p', minWidth: 700, minHeight: 400 },
27
+ ];
28
+ export function classifyByDimensions(width, height) {
29
+ if (!width && !height)
30
+ return null;
31
+ for (const tier of DIMENSION_LADDER) {
32
+ if ((width && width >= tier.minWidth) || (height && height >= tier.minHeight)) {
33
+ return tier.label;
34
+ }
35
+ }
36
+ return 'SD';
37
+ }
38
+ /** Known resolution label spellings from Plex/Jellyfin/Emby/Tautulli. */
39
+ const LABEL_MAP = {
40
+ '8k': '8K',
41
+ '4320': '8K',
42
+ '4320p': '8K',
43
+ '4k': '4K',
44
+ uhd: '4K',
45
+ '2160': '4K',
46
+ '2160p': '4K',
47
+ '2k': '1440p',
48
+ qhd: '1440p',
49
+ '1440': '1440p',
50
+ '1440p': '1440p',
51
+ '1080': '1080p',
52
+ '1080p': '1080p',
53
+ fhd: '1080p',
54
+ '720': '720p',
55
+ '720p': '720p',
56
+ hd: '720p',
57
+ '480': '480p',
58
+ '480p': '480p',
59
+ sd: 'SD',
60
+ };
61
+ export function normalizeResolutionLabel(label) {
62
+ if (!label)
63
+ return null;
64
+ const lower = label.toLowerCase().trim();
65
+ if (!lower)
66
+ return null;
67
+ const mapped = LABEL_MAP[lower];
68
+ if (mapped)
69
+ return mapped;
70
+ if (/^\d+$/.test(lower))
71
+ return `${lower}p`;
72
+ return label;
73
+ }
74
+ /** Rank of a resolution label for magnitude comparisons, or null if unknown. */
75
+ export function resolutionTierRank(label) {
76
+ const normalized = normalizeResolutionLabel(label);
77
+ if (!normalized || !(normalized in RESOLUTION_TIERS))
78
+ return null;
79
+ return RESOLUTION_TIERS[normalized];
80
+ }
81
+ /**
82
+ * Fold a stored resolution label into the four-bucket vocabulary. Tiers above
83
+ * 1080p (1440p, 8K) fold into 4k, the closest bucket, rather than dropping to
84
+ * sd. Unknown non-null labels count as sd; null stays null (no video).
85
+ */
86
+ export function resolutionBucket(label) {
87
+ if (!label)
88
+ return null;
89
+ const rank = resolutionTierRank(label);
90
+ if (rank !== null && rank >= RESOLUTION_TIERS['1440p'])
91
+ return '4k';
92
+ if (rank === RESOLUTION_TIERS['1080p'])
93
+ return '1080p';
94
+ if (rank === RESOLUTION_TIERS['720p'])
95
+ return '720p';
96
+ return 'sd';
97
+ }
98
+ /**
99
+ * Every known spelling that folds into the given bucket, lowercase. Backs the
100
+ * SQL IN-lists in resolutionBuckets.ts so database bucketing cannot drift
101
+ * from resolutionBucket(). The sd bucket has no list: in SQL it is the
102
+ * non-null complement of the other three.
103
+ */
104
+ export function resolutionBucketSpellings(bucket) {
105
+ return Object.keys(LABEL_MAP).filter((key) => resolutionBucket(key) === bucket);
106
+ }
107
+ /** All spellings that rank above the sd bucket, for SQL complement predicates. */
108
+ export function resolutionAboveSdSpellings() {
109
+ return Object.keys(LABEL_MAP).filter((key) => resolutionBucket(key) !== 'sd');
110
+ }
111
+ /** Known spellings paired with their tier rank, for SQL rank CASE expressions. */
112
+ export function resolutionSpellingRanks() {
113
+ return Object.keys(LABEL_MAP).map((spelling) => ({
114
+ spelling,
115
+ rank: resolutionTierRank(spelling) ?? 0,
116
+ }));
117
+ }
118
+ // Label wins over dimensions: Tautulli displays Plex's own videoResolution
119
+ // verbatim rather than recomputing it from pixels, since Plex already
120
+ // accounts for scan type/aspect ratio server-side. Dimensions are only the
121
+ // fallback when no label is available (Jellyfin/Emby, or a Plex transcode
122
+ // session where only source pixels survive).
123
+ export function normalizeResolution(input) {
124
+ const { label, width, height } = input;
125
+ const fromLabel = normalizeResolutionLabel(label);
126
+ if (fromLabel)
127
+ return fromLabel;
128
+ return classifyByDimensions(width, height);
129
+ }
130
+ //# sourceMappingURL=resolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution.js","sourceRoot":"","sources":["../src/resolution.ts"],"names":[],"mappings":"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"}