@ttt-productions/q-core 0.1.49 → 0.1.51

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 (173) hide show
  1. package/dist/constants/business.d.ts +3 -4
  2. package/dist/constants/business.d.ts.map +1 -1
  3. package/dist/constants/business.js +3 -4
  4. package/dist/constants/business.js.map +1 -1
  5. package/dist/constants/sports.d.ts +0 -13
  6. package/dist/constants/sports.d.ts.map +1 -1
  7. package/dist/constants/sports.js +0 -13
  8. package/dist/constants/sports.js.map +1 -1
  9. package/dist/constants/text-fields.d.ts +0 -6
  10. package/dist/constants/text-fields.d.ts.map +1 -1
  11. package/dist/constants/text-fields.js +0 -6
  12. package/dist/constants/text-fields.js.map +1 -1
  13. package/dist/doc-schemas/admin-notifications.d.ts +1 -1
  14. package/dist/doc-schemas/atoms.d.ts.map +1 -1
  15. package/dist/doc-schemas/atoms.js +1 -1
  16. package/dist/doc-schemas/atoms.js.map +1 -1
  17. package/dist/doc-schemas/audit-event.d.ts +4 -8
  18. package/dist/doc-schemas/audit-event.d.ts.map +1 -1
  19. package/dist/doc-schemas/game-stat-history.d.ts +0 -1
  20. package/dist/doc-schemas/game-stat-history.d.ts.map +1 -1
  21. package/dist/doc-schemas/game-stats.d.ts +0 -2
  22. package/dist/doc-schemas/game-stats.d.ts.map +1 -1
  23. package/dist/doc-schemas/game-stats.js +1 -2
  24. package/dist/doc-schemas/game-stats.js.map +1 -1
  25. package/dist/doc-schemas/index.d.ts +2 -2
  26. package/dist/doc-schemas/index.d.ts.map +1 -1
  27. package/dist/doc-schemas/index.js +2 -2
  28. package/dist/doc-schemas/index.js.map +1 -1
  29. package/dist/doc-schemas/migration-console.d.ts +6 -20
  30. package/dist/doc-schemas/migration-console.d.ts.map +1 -1
  31. package/dist/doc-schemas/migration-console.js +2 -7
  32. package/dist/doc-schemas/migration-console.js.map +1 -1
  33. package/dist/doc-schemas/pending-media.d.ts +35 -55
  34. package/dist/doc-schemas/pending-media.d.ts.map +1 -1
  35. package/dist/doc-schemas/registry.d.ts +49 -229
  36. package/dist/doc-schemas/registry.d.ts.map +1 -1
  37. package/dist/doc-schemas/registry.js +3 -7
  38. package/dist/doc-schemas/registry.js.map +1 -1
  39. package/dist/doc-schemas/stats-changes.d.ts +21 -0
  40. package/dist/doc-schemas/stats-changes.d.ts.map +1 -0
  41. package/dist/doc-schemas/stats-changes.js +19 -0
  42. package/dist/doc-schemas/stats-changes.js.map +1 -0
  43. package/dist/doc-schemas/stats-job.d.ts +36 -0
  44. package/dist/doc-schemas/stats-job.d.ts.map +1 -0
  45. package/dist/doc-schemas/stats-job.js +26 -0
  46. package/dist/doc-schemas/stats-job.js.map +1 -0
  47. package/dist/doc-schemas/system.d.ts +1 -1
  48. package/dist/doc-schemas/system.d.ts.map +1 -1
  49. package/dist/doc-schemas/system.js +2 -2
  50. package/dist/doc-schemas/system.js.map +1 -1
  51. package/dist/domain-events/domain-events.d.ts +16 -24
  52. package/dist/domain-events/domain-events.d.ts.map +1 -1
  53. package/dist/domain-events/domain-events.js +11 -11
  54. package/dist/domain-events/domain-events.js.map +1 -1
  55. package/dist/ids/index.d.ts +2 -1
  56. package/dist/ids/index.d.ts.map +1 -1
  57. package/dist/ids/index.js +2 -1
  58. package/dist/ids/index.js.map +1 -1
  59. package/dist/ids/notification-ids.d.ts +2 -4
  60. package/dist/ids/notification-ids.d.ts.map +1 -1
  61. package/dist/ids/notification-ids.js +3 -12
  62. package/dist/ids/notification-ids.js.map +1 -1
  63. package/dist/ids/request-job-ids.d.ts +7 -0
  64. package/dist/ids/request-job-ids.d.ts.map +1 -0
  65. package/dist/ids/request-job-ids.js +18 -0
  66. package/dist/ids/request-job-ids.js.map +1 -0
  67. package/dist/ids/stats-ids.d.ts +7 -0
  68. package/dist/ids/stats-ids.d.ts.map +1 -0
  69. package/dist/ids/stats-ids.js +17 -0
  70. package/dist/ids/stats-ids.js.map +1 -0
  71. package/dist/migration-console/action-ids.d.ts +1 -3
  72. package/dist/migration-console/action-ids.d.ts.map +1 -1
  73. package/dist/migration-console/action-ids.js +1 -3
  74. package/dist/migration-console/action-ids.js.map +1 -1
  75. package/dist/migration-console/manifest.d.ts +1 -2
  76. package/dist/migration-console/manifest.d.ts.map +1 -1
  77. package/dist/migration-console/manifest.js +12 -43
  78. package/dist/migration-console/manifest.js.map +1 -1
  79. package/dist/paths/collection-groups.d.ts +0 -1
  80. package/dist/paths/collection-groups.d.ts.map +1 -1
  81. package/dist/paths/collection-groups.js +1 -2
  82. package/dist/paths/collection-groups.js.map +1 -1
  83. package/dist/paths/collection-refs.d.ts +1 -2
  84. package/dist/paths/collection-refs.d.ts.map +1 -1
  85. package/dist/paths/collection-refs.js +1 -2
  86. package/dist/paths/collection-refs.js.map +1 -1
  87. package/dist/paths/collections.d.ts +1 -5
  88. package/dist/paths/collections.d.ts.map +1 -1
  89. package/dist/paths/collections.js +1 -5
  90. package/dist/paths/collections.js.map +1 -1
  91. package/dist/paths/path-builders.d.ts +1 -4
  92. package/dist/paths/path-builders.d.ts.map +1 -1
  93. package/dist/paths/path-builders.js +2 -17
  94. package/dist/paths/path-builders.js.map +1 -1
  95. package/dist/schemas/admin-notifications.d.ts +1 -1
  96. package/dist/schemas/awards.d.ts +5 -75
  97. package/dist/schemas/awards.d.ts.map +1 -1
  98. package/dist/schemas/awards.js +6 -30
  99. package/dist/schemas/awards.js.map +1 -1
  100. package/dist/schemas/dead-letters.d.ts +7 -1
  101. package/dist/schemas/dead-letters.d.ts.map +1 -1
  102. package/dist/schemas/dead-letters.js +2 -1
  103. package/dist/schemas/dead-letters.js.map +1 -1
  104. package/dist/schemas/migration-console.d.ts +16 -57
  105. package/dist/schemas/migration-console.d.ts.map +1 -1
  106. package/dist/schemas/migration-console.js +3 -10
  107. package/dist/schemas/migration-console.js.map +1 -1
  108. package/dist/schemas/pictures.d.ts +21 -33
  109. package/dist/schemas/pictures.d.ts.map +1 -1
  110. package/dist/schemas/scoring.d.ts +6 -12
  111. package/dist/schemas/scoring.d.ts.map +1 -1
  112. package/dist/schemas/scoring.js +9 -5
  113. package/dist/schemas/scoring.js.map +1 -1
  114. package/dist/schemas/stats.d.ts +66 -101
  115. package/dist/schemas/stats.d.ts.map +1 -1
  116. package/dist/schemas/stats.js +39 -72
  117. package/dist/schemas/stats.js.map +1 -1
  118. package/dist/sports/basketball-scoring.d.ts.map +1 -1
  119. package/dist/sports/basketball-scoring.js +16 -7
  120. package/dist/sports/basketball-scoring.js.map +1 -1
  121. package/dist/sports/bulk-entry.d.ts +7 -2
  122. package/dist/sports/bulk-entry.d.ts.map +1 -1
  123. package/dist/sports/bulk-entry.js.map +1 -1
  124. package/dist/sports/football-scoring.d.ts.map +1 -1
  125. package/dist/sports/football-scoring.js +13 -10
  126. package/dist/sports/football-scoring.js.map +1 -1
  127. package/dist/sports/replay.d.ts.map +1 -1
  128. package/dist/sports/replay.js +16 -1
  129. package/dist/sports/replay.js.map +1 -1
  130. package/dist/sports/scoring.d.ts +18 -2
  131. package/dist/sports/scoring.d.ts.map +1 -1
  132. package/dist/sports/scoring.js.map +1 -1
  133. package/dist/sports/store-driver.d.ts +2 -1
  134. package/dist/sports/store-driver.d.ts.map +1 -1
  135. package/dist/sports/store-driver.js +30 -15
  136. package/dist/sports/store-driver.js.map +1 -1
  137. package/dist/types/audit.d.ts +1 -1
  138. package/dist/types/audit.d.ts.map +1 -1
  139. package/dist/types/audit.js +1 -3
  140. package/dist/types/audit.js.map +1 -1
  141. package/dist/types/schedules.d.ts +1 -1
  142. package/dist/types/schedules.d.ts.map +1 -1
  143. package/dist/types/schedules.js +1 -2
  144. package/dist/types/schedules.js.map +1 -1
  145. package/dist/types/stats.d.ts +13 -13
  146. package/dist/types/stats.d.ts.map +1 -1
  147. package/dist/types/stats.js +13 -33
  148. package/dist/types/stats.js.map +1 -1
  149. package/dist/types/unions.d.ts +0 -6
  150. package/dist/types/unions.d.ts.map +1 -1
  151. package/dist/types/unions.js +0 -3
  152. package/dist/types/unions.js.map +1 -1
  153. package/dist/utils/index.d.ts +0 -1
  154. package/dist/utils/index.d.ts.map +1 -1
  155. package/dist/utils/index.js +0 -1
  156. package/dist/utils/index.js.map +1 -1
  157. package/package.json +1 -1
  158. package/dist/doc-schemas/award-group-grant.d.ts +0 -54
  159. package/dist/doc-schemas/award-group-grant.d.ts.map +0 -1
  160. package/dist/doc-schemas/award-group-grant.js +0 -55
  161. package/dist/doc-schemas/award-group-grant.js.map +0 -1
  162. package/dist/doc-schemas/stats-operation.d.ts +0 -348
  163. package/dist/doc-schemas/stats-operation.d.ts.map +0 -1
  164. package/dist/doc-schemas/stats-operation.js +0 -92
  165. package/dist/doc-schemas/stats-operation.js.map +0 -1
  166. package/dist/ids/award-grant-ids.d.ts +0 -9
  167. package/dist/ids/award-grant-ids.d.ts.map +0 -1
  168. package/dist/ids/award-grant-ids.js +0 -10
  169. package/dist/ids/award-grant-ids.js.map +0 -1
  170. package/dist/utils/stats-operation-request.d.ts +0 -20
  171. package/dist/utils/stats-operation-request.d.ts.map +0 -1
  172. package/dist/utils/stats-operation-request.js +0 -10
  173. package/dist/utils/stats-operation-request.js.map +0 -1
@@ -30,19 +30,29 @@ function sameFields(left, right) {
30
30
  return (keys.length === Object.keys(rightFields).length &&
31
31
  keys.every((key) => Object.is(leftFields[key], rightFields[key])));
32
32
  }
33
+ function isSameBulkEntry(submission, held) {
34
+ const { target, ...submitted } = submission;
35
+ const { value, previousValue, ...recorded } = held;
36
+ return (typeof target === 'number' &&
37
+ typeof value === 'number' &&
38
+ typeof previousValue === 'number' &&
39
+ previousValue + value === target &&
40
+ sameFields(submitted, recorded));
41
+ }
33
42
  function isSameEvent(submission, held) {
34
43
  if (isStatVoid(submission))
35
44
  return isStatVoid(held) && held.targetEventId === submission.targetEventId;
36
- return sameFields(submission, held);
45
+ const fields = submission;
46
+ return 'target' in fields ? isSameBulkEntry(fields, held) : sameFields(fields, held);
37
47
  }
38
- function holdsNegativeValue(stats) {
39
- const lines = [...Object.values(stats.teamStats), ...Object.values(stats.playerStats)];
40
- return lines.some((line) => Object.values(line).some((value) => Array.isArray(value)
41
- ? value.some((slot) => typeof slot === 'number' && slot < 0)
42
- : typeof value === 'number' && value < 0));
48
+ function acceptedFields(event, eventId, sequence) {
49
+ return { ...callerFields(event), eventId, sequence };
43
50
  }
44
- function acceptedFields(submission, eventId, sequence) {
45
- return { ...callerFields(submission), eventId, sequence };
51
+ export function resolveStatSubmission(adapter, state, submission) {
52
+ const bulkEntry = adapter.resolveBulkEntry?.(state, submission) ?? null;
53
+ if (bulkEntry === null)
54
+ return submission;
55
+ return bulkEntry.kind === 'change' ? bulkEntry.event : null;
46
56
  }
47
57
  export function decideStatEventBatch(batch) {
48
58
  const { adapter, game, roster, submissions, storedEvent } = batch;
@@ -74,24 +84,29 @@ export function decideStatEventBatch(batch) {
74
84
  results.push({ eventId, outcome: 'alreadyRecorded', sequence: held.sequence });
75
85
  continue;
76
86
  }
87
+ let event;
77
88
  if (isStatVoid(submission)) {
78
89
  const target = placed.get(submission.targetEventId)?.event ?? storedEvent(submission.targetEventId);
79
90
  if (!isSportStatEventIn(adapter.eventTypes, target)) {
80
91
  return refuse('voidTargetNotSportEvent');
81
92
  }
82
- const next = foldStatEvent(adapter, stats, submission, () => target);
83
- if (holdsNegativeValue(next))
84
- return refuse('undoBelowZero');
85
- stats = next;
93
+ stats = foldStatEvent(adapter, stats, submission, () => target);
94
+ event = submission;
86
95
  }
87
96
  else {
88
- const verdict = adapter.validate(stats, submission, roster);
97
+ const resolved = resolveStatSubmission(adapter, stats, submission);
98
+ if (resolved === null) {
99
+ results.push({ eventId, outcome: 'unchanged', sequence });
100
+ continue;
101
+ }
102
+ const verdict = adapter.validate(stats, resolved, roster);
89
103
  if (!verdict.ok)
90
104
  return refuse(verdict.code);
91
- stats = foldStatEvent(adapter, stats, submission, () => undefined);
105
+ stats = foldStatEvent(adapter, stats, resolved, () => undefined);
106
+ event = resolved;
92
107
  }
93
108
  sequence += 1;
94
- const fields = acceptedFields(submission, eventId, sequence);
109
+ const fields = acceptedFields(event, eventId, sequence);
95
110
  accepted.push({ eventId, sequence, fields });
96
111
  placed.set(eventId, { event: fields, sequence });
97
112
  results.push({ eventId, outcome: 'recorded', sequence });
@@ -1 +1 @@
1
- {"version":3,"file":"store-driver.js","sourceRoot":"","sources":["../../src/sports/store-driver.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GameStatEvent } from '../doc-schemas/game-stats.js';\nimport type { GameStats } from '../doc-schemas/sport-game.js';\nimport { buildStatVoidId } from '../ids/stat-event-ids.js';\nimport type { StatEventSubmission } from '../schemas/scoring.js';\nimport { STAT_EVENT_RECORDER_FIELD_KEYS, STAT_EVENT_SNAPSHOT_FIELD_KEYS } from '../types/stats.js';\nimport type { RecordedStatEventOutcome, StatEventRefusalCode } from '../types/stats.js';\nimport { foldStatEvent, withGameTeamLines } from './replay.js';\nimport {\n isSportStatEventIn,\n isStatCorrection,\n isStatVoid,\n type StatEventBody,\n type StatEventRoster,\n} from './scoring.js';\nimport type { AnySportAdapter, GameTeamIds } from './sport-adapter.js';\n\nexport function statEventSubmissionId(submission: StatEventSubmission): string {\n return isStatVoid(submission) ? buildStatVoidId(submission.targetEventId) : submission.eventId;\n}\n\nexport function statEventIdsToRead(submissions: readonly StatEventSubmission[]): string[] {\n const ids = new Set<string>();\n for (const submission of submissions) {\n if (isStatCorrection(submission)) continue;\n ids.add(statEventSubmissionId(submission));\n if (isStatVoid(submission)) ids.add(submission.targetEventId);\n }\n return [...ids];\n}\n\nexport interface AcceptedStatEvent {\n readonly eventId: string;\n readonly sequence: number;\n readonly fields: Readonly<Record<string, unknown>>;\n}\n\nexport interface RecordedStatEventResult {\n readonly eventId: string;\n readonly outcome: RecordedStatEventOutcome;\n readonly sequence: number;\n}\n\nexport type StatEventBatchDecision =\n | {\n readonly ok: true;\n readonly stats: GameStats;\n readonly statEventSequence: number;\n readonly results: readonly RecordedStatEventResult[];\n readonly accepted: readonly AcceptedStatEvent[];\n }\n | {\n readonly ok: false;\n readonly code: StatEventRefusalCode;\n readonly eventId: string;\n };\n\nexport interface StatEventBatch {\n readonly adapter: AnySportAdapter;\n readonly game: GameTeamIds & { readonly stats: GameStats; readonly statEventSequence: number };\n readonly roster: StatEventRoster;\n readonly submissions: readonly StatEventSubmission[];\n readonly storedEvent: (eventId: string) => GameStatEvent | undefined;\n}\n\nconst DERIVED_FIELDS: ReadonlySet<string> = new Set([\n ...STAT_EVENT_RECORDER_FIELD_KEYS,\n ...STAT_EVENT_SNAPSHOT_FIELD_KEYS,\n]);\n\nfunction callerFields(event: Readonly<Record<string, unknown>>): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(event).filter(\n ([field, value]) => !DERIVED_FIELDS.has(field) && value !== undefined,\n ),\n );\n}\n\nfunction sameFields(\n left: Readonly<Record<string, unknown>>,\n right: Readonly<Record<string, unknown>>,\n): boolean {\n const leftFields = callerFields(left);\n const rightFields = callerFields(right);\n const keys = Object.keys(leftFields);\n return (\n keys.length === Object.keys(rightFields).length &&\n keys.every((key) => Object.is(leftFields[key], rightFields[key]))\n );\n}\n\nfunction isSameEvent(\n submission: StatEventSubmission,\n held: Readonly<Record<string, unknown>>,\n): boolean {\n if (isStatVoid(submission))\n return isStatVoid(held as StatEventBody) && held.targetEventId === submission.targetEventId;\n return sameFields(submission as Readonly<Record<string, unknown>>, held);\n}\n\nfunction holdsNegativeValue(stats: GameStats): boolean {\n const lines = [...Object.values(stats.teamStats), ...Object.values(stats.playerStats)] as Record<\n string,\n unknown\n >[];\n return lines.some((line) =>\n Object.values(line).some((value) =>\n Array.isArray(value)\n ? value.some((slot) => typeof slot === 'number' && slot < 0)\n : typeof value === 'number' && value < 0,\n ),\n );\n}\n\nfunction acceptedFields(\n submission: StatEventSubmission,\n eventId: string,\n sequence: number,\n): Record<string, unknown> {\n return { ...callerFields(submission as Readonly<Record<string, unknown>>), eventId, sequence };\n}\n\nexport function decideStatEventBatch(batch: StatEventBatch): StatEventBatchDecision {\n const { adapter, game, roster, submissions, storedEvent } = batch;\n let stats = withGameTeamLines(adapter, game.stats, game);\n let sequence = game.statEventSequence;\n const results: RecordedStatEventResult[] = [];\n const accepted: AcceptedStatEvent[] = [];\n const placed = new Map<\n string,\n { readonly event: Readonly<Record<string, unknown>>; readonly sequence: number }\n >();\n\n for (const submission of submissions) {\n const eventId = statEventSubmissionId(submission);\n const refuse = (code: StatEventRefusalCode): StatEventBatchDecision => ({\n ok: false,\n code,\n eventId,\n });\n\n if (isStatCorrection(submission)) return refuse('correctionNotAccepted');\n\n const held =\n placed.get(eventId) ??\n (() => {\n const stored = storedEvent(eventId);\n return stored === undefined\n ? undefined\n : { event: stored as Readonly<Record<string, unknown>>, sequence: stored.sequence };\n })();\n if (held !== undefined) {\n if (!isSameEvent(submission, held.event)) return refuse('eventIdConflict');\n placed.set(eventId, held);\n results.push({ eventId, outcome: 'alreadyRecorded', sequence: held.sequence });\n continue;\n }\n\n if (isStatVoid(submission)) {\n const target =\n placed.get(submission.targetEventId)?.event ?? storedEvent(submission.targetEventId);\n if (!isSportStatEventIn(adapter.eventTypes, target as StatEventBody | undefined)) {\n return refuse('voidTargetNotSportEvent');\n }\n const next = foldStatEvent(adapter, stats, submission, () => target as StatEventBody);\n if (holdsNegativeValue(next)) return refuse('undoBelowZero');\n stats = next;\n } else {\n const verdict = adapter.validate(stats, submission, roster);\n if (!verdict.ok) return refuse(verdict.code);\n stats = foldStatEvent(adapter, stats, submission, () => undefined);\n }\n\n sequence += 1;\n const fields = acceptedFields(submission, eventId, sequence);\n accepted.push({ eventId, sequence, fields });\n placed.set(eventId, { event: fields, sequence });\n results.push({ eventId, outcome: 'recorded', sequence });\n }\n\n return { ok: true, stats, statEventSequence: sequence, results, accepted };\n}\n"]}
1
+ {"version":3,"file":"store-driver.js","sourceRoot":"","sources":["../../src/sports/store-driver.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GameStatEvent } from '../doc-schemas/game-stats.js';\nimport type { GameStats } from '../doc-schemas/sport-game.js';\nimport { buildStatVoidId } from '../ids/stat-event-ids.js';\nimport type { StatEventSubmission } from '../schemas/scoring.js';\nimport { STAT_EVENT_RECORDER_FIELD_KEYS, STAT_EVENT_SNAPSHOT_FIELD_KEYS } from '../types/stats.js';\nimport type { RecordedStatEventOutcome, StatEventRefusalCode } from '../types/stats.js';\nimport { foldStatEvent, withGameTeamLines } from './replay.js';\nimport {\n isSportStatEventIn,\n isStatCorrection,\n isStatVoid,\n type StatEventBody,\n type StatEventRoster,\n} from './scoring.js';\nimport type { AnySportAdapter, GameTeamIds } from './sport-adapter.js';\n\nexport function statEventSubmissionId(submission: StatEventSubmission): string {\n return isStatVoid(submission) ? buildStatVoidId(submission.targetEventId) : submission.eventId;\n}\n\nexport function statEventIdsToRead(submissions: readonly StatEventSubmission[]): string[] {\n const ids = new Set<string>();\n for (const submission of submissions) {\n if (isStatCorrection(submission)) continue;\n ids.add(statEventSubmissionId(submission));\n if (isStatVoid(submission)) ids.add(submission.targetEventId);\n }\n return [...ids];\n}\n\nexport interface AcceptedStatEvent {\n readonly eventId: string;\n readonly sequence: number;\n readonly fields: Readonly<Record<string, unknown>>;\n}\n\nexport interface RecordedStatEventResult {\n readonly eventId: string;\n readonly outcome: RecordedStatEventOutcome;\n readonly sequence: number;\n}\n\nexport type StatEventBatchDecision =\n | {\n readonly ok: true;\n readonly stats: GameStats;\n readonly statEventSequence: number;\n readonly results: readonly RecordedStatEventResult[];\n readonly accepted: readonly AcceptedStatEvent[];\n }\n | {\n readonly ok: false;\n readonly code: StatEventRefusalCode;\n readonly eventId: string;\n };\n\nexport interface StatEventBatch {\n readonly adapter: AnySportAdapter;\n readonly game: GameTeamIds & { readonly stats: GameStats; readonly statEventSequence: number };\n readonly roster: StatEventRoster;\n readonly submissions: readonly StatEventSubmission[];\n readonly storedEvent: (eventId: string) => GameStatEvent | undefined;\n}\n\nconst DERIVED_FIELDS: ReadonlySet<string> = new Set([\n ...STAT_EVENT_RECORDER_FIELD_KEYS,\n ...STAT_EVENT_SNAPSHOT_FIELD_KEYS,\n]);\n\nfunction callerFields(event: Readonly<Record<string, unknown>>): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(event).filter(\n ([field, value]) => !DERIVED_FIELDS.has(field) && value !== undefined,\n ),\n );\n}\n\nfunction sameFields(\n left: Readonly<Record<string, unknown>>,\n right: Readonly<Record<string, unknown>>,\n): boolean {\n const leftFields = callerFields(left);\n const rightFields = callerFields(right);\n const keys = Object.keys(leftFields);\n return (\n keys.length === Object.keys(rightFields).length &&\n keys.every((key) => Object.is(leftFields[key], rightFields[key]))\n );\n}\n\nfunction isSameBulkEntry(\n submission: Readonly<Record<string, unknown>>,\n held: Readonly<Record<string, unknown>>,\n): boolean {\n const { target, ...submitted } = submission;\n const { value, previousValue, ...recorded } = held;\n return (\n typeof target === 'number' &&\n typeof value === 'number' &&\n typeof previousValue === 'number' &&\n previousValue + value === target &&\n sameFields(submitted, recorded)\n );\n}\n\nfunction isSameEvent(\n submission: StatEventSubmission,\n held: Readonly<Record<string, unknown>>,\n): boolean {\n if (isStatVoid(submission))\n return isStatVoid(held as StatEventBody) && held.targetEventId === submission.targetEventId;\n const fields: Readonly<Record<string, unknown>> = submission;\n return 'target' in fields ? isSameBulkEntry(fields, held) : sameFields(fields, held);\n}\n\nfunction acceptedFields(\n event: StatEventBody,\n eventId: string,\n sequence: number,\n): Record<string, unknown> {\n return { ...callerFields(event), eventId, sequence };\n}\n\nexport function resolveStatSubmission(\n adapter: AnySportAdapter,\n state: GameStats,\n submission: StatEventSubmission,\n): StatEventBody | null {\n const bulkEntry = adapter.resolveBulkEntry?.(state, submission) ?? null;\n if (bulkEntry === null) return submission as StatEventBody;\n return bulkEntry.kind === 'change' ? bulkEntry.event : null;\n}\n\nexport function decideStatEventBatch(batch: StatEventBatch): StatEventBatchDecision {\n const { adapter, game, roster, submissions, storedEvent } = batch;\n let stats = withGameTeamLines(adapter, game.stats, game);\n let sequence = game.statEventSequence;\n const results: RecordedStatEventResult[] = [];\n const accepted: AcceptedStatEvent[] = [];\n const placed = new Map<\n string,\n { readonly event: Readonly<Record<string, unknown>>; readonly sequence: number }\n >();\n\n for (const submission of submissions) {\n const eventId = statEventSubmissionId(submission);\n const refuse = (code: StatEventRefusalCode): StatEventBatchDecision => ({\n ok: false,\n code,\n eventId,\n });\n\n if (isStatCorrection(submission)) return refuse('correctionNotAccepted');\n\n const held =\n placed.get(eventId) ??\n (() => {\n const stored = storedEvent(eventId);\n return stored === undefined\n ? undefined\n : { event: stored as Readonly<Record<string, unknown>>, sequence: stored.sequence };\n })();\n if (held !== undefined) {\n if (!isSameEvent(submission, held.event)) return refuse('eventIdConflict');\n placed.set(eventId, held);\n results.push({ eventId, outcome: 'alreadyRecorded', sequence: held.sequence });\n continue;\n }\n\n let event: StatEventBody;\n if (isStatVoid(submission)) {\n const target =\n placed.get(submission.targetEventId)?.event ?? storedEvent(submission.targetEventId);\n if (!isSportStatEventIn(adapter.eventTypes, target as StatEventBody | undefined)) {\n return refuse('voidTargetNotSportEvent');\n }\n stats = foldStatEvent(adapter, stats, submission, () => target as StatEventBody);\n event = submission;\n } else {\n const resolved = resolveStatSubmission(adapter, stats, submission);\n if (resolved === null) {\n results.push({ eventId, outcome: 'unchanged', sequence });\n continue;\n }\n const verdict = adapter.validate(stats, resolved, roster);\n if (!verdict.ok) return refuse(verdict.code);\n stats = foldStatEvent(adapter, stats, resolved, () => undefined);\n event = resolved;\n }\n\n sequence += 1;\n const fields = acceptedFields(event, eventId, sequence);\n accepted.push({ eventId, sequence, fields });\n placed.set(eventId, { event: fields, sequence });\n results.push({ eventId, outcome: 'recorded', sequence });\n }\n\n return { ok: true, stats, statEventSequence: sequence, results, accepted };\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { SystemRole } from './unions.js';
2
2
  import { CAPTAIN_TEAM_ROLES } from './unions.js';
3
- export declare const AUDIT_EVENT_TYPE_KEYS: readonly ["userProfile.registered", "userProfile.displayNameChanged", "registrationStart.deleted", "userProfile.signedIn", "userProfile.passwordReset", "userProfile.banned", "userProfile.unbanned", "adminList.roleGranted", "adminList.roleRevoked", "adminList.claimSynced", "appConfig.updated", "landingPage.updated", "sportLeague.created", "sportLeague.updated", "sportLeague.statusChanged", "sportLeague.modeSwitched", "waiverTemplate.created", "waiverTemplate.versionPublished", "waiverTemplate.retired", "waiverTemplate.deleted", "gameLocation.created", "gameLocation.updated", "gameLocation.deleted", "galleryPicture.added", "galleryPicture.replaced", "galleryPicture.moved", "galleryPicture.featuredChanged", "galleryPicture.removed", "awardDefinition.created", "awardDefinition.badgeReplaced", "awardDefinition.deleted", "awardDefinition.granted", "awardDefinition.revoked", "award.groupDecisionOpened", "hardwareLoanContract.created", "hardwareLoanContract.signed", "hardwareLoanContract.returned", "hardwareLoanContract.deleted", "leagueTeam.created", "ghostPlayer.created", "teamMembership.roleChanged", "leagueTeam.captainChanged", "leagueTeam.updated", "leagueTeamContact.updated", "teamMembership.removed", "ghostPlayer.removed", "ghostPlayer.linked", "ghostPlayer.closedLeagueLinked", "leagueTeam.deleted", "teamInvitation.created", "teamInvitation.cancelled", "teamInvitation.accepted", "teamInvitation.rejected", "teamJoinRequest.created", "teamJoinRequest.cancelled", "teamJoinRequest.accepted", "teamJoinRequest.rejected", "leagueFreeAgent.created", "leagueFreeAgent.deleted", "leagueFreeAgent.assigned", "signedWaiver.created", "scheduleWeek.created", "scheduleWeek.updated", "sportGame.created", "sportGame.updated", "sportGame.deleted", "sportGame.statEventsRejected", "sportGame.absenceChanged", "sportGame.memoUpdated", "sportGame.jumpBallChanged", "sportGame.finalized", "sportGame.reopened", "sportGame.statsCorrected", "sportGame.statsRecalculated", "sportLeague.statsRecalculated", "userProfile.statsRecalculated", "sportHallOfFame.recalculated", "historicalStat.updated", "statsValidationReport.created", "statsValidationReport.deleted", "gameRosterPlayer.statLineResolved", "adminNotification.archived", "notificationArchiveAllJob.created", "deadLetter.replayed", "migrationActionRun.pageRun", "migrationActionRun.writesCommitted", "migrationActionRun.controlRecorded", "migrationActionRun.checkpointRecorded", "migrationConsole.cutoverRecorded"];
3
+ export declare const AUDIT_EVENT_TYPE_KEYS: readonly ["userProfile.registered", "userProfile.displayNameChanged", "registrationStart.deleted", "userProfile.signedIn", "userProfile.passwordReset", "userProfile.banned", "userProfile.unbanned", "adminList.roleGranted", "adminList.roleRevoked", "adminList.claimSynced", "appConfig.updated", "landingPage.updated", "sportLeague.created", "sportLeague.updated", "sportLeague.statusChanged", "sportLeague.modeSwitched", "waiverTemplate.created", "waiverTemplate.versionPublished", "waiverTemplate.retired", "waiverTemplate.deleted", "gameLocation.created", "gameLocation.updated", "gameLocation.deleted", "galleryPicture.added", "galleryPicture.replaced", "galleryPicture.moved", "galleryPicture.featuredChanged", "galleryPicture.removed", "awardDefinition.created", "awardDefinition.badgeReplaced", "awardDefinition.deleted", "awardDefinition.granted", "awardDefinition.revoked", "hardwareLoanContract.created", "hardwareLoanContract.signed", "hardwareLoanContract.returned", "hardwareLoanContract.deleted", "leagueTeam.created", "ghostPlayer.created", "teamMembership.roleChanged", "leagueTeam.captainChanged", "leagueTeam.updated", "leagueTeamContact.updated", "teamMembership.removed", "ghostPlayer.removed", "ghostPlayer.linked", "ghostPlayer.closedLeagueLinked", "leagueTeam.deleted", "teamInvitation.created", "teamInvitation.cancelled", "teamInvitation.accepted", "teamInvitation.rejected", "teamJoinRequest.created", "teamJoinRequest.cancelled", "teamJoinRequest.accepted", "teamJoinRequest.rejected", "leagueFreeAgent.created", "leagueFreeAgent.deleted", "leagueFreeAgent.assigned", "signedWaiver.created", "scheduleWeek.created", "scheduleWeek.updated", "sportGame.created", "sportGame.updated", "sportGame.deleted", "sportGame.statEventsRejected", "sportGame.absenceChanged", "sportGame.memoUpdated", "sportGame.jumpBallChanged", "sportGame.finalized", "sportGame.reopened", "sportGame.statsRecalculated", "sportLeague.statsRecalculated", "userProfile.statsRecalculated", "historicalStat.updated", "statsJob.created", "statsValidationReport.created", "statsValidationReport.deleted", "gameRosterPlayer.statLineResolved", "adminNotification.archived", "notificationArchiveAllJob.created", "deadLetter.replayed", "migrationActionRun.pageRun", "migrationActionRun.writesCommitted", "migrationActionRun.controlRecorded", "migrationActionRun.checkpointRecorded", "migrationConsole.cutoverRecorded"];
4
4
  export type AuditEventType = (typeof AUDIT_EVENT_TYPE_KEYS)[number];
5
5
  export declare const GHOST_LINK_AUDIT_EVENT_TYPE_KEYS: readonly ["ghostPlayer.linked", "ghostPlayer.closedLeagueLinked"];
6
6
  export type GhostLinkAuditEventType = (typeof GHOST_LINK_AUDIT_EVENT_TYPE_KEYS)[number];
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/types/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,eAAO,MAAM,qBAAqB,46EA0FxB,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,gCAAgC,mEAGC,CAAC;AAC/C,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,gCAAgC,CAAC,CAAC,MAAM,CAAC,CAAC;AAExF,eAAO,MAAM,qBAAqB,6EAMxB,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,2BAA2B,2CAGM,CAAC;AAC/C,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/E,eAAO,MAAM,+BAA+B,6CAIE,CAAC;AAC/C,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,+BAA+B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtF,eAAO,MAAM,wBAAwB,mDAAoD,CAAC;AAC1F,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,MAAM,MAAM,UAAU,GAClB;IAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,sBAAsB,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GAC/F;IACE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEN,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,eAAO,MAAM,iBAAiB,iCAAkC,CAAC;AACjE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/types/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,eAAO,MAAM,qBAAqB,u2EAwFxB,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,gCAAgC,mEAGC,CAAC;AAC/C,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,gCAAgC,CAAC,CAAC,MAAM,CAAC,CAAC;AAExF,eAAO,MAAM,qBAAqB,6EAMxB,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,2BAA2B,2CAGM,CAAC;AAC/C,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/E,eAAO,MAAM,+BAA+B,6CAIE,CAAC;AAC/C,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,+BAA+B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtF,eAAO,MAAM,wBAAwB,mDAAoD,CAAC;AAC1F,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,MAAM,MAAM,UAAU,GAClB;IAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,sBAAsB,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GAC/F;IACE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEN,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,eAAO,MAAM,iBAAiB,iCAAkC,CAAC;AACjE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -32,7 +32,6 @@ export const AUDIT_EVENT_TYPE_KEYS = [
32
32
  'awardDefinition.deleted',
33
33
  'awardDefinition.granted',
34
34
  'awardDefinition.revoked',
35
- 'award.groupDecisionOpened',
36
35
  'hardwareLoanContract.created',
37
36
  'hardwareLoanContract.signed',
38
37
  'hardwareLoanContract.returned',
@@ -71,12 +70,11 @@ export const AUDIT_EVENT_TYPE_KEYS = [
71
70
  'sportGame.jumpBallChanged',
72
71
  'sportGame.finalized',
73
72
  'sportGame.reopened',
74
- 'sportGame.statsCorrected',
75
73
  'sportGame.statsRecalculated',
76
74
  'sportLeague.statsRecalculated',
77
75
  'userProfile.statsRecalculated',
78
- 'sportHallOfFame.recalculated',
79
76
  'historicalStat.updated',
77
+ 'statsJob.created',
80
78
  'statsValidationReport.created',
81
79
  'statsValidationReport.deleted',
82
80
  'gameRosterPlayer.statLineResolved',
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/types/audit.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,wBAAwB;IACxB,gCAAgC;IAChC,2BAA2B;IAC3B,sBAAsB;IACtB,2BAA2B;IAC3B,oBAAoB;IACpB,sBAAsB;IACtB,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,mBAAmB;IACnB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,2BAA2B;IAC3B,0BAA0B;IAC1B,wBAAwB;IACxB,iCAAiC;IACjC,wBAAwB;IACxB,wBAAwB;IACxB,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,yBAAyB;IACzB,sBAAsB;IACtB,gCAAgC;IAChC,wBAAwB;IACxB,yBAAyB;IACzB,+BAA+B;IAC/B,yBAAyB;IACzB,yBAAyB;IACzB,yBAAyB;IACzB,2BAA2B;IAC3B,8BAA8B;IAC9B,6BAA6B;IAC7B,+BAA+B;IAC/B,8BAA8B;IAC9B,oBAAoB;IACpB,qBAAqB;IACrB,4BAA4B;IAC5B,2BAA2B;IAC3B,oBAAoB;IACpB,2BAA2B;IAC3B,wBAAwB;IACxB,qBAAqB;IACrB,oBAAoB;IACpB,gCAAgC;IAChC,oBAAoB;IACpB,wBAAwB;IACxB,0BAA0B;IAC1B,yBAAyB;IACzB,yBAAyB;IACzB,yBAAyB;IACzB,2BAA2B;IAC3B,0BAA0B;IAC1B,0BAA0B;IAC1B,yBAAyB;IACzB,yBAAyB;IACzB,0BAA0B;IAC1B,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,0BAA0B;IAC1B,uBAAuB;IACvB,2BAA2B;IAC3B,qBAAqB;IACrB,oBAAoB;IACpB,0BAA0B;IAC1B,6BAA6B;IAC7B,+BAA+B;IAC/B,+BAA+B;IAC/B,8BAA8B;IAC9B,wBAAwB;IACxB,+BAA+B;IAC/B,+BAA+B;IAC/B,mCAAmC;IACnC,4BAA4B;IAC5B,mCAAmC;IACnC,qBAAqB;IACrB,4BAA4B;IAC5B,oCAAoC;IACpC,oCAAoC;IACpC,uCAAuC;IACvC,kCAAkC;CAC1B,CAAC;AAGX,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,oBAAoB;IACpB,gCAAgC;CACY,CAAC;AAG/C,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM;IACN,cAAc;IACd,aAAa;IACb,eAAe;IACf,QAAQ;CACA,CAAC;AAGX,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,aAAa;IACb,eAAe;CAC6B,CAAC;AAG/C,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,MAAM;IACN,cAAc;IACd,QAAQ;CACoC,CAAC;AAG/C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,WAAW,CAAU,CAAC;AAmB1F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,SAAS,CAAU,CAAC","sourcesContent":["import type { SystemRole } from './unions.js';\nimport { CAPTAIN_TEAM_ROLES } from './unions.js';\n\nexport const AUDIT_EVENT_TYPE_KEYS = [\n 'userProfile.registered',\n 'userProfile.displayNameChanged',\n 'registrationStart.deleted',\n 'userProfile.signedIn',\n 'userProfile.passwordReset',\n 'userProfile.banned',\n 'userProfile.unbanned',\n 'adminList.roleGranted',\n 'adminList.roleRevoked',\n 'adminList.claimSynced',\n 'appConfig.updated',\n 'landingPage.updated',\n 'sportLeague.created',\n 'sportLeague.updated',\n 'sportLeague.statusChanged',\n 'sportLeague.modeSwitched',\n 'waiverTemplate.created',\n 'waiverTemplate.versionPublished',\n 'waiverTemplate.retired',\n 'waiverTemplate.deleted',\n 'gameLocation.created',\n 'gameLocation.updated',\n 'gameLocation.deleted',\n 'galleryPicture.added',\n 'galleryPicture.replaced',\n 'galleryPicture.moved',\n 'galleryPicture.featuredChanged',\n 'galleryPicture.removed',\n 'awardDefinition.created',\n 'awardDefinition.badgeReplaced',\n 'awardDefinition.deleted',\n 'awardDefinition.granted',\n 'awardDefinition.revoked',\n 'award.groupDecisionOpened',\n 'hardwareLoanContract.created',\n 'hardwareLoanContract.signed',\n 'hardwareLoanContract.returned',\n 'hardwareLoanContract.deleted',\n 'leagueTeam.created',\n 'ghostPlayer.created',\n 'teamMembership.roleChanged',\n 'leagueTeam.captainChanged',\n 'leagueTeam.updated',\n 'leagueTeamContact.updated',\n 'teamMembership.removed',\n 'ghostPlayer.removed',\n 'ghostPlayer.linked',\n 'ghostPlayer.closedLeagueLinked',\n 'leagueTeam.deleted',\n 'teamInvitation.created',\n 'teamInvitation.cancelled',\n 'teamInvitation.accepted',\n 'teamInvitation.rejected',\n 'teamJoinRequest.created',\n 'teamJoinRequest.cancelled',\n 'teamJoinRequest.accepted',\n 'teamJoinRequest.rejected',\n 'leagueFreeAgent.created',\n 'leagueFreeAgent.deleted',\n 'leagueFreeAgent.assigned',\n 'signedWaiver.created',\n 'scheduleWeek.created',\n 'scheduleWeek.updated',\n 'sportGame.created',\n 'sportGame.updated',\n 'sportGame.deleted',\n 'sportGame.statEventsRejected',\n 'sportGame.absenceChanged',\n 'sportGame.memoUpdated',\n 'sportGame.jumpBallChanged',\n 'sportGame.finalized',\n 'sportGame.reopened',\n 'sportGame.statsCorrected',\n 'sportGame.statsRecalculated',\n 'sportLeague.statsRecalculated',\n 'userProfile.statsRecalculated',\n 'sportHallOfFame.recalculated',\n 'historicalStat.updated',\n 'statsValidationReport.created',\n 'statsValidationReport.deleted',\n 'gameRosterPlayer.statLineResolved',\n 'adminNotification.archived',\n 'notificationArchiveAllJob.created',\n 'deadLetter.replayed',\n 'migrationActionRun.pageRun',\n 'migrationActionRun.writesCommitted',\n 'migrationActionRun.controlRecorded',\n 'migrationActionRun.checkpointRecorded',\n 'migrationConsole.cutoverRecorded',\n] as const;\nexport type AuditEventType = (typeof AUDIT_EVENT_TYPE_KEYS)[number];\n\nexport const GHOST_LINK_AUDIT_EVENT_TYPE_KEYS = [\n 'ghostPlayer.linked',\n 'ghostPlayer.closedLeagueLinked',\n] as const satisfies readonly AuditEventType[];\nexport type GhostLinkAuditEventType = (typeof GHOST_LINK_AUDIT_EVENT_TYPE_KEYS)[number];\n\nexport const AUDIT_ACTOR_MODE_KEYS = [\n 'user',\n 'teammateUser',\n 'adminReview',\n 'adminOverride',\n 'system',\n] as const;\nexport type AuditActorMode = (typeof AUDIT_ACTOR_MODE_KEYS)[number];\n\nexport const AUDIT_ADMIN_ACTOR_MODE_KEYS = [\n 'adminReview',\n 'adminOverride',\n] as const satisfies readonly AuditActorMode[];\nexport type AuditAdminActorMode = (typeof AUDIT_ADMIN_ACTOR_MODE_KEYS)[number];\n\nexport const AUDIT_NON_ADMIN_ACTOR_MODE_KEYS = [\n 'user',\n 'teammateUser',\n 'system',\n] as const satisfies readonly AuditActorMode[];\nexport type AuditNonAdminActorMode = (typeof AUDIT_NON_ADMIN_ACTOR_MODE_KEYS)[number];\n\nexport const AUDIT_SYSTEM_REASON_KEYS = ['trigger', 'scheduledJob', 'migration'] as const;\nexport type AuditSystemReason = (typeof AUDIT_SYSTEM_REASON_KEYS)[number];\n\nexport type CaptainTeamRole = (typeof CAPTAIN_TEAM_ROLES)[number];\n\nexport type AuditActor =\n | { uid: string | null; isAdmin: boolean; actorMode: AuditNonAdminActorMode; systemRole?: never }\n | {\n uid: string | null;\n isAdmin: boolean;\n actorMode: AuditAdminActorMode;\n systemRole: SystemRole;\n };\n\nexport interface AuditTarget {\n uid: string | null;\n ref: string | null;\n}\n\nexport const AUDIT_RESULT_KEYS = ['success', 'failure'] as const;\nexport type AuditResult = (typeof AUDIT_RESULT_KEYS)[number];\n"]}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/types/audit.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,wBAAwB;IACxB,gCAAgC;IAChC,2BAA2B;IAC3B,sBAAsB;IACtB,2BAA2B;IAC3B,oBAAoB;IACpB,sBAAsB;IACtB,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,mBAAmB;IACnB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,2BAA2B;IAC3B,0BAA0B;IAC1B,wBAAwB;IACxB,iCAAiC;IACjC,wBAAwB;IACxB,wBAAwB;IACxB,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,yBAAyB;IACzB,sBAAsB;IACtB,gCAAgC;IAChC,wBAAwB;IACxB,yBAAyB;IACzB,+BAA+B;IAC/B,yBAAyB;IACzB,yBAAyB;IACzB,yBAAyB;IACzB,8BAA8B;IAC9B,6BAA6B;IAC7B,+BAA+B;IAC/B,8BAA8B;IAC9B,oBAAoB;IACpB,qBAAqB;IACrB,4BAA4B;IAC5B,2BAA2B;IAC3B,oBAAoB;IACpB,2BAA2B;IAC3B,wBAAwB;IACxB,qBAAqB;IACrB,oBAAoB;IACpB,gCAAgC;IAChC,oBAAoB;IACpB,wBAAwB;IACxB,0BAA0B;IAC1B,yBAAyB;IACzB,yBAAyB;IACzB,yBAAyB;IACzB,2BAA2B;IAC3B,0BAA0B;IAC1B,0BAA0B;IAC1B,yBAAyB;IACzB,yBAAyB;IACzB,0BAA0B;IAC1B,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,0BAA0B;IAC1B,uBAAuB;IACvB,2BAA2B;IAC3B,qBAAqB;IACrB,oBAAoB;IACpB,6BAA6B;IAC7B,+BAA+B;IAC/B,+BAA+B;IAC/B,wBAAwB;IACxB,kBAAkB;IAClB,+BAA+B;IAC/B,+BAA+B;IAC/B,mCAAmC;IACnC,4BAA4B;IAC5B,mCAAmC;IACnC,qBAAqB;IACrB,4BAA4B;IAC5B,oCAAoC;IACpC,oCAAoC;IACpC,uCAAuC;IACvC,kCAAkC;CAC1B,CAAC;AAGX,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,oBAAoB;IACpB,gCAAgC;CACY,CAAC;AAG/C,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM;IACN,cAAc;IACd,aAAa;IACb,eAAe;IACf,QAAQ;CACA,CAAC;AAGX,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,aAAa;IACb,eAAe;CAC6B,CAAC;AAG/C,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,MAAM;IACN,cAAc;IACd,QAAQ;CACoC,CAAC;AAG/C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,WAAW,CAAU,CAAC;AAmB1F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,SAAS,CAAU,CAAC","sourcesContent":["import type { SystemRole } from './unions.js';\nimport { CAPTAIN_TEAM_ROLES } from './unions.js';\n\nexport const AUDIT_EVENT_TYPE_KEYS = [\n 'userProfile.registered',\n 'userProfile.displayNameChanged',\n 'registrationStart.deleted',\n 'userProfile.signedIn',\n 'userProfile.passwordReset',\n 'userProfile.banned',\n 'userProfile.unbanned',\n 'adminList.roleGranted',\n 'adminList.roleRevoked',\n 'adminList.claimSynced',\n 'appConfig.updated',\n 'landingPage.updated',\n 'sportLeague.created',\n 'sportLeague.updated',\n 'sportLeague.statusChanged',\n 'sportLeague.modeSwitched',\n 'waiverTemplate.created',\n 'waiverTemplate.versionPublished',\n 'waiverTemplate.retired',\n 'waiverTemplate.deleted',\n 'gameLocation.created',\n 'gameLocation.updated',\n 'gameLocation.deleted',\n 'galleryPicture.added',\n 'galleryPicture.replaced',\n 'galleryPicture.moved',\n 'galleryPicture.featuredChanged',\n 'galleryPicture.removed',\n 'awardDefinition.created',\n 'awardDefinition.badgeReplaced',\n 'awardDefinition.deleted',\n 'awardDefinition.granted',\n 'awardDefinition.revoked',\n 'hardwareLoanContract.created',\n 'hardwareLoanContract.signed',\n 'hardwareLoanContract.returned',\n 'hardwareLoanContract.deleted',\n 'leagueTeam.created',\n 'ghostPlayer.created',\n 'teamMembership.roleChanged',\n 'leagueTeam.captainChanged',\n 'leagueTeam.updated',\n 'leagueTeamContact.updated',\n 'teamMembership.removed',\n 'ghostPlayer.removed',\n 'ghostPlayer.linked',\n 'ghostPlayer.closedLeagueLinked',\n 'leagueTeam.deleted',\n 'teamInvitation.created',\n 'teamInvitation.cancelled',\n 'teamInvitation.accepted',\n 'teamInvitation.rejected',\n 'teamJoinRequest.created',\n 'teamJoinRequest.cancelled',\n 'teamJoinRequest.accepted',\n 'teamJoinRequest.rejected',\n 'leagueFreeAgent.created',\n 'leagueFreeAgent.deleted',\n 'leagueFreeAgent.assigned',\n 'signedWaiver.created',\n 'scheduleWeek.created',\n 'scheduleWeek.updated',\n 'sportGame.created',\n 'sportGame.updated',\n 'sportGame.deleted',\n 'sportGame.statEventsRejected',\n 'sportGame.absenceChanged',\n 'sportGame.memoUpdated',\n 'sportGame.jumpBallChanged',\n 'sportGame.finalized',\n 'sportGame.reopened',\n 'sportGame.statsRecalculated',\n 'sportLeague.statsRecalculated',\n 'userProfile.statsRecalculated',\n 'historicalStat.updated',\n 'statsJob.created',\n 'statsValidationReport.created',\n 'statsValidationReport.deleted',\n 'gameRosterPlayer.statLineResolved',\n 'adminNotification.archived',\n 'notificationArchiveAllJob.created',\n 'deadLetter.replayed',\n 'migrationActionRun.pageRun',\n 'migrationActionRun.writesCommitted',\n 'migrationActionRun.controlRecorded',\n 'migrationActionRun.checkpointRecorded',\n 'migrationConsole.cutoverRecorded',\n] as const;\nexport type AuditEventType = (typeof AUDIT_EVENT_TYPE_KEYS)[number];\n\nexport const GHOST_LINK_AUDIT_EVENT_TYPE_KEYS = [\n 'ghostPlayer.linked',\n 'ghostPlayer.closedLeagueLinked',\n] as const satisfies readonly AuditEventType[];\nexport type GhostLinkAuditEventType = (typeof GHOST_LINK_AUDIT_EVENT_TYPE_KEYS)[number];\n\nexport const AUDIT_ACTOR_MODE_KEYS = [\n 'user',\n 'teammateUser',\n 'adminReview',\n 'adminOverride',\n 'system',\n] as const;\nexport type AuditActorMode = (typeof AUDIT_ACTOR_MODE_KEYS)[number];\n\nexport const AUDIT_ADMIN_ACTOR_MODE_KEYS = [\n 'adminReview',\n 'adminOverride',\n] as const satisfies readonly AuditActorMode[];\nexport type AuditAdminActorMode = (typeof AUDIT_ADMIN_ACTOR_MODE_KEYS)[number];\n\nexport const AUDIT_NON_ADMIN_ACTOR_MODE_KEYS = [\n 'user',\n 'teammateUser',\n 'system',\n] as const satisfies readonly AuditActorMode[];\nexport type AuditNonAdminActorMode = (typeof AUDIT_NON_ADMIN_ACTOR_MODE_KEYS)[number];\n\nexport const AUDIT_SYSTEM_REASON_KEYS = ['trigger', 'scheduledJob', 'migration'] as const;\nexport type AuditSystemReason = (typeof AUDIT_SYSTEM_REASON_KEYS)[number];\n\nexport type CaptainTeamRole = (typeof CAPTAIN_TEAM_ROLES)[number];\n\nexport type AuditActor =\n | { uid: string | null; isAdmin: boolean; actorMode: AuditNonAdminActorMode; systemRole?: never }\n | {\n uid: string | null;\n isAdmin: boolean;\n actorMode: AuditAdminActorMode;\n systemRole: SystemRole;\n };\n\nexport interface AuditTarget {\n uid: string | null;\n ref: string | null;\n}\n\nexport const AUDIT_RESULT_KEYS = ['success', 'failure'] as const;\nexport type AuditResult = (typeof AUDIT_RESULT_KEYS)[number];\n"]}
@@ -8,6 +8,6 @@ export declare const SPORT_GAME_SCHEDULE_FIELD_KEYS: readonly ["weekId", "teams"
8
8
  export type SportGameScheduleField = (typeof SPORT_GAME_SCHEDULE_FIELD_KEYS)[number];
9
9
  export declare const SCHEDULE_WEEK_FIELD_KEYS: readonly ["weekTitle", "weekStartDate", "weekLocation"];
10
10
  export type ScheduleWeekField = (typeof SCHEDULE_WEEK_FIELD_KEYS)[number];
11
- export declare const SCHEDULE_REFUSAL_REASON_KEYS: readonly ["gameCompleted", "weekHasRecordedStats", "teamHasRecordedStats", "gameHasRecordedPlay"];
11
+ export declare const SCHEDULE_REFUSAL_REASON_KEYS: readonly ["gameCompleted", "weekHasCompletedGames", "teamHasRecordedStats"];
12
12
  export type ScheduleRefusalReason = (typeof SCHEDULE_REFUSAL_REASON_KEYS)[number];
13
13
  //# sourceMappingURL=schedules.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../../src/types/schedules.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,iDAAkD,CAAC;AAC3F,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAChF,eAAO,MAAM,wBAAwB,kBAA2D,CAAC;AACjG,eAAO,MAAM,2BAA2B,oBACoB,CAAC;AAE7D,eAAO,MAAM,8BAA8B,mCAAoC,CAAC;AAChF,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAAC;AAErF,eAAO,MAAM,8BAA8B,6FAOjC,CAAC;AACX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAAC;AAErF,eAAO,MAAM,wBAAwB,yDAA0D,CAAC;AAChG,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E,eAAO,MAAM,4BAA4B,mGAK/B,CAAC;AACX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../../src/types/schedules.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,iDAAkD,CAAC;AAC3F,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAChF,eAAO,MAAM,wBAAwB,kBAA2D,CAAC;AACjG,eAAO,MAAM,2BAA2B,oBACoB,CAAC;AAE7D,eAAO,MAAM,8BAA8B,mCAAoC,CAAC;AAChF,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAAC;AAErF,eAAO,MAAM,8BAA8B,6FAOjC,CAAC;AACX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAAC;AAErF,eAAO,MAAM,wBAAwB,yDAA0D,CAAC;AAChG,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E,eAAO,MAAM,4BAA4B,6EAI/B,CAAC;AACX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -13,8 +13,7 @@ export const SPORT_GAME_SCHEDULE_FIELD_KEYS = [
13
13
  export const SCHEDULE_WEEK_FIELD_KEYS = ['weekTitle', 'weekStartDate', 'weekLocation'];
14
14
  export const SCHEDULE_REFUSAL_REASON_KEYS = [
15
15
  'gameCompleted',
16
- 'weekHasRecordedStats',
16
+ 'weekHasCompletedGames',
17
17
  'teamHasRecordedStats',
18
- 'gameHasRecordedPlay',
19
18
  ];
20
19
  //# sourceMappingURL=schedules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schedules.js","sourceRoot":"","sources":["../../src/types/schedules.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,gBAAgB,EAAE,kBAAkB,CAAU,CAAC;AAE3F,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAwD,CAAC;AACjG,MAAM,CAAC,MAAM,2BAA2B,GACtC,kBAA0D,CAAC;AAE7D,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAGhF,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,QAAQ;IACR,OAAO;IACP,WAAW;IACX,gBAAgB;IAChB,aAAa;IACb,eAAe;CACP,CAAC;AAGX,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,WAAW,EAAE,eAAe,EAAE,cAAc,CAAU,CAAC;AAGhG,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,eAAe;IACf,sBAAsB;IACtB,sBAAsB;IACtB,qBAAqB;CACb,CAAC","sourcesContent":["export const SCHEDULE_CONFLICT_KIND_KEYS = ['sharedLocation', 'teamDoubleBooked'] as const;\nexport type ScheduleConflictKind = (typeof SCHEDULE_CONFLICT_KIND_KEYS)[number];\nexport const SHARED_LOCATION_CONFLICT = 'sharedLocation' as const satisfies ScheduleConflictKind;\nexport const TEAM_DOUBLE_BOOKED_CONFLICT =\n 'teamDoubleBooked' as const satisfies ScheduleConflictKind;\n\nexport const SPORT_GAME_DELETION_SCOPE_KEYS = ['game', 'week', 'team'] as const;\nexport type SportGameDeletionScope = (typeof SPORT_GAME_DELETION_SCOPE_KEYS)[number];\n\nexport const SPORT_GAME_SCHEDULE_FIELD_KEYS = [\n 'weekId',\n 'teams',\n 'startTime',\n 'gameLocationId',\n 'subLocation',\n 'locationLabel',\n] as const;\nexport type SportGameScheduleField = (typeof SPORT_GAME_SCHEDULE_FIELD_KEYS)[number];\n\nexport const SCHEDULE_WEEK_FIELD_KEYS = ['weekTitle', 'weekStartDate', 'weekLocation'] as const;\nexport type ScheduleWeekField = (typeof SCHEDULE_WEEK_FIELD_KEYS)[number];\n\nexport const SCHEDULE_REFUSAL_REASON_KEYS = [\n 'gameCompleted',\n 'weekHasRecordedStats',\n 'teamHasRecordedStats',\n 'gameHasRecordedPlay',\n] as const;\nexport type ScheduleRefusalReason = (typeof SCHEDULE_REFUSAL_REASON_KEYS)[number];\n"]}
1
+ {"version":3,"file":"schedules.js","sourceRoot":"","sources":["../../src/types/schedules.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,gBAAgB,EAAE,kBAAkB,CAAU,CAAC;AAE3F,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAwD,CAAC;AACjG,MAAM,CAAC,MAAM,2BAA2B,GACtC,kBAA0D,CAAC;AAE7D,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAGhF,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,QAAQ;IACR,OAAO;IACP,WAAW;IACX,gBAAgB;IAChB,aAAa;IACb,eAAe;CACP,CAAC;AAGX,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,WAAW,EAAE,eAAe,EAAE,cAAc,CAAU,CAAC;AAGhG,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,eAAe;IACf,uBAAuB;IACvB,sBAAsB;CACd,CAAC","sourcesContent":["export const SCHEDULE_CONFLICT_KIND_KEYS = ['sharedLocation', 'teamDoubleBooked'] as const;\nexport type ScheduleConflictKind = (typeof SCHEDULE_CONFLICT_KIND_KEYS)[number];\nexport const SHARED_LOCATION_CONFLICT = 'sharedLocation' as const satisfies ScheduleConflictKind;\nexport const TEAM_DOUBLE_BOOKED_CONFLICT =\n 'teamDoubleBooked' as const satisfies ScheduleConflictKind;\n\nexport const SPORT_GAME_DELETION_SCOPE_KEYS = ['game', 'week', 'team'] as const;\nexport type SportGameDeletionScope = (typeof SPORT_GAME_DELETION_SCOPE_KEYS)[number];\n\nexport const SPORT_GAME_SCHEDULE_FIELD_KEYS = [\n 'weekId',\n 'teams',\n 'startTime',\n 'gameLocationId',\n 'subLocation',\n 'locationLabel',\n] as const;\nexport type SportGameScheduleField = (typeof SPORT_GAME_SCHEDULE_FIELD_KEYS)[number];\n\nexport const SCHEDULE_WEEK_FIELD_KEYS = ['weekTitle', 'weekStartDate', 'weekLocation'] as const;\nexport type ScheduleWeekField = (typeof SCHEDULE_WEEK_FIELD_KEYS)[number];\n\nexport const SCHEDULE_REFUSAL_REASON_KEYS = [\n 'gameCompleted',\n 'weekHasCompletedGames',\n 'teamHasRecordedStats',\n] as const;\nexport type ScheduleRefusalReason = (typeof SCHEDULE_REFUSAL_REASON_KEYS)[number];\n"]}
@@ -15,15 +15,17 @@ export declare const TEAM_STAT_LINE_KIND_KEYS: readonly ["gameTeam", "teamSeason
15
15
  export declare const STAT_LINE_KIND_KEYS: readonly ["gamePlayer", "membershipRow", "lifetime", "hallOfFame", "gameTeam", "teamSeason"];
16
16
  export type StatLineKind = (typeof STAT_LINE_KIND_KEYS)[number];
17
17
  export type PlayerStatLineKind = (typeof PLAYER_STAT_LINE_KIND_KEYS)[number];
18
- export declare const STATS_OPERATION_KIND_KEYS: readonly ["leagueStatsRebuild", "lifetimeStatsRebuild", "hallOfFameRebuild", "statsValidation", "gameStatsCorrection", "gameStatsRecalculation", "historicalStatsUpdate"];
19
- export type StatsOperationKind = (typeof STATS_OPERATION_KIND_KEYS)[number];
20
- export declare const STATS_REBUILD_OPERATION_KIND_KEYS: readonly ["leagueStatsRebuild", "lifetimeStatsRebuild", "hallOfFameRebuild"];
21
- export type StatsRebuildOperationKind = (typeof STATS_REBUILD_OPERATION_KIND_KEYS)[number];
22
- export declare const STATS_OPERATION_STATUS_KEYS: readonly ["running", "complete", "stopped"];
23
- export type StatsOperationStatus = (typeof STATS_OPERATION_STATUS_KEYS)[number];
24
- export declare const STATS_VALIDATION_PHASE_KEYS: readonly ["games", "destinations"];
25
- export type StatsValidationPhase = (typeof STATS_VALIDATION_PHASE_KEYS)[number];
26
- export declare const STAT_EVENT_REFUSAL_KEYS: readonly ["eventTypeNotInSport", "teamNotInGame", "playerNotRostered", "assisterNotRostered", "assistNotAllowed", "playerNotAllowed", "roundNotNext", "roundsComplete", "bulkValueInvalid", "bulkStale", "eventIdConflict", "voidTargetNotSportEvent", "correctionNotAccepted", "undoBelowZero"];
18
+ export declare const STATS_JOB_KIND_KEYS: readonly ["rebuild", "check"];
19
+ export type StatsJobKind = (typeof STATS_JOB_KIND_KEYS)[number];
20
+ export declare const STATS_JOB_STATE_KEYS: readonly ["in-progress", "complete", "failed"];
21
+ export type StatsJobState = (typeof STATS_JOB_STATE_KEYS)[number];
22
+ export declare const STATS_JOB_STAGE_KEYS: readonly ["games", "leagues", "people", "hallOfFame"];
23
+ export type StatsJobStage = (typeof STATS_JOB_STAGE_KEYS)[number];
24
+ export declare const STATS_JOB_STAGES: {
25
+ readonly rebuild: readonly ["leagues", "people", "hallOfFame"];
26
+ readonly check: readonly ["games", "leagues", "people", "hallOfFame"];
27
+ };
28
+ export declare const STAT_EVENT_REFUSAL_KEYS: readonly ["eventTypeNotInSport", "teamNotInGame", "playerNotRostered", "assisterNotRostered", "assistNotAllowed", "playerNotAllowed", "roundNotNext", "roundsComplete", "bulkValueInvalid", "eventIdConflict", "voidTargetNotSportEvent", "correctionNotAccepted"];
27
29
  export type StatEventRefusalCode = (typeof STAT_EVENT_REFUSAL_KEYS)[number];
28
30
  export declare const FINALIZATION_NOT_READY_KEYS: readonly ["roundsIncomplete"];
29
31
  export type FinalizationNotReadyReason = (typeof FINALIZATION_NOT_READY_KEYS)[number];
@@ -31,16 +33,14 @@ export declare const SCORING_PANEL_KIND_KEYS: readonly ["playerEvents", "teamPoi
31
33
  export type ScoringPanelKind = (typeof SCORING_PANEL_KIND_KEYS)[number];
32
34
  export declare const BULK_ENTRY_KIND_KEYS: readonly ["playerLines", "teamScores", "rounds"];
33
35
  export type BulkEntryKind = (typeof BULK_ENTRY_KIND_KEYS)[number];
34
- export declare const RECORDED_STAT_EVENT_OUTCOME_KEYS: readonly ["recorded", "alreadyRecorded"];
36
+ export declare const RECORDED_STAT_EVENT_OUTCOME_KEYS: readonly ["recorded", "alreadyRecorded", "unchanged"];
35
37
  export type RecordedStatEventOutcome = (typeof RECORDED_STAT_EVENT_OUTCOME_KEYS)[number];
36
38
  export declare const GAME_FINALIZE_OUTCOME_KEYS: readonly ["finalized", "alreadyFinalized"];
37
39
  export type GameFinalizeOutcome = (typeof GAME_FINALIZE_OUTCOME_KEYS)[number];
38
40
  export declare const GAME_REOPEN_OUTCOME_KEYS: readonly ["reopened", "alreadyOpen"];
39
41
  export type GameReopenOutcome = (typeof GAME_REOPEN_OUTCOME_KEYS)[number];
40
- export declare const GAME_STATS_REPAIR_OUTCOME_KEYS: readonly ["reconciled", "unchanged", "alreadyApplied"];
42
+ export declare const GAME_STATS_REPAIR_OUTCOME_KEYS: readonly ["reconciled", "unchanged"];
41
43
  export type GameStatsRepairOutcome = (typeof GAME_STATS_REPAIR_OUTCOME_KEYS)[number];
42
- export declare const GAME_REPAIR_REFUSAL_KEYS: readonly ["eventUnreadable", "eventSequenceGap", "sourcesDisagree", "scoreAmbiguous", "fieldNotCorrectable", "lineNotRostered", "teamNotInGame"];
43
- export type GameRepairRefusal = (typeof GAME_REPAIR_REFUSAL_KEYS)[number];
44
44
  export declare const GHOST_LINK_MEMBERSHIP_OUTCOME_KEYS: readonly ["handedOver", "created", "merged", "kept"];
45
45
  export type GhostLinkMembershipOutcome = (typeof GHOST_LINK_MEMBERSHIP_OUTCOME_KEYS)[number];
46
46
  export declare const UNROSTERED_STAT_LINE_RESOLUTION_OUTCOME_KEYS: readonly ["resolved", "alreadyResolved"];
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/types/stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/types/stats.ts"],"names":[],"mappings":"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"}
@@ -29,22 +29,13 @@ export const STAT_LINE_KIND_KEYS = [
29
29
  ...PLAYER_STAT_LINE_KIND_KEYS,
30
30
  ...TEAM_STAT_LINE_KIND_KEYS,
31
31
  ];
32
- export const STATS_OPERATION_KIND_KEYS = [
33
- 'leagueStatsRebuild',
34
- 'lifetimeStatsRebuild',
35
- 'hallOfFameRebuild',
36
- 'statsValidation',
37
- 'gameStatsCorrection',
38
- 'gameStatsRecalculation',
39
- 'historicalStatsUpdate',
40
- ];
41
- export const STATS_REBUILD_OPERATION_KIND_KEYS = [
42
- 'leagueStatsRebuild',
43
- 'lifetimeStatsRebuild',
44
- 'hallOfFameRebuild',
45
- ];
46
- export const STATS_OPERATION_STATUS_KEYS = ['running', 'complete', 'stopped'];
47
- export const STATS_VALIDATION_PHASE_KEYS = ['games', 'destinations'];
32
+ export const STATS_JOB_KIND_KEYS = ['rebuild', 'check'];
33
+ export const STATS_JOB_STATE_KEYS = ['in-progress', 'complete', 'failed'];
34
+ export const STATS_JOB_STAGE_KEYS = ['games', 'leagues', 'people', 'hallOfFame'];
35
+ export const STATS_JOB_STAGES = {
36
+ rebuild: ['leagues', 'people', 'hallOfFame'],
37
+ check: ['games', 'leagues', 'people', 'hallOfFame'],
38
+ };
48
39
  export const STAT_EVENT_REFUSAL_KEYS = [
49
40
  'eventTypeNotInSport',
50
41
  'teamNotInGame',
@@ -55,32 +46,21 @@ export const STAT_EVENT_REFUSAL_KEYS = [
55
46
  'roundNotNext',
56
47
  'roundsComplete',
57
48
  'bulkValueInvalid',
58
- 'bulkStale',
59
49
  'eventIdConflict',
60
50
  'voidTargetNotSportEvent',
61
51
  'correctionNotAccepted',
62
- 'undoBelowZero',
63
52
  ];
64
53
  export const FINALIZATION_NOT_READY_KEYS = ['roundsIncomplete'];
65
54
  export const SCORING_PANEL_KIND_KEYS = ['playerEvents', 'teamPoints', 'rounds'];
66
55
  export const BULK_ENTRY_KIND_KEYS = ['playerLines', 'teamScores', 'rounds'];
67
- export const RECORDED_STAT_EVENT_OUTCOME_KEYS = ['recorded', 'alreadyRecorded'];
68
- export const GAME_FINALIZE_OUTCOME_KEYS = ['finalized', 'alreadyFinalized'];
69
- export const GAME_REOPEN_OUTCOME_KEYS = ['reopened', 'alreadyOpen'];
70
- export const GAME_STATS_REPAIR_OUTCOME_KEYS = [
71
- 'reconciled',
56
+ export const RECORDED_STAT_EVENT_OUTCOME_KEYS = [
57
+ 'recorded',
58
+ 'alreadyRecorded',
72
59
  'unchanged',
73
- 'alreadyApplied',
74
- ];
75
- export const GAME_REPAIR_REFUSAL_KEYS = [
76
- 'eventUnreadable',
77
- 'eventSequenceGap',
78
- 'sourcesDisagree',
79
- 'scoreAmbiguous',
80
- 'fieldNotCorrectable',
81
- 'lineNotRostered',
82
- 'teamNotInGame',
83
60
  ];
61
+ export const GAME_FINALIZE_OUTCOME_KEYS = ['finalized', 'alreadyFinalized'];
62
+ export const GAME_REOPEN_OUTCOME_KEYS = ['reopened', 'alreadyOpen'];
63
+ export const GAME_STATS_REPAIR_OUTCOME_KEYS = ['reconciled', 'unchanged'];
84
64
  export const GHOST_LINK_MEMBERSHIP_OUTCOME_KEYS = [
85
65
  'handedOver',
86
66
  'created',
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/types/stats.ts"],"names":[],"mappings":"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","sourcesContent":["import { CAPTAIN_TEAM_ROLES, SYSTEM_ROLE_KEYS } from './unions.js';\n\nexport const STAT_VOID_EVENT_TYPE = 'STAT_VOID';\nexport const STAT_CORRECTION_EVENT_TYPE = 'STAT_CORRECTION';\nexport const STAT_STORE_EVENT_TYPE_KEYS = [\n STAT_VOID_EVENT_TYPE,\n STAT_CORRECTION_EVENT_TYPE,\n] as const;\nexport type StatStoreEventType = (typeof STAT_STORE_EVENT_TYPE_KEYS)[number];\n\nexport const STAT_EVENT_RECORDER_FIELD_KEYS = [\n 'sequence',\n 'acceptedAt',\n 'recordedByUserId',\n 'recordedByAuthority',\n 'recordedByTeamId',\n] as const;\nexport type StatEventRecorderField = (typeof STAT_EVENT_RECORDER_FIELD_KEYS)[number];\n\nexport const STAT_EVENT_SNAPSHOT_FIELD_KEYS = [\n 'displayNameSnapshot',\n 'assistedByDisplayNameSnapshot',\n] as const;\nexport type StatEventSnapshotField = (typeof STAT_EVENT_SNAPSHOT_FIELD_KEYS)[number];\n\nexport const STAT_CORRECTION_SOURCE_KEYS = ['admin', 'migration'] as const;\nexport type StatCorrectionSource = (typeof STAT_CORRECTION_SOURCE_KEYS)[number];\n\nexport const STAT_EVENT_AUTHORITY_KEYS = [...SYSTEM_ROLE_KEYS, ...CAPTAIN_TEAM_ROLES] as const;\nexport type StatEventAuthority = (typeof STAT_EVENT_AUTHORITY_KEYS)[number];\n\nexport const PLAYER_STAT_LINE_KIND_KEYS = [\n 'gamePlayer',\n 'membershipRow',\n 'lifetime',\n 'hallOfFame',\n] as const;\nexport const TEAM_STAT_LINE_KIND_KEYS = ['gameTeam', 'teamSeason'] as const;\nexport const STAT_LINE_KIND_KEYS = [\n ...PLAYER_STAT_LINE_KIND_KEYS,\n ...TEAM_STAT_LINE_KIND_KEYS,\n] as const;\nexport type StatLineKind = (typeof STAT_LINE_KIND_KEYS)[number];\nexport type PlayerStatLineKind = (typeof PLAYER_STAT_LINE_KIND_KEYS)[number];\n\nexport const STATS_OPERATION_KIND_KEYS = [\n 'leagueStatsRebuild',\n 'lifetimeStatsRebuild',\n 'hallOfFameRebuild',\n 'statsValidation',\n 'gameStatsCorrection',\n 'gameStatsRecalculation',\n 'historicalStatsUpdate',\n] as const;\nexport type StatsOperationKind = (typeof STATS_OPERATION_KIND_KEYS)[number];\n\nexport const STATS_REBUILD_OPERATION_KIND_KEYS = [\n 'leagueStatsRebuild',\n 'lifetimeStatsRebuild',\n 'hallOfFameRebuild',\n] as const satisfies readonly StatsOperationKind[];\nexport type StatsRebuildOperationKind = (typeof STATS_REBUILD_OPERATION_KIND_KEYS)[number];\n\nexport const STATS_OPERATION_STATUS_KEYS = ['running', 'complete', 'stopped'] as const;\nexport type StatsOperationStatus = (typeof STATS_OPERATION_STATUS_KEYS)[number];\n\nexport const STATS_VALIDATION_PHASE_KEYS = ['games', 'destinations'] as const;\nexport type StatsValidationPhase = (typeof STATS_VALIDATION_PHASE_KEYS)[number];\n\nexport const STAT_EVENT_REFUSAL_KEYS = [\n 'eventTypeNotInSport',\n 'teamNotInGame',\n 'playerNotRostered',\n 'assisterNotRostered',\n 'assistNotAllowed',\n 'playerNotAllowed',\n 'roundNotNext',\n 'roundsComplete',\n 'bulkValueInvalid',\n 'bulkStale',\n 'eventIdConflict',\n 'voidTargetNotSportEvent',\n 'correctionNotAccepted',\n 'undoBelowZero',\n] as const;\nexport type StatEventRefusalCode = (typeof STAT_EVENT_REFUSAL_KEYS)[number];\n\nexport const FINALIZATION_NOT_READY_KEYS = ['roundsIncomplete'] as const;\nexport type FinalizationNotReadyReason = (typeof FINALIZATION_NOT_READY_KEYS)[number];\n\nexport const SCORING_PANEL_KIND_KEYS = ['playerEvents', 'teamPoints', 'rounds'] as const;\nexport type ScoringPanelKind = (typeof SCORING_PANEL_KIND_KEYS)[number];\n\nexport const BULK_ENTRY_KIND_KEYS = ['playerLines', 'teamScores', 'rounds'] as const;\nexport type BulkEntryKind = (typeof BULK_ENTRY_KIND_KEYS)[number];\n\nexport const RECORDED_STAT_EVENT_OUTCOME_KEYS = ['recorded', 'alreadyRecorded'] as const;\nexport type RecordedStatEventOutcome = (typeof RECORDED_STAT_EVENT_OUTCOME_KEYS)[number];\n\nexport const GAME_FINALIZE_OUTCOME_KEYS = ['finalized', 'alreadyFinalized'] as const;\nexport type GameFinalizeOutcome = (typeof GAME_FINALIZE_OUTCOME_KEYS)[number];\n\nexport const GAME_REOPEN_OUTCOME_KEYS = ['reopened', 'alreadyOpen'] as const;\nexport type GameReopenOutcome = (typeof GAME_REOPEN_OUTCOME_KEYS)[number];\n\nexport const GAME_STATS_REPAIR_OUTCOME_KEYS = [\n 'reconciled',\n 'unchanged',\n 'alreadyApplied',\n] as const;\nexport type GameStatsRepairOutcome = (typeof GAME_STATS_REPAIR_OUTCOME_KEYS)[number];\n\nexport const GAME_REPAIR_REFUSAL_KEYS = [\n 'eventUnreadable',\n 'eventSequenceGap',\n 'sourcesDisagree',\n 'scoreAmbiguous',\n 'fieldNotCorrectable',\n 'lineNotRostered',\n 'teamNotInGame',\n] as const;\nexport type GameRepairRefusal = (typeof GAME_REPAIR_REFUSAL_KEYS)[number];\n\nexport const GHOST_LINK_MEMBERSHIP_OUTCOME_KEYS = [\n 'handedOver',\n 'created',\n 'merged',\n 'kept',\n] as const;\nexport type GhostLinkMembershipOutcome = (typeof GHOST_LINK_MEMBERSHIP_OUTCOME_KEYS)[number];\n\nexport const UNROSTERED_STAT_LINE_RESOLUTION_OUTCOME_KEYS = [\n 'resolved',\n 'alreadyResolved',\n] as const;\nexport type UnrosteredStatLineResolutionOutcome =\n (typeof UNROSTERED_STAT_LINE_RESOLUTION_OUTCOME_KEYS)[number];\n\nexport const GHOST_REMOVAL_REFUSAL_KEYS = ['ghostHasPlayed', 'captainNotRemovable'] as const;\nexport type GhostRemovalRefusal = (typeof GHOST_REMOVAL_REFUSAL_KEYS)[number];\n"]}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/types/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAChD,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CAAC;AAC5D,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,oBAAoB;IACpB,0BAA0B;CAClB,CAAC;AAGX,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,UAAU;IACV,YAAY;IACZ,kBAAkB;IAClB,qBAAqB;IACrB,kBAAkB;CACV,CAAC;AAGX,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,qBAAqB;IACrB,+BAA+B;CACvB,CAAC;AAGX,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,OAAO,EAAE,WAAW,CAAU,CAAC;AAG3E,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,kBAAkB,CAAU,CAAC;AAG/F,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,YAAY;IACZ,eAAe;IACf,UAAU;IACV,YAAY;CACJ,CAAC;AACX,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,UAAU,EAAE,YAAY,CAAU,CAAC;AAC5E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,GAAG,0BAA0B;IAC7B,GAAG,wBAAwB;CACnB,CAAC;AAIX,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,OAAO,CAAU,CAAC;AAGjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAU,CAAC;AAGnF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAU,CAAC;AAG1F,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC;IAC5C,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC;CACc,CAAC;AAEpE,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,qBAAqB;IACrB,eAAe;IACf,mBAAmB;IACnB,qBAAqB;IACrB,kBAAkB;IAClB,kBAAkB;IAClB,cAAc;IACd,gBAAgB;IAChB,kBAAkB;IAClB,iBAAiB;IACjB,yBAAyB;IACzB,uBAAuB;CACf,CAAC;AAGX,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,kBAAkB,CAAU,CAAC;AAGzE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,QAAQ,CAAU,CAAC;AAGzF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAU,CAAC;AAGrF,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,UAAU;IACV,iBAAiB;IACjB,WAAW;CACH,CAAC;AAGX,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAU,CAAC;AAGrF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,UAAU,EAAE,aAAa,CAAU,CAAC;AAG7E,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,YAAY,EAAE,WAAW,CAAU,CAAC;AAGnF,MAAM,CAAC,MAAM,kCAAkC,GAAG;IAChD,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,MAAM;CACE,CAAC;AAGX,MAAM,CAAC,MAAM,4CAA4C,GAAG;IAC1D,UAAU;IACV,iBAAiB;CACT,CAAC;AAIX,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,gBAAgB,EAAE,qBAAqB,CAAU,CAAC","sourcesContent":["import { CAPTAIN_TEAM_ROLES, SYSTEM_ROLE_KEYS } from './unions.js';\n\nexport const STAT_VOID_EVENT_TYPE = 'STAT_VOID';\nexport const STAT_CORRECTION_EVENT_TYPE = 'STAT_CORRECTION';\nexport const STAT_STORE_EVENT_TYPE_KEYS = [\n STAT_VOID_EVENT_TYPE,\n STAT_CORRECTION_EVENT_TYPE,\n] as const;\nexport type StatStoreEventType = (typeof STAT_STORE_EVENT_TYPE_KEYS)[number];\n\nexport const STAT_EVENT_RECORDER_FIELD_KEYS = [\n 'sequence',\n 'acceptedAt',\n 'recordedByUserId',\n 'recordedByAuthority',\n 'recordedByTeamId',\n] as const;\nexport type StatEventRecorderField = (typeof STAT_EVENT_RECORDER_FIELD_KEYS)[number];\n\nexport const STAT_EVENT_SNAPSHOT_FIELD_KEYS = [\n 'displayNameSnapshot',\n 'assistedByDisplayNameSnapshot',\n] as const;\nexport type StatEventSnapshotField = (typeof STAT_EVENT_SNAPSHOT_FIELD_KEYS)[number];\n\nexport const STAT_CORRECTION_SOURCE_KEYS = ['admin', 'migration'] as const;\nexport type StatCorrectionSource = (typeof STAT_CORRECTION_SOURCE_KEYS)[number];\n\nexport const STAT_EVENT_AUTHORITY_KEYS = [...SYSTEM_ROLE_KEYS, ...CAPTAIN_TEAM_ROLES] as const;\nexport type StatEventAuthority = (typeof STAT_EVENT_AUTHORITY_KEYS)[number];\n\nexport const PLAYER_STAT_LINE_KIND_KEYS = [\n 'gamePlayer',\n 'membershipRow',\n 'lifetime',\n 'hallOfFame',\n] as const;\nexport const TEAM_STAT_LINE_KIND_KEYS = ['gameTeam', 'teamSeason'] as const;\nexport const STAT_LINE_KIND_KEYS = [\n ...PLAYER_STAT_LINE_KIND_KEYS,\n ...TEAM_STAT_LINE_KIND_KEYS,\n] as const;\nexport type StatLineKind = (typeof STAT_LINE_KIND_KEYS)[number];\nexport type PlayerStatLineKind = (typeof PLAYER_STAT_LINE_KIND_KEYS)[number];\n\nexport const STATS_JOB_KIND_KEYS = ['rebuild', 'check'] as const;\nexport type StatsJobKind = (typeof STATS_JOB_KIND_KEYS)[number];\n\nexport const STATS_JOB_STATE_KEYS = ['in-progress', 'complete', 'failed'] as const;\nexport type StatsJobState = (typeof STATS_JOB_STATE_KEYS)[number];\n\nexport const STATS_JOB_STAGE_KEYS = ['games', 'leagues', 'people', 'hallOfFame'] as const;\nexport type StatsJobStage = (typeof STATS_JOB_STAGE_KEYS)[number];\n\nexport const STATS_JOB_STAGES = {\n rebuild: ['leagues', 'people', 'hallOfFame'],\n check: ['games', 'leagues', 'people', 'hallOfFame'],\n} as const satisfies Record<StatsJobKind, readonly StatsJobStage[]>;\n\nexport const STAT_EVENT_REFUSAL_KEYS = [\n 'eventTypeNotInSport',\n 'teamNotInGame',\n 'playerNotRostered',\n 'assisterNotRostered',\n 'assistNotAllowed',\n 'playerNotAllowed',\n 'roundNotNext',\n 'roundsComplete',\n 'bulkValueInvalid',\n 'eventIdConflict',\n 'voidTargetNotSportEvent',\n 'correctionNotAccepted',\n] as const;\nexport type StatEventRefusalCode = (typeof STAT_EVENT_REFUSAL_KEYS)[number];\n\nexport const FINALIZATION_NOT_READY_KEYS = ['roundsIncomplete'] as const;\nexport type FinalizationNotReadyReason = (typeof FINALIZATION_NOT_READY_KEYS)[number];\n\nexport const SCORING_PANEL_KIND_KEYS = ['playerEvents', 'teamPoints', 'rounds'] as const;\nexport type ScoringPanelKind = (typeof SCORING_PANEL_KIND_KEYS)[number];\n\nexport const BULK_ENTRY_KIND_KEYS = ['playerLines', 'teamScores', 'rounds'] as const;\nexport type BulkEntryKind = (typeof BULK_ENTRY_KIND_KEYS)[number];\n\nexport const RECORDED_STAT_EVENT_OUTCOME_KEYS = [\n 'recorded',\n 'alreadyRecorded',\n 'unchanged',\n] as const;\nexport type RecordedStatEventOutcome = (typeof RECORDED_STAT_EVENT_OUTCOME_KEYS)[number];\n\nexport const GAME_FINALIZE_OUTCOME_KEYS = ['finalized', 'alreadyFinalized'] as const;\nexport type GameFinalizeOutcome = (typeof GAME_FINALIZE_OUTCOME_KEYS)[number];\n\nexport const GAME_REOPEN_OUTCOME_KEYS = ['reopened', 'alreadyOpen'] as const;\nexport type GameReopenOutcome = (typeof GAME_REOPEN_OUTCOME_KEYS)[number];\n\nexport const GAME_STATS_REPAIR_OUTCOME_KEYS = ['reconciled', 'unchanged'] as const;\nexport type GameStatsRepairOutcome = (typeof GAME_STATS_REPAIR_OUTCOME_KEYS)[number];\n\nexport const GHOST_LINK_MEMBERSHIP_OUTCOME_KEYS = [\n 'handedOver',\n 'created',\n 'merged',\n 'kept',\n] as const;\nexport type GhostLinkMembershipOutcome = (typeof GHOST_LINK_MEMBERSHIP_OUTCOME_KEYS)[number];\n\nexport const UNROSTERED_STAT_LINE_RESOLUTION_OUTCOME_KEYS = [\n 'resolved',\n 'alreadyResolved',\n] as const;\nexport type UnrosteredStatLineResolutionOutcome =\n (typeof UNROSTERED_STAT_LINE_RESOLUTION_OUTCOME_KEYS)[number];\n\nexport const GHOST_REMOVAL_REFUSAL_KEYS = ['ghostHasPlayed', 'captainNotRemovable'] as const;\nexport type GhostRemovalRefusal = (typeof GHOST_REMOVAL_REFUSAL_KEYS)[number];\n"]}
@@ -56,12 +56,6 @@ export declare const FEATURED_AWARD_SLOT_KEYS: readonly ["primary", "secondary"]
56
56
  export type FeaturedAwardSlot = (typeof FEATURED_AWARD_SLOT_KEYS)[number];
57
57
  export declare const AWARD_GROUP_TYPE_KEYS: readonly ["team", "league"];
58
58
  export type AwardGroupType = (typeof AWARD_GROUP_TYPE_KEYS)[number];
59
- export declare const AWARD_GROUP_GRANT_ACTION_KEYS: readonly ["grant", "revoke"];
60
- export type AwardGroupGrantAction = (typeof AWARD_GROUP_GRANT_ACTION_KEYS)[number];
61
- export declare const AWARD_GROUP_GRANT_STATUS_KEYS: readonly ["pending", "complete"];
62
- export type AwardGroupGrantStatus = (typeof AWARD_GROUP_GRANT_STATUS_KEYS)[number];
63
- export declare const AWARD_GROUP_REVOKE_SKIP_KEYS: readonly ["heldBefore", "heldByAnotherGrant"];
64
- export type AwardGroupRevokeSkip = (typeof AWARD_GROUP_REVOKE_SKIP_KEYS)[number];
65
59
  export declare const PENDING_HARDWARE_LOAN_CONTRACT_STATUS: "pending";
66
60
  export declare const LOANED_HARDWARE_LOAN_CONTRACT_STATUS: "loaned";
67
61
  export declare const RETURNED_HARDWARE_LOAN_CONTRACT_STATUS: "returned";
@@ -1 +1 @@
1
- {"version":3,"file":"unions.d.ts","sourceRoot":"","sources":["../../src/types/unions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unions.d.ts","sourceRoot":"","sources":["../../src/types/unions.ts"],"names":[],"mappings":"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"}
@@ -63,9 +63,6 @@ export const HARDWARE_LOAN_CONTRACT_STATUS_KEYS = ['pending', 'loaned', 'returne
63
63
  export const AWARD_GRANT_SKIP_REASON_KEYS = ['noProfile', 'ghost'];
64
64
  export const FEATURED_AWARD_SLOT_KEYS = ['primary', 'secondary'];
65
65
  export const AWARD_GROUP_TYPE_KEYS = ['team', 'league'];
66
- export const AWARD_GROUP_GRANT_ACTION_KEYS = ['grant', 'revoke'];
67
- export const AWARD_GROUP_GRANT_STATUS_KEYS = ['pending', 'complete'];
68
- export const AWARD_GROUP_REVOKE_SKIP_KEYS = ['heldBefore', 'heldByAnotherGrant'];
69
66
  export const PENDING_HARDWARE_LOAN_CONTRACT_STATUS = 'pending';
70
67
  export const LOANED_HARDWARE_LOAN_CONTRACT_STATUS = 'loaned';
71
68
  export const RETURNED_HARDWARE_LOAN_CONTRACT_STATUS = 'returned';
@@ -1 +1 @@
1
- {"version":3,"file":"unions.js","sourceRoot":"","sources":["../../src/types/unions.ts"],"names":[],"mappings":"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","sourcesContent":["export const SYSTEM_ROLE_KEYS = ['admin', 'referee'] as const;\nexport type SystemRole = (typeof SYSTEM_ROLE_KEYS)[number];\n\nexport const USER_STATUS_KEYS = ['active', 'banned'] as const;\nexport type UserStatus = (typeof USER_STATUS_KEYS)[number];\nexport const ACTIVE_USER_STATUS = 'active' satisfies UserStatus;\nexport const BANNED_USER_STATUS = 'banned' satisfies UserStatus;\n\nexport const STATUS_RECONCILE_QUEUE_AUTH_EFFECTS = ['accountStatus', 'roleClaims'] as const;\nexport type StatusReconcileQueueAuthEffect = (typeof STATUS_RECONCILE_QUEUE_AUTH_EFFECTS)[number];\nexport const ACCOUNT_STATUS_AUTH_EFFECT =\n 'accountStatus' as const satisfies StatusReconcileQueueAuthEffect;\nexport const ROLE_CLAIMS_EFFECT = 'roleClaims' as const satisfies StatusReconcileQueueAuthEffect;\n\nexport const TEAM_ROLE_KEYS = ['captain', 'coCaptain', 'player'] as const;\nexport type TeamRole = (typeof TEAM_ROLE_KEYS)[number];\n\n// The roles that carry captain authority. `firestore.rules` restates this list, because a rules file\n// cannot import it.\nexport const CAPTAIN_TEAM_ROLES = ['captain', 'coCaptain'] as const satisfies readonly TeamRole[];\n\nexport const TEAM_CAPTAIN_ROLE = 'captain' as const satisfies TeamRole;\n\nexport const TEAM_CO_CAPTAIN_ROLE = 'coCaptain' as const satisfies TeamRole;\nexport const TEAM_PLAYER_ROLE = 'player' as const satisfies TeamRole;\n\nexport const MEMBER_ASSIGNABLE_TEAM_ROLES = [\n TEAM_CO_CAPTAIN_ROLE,\n TEAM_PLAYER_ROLE,\n] as const satisfies readonly TeamRole[];\nexport type MemberAssignableTeamRole = (typeof MEMBER_ASSIGNABLE_TEAM_ROLES)[number];\n\n// `TEAM_ROLE_KEYS` runs from the highest role down.\nexport function higherTeamRole(left: TeamRole, right: TeamRole): TeamRole {\n return TEAM_ROLE_KEYS.indexOf(left) <= TEAM_ROLE_KEYS.indexOf(right) ? left : right;\n}\n\nexport const TEAM_MEMBERSHIP_STATUS_KEYS = ['active'] as const;\nexport type TeamMembershipStatus = (typeof TEAM_MEMBERSHIP_STATUS_KEYS)[number];\n\nexport const ACTIVE_TEAM_MEMBERSHIP_STATUS = 'active' as const satisfies TeamMembershipStatus;\n\nexport const TEAM_JOIN_METHOD_KEYS = [\n 'teamCreation',\n 'invite',\n 'joinRequest',\n 'freeAgent',\n 'ghostAdd',\n] as const;\nexport type TeamJoinMethod = (typeof TEAM_JOIN_METHOD_KEYS)[number];\n\nexport const LEAGUE_STATUS_KEYS = ['pending', 'upcoming', 'active', 'closed'] as const;\nexport type LeagueStatus = (typeof LEAGUE_STATUS_KEYS)[number];\n\nexport const LEAGUE_STATUS_ON_CREATE = 'pending' as const satisfies LeagueStatus;\n\nexport const CLOSED_LEAGUE_STATUS = 'closed' as const satisfies LeagueStatus;\n\nexport const UPCOMING_LEAGUE_STATUS = 'upcoming' as const satisfies LeagueStatus;\nexport const ACTIVE_LEAGUE_STATUS = 'active' as const satisfies LeagueStatus;\n\nexport const LEAGUE_STATUS_TRANSITIONS: Readonly<Record<LeagueStatus, readonly LeagueStatus[]>> = {\n pending: ['upcoming', 'closed'],\n upcoming: ['active', 'closed'],\n active: ['closed'],\n closed: [],\n};\n\nexport const OPEN_LEAGUE_STATUS_KEYS: readonly Exclude<\n LeagueStatus,\n typeof CLOSED_LEAGUE_STATUS\n>[] = LEAGUE_STATUS_KEYS.filter(\n (status): status is Exclude<LeagueStatus, typeof CLOSED_LEAGUE_STATUS> =>\n status !== CLOSED_LEAGUE_STATUS,\n);\n\nexport const CURRENT_LEAGUE_STATUS_KEYS = [\n UPCOMING_LEAGUE_STATUS,\n ACTIVE_LEAGUE_STATUS,\n] as const satisfies readonly LeagueStatus[];\n\nexport const LEAGUE_MODE_KEYS = ['Regular', 'Competitive/Recreational'] as const;\nexport type LeagueMode = (typeof LEAGUE_MODE_KEYS)[number];\n\nexport const TEAM_TYPE_KEYS = ['Competitive', 'Recreational'] as const;\nexport type TeamType = (typeof TEAM_TYPE_KEYS)[number];\n\nexport const TEAM_TYPED_LEAGUE_MODE = 'Competitive/Recreational' as const satisfies LeagueMode;\n\nexport const TEAM_TYPE_ON_MODE_SWITCH = 'Recreational' as const satisfies TeamType;\n\nexport const GAME_STATUS_KEYS = ['scheduled', 'inprogress', 'completed'] as const;\nexport type GameStatus = (typeof GAME_STATUS_KEYS)[number];\n\nexport const COMPLETED_GAME_STATUS = 'completed' as const satisfies GameStatus;\n\nexport const GAME_STATUS_ON_CREATE = 'scheduled' as const satisfies GameStatus;\n\nexport const GAME_STATUS_ON_REOPEN = 'inprogress' as const satisfies GameStatus;\n\n// Only a pending invitation or join request exists: answering, withdrawing, or the person joining\n// the team deletes it.\nexport const TEAM_INVITATION_STATUS_KEYS = ['pending'] as const;\nexport type TeamInvitationStatus = (typeof TEAM_INVITATION_STATUS_KEYS)[number];\n\nexport const PENDING_TEAM_INVITATION_STATUS = 'pending' as const satisfies TeamInvitationStatus;\n\nexport const TEAM_JOIN_REQUEST_STATUS_KEYS = ['pending'] as const;\nexport type TeamJoinRequestStatus = (typeof TEAM_JOIN_REQUEST_STATUS_KEYS)[number];\n\nexport const PENDING_TEAM_JOIN_REQUEST_STATUS = 'pending' as const satisfies TeamJoinRequestStatus;\n\nexport const HARDWARE_LOAN_CONTRACT_STATUS_KEYS = ['pending', 'loaned', 'returned'] as const;\nexport type HardwareLoanContractStatus = (typeof HARDWARE_LOAN_CONTRACT_STATUS_KEYS)[number];\nexport const AWARD_GRANT_SKIP_REASON_KEYS = ['noProfile', 'ghost'] as const;\nexport type AwardGrantSkipReason = (typeof AWARD_GRANT_SKIP_REASON_KEYS)[number];\n\nexport const FEATURED_AWARD_SLOT_KEYS = ['primary', 'secondary'] as const;\nexport type FeaturedAwardSlot = (typeof FEATURED_AWARD_SLOT_KEYS)[number];\n\nexport const AWARD_GROUP_TYPE_KEYS = ['team', 'league'] as const;\nexport type AwardGroupType = (typeof AWARD_GROUP_TYPE_KEYS)[number];\n\nexport const AWARD_GROUP_GRANT_ACTION_KEYS = ['grant', 'revoke'] as const;\nexport type AwardGroupGrantAction = (typeof AWARD_GROUP_GRANT_ACTION_KEYS)[number];\n\nexport const AWARD_GROUP_GRANT_STATUS_KEYS = ['pending', 'complete'] as const;\nexport type AwardGroupGrantStatus = (typeof AWARD_GROUP_GRANT_STATUS_KEYS)[number];\n\nexport const AWARD_GROUP_REVOKE_SKIP_KEYS = ['heldBefore', 'heldByAnotherGrant'] as const;\nexport type AwardGroupRevokeSkip = (typeof AWARD_GROUP_REVOKE_SKIP_KEYS)[number];\n\nexport const PENDING_HARDWARE_LOAN_CONTRACT_STATUS =\n 'pending' as const satisfies HardwareLoanContractStatus;\nexport const LOANED_HARDWARE_LOAN_CONTRACT_STATUS =\n 'loaned' as const satisfies HardwareLoanContractStatus;\nexport const RETURNED_HARDWARE_LOAN_CONTRACT_STATUS =\n 'returned' as const satisfies HardwareLoanContractStatus;\n\nexport const WAIVER_TEMPLATE_DELETE_OUTCOME_KEYS = ['deleted', 'retired'] as const;\nexport type WaiverTemplateDeleteOutcome = (typeof WAIVER_TEMPLATE_DELETE_OUTCOME_KEYS)[number];\n\nexport const STATS_BEACON_ACTION_KEYS = [\n 'finalize',\n 'reopen',\n 'recalculate',\n 'correct',\n 'historical-update',\n 'link',\n] as const;\nexport type StatsBeaconAction = (typeof STATS_BEACON_ACTION_KEYS)[number];\n\nexport const GAME_SCOPED_STATS_BEACON_ACTION_KEYS = [\n 'finalize',\n 'reopen',\n] as const satisfies readonly StatsBeaconAction[];\nexport type GameScopedStatsBeaconAction = (typeof GAME_SCOPED_STATS_BEACON_ACTION_KEYS)[number];\n\n// Listed explicitly, so a status added later is closed until it is named here, never open by default.\nexport const OPEN_GAME_STATUS_KEYS = [\n 'scheduled',\n 'inprogress',\n] as const satisfies readonly GameStatus[];\nexport type OpenGameStatus = (typeof OPEN_GAME_STATUS_KEYS)[number];\n\nexport function isOpenGameStatus(status: GameStatus): status is OpenGameStatus {\n return (OPEN_GAME_STATUS_KEYS as readonly GameStatus[]).includes(status);\n}\n\nexport const WAIVER_WITNESS_AUTHORITY_KEYS = ['captain', 'coCaptain', 'admin', 'referee'] as const;\nexport type WaiverWitnessAuthority = (typeof WAIVER_WITNESS_AUTHORITY_KEYS)[number];\n\nexport const WAIVER_SIGNING_REFUSAL_KEYS = ['waiverChanged'] as const;\nexport type WaiverSigningRefusal = (typeof WAIVER_SIGNING_REFUSAL_KEYS)[number];\n\nexport const WAIVER_TEMPLATE_EDIT_REFUSAL_KEYS = ['templateVersionChanged'] as const;\nexport type WaiverTemplateEditRefusal = (typeof WAIVER_TEMPLATE_EDIT_REFUSAL_KEYS)[number];\n\nexport const TEAM_ICON_KEYS = [\n 'Shield',\n 'Swords',\n 'Skull',\n 'Ghost',\n 'Cat',\n 'Dog',\n 'Bird',\n 'Fish',\n 'Rabbit',\n 'Snail',\n 'Turtle',\n 'Cherry',\n 'Apple',\n 'Grape',\n 'Rocket',\n 'Plane',\n 'Ship',\n 'Train',\n 'Car',\n 'Bike',\n 'Bolt',\n 'Star',\n 'Sun',\n 'Moon',\n 'Cloud',\n 'Crown',\n 'Diamond',\n 'Gem',\n 'Anchor',\n // Appended — the set only grows, and no stored key is ever renamed or removed.\n 'TreePine',\n 'Trees',\n 'TreeDeciduous',\n 'TreePalm',\n 'Snowflake',\n 'MountainSnow',\n 'Gift',\n 'PartyPopper',\n 'CandyCane',\n 'Candy',\n 'Lollipop',\n 'Cake',\n 'Egg',\n 'Clover',\n 'Heart',\n 'Flower',\n 'Flower2',\n 'Rose',\n 'Leaf',\n 'Sprout',\n 'Wheat',\n 'Sunrise',\n 'Rainbow',\n 'Bell',\n 'Trophy',\n 'Medal',\n 'Award',\n 'Ribbon',\n 'Flag',\n 'Target',\n 'Crosshair',\n 'Goal',\n 'Dumbbell',\n 'Footprints',\n 'Zap',\n 'Flame',\n 'FlameKindling',\n 'Bomb',\n 'Atom',\n 'Orbit',\n 'Sparkles',\n 'WandSparkles',\n 'Mountain',\n 'Tornado',\n 'Wind',\n 'Droplet',\n 'CloudLightning',\n 'MoonStar',\n 'Sword',\n 'Axe',\n 'Hammer',\n 'Pickaxe',\n 'ShieldHalf',\n 'Castle',\n 'Squirrel',\n 'Rat',\n 'Panda',\n 'Shrimp',\n 'Worm',\n 'Bug',\n 'Shell',\n 'PawPrint',\n 'Feather',\n 'Bone',\n 'Origami',\n 'Citrus',\n 'Banana',\n 'Carrot',\n 'Pizza',\n 'Cookie',\n 'Donut',\n 'Coffee',\n 'Dices',\n 'Puzzle',\n 'Gamepad2',\n 'Spade',\n 'Club',\n 'Music',\n 'Guitar',\n 'Hexagon',\n 'Triangle',\n 'Sailboat',\n 'Tractor',\n 'Truck',\n] as const;\nexport type TeamIcon = (typeof TEAM_ICON_KEYS)[number];\n\nexport const PICTURE_VARIANT_KEYS = ['sm', 'md', 'lg'] as const;\nexport type PictureVariantKey = (typeof PICTURE_VARIANT_KEYS)[number];\n\nexport const GAME_TIER_DISCREPANCY_KIND_KEYS = [\n 'gameUnreadable',\n 'invalidEvent',\n 'eventSequenceMismatch',\n 'eventSequenceGap',\n 'rollupMismatch',\n 'scoreMirrorMismatch',\n 'unrosteredStatLine',\n 'fantasyPointsStale',\n 'finalRecordMissing',\n 'finalRecordMismatch',\n 'participationSnapshotMismatch',\n] as const;\nexport const AGGREGATE_TIER_DISCREPANCY_KIND_KEYS = [\n 'aggregateMismatch',\n 'aggregateEntryStale',\n 'aggregateEntryMissing',\n 'hallOfFameLifetimeMismatch',\n] as const;\nexport const STATS_DISCREPANCY_KIND_KEYS = [\n ...GAME_TIER_DISCREPANCY_KIND_KEYS,\n ...AGGREGATE_TIER_DISCREPANCY_KIND_KEYS,\n] as const;\nexport type StatsDiscrepancyKind = (typeof STATS_DISCREPANCY_KIND_KEYS)[number];\n"]}
1
+ {"version":3,"file":"unions.js","sourceRoot":"","sources":["../../src/types/unions.ts"],"names":[],"mappings":"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","sourcesContent":["export const SYSTEM_ROLE_KEYS = ['admin', 'referee'] as const;\nexport type SystemRole = (typeof SYSTEM_ROLE_KEYS)[number];\n\nexport const USER_STATUS_KEYS = ['active', 'banned'] as const;\nexport type UserStatus = (typeof USER_STATUS_KEYS)[number];\nexport const ACTIVE_USER_STATUS = 'active' satisfies UserStatus;\nexport const BANNED_USER_STATUS = 'banned' satisfies UserStatus;\n\nexport const STATUS_RECONCILE_QUEUE_AUTH_EFFECTS = ['accountStatus', 'roleClaims'] as const;\nexport type StatusReconcileQueueAuthEffect = (typeof STATUS_RECONCILE_QUEUE_AUTH_EFFECTS)[number];\nexport const ACCOUNT_STATUS_AUTH_EFFECT =\n 'accountStatus' as const satisfies StatusReconcileQueueAuthEffect;\nexport const ROLE_CLAIMS_EFFECT = 'roleClaims' as const satisfies StatusReconcileQueueAuthEffect;\n\nexport const TEAM_ROLE_KEYS = ['captain', 'coCaptain', 'player'] as const;\nexport type TeamRole = (typeof TEAM_ROLE_KEYS)[number];\n\n// The roles that carry captain authority. `firestore.rules` restates this list, because a rules file\n// cannot import it.\nexport const CAPTAIN_TEAM_ROLES = ['captain', 'coCaptain'] as const satisfies readonly TeamRole[];\n\nexport const TEAM_CAPTAIN_ROLE = 'captain' as const satisfies TeamRole;\n\nexport const TEAM_CO_CAPTAIN_ROLE = 'coCaptain' as const satisfies TeamRole;\nexport const TEAM_PLAYER_ROLE = 'player' as const satisfies TeamRole;\n\nexport const MEMBER_ASSIGNABLE_TEAM_ROLES = [\n TEAM_CO_CAPTAIN_ROLE,\n TEAM_PLAYER_ROLE,\n] as const satisfies readonly TeamRole[];\nexport type MemberAssignableTeamRole = (typeof MEMBER_ASSIGNABLE_TEAM_ROLES)[number];\n\n// `TEAM_ROLE_KEYS` runs from the highest role down.\nexport function higherTeamRole(left: TeamRole, right: TeamRole): TeamRole {\n return TEAM_ROLE_KEYS.indexOf(left) <= TEAM_ROLE_KEYS.indexOf(right) ? left : right;\n}\n\nexport const TEAM_MEMBERSHIP_STATUS_KEYS = ['active'] as const;\nexport type TeamMembershipStatus = (typeof TEAM_MEMBERSHIP_STATUS_KEYS)[number];\n\nexport const ACTIVE_TEAM_MEMBERSHIP_STATUS = 'active' as const satisfies TeamMembershipStatus;\n\nexport const TEAM_JOIN_METHOD_KEYS = [\n 'teamCreation',\n 'invite',\n 'joinRequest',\n 'freeAgent',\n 'ghostAdd',\n] as const;\nexport type TeamJoinMethod = (typeof TEAM_JOIN_METHOD_KEYS)[number];\n\nexport const LEAGUE_STATUS_KEYS = ['pending', 'upcoming', 'active', 'closed'] as const;\nexport type LeagueStatus = (typeof LEAGUE_STATUS_KEYS)[number];\n\nexport const LEAGUE_STATUS_ON_CREATE = 'pending' as const satisfies LeagueStatus;\n\nexport const CLOSED_LEAGUE_STATUS = 'closed' as const satisfies LeagueStatus;\n\nexport const UPCOMING_LEAGUE_STATUS = 'upcoming' as const satisfies LeagueStatus;\nexport const ACTIVE_LEAGUE_STATUS = 'active' as const satisfies LeagueStatus;\n\nexport const LEAGUE_STATUS_TRANSITIONS: Readonly<Record<LeagueStatus, readonly LeagueStatus[]>> = {\n pending: ['upcoming', 'closed'],\n upcoming: ['active', 'closed'],\n active: ['closed'],\n closed: [],\n};\n\nexport const OPEN_LEAGUE_STATUS_KEYS: readonly Exclude<\n LeagueStatus,\n typeof CLOSED_LEAGUE_STATUS\n>[] = LEAGUE_STATUS_KEYS.filter(\n (status): status is Exclude<LeagueStatus, typeof CLOSED_LEAGUE_STATUS> =>\n status !== CLOSED_LEAGUE_STATUS,\n);\n\nexport const CURRENT_LEAGUE_STATUS_KEYS = [\n UPCOMING_LEAGUE_STATUS,\n ACTIVE_LEAGUE_STATUS,\n] as const satisfies readonly LeagueStatus[];\n\nexport const LEAGUE_MODE_KEYS = ['Regular', 'Competitive/Recreational'] as const;\nexport type LeagueMode = (typeof LEAGUE_MODE_KEYS)[number];\n\nexport const TEAM_TYPE_KEYS = ['Competitive', 'Recreational'] as const;\nexport type TeamType = (typeof TEAM_TYPE_KEYS)[number];\n\nexport const TEAM_TYPED_LEAGUE_MODE = 'Competitive/Recreational' as const satisfies LeagueMode;\n\nexport const TEAM_TYPE_ON_MODE_SWITCH = 'Recreational' as const satisfies TeamType;\n\nexport const GAME_STATUS_KEYS = ['scheduled', 'inprogress', 'completed'] as const;\nexport type GameStatus = (typeof GAME_STATUS_KEYS)[number];\n\nexport const COMPLETED_GAME_STATUS = 'completed' as const satisfies GameStatus;\n\nexport const GAME_STATUS_ON_CREATE = 'scheduled' as const satisfies GameStatus;\n\nexport const GAME_STATUS_ON_REOPEN = 'inprogress' as const satisfies GameStatus;\n\n// Only a pending invitation or join request exists: answering, withdrawing, or the person joining\n// the team deletes it.\nexport const TEAM_INVITATION_STATUS_KEYS = ['pending'] as const;\nexport type TeamInvitationStatus = (typeof TEAM_INVITATION_STATUS_KEYS)[number];\n\nexport const PENDING_TEAM_INVITATION_STATUS = 'pending' as const satisfies TeamInvitationStatus;\n\nexport const TEAM_JOIN_REQUEST_STATUS_KEYS = ['pending'] as const;\nexport type TeamJoinRequestStatus = (typeof TEAM_JOIN_REQUEST_STATUS_KEYS)[number];\n\nexport const PENDING_TEAM_JOIN_REQUEST_STATUS = 'pending' as const satisfies TeamJoinRequestStatus;\n\nexport const HARDWARE_LOAN_CONTRACT_STATUS_KEYS = ['pending', 'loaned', 'returned'] as const;\nexport type HardwareLoanContractStatus = (typeof HARDWARE_LOAN_CONTRACT_STATUS_KEYS)[number];\nexport const AWARD_GRANT_SKIP_REASON_KEYS = ['noProfile', 'ghost'] as const;\nexport type AwardGrantSkipReason = (typeof AWARD_GRANT_SKIP_REASON_KEYS)[number];\n\nexport const FEATURED_AWARD_SLOT_KEYS = ['primary', 'secondary'] as const;\nexport type FeaturedAwardSlot = (typeof FEATURED_AWARD_SLOT_KEYS)[number];\n\nexport const AWARD_GROUP_TYPE_KEYS = ['team', 'league'] as const;\nexport type AwardGroupType = (typeof AWARD_GROUP_TYPE_KEYS)[number];\n\nexport const PENDING_HARDWARE_LOAN_CONTRACT_STATUS =\n 'pending' as const satisfies HardwareLoanContractStatus;\nexport const LOANED_HARDWARE_LOAN_CONTRACT_STATUS =\n 'loaned' as const satisfies HardwareLoanContractStatus;\nexport const RETURNED_HARDWARE_LOAN_CONTRACT_STATUS =\n 'returned' as const satisfies HardwareLoanContractStatus;\n\nexport const WAIVER_TEMPLATE_DELETE_OUTCOME_KEYS = ['deleted', 'retired'] as const;\nexport type WaiverTemplateDeleteOutcome = (typeof WAIVER_TEMPLATE_DELETE_OUTCOME_KEYS)[number];\n\nexport const STATS_BEACON_ACTION_KEYS = [\n 'finalize',\n 'reopen',\n 'recalculate',\n 'correct',\n 'historical-update',\n 'link',\n] as const;\nexport type StatsBeaconAction = (typeof STATS_BEACON_ACTION_KEYS)[number];\n\nexport const GAME_SCOPED_STATS_BEACON_ACTION_KEYS = [\n 'finalize',\n 'reopen',\n] as const satisfies readonly StatsBeaconAction[];\nexport type GameScopedStatsBeaconAction = (typeof GAME_SCOPED_STATS_BEACON_ACTION_KEYS)[number];\n\n// Listed explicitly, so a status added later is closed until it is named here, never open by default.\nexport const OPEN_GAME_STATUS_KEYS = [\n 'scheduled',\n 'inprogress',\n] as const satisfies readonly GameStatus[];\nexport type OpenGameStatus = (typeof OPEN_GAME_STATUS_KEYS)[number];\n\nexport function isOpenGameStatus(status: GameStatus): status is OpenGameStatus {\n return (OPEN_GAME_STATUS_KEYS as readonly GameStatus[]).includes(status);\n}\n\nexport const WAIVER_WITNESS_AUTHORITY_KEYS = ['captain', 'coCaptain', 'admin', 'referee'] as const;\nexport type WaiverWitnessAuthority = (typeof WAIVER_WITNESS_AUTHORITY_KEYS)[number];\n\nexport const WAIVER_SIGNING_REFUSAL_KEYS = ['waiverChanged'] as const;\nexport type WaiverSigningRefusal = (typeof WAIVER_SIGNING_REFUSAL_KEYS)[number];\n\nexport const WAIVER_TEMPLATE_EDIT_REFUSAL_KEYS = ['templateVersionChanged'] as const;\nexport type WaiverTemplateEditRefusal = (typeof WAIVER_TEMPLATE_EDIT_REFUSAL_KEYS)[number];\n\nexport const TEAM_ICON_KEYS = [\n 'Shield',\n 'Swords',\n 'Skull',\n 'Ghost',\n 'Cat',\n 'Dog',\n 'Bird',\n 'Fish',\n 'Rabbit',\n 'Snail',\n 'Turtle',\n 'Cherry',\n 'Apple',\n 'Grape',\n 'Rocket',\n 'Plane',\n 'Ship',\n 'Train',\n 'Car',\n 'Bike',\n 'Bolt',\n 'Star',\n 'Sun',\n 'Moon',\n 'Cloud',\n 'Crown',\n 'Diamond',\n 'Gem',\n 'Anchor',\n // Appended — the set only grows, and no stored key is ever renamed or removed.\n 'TreePine',\n 'Trees',\n 'TreeDeciduous',\n 'TreePalm',\n 'Snowflake',\n 'MountainSnow',\n 'Gift',\n 'PartyPopper',\n 'CandyCane',\n 'Candy',\n 'Lollipop',\n 'Cake',\n 'Egg',\n 'Clover',\n 'Heart',\n 'Flower',\n 'Flower2',\n 'Rose',\n 'Leaf',\n 'Sprout',\n 'Wheat',\n 'Sunrise',\n 'Rainbow',\n 'Bell',\n 'Trophy',\n 'Medal',\n 'Award',\n 'Ribbon',\n 'Flag',\n 'Target',\n 'Crosshair',\n 'Goal',\n 'Dumbbell',\n 'Footprints',\n 'Zap',\n 'Flame',\n 'FlameKindling',\n 'Bomb',\n 'Atom',\n 'Orbit',\n 'Sparkles',\n 'WandSparkles',\n 'Mountain',\n 'Tornado',\n 'Wind',\n 'Droplet',\n 'CloudLightning',\n 'MoonStar',\n 'Sword',\n 'Axe',\n 'Hammer',\n 'Pickaxe',\n 'ShieldHalf',\n 'Castle',\n 'Squirrel',\n 'Rat',\n 'Panda',\n 'Shrimp',\n 'Worm',\n 'Bug',\n 'Shell',\n 'PawPrint',\n 'Feather',\n 'Bone',\n 'Origami',\n 'Citrus',\n 'Banana',\n 'Carrot',\n 'Pizza',\n 'Cookie',\n 'Donut',\n 'Coffee',\n 'Dices',\n 'Puzzle',\n 'Gamepad2',\n 'Spade',\n 'Club',\n 'Music',\n 'Guitar',\n 'Hexagon',\n 'Triangle',\n 'Sailboat',\n 'Tractor',\n 'Truck',\n] as const;\nexport type TeamIcon = (typeof TEAM_ICON_KEYS)[number];\n\nexport const PICTURE_VARIANT_KEYS = ['sm', 'md', 'lg'] as const;\nexport type PictureVariantKey = (typeof PICTURE_VARIANT_KEYS)[number];\n\nexport const GAME_TIER_DISCREPANCY_KIND_KEYS = [\n 'gameUnreadable',\n 'invalidEvent',\n 'eventSequenceMismatch',\n 'eventSequenceGap',\n 'rollupMismatch',\n 'scoreMirrorMismatch',\n 'unrosteredStatLine',\n 'fantasyPointsStale',\n 'finalRecordMissing',\n 'finalRecordMismatch',\n 'participationSnapshotMismatch',\n] as const;\nexport const AGGREGATE_TIER_DISCREPANCY_KIND_KEYS = [\n 'aggregateMismatch',\n 'aggregateEntryStale',\n 'aggregateEntryMissing',\n 'hallOfFameLifetimeMismatch',\n] as const;\nexport const STATS_DISCREPANCY_KIND_KEYS = [\n ...GAME_TIER_DISCREPANCY_KIND_KEYS,\n ...AGGREGATE_TIER_DISCREPANCY_KIND_KEYS,\n] as const;\nexport type StatsDiscrepancyKind = (typeof STATS_DISCREPANCY_KIND_KEYS)[number];\n"]}
@@ -8,6 +8,5 @@ export * from './schedules.js';
8
8
  export * from './team-member-actions.js';
9
9
  export * from './league-mode.js';
10
10
  export * from './league-joining.js';
11
- export * from './stats-operation-request.js';
12
11
  export * from './text-field.js';
13
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC"}