@ttt-productions/q-core 0.1.1 → 0.1.2

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 (132) hide show
  1. package/dist/constants/business.d.ts +12 -0
  2. package/dist/constants/business.d.ts.map +1 -1
  3. package/dist/constants/business.js +24 -0
  4. package/dist/constants/business.js.map +1 -1
  5. package/dist/constants/media.d.ts +1 -0
  6. package/dist/constants/media.d.ts.map +1 -1
  7. package/dist/constants/media.js +5 -0
  8. package/dist/constants/media.js.map +1 -1
  9. package/dist/doc-schemas/admin-notifications.d.ts +1 -0
  10. package/dist/doc-schemas/admin-notifications.d.ts.map +1 -1
  11. package/dist/doc-schemas/admin-notifications.js +4 -0
  12. package/dist/doc-schemas/admin-notifications.js.map +1 -1
  13. package/dist/doc-schemas/atoms.d.ts +2 -0
  14. package/dist/doc-schemas/atoms.d.ts.map +1 -1
  15. package/dist/doc-schemas/audit-event.d.ts +2 -0
  16. package/dist/doc-schemas/audit-event.d.ts.map +1 -1
  17. package/dist/doc-schemas/gallery.d.ts +1 -0
  18. package/dist/doc-schemas/gallery.d.ts.map +1 -1
  19. package/dist/doc-schemas/gallery.js +3 -0
  20. package/dist/doc-schemas/gallery.js.map +1 -1
  21. package/dist/doc-schemas/migration-console.d.ts +2 -0
  22. package/dist/doc-schemas/migration-console.d.ts.map +1 -1
  23. package/dist/doc-schemas/migration-console.js +5 -0
  24. package/dist/doc-schemas/migration-console.js.map +1 -1
  25. package/dist/doc-schemas/pending-media.d.ts +1 -0
  26. package/dist/doc-schemas/pending-media.d.ts.map +1 -1
  27. package/dist/doc-schemas/pending-media.js +8 -0
  28. package/dist/doc-schemas/pending-media.js.map +1 -1
  29. package/dist/doc-schemas/registry.d.ts +12 -0
  30. package/dist/doc-schemas/registry.d.ts.map +1 -1
  31. package/dist/doc-schemas/stats-operation.d.ts.map +1 -1
  32. package/dist/doc-schemas/stats-operation.js +6 -11
  33. package/dist/doc-schemas/stats-operation.js.map +1 -1
  34. package/dist/doc-schemas/system.d.ts +7 -0
  35. package/dist/doc-schemas/system.d.ts.map +1 -1
  36. package/dist/doc-schemas/system.js +4 -1
  37. package/dist/doc-schemas/system.js.map +1 -1
  38. package/dist/doc-schemas/user-profile.d.ts +1 -0
  39. package/dist/doc-schemas/user-profile.d.ts.map +1 -1
  40. package/dist/doc-schemas/user-profile.js +5 -0
  41. package/dist/doc-schemas/user-profile.js.map +1 -1
  42. package/dist/doc-schemas/waiver-template.d.ts +1 -0
  43. package/dist/doc-schemas/waiver-template.d.ts.map +1 -1
  44. package/dist/doc-schemas/waiver-template.js +10 -1
  45. package/dist/doc-schemas/waiver-template.js.map +1 -1
  46. package/dist/doc-schemas/waivers-and-hardware.d.ts +1 -0
  47. package/dist/doc-schemas/waivers-and-hardware.d.ts.map +1 -1
  48. package/dist/doc-schemas/waivers-and-hardware.js +17 -9
  49. package/dist/doc-schemas/waivers-and-hardware.js.map +1 -1
  50. package/dist/ids/minted-ids.d.ts +1 -0
  51. package/dist/ids/minted-ids.d.ts.map +1 -1
  52. package/dist/ids/minted-ids.js +6 -0
  53. package/dist/ids/minted-ids.js.map +1 -1
  54. package/dist/input-formats/index.d.ts +2 -2
  55. package/dist/input-formats/index.d.ts.map +1 -1
  56. package/dist/input-formats/index.js +2 -2
  57. package/dist/input-formats/index.js.map +1 -1
  58. package/dist/notifications/archive-all.d.ts +2 -0
  59. package/dist/notifications/archive-all.d.ts.map +1 -0
  60. package/dist/notifications/archive-all.js +6 -0
  61. package/dist/notifications/archive-all.js.map +1 -0
  62. package/dist/notifications/index.d.ts +1 -0
  63. package/dist/notifications/index.d.ts.map +1 -1
  64. package/dist/notifications/index.js +1 -0
  65. package/dist/notifications/index.js.map +1 -1
  66. package/dist/schemas/admin-notifications.d.ts +1 -0
  67. package/dist/schemas/admin-notifications.d.ts.map +1 -1
  68. package/dist/schemas/admin-notifications.js +4 -2
  69. package/dist/schemas/admin-notifications.js.map +1 -1
  70. package/dist/schemas/app-config.d.ts +2 -2
  71. package/dist/schemas/app-config.d.ts.map +1 -1
  72. package/dist/schemas/app-config.js +9 -5
  73. package/dist/schemas/app-config.js.map +1 -1
  74. package/dist/schemas/awards.d.ts +16 -4
  75. package/dist/schemas/awards.d.ts.map +1 -1
  76. package/dist/schemas/awards.js +10 -6
  77. package/dist/schemas/awards.js.map +1 -1
  78. package/dist/schemas/game-locations.d.ts +4 -4
  79. package/dist/schemas/game-locations.d.ts.map +1 -1
  80. package/dist/schemas/game-locations.js +11 -3
  81. package/dist/schemas/game-locations.js.map +1 -1
  82. package/dist/schemas/migration-console.d.ts +1 -0
  83. package/dist/schemas/migration-console.d.ts.map +1 -1
  84. package/dist/schemas/pictures.d.ts +3 -0
  85. package/dist/schemas/pictures.d.ts.map +1 -1
  86. package/dist/schemas/stats.d.ts +2 -0
  87. package/dist/schemas/stats.d.ts.map +1 -1
  88. package/dist/schemas/teams.d.ts +3 -2
  89. package/dist/schemas/teams.d.ts.map +1 -1
  90. package/dist/schemas/teams.js +19 -9
  91. package/dist/schemas/teams.js.map +1 -1
  92. package/dist/schemas/users.d.ts +7 -3
  93. package/dist/schemas/users.d.ts.map +1 -1
  94. package/dist/schemas/users.js +10 -3
  95. package/dist/schemas/users.js.map +1 -1
  96. package/dist/schemas/waiver-templates.d.ts +1 -0
  97. package/dist/schemas/waiver-templates.d.ts.map +1 -1
  98. package/dist/schemas/waiver-templates.js +4 -1
  99. package/dist/schemas/waiver-templates.js.map +1 -1
  100. package/dist/sports/index.d.ts +1 -0
  101. package/dist/sports/index.d.ts.map +1 -1
  102. package/dist/sports/index.js +1 -0
  103. package/dist/sports/index.js.map +1 -1
  104. package/dist/sports/ledger-continuity.d.ts +13 -0
  105. package/dist/sports/ledger-continuity.d.ts.map +1 -0
  106. package/dist/sports/ledger-continuity.js +19 -0
  107. package/dist/sports/ledger-continuity.js.map +1 -0
  108. package/dist/types/audit.d.ts +1 -1
  109. package/dist/types/audit.d.ts.map +1 -1
  110. package/dist/types/audit.js +5 -2
  111. package/dist/types/audit.js.map +1 -1
  112. package/dist/types/unions.d.ts +4 -2
  113. package/dist/types/unions.d.ts.map +1 -1
  114. package/dist/types/unions.js +6 -0
  115. package/dist/types/unions.js.map +1 -1
  116. package/dist/upload-variables/index.d.ts +3 -0
  117. package/dist/upload-variables/index.d.ts.map +1 -0
  118. package/dist/upload-variables/index.js +3 -0
  119. package/dist/upload-variables/index.js.map +1 -0
  120. package/dist/upload-variables/on-progress.d.ts +4 -0
  121. package/dist/upload-variables/on-progress.d.ts.map +1 -0
  122. package/dist/upload-variables/on-progress.js +10 -0
  123. package/dist/upload-variables/on-progress.js.map +1 -0
  124. package/dist/upload-variables/picture-upload-variables.d.ts +32 -0
  125. package/dist/upload-variables/picture-upload-variables.d.ts.map +1 -0
  126. package/dist/upload-variables/picture-upload-variables.js +21 -0
  127. package/dist/upload-variables/picture-upload-variables.js.map +1 -0
  128. package/dist/utils/app-config.d.ts +17 -3
  129. package/dist/utils/app-config.d.ts.map +1 -1
  130. package/dist/utils/app-config.js +21 -14
  131. package/dist/utils/app-config.js.map +1 -1
  132. package/package.json +6 -2
@@ -1 +1 @@
1
- {"version":3,"file":"minted-ids.js","sourceRoot":"","sources":["../../src/ids/minted-ids.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,mGAAmG;AACnG,gDAAgD;AAEhD,oGAAoG;AACpG,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAE7C,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,MAAc;IAC5D,OAAO,GAAG,oBAAoB,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC;AACrD,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,MAAc;IAC5D,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED,+FAA+F;AAC/F,qGAAqG;AACrG,yDAAyD;AACzD,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,MAAc;IAC/D,OAAO,QAAQ,KAAK,IAAI,MAAM,EAAE,CAAC;AACnC,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;AAEjC,gGAAgG;AAChG,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AAEpC,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,MAAM,KAAK,WAAW,CAAC;AAChC,CAAC","sourcesContent":["// Minted identifiers and identity sentinels.\n//\n// Builders take the clock reading and the random suffix as arguments so they stay pure: the caller\n// supplies `Date.now()` and its own randomness.\n\n// A placeholder player carries a `ghost_`-prefixed id and has a publicUsers document (BACKEND-120).\nexport const GHOST_USER_ID_PREFIX = 'ghost_';\n\nexport function isGhostUserId(userId: string): boolean {\n return userId.startsWith(GHOST_USER_ID_PREFIX);\n}\n\nexport function buildGhostUserId(nowMs: number, suffix: string): string {\n return `${GHOST_USER_ID_PREFIX}${nowMs}_${suffix}`;\n}\n\n// A new game's id, `{timestamp}_{suffix}`. A copied game keeps the id it was stored under.\nexport function buildSportGameId(nowMs: number, suffix: string): string {\n return `${nowMs}_${suffix}`;\n}\n\n// A new week's `weekId`, minted by the server when the week is saved. Some stored weeks hold a\n// date-derived `week-{YYYY-MM-DD}` id; a minted id never takes that form, and never derives from the\n// date, so two weeks starting on one day stay two weeks.\nexport function buildScheduleWeekId(nowMs: number, suffix: string): string {\n return `week_${nowMs}_${suffix}`;\n}\n\n// The team slot of a bye week. Never a real leagueTeams id.\nexport const BYE_TEAM_ID = 'bye';\n\n// How the bye slot reads wherever a game or a week names it — a matchup, a schedule, a refusal.\nexport const BYE_TEAM_LABEL = 'Bye';\n\nexport function isByeTeamId(teamId: string): boolean {\n return teamId === BYE_TEAM_ID;\n}\n"]}
1
+ {"version":3,"file":"minted-ids.js","sourceRoot":"","sources":["../../src/ids/minted-ids.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,mGAAmG;AACnG,gDAAgD;AAEhD,oGAAoG;AACpG,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAE7C,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,MAAc;IAC5D,OAAO,GAAG,oBAAoB,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC;AACrD,CAAC;AAED,mGAAmG;AACnG,qGAAqG;AACrG,iGAAiG;AACjG,MAAM,UAAU,0BAA0B,CAAC,SAAiB;IAC1D,OAAO,GAAG,oBAAoB,OAAO,SAAS,EAAE,CAAC;AACnD,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,MAAc;IAC5D,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED,+FAA+F;AAC/F,qGAAqG;AACrG,yDAAyD;AACzD,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,MAAc;IAC/D,OAAO,QAAQ,KAAK,IAAI,MAAM,EAAE,CAAC;AACnC,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;AAEjC,gGAAgG;AAChG,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AAEpC,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,MAAM,KAAK,WAAW,CAAC;AAChC,CAAC","sourcesContent":["// Minted identifiers and identity sentinels.\n//\n// Builders take the clock reading and the random suffix as arguments so they stay pure: the caller\n// supplies `Date.now()` and its own randomness.\n\n// A placeholder player carries a `ghost_`-prefixed id and has a publicUsers document (BACKEND-120).\nexport const GHOST_USER_ID_PREFIX = 'ghost_';\n\nexport function isGhostUserId(userId: string): boolean {\n return userId.startsWith(GHOST_USER_ID_PREFIX);\n}\n\nexport function buildGhostUserId(nowMs: number, suffix: string): string {\n return `${GHOST_USER_ID_PREFIX}${nowMs}_${suffix}`;\n}\n\n// The ghost a ghost-add request creates: derived from the request id the client mints once per add\n// and re-sends on every retry, so a retry names the same ghost instead of creating a second one. Its\n// `req_` part never reads as a clock reading, so it cannot collide with a `buildGhostUserId` id.\nexport function buildGhostUserIdForRequest(requestId: string): string {\n return `${GHOST_USER_ID_PREFIX}req_${requestId}`;\n}\n\n// A new game's id, `{timestamp}_{suffix}`. A copied game keeps the id it was stored under.\nexport function buildSportGameId(nowMs: number, suffix: string): string {\n return `${nowMs}_${suffix}`;\n}\n\n// A new week's `weekId`, minted by the server when the week is saved. Some stored weeks hold a\n// date-derived `week-{YYYY-MM-DD}` id; a minted id never takes that form, and never derives from the\n// date, so two weeks starting on one day stay two weeks.\nexport function buildScheduleWeekId(nowMs: number, suffix: string): string {\n return `week_${nowMs}_${suffix}`;\n}\n\n// The team slot of a bye week. Never a real leagueTeams id.\nexport const BYE_TEAM_ID = 'bye';\n\n// How the bye slot reads wherever a game or a week names it — a matchup, a schedule, a refusal.\nexport const BYE_TEAM_LABEL = 'Bye';\n\nexport function isByeTeamId(teamId: string): boolean {\n return teamId === BYE_TEAM_ID;\n}\n"]}
@@ -170,10 +170,10 @@ export declare const WAIVER_TEMPLATE_TEXT_INPUT_FORMAT: import("@ttt-productions
170
170
  readonly max: 20000;
171
171
  readonly keepAsTyped: true;
172
172
  }>;
173
- /** The landing page's hero title: trimmed, one line, required. */
173
+ /** The landing page's hero title: trimmed, one line; blank shows the default heading. */
174
174
  export declare const LANDING_HERO_TITLE_INPUT_FORMAT: import("@ttt-productions/input-format-core").DeclaredInputFormat<{
175
175
  readonly format: "singleLine";
176
- readonly min: 1;
176
+ readonly min: 0;
177
177
  readonly max: 200;
178
178
  }>;
179
179
  /** The landing page's about text: trimmed, line breaks allowed, empty allowed. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/input-formats/index.ts"],"names":[],"mappings":"AAwCA;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;;EAIrC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,+BAA+B;;;;EAI1C,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,sCAAsC;;;;EAIjD,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,oCAAoC;;;;EAI/C,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;EAIjC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;;;;EAIpC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;EAIjC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;;EAIrC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,mCAAmC;;;;EAI9C,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;EAIlC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;EAIpC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,+BAA+B;;;;EAI1C,CAAC;AAEH,yGAAyG;AACzG,eAAO,MAAM,+BAA+B;;;;EAI1C,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,yCAAyC;;;;EAIpD,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,uCAAuC;;;;EAIlD,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,+BAA+B;;;;EAI1C,CAAC;AAEH,kGAAkG;AAClG,eAAO,MAAM,gCAAgC;;;;EAI3C,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,kCAAkC;;;;;EAK7C,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,iCAAiC;;;;;EAK5C,CAAC;AAEH,kEAAkE;AAClE,eAAO,MAAM,+BAA+B;;;;EAI1C,CAAC;AAEH,kFAAkF;AAClF,eAAO,MAAM,+BAA+B;;;;EAI1C,CAAC;AAEH,2EAA2E;AAC3E,eAAO,MAAM,gCAAgC;;;;EAI3C,CAAC;AAEH,qDAAqD;AACrD,eAAO,MAAM,iCAAiC;;;;EAI5C,CAAC;AAEH,gFAAgF;AAChF,eAAO,MAAM,wBAAwB;;;;EAInC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/input-formats/index.ts"],"names":[],"mappings":"AAwCA;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;;EAIrC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,+BAA+B;;;;EAI1C,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,sCAAsC;;;;EAIjD,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,oCAAoC;;;;EAI/C,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;EAIjC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;;;;EAIpC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;EAIjC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;;EAIrC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,mCAAmC;;;;EAI9C,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;EAIlC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;EAIpC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,+BAA+B;;;;EAI1C,CAAC;AAEH,yGAAyG;AACzG,eAAO,MAAM,+BAA+B;;;;EAI1C,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,yCAAyC;;;;EAIpD,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,uCAAuC;;;;EAIlD,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,+BAA+B;;;;EAI1C,CAAC;AAEH,kGAAkG;AAClG,eAAO,MAAM,gCAAgC;;;;EAI3C,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,kCAAkC;;;;;EAK7C,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,iCAAiC;;;;;EAK5C,CAAC;AAEH,yFAAyF;AACzF,eAAO,MAAM,+BAA+B;;;;EAI1C,CAAC;AAEH,kFAAkF;AAClF,eAAO,MAAM,+BAA+B;;;;EAI1C,CAAC;AAEH,2EAA2E;AAC3E,eAAO,MAAM,gCAAgC;;;;EAI3C,CAAC;AAEH,qDAAqD;AACrD,eAAO,MAAM,iCAAiC;;;;EAI5C,CAAC;AAEH,gFAAgF;AAChF,eAAO,MAAM,wBAAwB;;;;EAInC,CAAC"}
@@ -178,10 +178,10 @@ export const WAIVER_TEMPLATE_TEXT_INPUT_FORMAT = defineInputFormat({
178
178
  max: MAX_WAIVER_TEMPLATE_TEXT_LENGTH,
179
179
  keepAsTyped: true,
180
180
  });
181
- /** The landing page's hero title: trimmed, one line, required. */
181
+ /** The landing page's hero title: trimmed, one line; blank shows the default heading. */
182
182
  export const LANDING_HERO_TITLE_INPUT_FORMAT = defineInputFormat({
183
183
  format: 'singleLine',
184
- min: 1,
184
+ min: 0,
185
185
  max: MAX_LANDING_HERO_TITLE_LENGTH,
186
186
  });
187
187
  /** The landing page's about text: trimmed, line breaks allowed, empty allowed. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/input-formats/index.ts"],"names":[],"mappings":"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","sourcesContent":["// The declared formats of the free-text fields a form takes, each built from the limits the field\n// enforces (ARCH-102). ui-core's text inputs and `ConsequenceDialog`'s reason field take only a\n// declaration, never a bare bound, and a field's wire schema is built from the same declaration\n// through `textFieldSchema`, so the form and the wire run the one check and accept exactly the same\n// text. `input-format-core` is server-safe and has no dependencies, so the declarations sit in the\n// package root, which both app roots import.\n\nimport { defineInputFormat } from '@ttt-productions/input-format-core';\nimport {\n MAX_ANNOUNCEMENT_MESSAGE_LENGTH,\n MAX_APP_VERSION_LENGTH,\n MAX_AWARD_NAME_LENGTH,\n MAX_CONTACT_PHONE_LENGTH,\n MAX_DISPLAY_NAME_LENGTH,\n MAX_GAME_LOCATION_MEMO_LENGTH,\n MAX_GAME_LOCATION_NAME_LENGTH,\n MAX_GAME_LOCATION_STREET_ADDRESS_LENGTH,\n MAX_GAME_LOCATION_SUB_LOCATION_LENGTH,\n MAX_GAME_MEMO_LENGTH,\n MAX_LANDING_ABOUT_TEXT_LENGTH,\n MAX_LANDING_HERO_TITLE_LENGTH,\n MAX_LEAGUE_DESCRIPTION_LENGTH,\n MAX_LEAGUE_TITLE_LENGTH,\n MAX_MAINTENANCE_MESSAGE_LENGTH,\n MAX_REPAIR_REASON_LENGTH,\n MAX_SCHEDULE_WEEK_TITLE_LENGTH,\n MAX_TEAM_INVITATION_MESSAGE_LENGTH,\n MAX_TEAM_JOIN_REQUEST_MESSAGE_LENGTH,\n MAX_TEAM_NAME_LENGTH,\n MAX_WAIVER_TEMPLATE_TEXT_LENGTH,\n MAX_WAIVER_TEMPLATE_TITLE_LENGTH,\n MIN_AWARD_NAME_LENGTH,\n MIN_DISPLAY_NAME_LENGTH,\n MIN_LEAGUE_DESCRIPTION_LENGTH,\n MIN_LEAGUE_TITLE_LENGTH,\n MIN_REPAIR_REASON_LENGTH,\n MIN_TEAM_JOIN_REQUEST_MESSAGE_LENGTH,\n MIN_TEAM_NAME_LENGTH,\n} from '../constants/business.js';\n\n/**\n * The reason an admin gives for a repair action, as `repairReasonSchema` reads it: trimmed, then\n * bounded by the repair-reason limits, with any character and line breaks allowed.\n */\nexport const REPAIR_REASON_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: MIN_REPAIR_REASON_LENGTH,\n max: MAX_REPAIR_REASON_LENGTH,\n});\n\n/**\n * The evidence an operator records for a cutover step the console cannot see done — an export's\n * operation name, a revocation's console record: trimmed, then bounded by the repair-reason limits,\n * line breaks allowed.\n */\nexport const MIGRATION_EVIDENCE_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: MIN_REPAIR_REASON_LENGTH,\n max: MAX_REPAIR_REASON_LENGTH,\n});\n\n/**\n * A player's message to the team they ask to join, as `teamJoinRequestMessageSchema` reads it:\n * trimmed, then bounded by the join-request message limits, with any character and line breaks\n * allowed.\n */\nexport const TEAM_JOIN_REQUEST_MESSAGE_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: MIN_TEAM_JOIN_REQUEST_MESSAGE_LENGTH,\n max: MAX_TEAM_JOIN_REQUEST_MESSAGE_LENGTH,\n});\n\n/**\n * The optional note a team sends with an invitation, as `teamInvitationMessageSchema` reads it:\n * trimmed, empty allowed, then bounded by the invitation note limit, line breaks allowed.\n */\nexport const TEAM_INVITATION_MESSAGE_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: 0,\n max: MAX_TEAM_INVITATION_MESSAGE_LENGTH,\n});\n\n/**\n * A scorer's note on one person in a live game (\"red shirt\", \"#9\"), as `gameMemoSchema` reads it:\n * trimmed, one line, empty allowed — an empty memo clears the note — then bounded by the memo cap.\n */\nexport const GAME_MEMO_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 0,\n max: MAX_GAME_MEMO_LENGTH,\n});\n\n/**\n * A person's display name — an account's, or a ghost player's, as both ghost doors and the admin's\n * ghost captain ask for it — as `displayNameSchema` reads it: trimmed, one line, then bounded by the\n * display-name limits.\n */\nexport const DISPLAY_NAME_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: MIN_DISPLAY_NAME_LENGTH,\n max: MAX_DISPLAY_NAME_LENGTH,\n});\n\n/**\n * A team's name, as `teamNameSchema` reads it at creation and at an admin's rename: trimmed, one\n * line, then bounded by the team-name limits.\n */\nexport const TEAM_NAME_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: MIN_TEAM_NAME_LENGTH,\n max: MAX_TEAM_NAME_LENGTH,\n});\n\n/**\n * The number the league reaches a team on, as `contactPhoneSchema` reads it: trimmed, one line,\n * required, and bounded by the contact-phone cap. It is kept as typed — no format is imposed.\n */\nexport const CONTACT_PHONE_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 1,\n max: MAX_CONTACT_PHONE_LENGTH,\n});\n\n/**\n * The account's optional default contact phone on the settings page: the contact-phone format with\n * empty allowed. Empty means remove the saved number — the form sends it as\n * `UpdateAccountSettingsInput.defaultContactPhone: null` — and any other value is held to\n * `CONTACT_PHONE_INPUT_FORMAT`'s trim, one line, and cap.\n */\nexport const OPTIONAL_CONTACT_PHONE_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 0,\n max: MAX_CONTACT_PHONE_LENGTH,\n});\n\n/**\n * An award's name in the catalog, as `awardNameSchema` reads it — at creation, sent with the award's\n * first badge: trimmed, one line, then bounded by the award-name limits.\n */\nexport const AWARD_NAME_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: MIN_AWARD_NAME_LENGTH,\n max: MAX_AWARD_NAME_LENGTH,\n});\n\n/**\n * A league's title, as `leagueTitleSchema` reads it at creation and at the settings edit: trimmed,\n * one line, then bounded by the league-title limits.\n */\nexport const LEAGUE_TITLE_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: MIN_LEAGUE_TITLE_LENGTH,\n max: MAX_LEAGUE_TITLE_LENGTH,\n});\n\n/**\n * A league's description, as `leagueDescriptionSchema` reads it at creation and at the settings\n * edit: trimmed, then bounded by the league-description limits, line breaks allowed.\n */\nexport const LEAGUE_DESCRIPTION_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: MIN_LEAGUE_DESCRIPTION_LENGTH,\n max: MAX_LEAGUE_DESCRIPTION_LENGTH,\n});\n\n/** A venue's name, as `gameLocationNameSchema` reads it: trimmed, one line, required, within its cap. */\nexport const GAME_LOCATION_NAME_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 1,\n max: MAX_GAME_LOCATION_NAME_LENGTH,\n});\n\n/**\n * A venue's street address, as `gameLocationStreetAddressSchema` reads it: trimmed, one line,\n * required, within its cap.\n */\nexport const GAME_LOCATION_STREET_ADDRESS_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 1,\n max: MAX_GAME_LOCATION_STREET_ADDRESS_LENGTH,\n});\n\n/**\n * One court, sheet, or room of a venue, as `gameLocationSubLocationSchema` reads it: trimmed, one\n * line, required, within its cap.\n */\nexport const GAME_LOCATION_SUB_LOCATION_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 1,\n max: MAX_GAME_LOCATION_SUB_LOCATION_LENGTH,\n});\n\n/**\n * A venue's memo, as `gameLocationMemoSchema` reads it: trimmed, line breaks allowed, empty allowed —\n * an empty memo means the venue has none — within its cap.\n */\nexport const GAME_LOCATION_MEMO_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: 0,\n max: MAX_GAME_LOCATION_MEMO_LENGTH,\n});\n\n/** A schedule week's name, as `scheduleWeekTitleSchema` reads it: trimmed, one line, required. */\nexport const SCHEDULE_WEEK_TITLE_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 1,\n max: MAX_SCHEDULE_WEEK_TITLE_LENGTH,\n});\n\n/**\n * A waiver template's title, as `waiverTemplateTitleSchema` reads it. A waiver is a legal artifact a\n * player signs, so its words are kept exactly as typed; it still cannot be blank.\n */\nexport const WAIVER_TEMPLATE_TITLE_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 1,\n max: MAX_WAIVER_TEMPLATE_TITLE_LENGTH,\n keepAsTyped: true,\n});\n\n/**\n * A waiver template's wording, as `waiverTemplateTextSchema` reads it: the legal text a player signs,\n * kept exactly as typed, line breaks allowed, never blank.\n */\nexport const WAIVER_TEMPLATE_TEXT_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: 1,\n max: MAX_WAIVER_TEMPLATE_TEXT_LENGTH,\n keepAsTyped: true,\n});\n\n/** The landing page's hero title: trimmed, one line, required. */\nexport const LANDING_HERO_TITLE_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 1,\n max: MAX_LANDING_HERO_TITLE_LENGTH,\n});\n\n/** The landing page's about text: trimmed, line breaks allowed, empty allowed. */\nexport const LANDING_ABOUT_TEXT_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: 0,\n max: MAX_LANDING_ABOUT_TEXT_LENGTH,\n});\n\n/** The message shown while the app is in maintenance; empty shows none. */\nexport const MAINTENANCE_MESSAGE_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: 0,\n max: MAX_MAINTENANCE_MESSAGE_LENGTH,\n});\n\n/** The site announcement banner; empty clears it. */\nexport const ANNOUNCEMENT_MESSAGE_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: 0,\n max: MAX_ANNOUNCEMENT_MESSAGE_LENGTH,\n});\n\n/** The published app version the version gate compares against; never blank. */\nexport const APP_VERSION_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: 1,\n max: MAX_APP_VERSION_LENGTH,\n});\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/input-formats/index.ts"],"names":[],"mappings":"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","sourcesContent":["// The declared formats of the free-text fields a form takes, each built from the limits the field\n// enforces (ARCH-102). ui-core's text inputs and `ConsequenceDialog`'s reason field take only a\n// declaration, never a bare bound, and a field's wire schema is built from the same declaration\n// through `textFieldSchema`, so the form and the wire run the one check and accept exactly the same\n// text. `input-format-core` is server-safe and has no dependencies, so the declarations sit in the\n// package root, which both app roots import.\n\nimport { defineInputFormat } from '@ttt-productions/input-format-core';\nimport {\n MAX_ANNOUNCEMENT_MESSAGE_LENGTH,\n MAX_APP_VERSION_LENGTH,\n MAX_AWARD_NAME_LENGTH,\n MAX_CONTACT_PHONE_LENGTH,\n MAX_DISPLAY_NAME_LENGTH,\n MAX_GAME_LOCATION_MEMO_LENGTH,\n MAX_GAME_LOCATION_NAME_LENGTH,\n MAX_GAME_LOCATION_STREET_ADDRESS_LENGTH,\n MAX_GAME_LOCATION_SUB_LOCATION_LENGTH,\n MAX_GAME_MEMO_LENGTH,\n MAX_LANDING_ABOUT_TEXT_LENGTH,\n MAX_LANDING_HERO_TITLE_LENGTH,\n MAX_LEAGUE_DESCRIPTION_LENGTH,\n MAX_LEAGUE_TITLE_LENGTH,\n MAX_MAINTENANCE_MESSAGE_LENGTH,\n MAX_REPAIR_REASON_LENGTH,\n MAX_SCHEDULE_WEEK_TITLE_LENGTH,\n MAX_TEAM_INVITATION_MESSAGE_LENGTH,\n MAX_TEAM_JOIN_REQUEST_MESSAGE_LENGTH,\n MAX_TEAM_NAME_LENGTH,\n MAX_WAIVER_TEMPLATE_TEXT_LENGTH,\n MAX_WAIVER_TEMPLATE_TITLE_LENGTH,\n MIN_AWARD_NAME_LENGTH,\n MIN_DISPLAY_NAME_LENGTH,\n MIN_LEAGUE_DESCRIPTION_LENGTH,\n MIN_LEAGUE_TITLE_LENGTH,\n MIN_REPAIR_REASON_LENGTH,\n MIN_TEAM_JOIN_REQUEST_MESSAGE_LENGTH,\n MIN_TEAM_NAME_LENGTH,\n} from '../constants/business.js';\n\n/**\n * The reason an admin gives for a repair action, as `repairReasonSchema` reads it: trimmed, then\n * bounded by the repair-reason limits, with any character and line breaks allowed.\n */\nexport const REPAIR_REASON_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: MIN_REPAIR_REASON_LENGTH,\n max: MAX_REPAIR_REASON_LENGTH,\n});\n\n/**\n * The evidence an operator records for a cutover step the console cannot see done — an export's\n * operation name, a revocation's console record: trimmed, then bounded by the repair-reason limits,\n * line breaks allowed.\n */\nexport const MIGRATION_EVIDENCE_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: MIN_REPAIR_REASON_LENGTH,\n max: MAX_REPAIR_REASON_LENGTH,\n});\n\n/**\n * A player's message to the team they ask to join, as `teamJoinRequestMessageSchema` reads it:\n * trimmed, then bounded by the join-request message limits, with any character and line breaks\n * allowed.\n */\nexport const TEAM_JOIN_REQUEST_MESSAGE_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: MIN_TEAM_JOIN_REQUEST_MESSAGE_LENGTH,\n max: MAX_TEAM_JOIN_REQUEST_MESSAGE_LENGTH,\n});\n\n/**\n * The optional note a team sends with an invitation, as `teamInvitationMessageSchema` reads it:\n * trimmed, empty allowed, then bounded by the invitation note limit, line breaks allowed.\n */\nexport const TEAM_INVITATION_MESSAGE_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: 0,\n max: MAX_TEAM_INVITATION_MESSAGE_LENGTH,\n});\n\n/**\n * A scorer's note on one person in a live game (\"red shirt\", \"#9\"), as `gameMemoSchema` reads it:\n * trimmed, one line, empty allowed — an empty memo clears the note — then bounded by the memo cap.\n */\nexport const GAME_MEMO_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 0,\n max: MAX_GAME_MEMO_LENGTH,\n});\n\n/**\n * A person's display name — an account's, or a ghost player's, as both ghost doors and the admin's\n * ghost captain ask for it — as `displayNameSchema` reads it: trimmed, one line, then bounded by the\n * display-name limits.\n */\nexport const DISPLAY_NAME_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: MIN_DISPLAY_NAME_LENGTH,\n max: MAX_DISPLAY_NAME_LENGTH,\n});\n\n/**\n * A team's name, as `teamNameSchema` reads it at creation and at an admin's rename: trimmed, one\n * line, then bounded by the team-name limits.\n */\nexport const TEAM_NAME_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: MIN_TEAM_NAME_LENGTH,\n max: MAX_TEAM_NAME_LENGTH,\n});\n\n/**\n * The number the league reaches a team on, as `contactPhoneSchema` reads it: trimmed, one line,\n * required, and bounded by the contact-phone cap. It is kept as typed — no format is imposed.\n */\nexport const CONTACT_PHONE_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 1,\n max: MAX_CONTACT_PHONE_LENGTH,\n});\n\n/**\n * The account's optional default contact phone on the settings page: the contact-phone format with\n * empty allowed. Empty means remove the saved number — the form sends it as\n * `UpdateAccountSettingsInput.defaultContactPhone: null` — and any other value is held to\n * `CONTACT_PHONE_INPUT_FORMAT`'s trim, one line, and cap.\n */\nexport const OPTIONAL_CONTACT_PHONE_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 0,\n max: MAX_CONTACT_PHONE_LENGTH,\n});\n\n/**\n * An award's name in the catalog, as `awardNameSchema` reads it — at creation, sent with the award's\n * first badge: trimmed, one line, then bounded by the award-name limits.\n */\nexport const AWARD_NAME_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: MIN_AWARD_NAME_LENGTH,\n max: MAX_AWARD_NAME_LENGTH,\n});\n\n/**\n * A league's title, as `leagueTitleSchema` reads it at creation and at the settings edit: trimmed,\n * one line, then bounded by the league-title limits.\n */\nexport const LEAGUE_TITLE_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: MIN_LEAGUE_TITLE_LENGTH,\n max: MAX_LEAGUE_TITLE_LENGTH,\n});\n\n/**\n * A league's description, as `leagueDescriptionSchema` reads it at creation and at the settings\n * edit: trimmed, then bounded by the league-description limits, line breaks allowed.\n */\nexport const LEAGUE_DESCRIPTION_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: MIN_LEAGUE_DESCRIPTION_LENGTH,\n max: MAX_LEAGUE_DESCRIPTION_LENGTH,\n});\n\n/** A venue's name, as `gameLocationNameSchema` reads it: trimmed, one line, required, within its cap. */\nexport const GAME_LOCATION_NAME_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 1,\n max: MAX_GAME_LOCATION_NAME_LENGTH,\n});\n\n/**\n * A venue's street address, as `gameLocationStreetAddressSchema` reads it: trimmed, one line,\n * required, within its cap.\n */\nexport const GAME_LOCATION_STREET_ADDRESS_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 1,\n max: MAX_GAME_LOCATION_STREET_ADDRESS_LENGTH,\n});\n\n/**\n * One court, sheet, or room of a venue, as `gameLocationSubLocationSchema` reads it: trimmed, one\n * line, required, within its cap.\n */\nexport const GAME_LOCATION_SUB_LOCATION_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 1,\n max: MAX_GAME_LOCATION_SUB_LOCATION_LENGTH,\n});\n\n/**\n * A venue's memo, as `gameLocationMemoSchema` reads it: trimmed, line breaks allowed, empty allowed —\n * an empty memo means the venue has none — within its cap.\n */\nexport const GAME_LOCATION_MEMO_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: 0,\n max: MAX_GAME_LOCATION_MEMO_LENGTH,\n});\n\n/** A schedule week's name, as `scheduleWeekTitleSchema` reads it: trimmed, one line, required. */\nexport const SCHEDULE_WEEK_TITLE_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 1,\n max: MAX_SCHEDULE_WEEK_TITLE_LENGTH,\n});\n\n/**\n * A waiver template's title, as `waiverTemplateTitleSchema` reads it. A waiver is a legal artifact a\n * player signs, so its words are kept exactly as typed; it still cannot be blank.\n */\nexport const WAIVER_TEMPLATE_TITLE_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 1,\n max: MAX_WAIVER_TEMPLATE_TITLE_LENGTH,\n keepAsTyped: true,\n});\n\n/**\n * A waiver template's wording, as `waiverTemplateTextSchema` reads it: the legal text a player signs,\n * kept exactly as typed, line breaks allowed, never blank.\n */\nexport const WAIVER_TEMPLATE_TEXT_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: 1,\n max: MAX_WAIVER_TEMPLATE_TEXT_LENGTH,\n keepAsTyped: true,\n});\n\n/** The landing page's hero title: trimmed, one line; blank shows the default heading. */\nexport const LANDING_HERO_TITLE_INPUT_FORMAT = defineInputFormat({\n format: 'singleLine',\n min: 0,\n max: MAX_LANDING_HERO_TITLE_LENGTH,\n});\n\n/** The landing page's about text: trimmed, line breaks allowed, empty allowed. */\nexport const LANDING_ABOUT_TEXT_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: 0,\n max: MAX_LANDING_ABOUT_TEXT_LENGTH,\n});\n\n/** The message shown while the app is in maintenance; empty shows none. */\nexport const MAINTENANCE_MESSAGE_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: 0,\n max: MAX_MAINTENANCE_MESSAGE_LENGTH,\n});\n\n/** The site announcement banner; empty clears it. */\nexport const ANNOUNCEMENT_MESSAGE_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: 0,\n max: MAX_ANNOUNCEMENT_MESSAGE_LENGTH,\n});\n\n/** The published app version the version gate compares against; never blank. */\nexport const APP_VERSION_INPUT_FORMAT = defineInputFormat({\n format: 'none',\n min: 1,\n max: MAX_APP_VERSION_LENGTH,\n});\n"]}
@@ -0,0 +1,2 @@
1
+ export declare function archiveAllPartialOutcomeMessage(archived: number, notArchived: number): string;
2
+ //# sourceMappingURL=archive-all.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-all.d.ts","sourceRoot":"","sources":["../../src/notifications/archive-all.ts"],"names":[],"mappings":"AAEA,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAE7F"}
@@ -0,0 +1,6 @@
1
+ // How a finished Archive all reads when some cards could not be archived: each failed on its own and
2
+ // stays in the list for a one-at-a-time archive.
3
+ export function archiveAllPartialOutcomeMessage(archived, notArchived) {
4
+ return `Archived ${archived}. ${notArchived} couldn't be archived and ${notArchived === 1 ? 'is' : 'are'} still in the list.`;
5
+ }
6
+ //# sourceMappingURL=archive-all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-all.js","sourceRoot":"","sources":["../../src/notifications/archive-all.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,iDAAiD;AACjD,MAAM,UAAU,+BAA+B,CAAC,QAAgB,EAAE,WAAmB;IACnF,OAAO,YAAY,QAAQ,KAAK,WAAW,6BAA6B,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,qBAAqB,CAAC;AAChI,CAAC","sourcesContent":["// How a finished Archive all reads when some cards could not be archived: each failed on its own and\n// stays in the list for a one-at-a-time archive.\nexport function archiveAllPartialOutcomeMessage(archived: number, notArchived: number): string {\n return `Archived ${archived}. ${notArchived} couldn't be archived and ${notArchived === 1 ? 'is' : 'are'} still in the list.`;\n}\n"]}
@@ -1,3 +1,4 @@
1
1
  export * from './admin-notification-config.js';
2
+ export * from './archive-all.js';
2
3
  export * from './occurrences.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './admin-notification-config.js';
2
+ export * from './archive-all.js';
2
3
  export * from './occurrences.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC","sourcesContent":["export * from './admin-notification-config.js';\nexport * from './occurrences.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC","sourcesContent":["export * from './admin-notification-config.js';\nexport * from './archive-all.js';\nexport * from './occurrences.js';\n"]}
@@ -34,6 +34,7 @@ export declare const AdminGetNotificationArchiveAllStatusResultSchema: z.ZodObje
34
34
  }>;
35
35
  category: z.ZodLiteral<"admin">;
36
36
  archived: z.ZodNumber;
37
+ notArchived: z.ZodOptional<z.ZodNumber>;
37
38
  error: z.ZodOptional<z.ZodString>;
38
39
  }, z.core.$strict>;
39
40
  export type AdminGetNotificationArchiveAllStatusResult = z.infer<typeof AdminGetNotificationArchiveAllStatusResultSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"admin-notifications.d.ts","sourceRoot":"","sources":["../../src/schemas/admin-notifications.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,yBAAyB,aAAqE,CAAC;AAK5G,eAAO,MAAM,wBAAwB,aAA6B,CAAC;AAInE,eAAO,MAAM,2BAA2B,WAAW,CAAC;AAEpD,eAAO,MAAM,iCAAiC,aAEgD,CAAC;AAE/F,eAAO,MAAM,mCAAmC;;;;kBAMrC,CAAC;AACZ,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAGhG,eAAO,MAAM,oCAAoC;;kBAA+C,CAAC;AACjG,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAElG,eAAO,MAAM,uCAAuC;;kBAAgE,CAAC;AACrH,MAAM,MAAM,iCAAiC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uCAAuC,CAAC,CAAC;AACxG,eAAO,MAAM,wCAAwC;;kBAE1C,CAAC;AACZ,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wCAAwC,CAAC,CAAC;AAE1G,eAAO,MAAM,+CAA+C;;kBAEjD,CAAC;AACZ,MAAM,MAAM,yCAAyC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+CAA+C,CAAC,CAAC;AAGxH,eAAO,MAAM,gDAAgD;;;;;;;;;;kBAOlD,CAAC;AACZ,MAAM,MAAM,0CAA0C,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gDAAgD,CAAC,CAAC"}
1
+ {"version":3,"file":"admin-notifications.d.ts","sourceRoot":"","sources":["../../src/schemas/admin-notifications.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,yBAAyB,aAAqE,CAAC;AAK5G,eAAO,MAAM,wBAAwB,aAA6B,CAAC;AAInE,eAAO,MAAM,2BAA2B,WAAW,CAAC;AAEpD,eAAO,MAAM,iCAAiC,aAEgD,CAAC;AAE/F,eAAO,MAAM,mCAAmC;;;;kBAMrC,CAAC;AACZ,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAGhG,eAAO,MAAM,oCAAoC;;kBAA+C,CAAC;AACjG,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAElG,eAAO,MAAM,uCAAuC;;kBAAgE,CAAC;AACrH,MAAM,MAAM,iCAAiC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uCAAuC,CAAC,CAAC;AACxG,eAAO,MAAM,wCAAwC;;kBAE1C,CAAC;AACZ,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wCAAwC,CAAC,CAAC;AAE1G,eAAO,MAAM,+CAA+C;;kBAEjD,CAAC;AACZ,MAAM,MAAM,yCAAyC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+CAA+C,CAAC,CAAC;AAIxH,eAAO,MAAM,gDAAgD;;;;;;;;;;;kBAQlD,CAAC;AACZ,MAAM,MAAM,0CAA0C,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gDAAgD,CAAC,CAAC"}
@@ -37,13 +37,15 @@ export const AdminArchiveAllNotificationsResultSchema = z
37
37
  export const AdminGetNotificationArchiveAllStatusInputSchema = z
38
38
  .object({ jobId: notificationArchiveAllJobIdSchema })
39
39
  .strict();
40
- // notification-core's archive-all snapshot: the job's state, the category it drains, and how many
41
- // cards it has archived. A job that ran out of attempts with cards left reads as `incomplete`.
40
+ // notification-core's archive-all snapshot: the job's state, the category it drains, how many
41
+ // cards it has archived, and — on a completed job that left cards behind — how many it could not.
42
+ // A job that ran out of attempts with cards left reads as `incomplete`.
42
43
  export const AdminGetNotificationArchiveAllStatusResultSchema = z
43
44
  .object({
44
45
  state: z.enum(NOTIFICATION_ARCHIVE_ALL_JOB_STATE_KEYS),
45
46
  category: z.literal(ADMIN_NOTIFICATION_CATEGORY),
46
47
  archived: countSchema,
48
+ notArchived: countSchema.optional(),
47
49
  error: z.string().optional(),
48
50
  })
49
51
  .strict();
@@ -1 +1 @@
1
- {"version":3,"file":"admin-notifications.js","sourceRoot":"","sources":["../../src/schemas/admin-notifications.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,qGAAqG;AACrG,oGAAoG;AACpG,0FAA0F;AAC1F,iBAAiB;AAEjB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,uCAAuC,EAAE,MAAM,2BAA2B,CAAC;AACjH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,iGAAiG;AACjG,gGAAgG;AAChG,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,wBAAwB,CAAC,CAAC;AAE5G,kGAAkG;AAClG,iGAAiG;AACjG,mBAAmB;AACnB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEnE,oGAAoG;AACpG,iEAAiE;AACjE,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAEpD,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC;KAC/C,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,gCAAgC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,4BAA4B,CAAC,CAAC;AAE/F,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC;KACjD,MAAM,CAAC;IACN,SAAS,EAAE,2BAA2B;IACtC,cAAc,EAAE,yBAAyB;IACzC,0BAA0B,EAAE,wBAAwB;CACrD,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,+FAA+F;AAC/F,mFAAmF;AACnF,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAGjG,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,2BAA2B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAErH,MAAM,CAAC,MAAM,wCAAwC,GAAG,CAAC;KACtD,MAAM,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;KACpD,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,+CAA+C,GAAG,CAAC;KAC7D,MAAM,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;KACpD,MAAM,EAAE,CAAC;AAEZ,kGAAkG;AAClG,+FAA+F;AAC/F,MAAM,CAAC,MAAM,gDAAgD,GAAG,CAAC;KAC9D,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC;IACtD,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC;IAChD,QAAQ,EAAE,WAAW;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC;KACD,MAAM,EAAE,CAAC","sourcesContent":["// Callable contracts for the shared admin notifications: archiving one, archiving all of them,\n// and reading how an archive-all is going. The occurrences the delivery worker gave up on are listed\n// and replayed through the operator's dead letters (./dead-letters.ts). Admin only; a card is never\n// created by a client — the callable that owns each notified action writes its occurrence\n// (BACKEND-306).\n\nimport { z } from 'zod';\nimport { parseNotificationArchiveAllJobId } from '../ids/notification-ids.js';\nimport { ADMIN_NOTIFICATION_CATEGORY, NOTIFICATION_ARCHIVE_ALL_JOB_STATE_KEYS } from '../types/notifications.js';\nimport { countSchema } from './atoms.js';\n\n// A card's document id as notification-core derives it: a hex digest. Bounding it to letters and\n// digits keeps a client-sent id from addressing anything but a document of the card collection.\nexport const adminNotificationIdSchema = z.string().regex(/^[A-Za-z0-9]{1,128}$/, 'Not a notification id.');\n\n// The opaque generation token a card carried when the admin saw it. An action on the card applies\n// only while the card still carries it, so activity that arrived after the admin looked is never\n// archived unseen.\nexport const activityGenerationSchema = z.string().min(1).max(128);\n\n// A fresh UUID per click. An archive's history entry and an archive-all's job are keyed by it, so a\n// retry of the same click lands on what the first attempt wrote.\nexport const notificationRequestIdSchema = z.uuid();\n\nexport const notificationArchiveAllJobIdSchema = z\n .string()\n .refine((id) => parseNotificationArchiveAllJobId(id) !== null, 'Not an archive-all job id.');\n\nexport const AdminArchiveNotificationInputSchema = z\n .object({\n requestId: notificationRequestIdSchema,\n notificationId: adminNotificationIdSchema,\n observedActivityGeneration: activityGenerationSchema,\n })\n .strict();\nexport type AdminArchiveNotificationInput = z.infer<typeof AdminArchiveNotificationInputSchema>;\n// `archived` is false when there was nothing to archive at the generation named: another admin\n// archived the card first, or new activity lit it again, and it stays on the list.\nexport const AdminArchiveNotificationResultSchema = z.object({ archived: z.boolean() }).strict();\nexport type AdminArchiveNotificationResult = z.infer<typeof AdminArchiveNotificationResultSchema>;\n\nexport const AdminArchiveAllNotificationsInputSchema = z.object({ requestId: notificationRequestIdSchema }).strict();\nexport type AdminArchiveAllNotificationsInput = z.infer<typeof AdminArchiveAllNotificationsInputSchema>;\nexport const AdminArchiveAllNotificationsResultSchema = z\n .object({ jobId: notificationArchiveAllJobIdSchema })\n .strict();\nexport type AdminArchiveAllNotificationsResult = z.infer<typeof AdminArchiveAllNotificationsResultSchema>;\n\nexport const AdminGetNotificationArchiveAllStatusInputSchema = z\n .object({ jobId: notificationArchiveAllJobIdSchema })\n .strict();\nexport type AdminGetNotificationArchiveAllStatusInput = z.infer<typeof AdminGetNotificationArchiveAllStatusInputSchema>;\n// notification-core's archive-all snapshot: the job's state, the category it drains, and how many\n// cards it has archived. A job that ran out of attempts with cards left reads as `incomplete`.\nexport const AdminGetNotificationArchiveAllStatusResultSchema = z\n .object({\n state: z.enum(NOTIFICATION_ARCHIVE_ALL_JOB_STATE_KEYS),\n category: z.literal(ADMIN_NOTIFICATION_CATEGORY),\n archived: countSchema,\n error: z.string().optional(),\n })\n .strict();\nexport type AdminGetNotificationArchiveAllStatusResult = z.infer<typeof AdminGetNotificationArchiveAllStatusResultSchema>;\n"]}
1
+ {"version":3,"file":"admin-notifications.js","sourceRoot":"","sources":["../../src/schemas/admin-notifications.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,qGAAqG;AACrG,oGAAoG;AACpG,0FAA0F;AAC1F,iBAAiB;AAEjB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,uCAAuC,EAAE,MAAM,2BAA2B,CAAC;AACjH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,iGAAiG;AACjG,gGAAgG;AAChG,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,wBAAwB,CAAC,CAAC;AAE5G,kGAAkG;AAClG,iGAAiG;AACjG,mBAAmB;AACnB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEnE,oGAAoG;AACpG,iEAAiE;AACjE,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAEpD,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC;KAC/C,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,gCAAgC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,4BAA4B,CAAC,CAAC;AAE/F,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC;KACjD,MAAM,CAAC;IACN,SAAS,EAAE,2BAA2B;IACtC,cAAc,EAAE,yBAAyB;IACzC,0BAA0B,EAAE,wBAAwB;CACrD,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,+FAA+F;AAC/F,mFAAmF;AACnF,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAGjG,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,2BAA2B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAErH,MAAM,CAAC,MAAM,wCAAwC,GAAG,CAAC;KACtD,MAAM,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;KACpD,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,+CAA+C,GAAG,CAAC;KAC7D,MAAM,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;KACpD,MAAM,EAAE,CAAC;AAEZ,8FAA8F;AAC9F,kGAAkG;AAClG,wEAAwE;AACxE,MAAM,CAAC,MAAM,gDAAgD,GAAG,CAAC;KAC9D,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC;IACtD,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC;IAChD,QAAQ,EAAE,WAAW;IACrB,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC;KACD,MAAM,EAAE,CAAC","sourcesContent":["// Callable contracts for the shared admin notifications: archiving one, archiving all of them,\n// and reading how an archive-all is going. The occurrences the delivery worker gave up on are listed\n// and replayed through the operator's dead letters (./dead-letters.ts). Admin only; a card is never\n// created by a client — the callable that owns each notified action writes its occurrence\n// (BACKEND-306).\n\nimport { z } from 'zod';\nimport { parseNotificationArchiveAllJobId } from '../ids/notification-ids.js';\nimport { ADMIN_NOTIFICATION_CATEGORY, NOTIFICATION_ARCHIVE_ALL_JOB_STATE_KEYS } from '../types/notifications.js';\nimport { countSchema } from './atoms.js';\n\n// A card's document id as notification-core derives it: a hex digest. Bounding it to letters and\n// digits keeps a client-sent id from addressing anything but a document of the card collection.\nexport const adminNotificationIdSchema = z.string().regex(/^[A-Za-z0-9]{1,128}$/, 'Not a notification id.');\n\n// The opaque generation token a card carried when the admin saw it. An action on the card applies\n// only while the card still carries it, so activity that arrived after the admin looked is never\n// archived unseen.\nexport const activityGenerationSchema = z.string().min(1).max(128);\n\n// A fresh UUID per click. An archive's history entry and an archive-all's job are keyed by it, so a\n// retry of the same click lands on what the first attempt wrote.\nexport const notificationRequestIdSchema = z.uuid();\n\nexport const notificationArchiveAllJobIdSchema = z\n .string()\n .refine((id) => parseNotificationArchiveAllJobId(id) !== null, 'Not an archive-all job id.');\n\nexport const AdminArchiveNotificationInputSchema = z\n .object({\n requestId: notificationRequestIdSchema,\n notificationId: adminNotificationIdSchema,\n observedActivityGeneration: activityGenerationSchema,\n })\n .strict();\nexport type AdminArchiveNotificationInput = z.infer<typeof AdminArchiveNotificationInputSchema>;\n// `archived` is false when there was nothing to archive at the generation named: another admin\n// archived the card first, or new activity lit it again, and it stays on the list.\nexport const AdminArchiveNotificationResultSchema = z.object({ archived: z.boolean() }).strict();\nexport type AdminArchiveNotificationResult = z.infer<typeof AdminArchiveNotificationResultSchema>;\n\nexport const AdminArchiveAllNotificationsInputSchema = z.object({ requestId: notificationRequestIdSchema }).strict();\nexport type AdminArchiveAllNotificationsInput = z.infer<typeof AdminArchiveAllNotificationsInputSchema>;\nexport const AdminArchiveAllNotificationsResultSchema = z\n .object({ jobId: notificationArchiveAllJobIdSchema })\n .strict();\nexport type AdminArchiveAllNotificationsResult = z.infer<typeof AdminArchiveAllNotificationsResultSchema>;\n\nexport const AdminGetNotificationArchiveAllStatusInputSchema = z\n .object({ jobId: notificationArchiveAllJobIdSchema })\n .strict();\nexport type AdminGetNotificationArchiveAllStatusInput = z.infer<typeof AdminGetNotificationArchiveAllStatusInputSchema>;\n// notification-core's archive-all snapshot: the job's state, the category it drains, how many\n// cards it has archived, and — on a completed job that left cards behind — how many it could not.\n// A job that ran out of attempts with cards left reads as `incomplete`.\nexport const AdminGetNotificationArchiveAllStatusResultSchema = z\n .object({\n state: z.enum(NOTIFICATION_ARCHIVE_ALL_JOB_STATE_KEYS),\n category: z.literal(ADMIN_NOTIFICATION_CATEGORY),\n archived: countSchema,\n notArchived: countSchema.optional(),\n error: z.string().optional(),\n })\n .strict();\nexport type AdminGetNotificationArchiveAllStatusResult = z.infer<typeof AdminGetNotificationArchiveAllStatusResultSchema>;\n"]}
@@ -18,8 +18,8 @@ export declare const UpdateAppConfigResultSchema: z.ZodObject<{
18
18
  }, z.core.$strict>;
19
19
  export type UpdateAppConfigResult = z.infer<typeof UpdateAppConfigResultSchema>;
20
20
  export declare const AdminUpdateLandingPageInputSchema: z.ZodObject<{
21
- heroTitle: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
22
- aboutCompany: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
21
+ heroTitle: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
22
+ aboutCompany: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
23
23
  }, z.core.$strict>;
24
24
  export type AdminUpdateLandingPageInput = z.infer<typeof AdminUpdateLandingPageInputSchema>;
25
25
  export declare const AdminUpdateLandingPageResultSchema: z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"app-config.d.ts","sourceRoot":"","sources":["../../src/schemas/app-config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,eAAO,MAAM,0BAA0B;;;;;;kBAanC,CAAC;AACL,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,2BAA2B;;;;;;;;kBAE7B,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAIhF,eAAO,MAAM,iCAAiC;;;kBAKnC,CAAC;AACZ,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAG5F,eAAO,MAAM,kCAAkC;;;;kBAMpC,CAAC;AACZ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC"}
1
+ {"version":3,"file":"app-config.d.ts","sourceRoot":"","sources":["../../src/schemas/app-config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,eAAO,MAAM,0BAA0B;;;;;;kBAanC,CAAC;AACL,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,2BAA2B;;;;;;;;kBAE7B,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAKhF,eAAO,MAAM,iCAAiC;;;kBAQ1C,CAAC;AACL,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAG5F,eAAO,MAAM,kCAAkC;;;;kBAMpC,CAAC;AACZ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC"}
@@ -23,14 +23,18 @@ export const UpdateAppConfigInputSchema = z
23
23
  export const UpdateAppConfigResultSchema = z
24
24
  .object({ updatedFields: z.array(AppConfigSchema.keyof()) })
25
25
  .strict();
26
- // An admin edits the landing page copy on `_appConfig/landingPage`. Both fields are sent together,
27
- // as the editor saves them. The landing gallery is not part of this: only the picture core writes it.
26
+ // An admin edits the landing page copy on `_appConfig/landingPage`. The editor sends only the
27
+ // fields the admin changed, so saving one never rewrites the other with what this editor last read.
28
+ // The landing gallery is not part of this: only the picture core writes it.
28
29
  export const AdminUpdateLandingPageInputSchema = z
29
30
  .object({
30
- heroTitle: textFieldSchema(LANDING_HERO_TITLE_INPUT_FORMAT),
31
- aboutCompany: textFieldSchema(LANDING_ABOUT_TEXT_INPUT_FORMAT),
31
+ heroTitle: textFieldSchema(LANDING_HERO_TITLE_INPUT_FORMAT).optional(),
32
+ aboutCompany: textFieldSchema(LANDING_ABOUT_TEXT_INPUT_FORMAT).optional(),
32
33
  })
33
- .strict();
34
+ .strict()
35
+ .refine((input) => Object.values(input).some((value) => value !== undefined), {
36
+ message: 'Change at least one field.',
37
+ });
34
38
  // The copy as committed, so the caller can apply it to its cached landing document.
35
39
  export const AdminUpdateLandingPageResultSchema = z
36
40
  .object({
@@ -1 +1 @@
1
- {"version":3,"file":"app-config.js","sourceRoot":"","sources":["../../src/schemas/app-config.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,iGAAiG;AACjG,qBAAqB;AAErB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACL,iCAAiC,EACjC,wBAAwB,EACxB,+BAA+B,EAC/B,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,6FAA6F;AAC7F,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC;IACN,+FAA+F;IAC/F,UAAU,EAAE,eAAe,CAAC,wBAAwB,CAAC,CAAC,QAAQ,EAAE;IAChE,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACvC,kBAAkB,EAAE,eAAe,CAAC,gCAAgC,CAAC,CAAC,QAAQ,EAAE;IAChF,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC3C,0BAA0B;IAC1B,mBAAmB,EAAE,eAAe,CAAC,iCAAiC,CAAC,CAAC,QAAQ,EAAE;CACnF,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE;IAC5E,OAAO,EAAE,8BAA8B;CACxC,CAAC,CAAC;AAGL,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC;KACzC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;KAC3D,MAAM,EAAE,CAAC;AAGZ,mGAAmG;AACnG,sGAAsG;AACtG,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC;KAC/C,MAAM,CAAC;IACN,SAAS,EAAE,eAAe,CAAC,+BAA+B,CAAC;IAC3D,YAAY,EAAE,eAAe,CAAC,+BAA+B,CAAC;CAC/D,CAAC;KACD,MAAM,EAAE,CAAC;AAGZ,oFAAoF;AACpF,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC;KAChD,MAAM,CAAC;IACN,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,SAAS,EAAE,aAAa;CACzB,CAAC;KACD,MAAM,EAAE,CAAC","sourcesContent":["// Callable contracts for the `_appConfig` documents an admin edits: the app-wide operational levers\n// and the landing page copy. Each input is a named field set (BACKEND-209) — never a document id\n// and a `data` blob.\n\nimport { z } from 'zod';\nimport { epochMsSchema, textFieldSchema } from '../doc-schemas/atoms.js';\nimport {\n ANNOUNCEMENT_MESSAGE_INPUT_FORMAT,\n APP_VERSION_INPUT_FORMAT,\n LANDING_ABOUT_TEXT_INPUT_FORMAT,\n LANDING_HERO_TITLE_INPUT_FORMAT,\n MAINTENANCE_MESSAGE_INPUT_FORMAT,\n} from '../input-formats/index.js';\nimport { AppConfigSchema } from '../doc-schemas/system.js';\n\n// An admin changes one or more levers on `_appConfig/app`. A lever left out keeps its value.\nexport const UpdateAppConfigInputSchema = z\n .object({\n // A published version is never blank: `''` is only the dormant default of a fresh environment.\n appVersion: textFieldSchema(APP_VERSION_INPUT_FORMAT).optional(),\n maintenanceMode: z.boolean().optional(),\n maintenanceMessage: textFieldSchema(MAINTENANCE_MESSAGE_INPUT_FORMAT).optional(),\n registrationEnabled: z.boolean().optional(),\n // `''` clears the banner.\n announcementMessage: textFieldSchema(ANNOUNCEMENT_MESSAGE_INPUT_FORMAT).optional(),\n })\n .strict()\n .refine((input) => Object.values(input).some((value) => value !== undefined), {\n message: 'Change at least one setting.',\n });\nexport type UpdateAppConfigInput = z.infer<typeof UpdateAppConfigInputSchema>;\n\nexport const UpdateAppConfigResultSchema = z\n .object({ updatedFields: z.array(AppConfigSchema.keyof()) })\n .strict();\nexport type UpdateAppConfigResult = z.infer<typeof UpdateAppConfigResultSchema>;\n\n// An admin edits the landing page copy on `_appConfig/landingPage`. Both fields are sent together,\n// as the editor saves them. The landing gallery is not part of this: only the picture core writes it.\nexport const AdminUpdateLandingPageInputSchema = z\n .object({\n heroTitle: textFieldSchema(LANDING_HERO_TITLE_INPUT_FORMAT),\n aboutCompany: textFieldSchema(LANDING_ABOUT_TEXT_INPUT_FORMAT),\n })\n .strict();\nexport type AdminUpdateLandingPageInput = z.infer<typeof AdminUpdateLandingPageInputSchema>;\n\n// The copy as committed, so the caller can apply it to its cached landing document.\nexport const AdminUpdateLandingPageResultSchema = z\n .object({\n heroTitle: z.string(),\n aboutCompany: z.string(),\n updatedAt: epochMsSchema,\n })\n .strict();\nexport type AdminUpdateLandingPageResult = z.infer<typeof AdminUpdateLandingPageResultSchema>;\n"]}
1
+ {"version":3,"file":"app-config.js","sourceRoot":"","sources":["../../src/schemas/app-config.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,iGAAiG;AACjG,qBAAqB;AAErB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACL,iCAAiC,EACjC,wBAAwB,EACxB,+BAA+B,EAC/B,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,6FAA6F;AAC7F,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC;IACN,+FAA+F;IAC/F,UAAU,EAAE,eAAe,CAAC,wBAAwB,CAAC,CAAC,QAAQ,EAAE;IAChE,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACvC,kBAAkB,EAAE,eAAe,CAAC,gCAAgC,CAAC,CAAC,QAAQ,EAAE;IAChF,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC3C,0BAA0B;IAC1B,mBAAmB,EAAE,eAAe,CAAC,iCAAiC,CAAC,CAAC,QAAQ,EAAE;CACnF,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE;IAC5E,OAAO,EAAE,8BAA8B;CACxC,CAAC,CAAC;AAGL,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC;KACzC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;KAC3D,MAAM,EAAE,CAAC;AAGZ,8FAA8F;AAC9F,oGAAoG;AACpG,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC;KAC/C,MAAM,CAAC;IACN,SAAS,EAAE,eAAe,CAAC,+BAA+B,CAAC,CAAC,QAAQ,EAAE;IACtE,YAAY,EAAE,eAAe,CAAC,+BAA+B,CAAC,CAAC,QAAQ,EAAE;CAC1E,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE;IAC5E,OAAO,EAAE,4BAA4B;CACtC,CAAC,CAAC;AAGL,oFAAoF;AACpF,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC;KAChD,MAAM,CAAC;IACN,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,SAAS,EAAE,aAAa;CACzB,CAAC;KACD,MAAM,EAAE,CAAC","sourcesContent":["// Callable contracts for the `_appConfig` documents an admin edits: the app-wide operational levers\n// and the landing page copy. Each input is a named field set (BACKEND-209) — never a document id\n// and a `data` blob.\n\nimport { z } from 'zod';\nimport { epochMsSchema, textFieldSchema } from '../doc-schemas/atoms.js';\nimport {\n ANNOUNCEMENT_MESSAGE_INPUT_FORMAT,\n APP_VERSION_INPUT_FORMAT,\n LANDING_ABOUT_TEXT_INPUT_FORMAT,\n LANDING_HERO_TITLE_INPUT_FORMAT,\n MAINTENANCE_MESSAGE_INPUT_FORMAT,\n} from '../input-formats/index.js';\nimport { AppConfigSchema } from '../doc-schemas/system.js';\n\n// An admin changes one or more levers on `_appConfig/app`. A lever left out keeps its value.\nexport const UpdateAppConfigInputSchema = z\n .object({\n // A published version is never blank: `''` is only the dormant default of a fresh environment.\n appVersion: textFieldSchema(APP_VERSION_INPUT_FORMAT).optional(),\n maintenanceMode: z.boolean().optional(),\n maintenanceMessage: textFieldSchema(MAINTENANCE_MESSAGE_INPUT_FORMAT).optional(),\n registrationEnabled: z.boolean().optional(),\n // `''` clears the banner.\n announcementMessage: textFieldSchema(ANNOUNCEMENT_MESSAGE_INPUT_FORMAT).optional(),\n })\n .strict()\n .refine((input) => Object.values(input).some((value) => value !== undefined), {\n message: 'Change at least one setting.',\n });\nexport type UpdateAppConfigInput = z.infer<typeof UpdateAppConfigInputSchema>;\n\nexport const UpdateAppConfigResultSchema = z\n .object({ updatedFields: z.array(AppConfigSchema.keyof()) })\n .strict();\nexport type UpdateAppConfigResult = z.infer<typeof UpdateAppConfigResultSchema>;\n\n// An admin edits the landing page copy on `_appConfig/landingPage`. The editor sends only the\n// fields the admin changed, so saving one never rewrites the other with what this editor last read.\n// The landing gallery is not part of this: only the picture core writes it.\nexport const AdminUpdateLandingPageInputSchema = z\n .object({\n heroTitle: textFieldSchema(LANDING_HERO_TITLE_INPUT_FORMAT).optional(),\n aboutCompany: textFieldSchema(LANDING_ABOUT_TEXT_INPUT_FORMAT).optional(),\n })\n .strict()\n .refine((input) => Object.values(input).some((value) => value !== undefined), {\n message: 'Change at least one field.',\n });\nexport type AdminUpdateLandingPageInput = z.infer<typeof AdminUpdateLandingPageInputSchema>;\n\n// The copy as committed, so the caller can apply it to its cached landing document.\nexport const AdminUpdateLandingPageResultSchema = z\n .object({\n heroTitle: z.string(),\n aboutCompany: z.string(),\n updatedAt: epochMsSchema,\n })\n .strict();\nexport type AdminUpdateLandingPageResult = z.infer<typeof AdminUpdateLandingPageResultSchema>;\n"]}
@@ -39,10 +39,22 @@ export declare const AdminDeleteAwardDefinitionResultSchema: z.ZodObject<{
39
39
  deleted: z.ZodBoolean;
40
40
  }, z.core.$strict>;
41
41
  export type AdminDeleteAwardDefinitionResult = z.infer<typeof AdminDeleteAwardDefinitionResultSchema>;
42
- export declare const UpdateFeaturedAwardsInputSchema: z.ZodObject<{
43
- primaryAwardId: z.ZodNullable<z.ZodString>;
44
- secondaryAwardId: z.ZodNullable<z.ZodString>;
45
- }, z.core.$strict>;
42
+ export declare const UpdateFeaturedAwardsInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
43
+ action: z.ZodLiteral<"set">;
44
+ slot: z.ZodEnum<{
45
+ primary: "primary";
46
+ secondary: "secondary";
47
+ }>;
48
+ awardId: z.ZodString;
49
+ }, z.core.$strict>, z.ZodObject<{
50
+ action: z.ZodLiteral<"clear">;
51
+ slot: z.ZodEnum<{
52
+ primary: "primary";
53
+ secondary: "secondary";
54
+ }>;
55
+ }, z.core.$strict>, z.ZodObject<{
56
+ action: z.ZodLiteral<"swap">;
57
+ }, z.core.$strict>], "action">;
46
58
  export type UpdateFeaturedAwardsInput = z.infer<typeof UpdateFeaturedAwardsInputSchema>;
47
59
  export declare const UpdateFeaturedAwardsResultSchema: z.ZodObject<{
48
60
  userId: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"awards.d.ts","sourceRoot":"","sources":["../../src/schemas/awards.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,iCAAiC;;;;;;kBAmB3C,CAAC;AACJ,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,eAAO,MAAM,oBAAoB;;;;;;kBAEtB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAKlE,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;kBASpC,CAAC;AACZ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAG9F,eAAO,MAAM,qCAAqC;;kBAAgD,CAAC;AACnG,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AAGpG,eAAO,MAAM,sCAAsC;;;kBAExC,CAAC;AACZ,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sCAAsC,CAAC,CAAC;AAItG,eAAO,MAAM,+BAA+B;;;kBAMzC,CAAC;AACJ,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,gCAAgC;;;;;kBAOlC,CAAC;AACZ,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC"}
1
+ {"version":3,"file":"awards.d.ts","sourceRoot":"","sources":["../../src/schemas/awards.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,iCAAiC;;;;;;kBAmB3C,CAAC;AACJ,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,eAAO,MAAM,oBAAoB;;;;;;kBAEtB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAKlE,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;kBASpC,CAAC;AACZ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAG9F,eAAO,MAAM,qCAAqC;;kBAAgD,CAAC;AACnG,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AAGpG,eAAO,MAAM,sCAAsC;;;kBAExC,CAAC;AACZ,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sCAAsC,CAAC,CAAC;AAOtG,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;8BAI1C,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,gCAAgC;;;;;kBAOlC,CAAC;AACZ,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC"}
@@ -6,7 +6,7 @@
6
6
  import { z } from 'zod';
7
7
  import { MAX_AWARD_GRANT_TARGETS } from '../constants/business.js';
8
8
  import { awardIdSchema } from '../doc-schemas/catalogs.js';
9
- import { AWARD_GRANT_SKIP_REASON_KEYS } from '../types/unions.js';
9
+ import { AWARD_GRANT_SKIP_REASON_KEYS, FEATURED_AWARD_SLOT_KEYS } from '../types/unions.js';
10
10
  import { leagueIdSchema, teamIdSchema, userIdSchema } from './atoms.js';
11
11
  const targetList = (atom) => z.array(atom).max(MAX_AWARD_GRANT_TARGETS).optional();
12
12
  // An admin grants an award to accounts — named directly, or as every active real member of a team
@@ -46,11 +46,15 @@ export const AdminDeleteAwardDefinitionResultSchema = z
46
46
  .object({ awardId: awardIdSchema, deleted: z.boolean() })
47
47
  .strict();
48
48
  // The signed-in account chooses which of its own awards to show beside its name: a primary and a
49
- // secondary badge, each an award it holds, or `null` for none. No user id is ever sent.
50
- export const UpdateFeaturedAwardsInputSchema = z
51
- .object({ primaryAwardId: awardIdSchema.nullable(), secondaryAwardId: awardIdSchema.nullable() })
52
- .strict()
53
- .refine((input) => input.primaryAwardId === null || input.primaryAwardId !== input.secondaryAwardId, { message: 'Choose two different awards.', path: ['secondaryAwardId'] });
49
+ // secondary badge, each an award it holds, or none. The input is the one change the person made —
50
+ // set a slot, clear a slot, or swap the two — and the core applies it to the pair as stored, so a
51
+ // change to one slot never writes back a stale value of the other. No user id is ever sent.
52
+ const featuredAwardSlotSchema = z.enum(FEATURED_AWARD_SLOT_KEYS);
53
+ export const UpdateFeaturedAwardsInputSchema = z.discriminatedUnion('action', [
54
+ z.object({ action: z.literal('set'), slot: featuredAwardSlotSchema, awardId: awardIdSchema }).strict(),
55
+ z.object({ action: z.literal('clear'), slot: featuredAwardSlotSchema }).strict(),
56
+ z.object({ action: z.literal('swap') }).strict(),
57
+ ]);
54
58
  export const UpdateFeaturedAwardsResultSchema = z
55
59
  .object({
56
60
  userId: userIdSchema,
@@ -1 +1 @@
1
- {"version":3,"file":"awards.js","sourceRoot":"","sources":["../../src/schemas/awards.ts"],"names":[],"mappings":"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","sourcesContent":["// Callable contracts for the award catalog, award grants, and the badges an account features.\n//\n// An award is created by its first badge's publication (the `award-badge` upload, ./uploads.ts), so\n// no callable here creates one. Grants and revokes share one input — four named lists, never an\n// action discriminator (BACKEND-002) — like the role roster's.\n\nimport { z } from 'zod';\nimport { MAX_AWARD_GRANT_TARGETS } from '../constants/business.js';\nimport { awardIdSchema } from '../doc-schemas/catalogs.js';\nimport { AWARD_GRANT_SKIP_REASON_KEYS } from '../types/unions.js';\nimport { leagueIdSchema, teamIdSchema, userIdSchema } from './atoms.js';\n\nconst targetList = <T extends z.ZodTypeAny>(atom: T) => z.array(atom).max(MAX_AWARD_GRANT_TARGETS).optional();\n\n// An admin grants an award to accounts — named directly, or as every active real member of a team\n// or of a league — and revokes it from accounts. Recipients are resolved on the server, deduplicated,\n// and bounded by MAX_AWARD_GRANT_RECIPIENTS; ghosts hold no account and are skipped.\nexport const AdminUpdateAwardGrantsInputSchema = z\n .object({\n awardId: awardIdSchema,\n grantUserIds: targetList(userIdSchema),\n grantTeamIds: targetList(teamIdSchema),\n grantLeagueIds: targetList(leagueIdSchema),\n revokeUserIds: targetList(userIdSchema),\n })\n .strict()\n .refine(\n (input) =>\n [input.grantUserIds, input.grantTeamIds, input.grantLeagueIds, input.revokeUserIds].some(\n (list) => list !== undefined && list.length > 0,\n ),\n { message: 'Name someone to grant the award to or revoke it from.' },\n )\n .refine(\n (input) => !(input.grantUserIds ?? []).some((userId) => (input.revokeUserIds ?? []).includes(userId)),\n { message: 'An account cannot be granted and revoked the award in one change.', path: ['revokeUserIds'] },\n );\nexport type AdminUpdateAwardGrantsInput = z.infer<typeof AdminUpdateAwardGrantsInputSchema>;\n\nexport const AwardGrantSkipSchema = z\n .object({ userId: userIdSchema, reason: z.enum(AWARD_GRANT_SKIP_REASON_KEYS) })\n .strict();\nexport type AwardGrantSkip = z.infer<typeof AwardGrantSkipSchema>;\n\n// What the change did for each account it reached: granted now, already held, revoked now, not held\n// to begin with, or skipped with its reason. A retried call reports the accounts its first call\n// changed as already held or not held, and writes nothing again.\nexport const AdminUpdateAwardGrantsResultSchema = z\n .object({\n awardId: awardIdSchema,\n granted: z.array(userIdSchema),\n alreadyHeld: z.array(userIdSchema),\n revoked: z.array(userIdSchema),\n notHeld: z.array(userIdSchema),\n skipped: z.array(AwardGrantSkipSchema),\n })\n .strict();\nexport type AdminUpdateAwardGrantsResult = z.infer<typeof AdminUpdateAwardGrantsResultSchema>;\n\n// An admin deletes an award nobody holds. Its badge's files are retired with it.\nexport const AdminDeleteAwardDefinitionInputSchema = z.object({ awardId: awardIdSchema }).strict();\nexport type AdminDeleteAwardDefinitionInput = z.infer<typeof AdminDeleteAwardDefinitionInputSchema>;\n\n// `deleted` is false when the award was already gone: nothing was written.\nexport const AdminDeleteAwardDefinitionResultSchema = z\n .object({ awardId: awardIdSchema, deleted: z.boolean() })\n .strict();\nexport type AdminDeleteAwardDefinitionResult = z.infer<typeof AdminDeleteAwardDefinitionResultSchema>;\n\n// The signed-in account chooses which of its own awards to show beside its name: a primary and a\n// secondary badge, each an award it holds, or `null` for none. No user id is ever sent.\nexport const UpdateFeaturedAwardsInputSchema = z\n .object({ primaryAwardId: awardIdSchema.nullable(), secondaryAwardId: awardIdSchema.nullable() })\n .strict()\n .refine(\n (input) => input.primaryAwardId === null || input.primaryAwardId !== input.secondaryAwardId,\n { message: 'Choose two different awards.', path: ['secondaryAwardId'] },\n );\nexport type UpdateFeaturedAwardsInput = z.infer<typeof UpdateFeaturedAwardsInputSchema>;\n\nexport const UpdateFeaturedAwardsResultSchema = z\n .object({\n userId: userIdSchema,\n primaryAwardId: awardIdSchema.nullable(),\n secondaryAwardId: awardIdSchema.nullable(),\n changed: z.boolean(),\n })\n .strict();\nexport type UpdateFeaturedAwardsResult = z.infer<typeof UpdateFeaturedAwardsResultSchema>;\n"]}
1
+ {"version":3,"file":"awards.js","sourceRoot":"","sources":["../../src/schemas/awards.ts"],"names":[],"mappings":"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","sourcesContent":["// Callable contracts for the award catalog, award grants, and the badges an account features.\n//\n// An award is created by its first badge's publication (the `award-badge` upload, ./uploads.ts), so\n// no callable here creates one. Grants and revokes share one input — four named lists, never an\n// action discriminator (BACKEND-002) — like the role roster's.\n\nimport { z } from 'zod';\nimport { MAX_AWARD_GRANT_TARGETS } from '../constants/business.js';\nimport { awardIdSchema } from '../doc-schemas/catalogs.js';\nimport { AWARD_GRANT_SKIP_REASON_KEYS, FEATURED_AWARD_SLOT_KEYS } from '../types/unions.js';\nimport { leagueIdSchema, teamIdSchema, userIdSchema } from './atoms.js';\n\nconst targetList = <T extends z.ZodTypeAny>(atom: T) => z.array(atom).max(MAX_AWARD_GRANT_TARGETS).optional();\n\n// An admin grants an award to accounts — named directly, or as every active real member of a team\n// or of a league — and revokes it from accounts. Recipients are resolved on the server, deduplicated,\n// and bounded by MAX_AWARD_GRANT_RECIPIENTS; ghosts hold no account and are skipped.\nexport const AdminUpdateAwardGrantsInputSchema = z\n .object({\n awardId: awardIdSchema,\n grantUserIds: targetList(userIdSchema),\n grantTeamIds: targetList(teamIdSchema),\n grantLeagueIds: targetList(leagueIdSchema),\n revokeUserIds: targetList(userIdSchema),\n })\n .strict()\n .refine(\n (input) =>\n [input.grantUserIds, input.grantTeamIds, input.grantLeagueIds, input.revokeUserIds].some(\n (list) => list !== undefined && list.length > 0,\n ),\n { message: 'Name someone to grant the award to or revoke it from.' },\n )\n .refine(\n (input) => !(input.grantUserIds ?? []).some((userId) => (input.revokeUserIds ?? []).includes(userId)),\n { message: 'An account cannot be granted and revoked the award in one change.', path: ['revokeUserIds'] },\n );\nexport type AdminUpdateAwardGrantsInput = z.infer<typeof AdminUpdateAwardGrantsInputSchema>;\n\nexport const AwardGrantSkipSchema = z\n .object({ userId: userIdSchema, reason: z.enum(AWARD_GRANT_SKIP_REASON_KEYS) })\n .strict();\nexport type AwardGrantSkip = z.infer<typeof AwardGrantSkipSchema>;\n\n// What the change did for each account it reached: granted now, already held, revoked now, not held\n// to begin with, or skipped with its reason. A retried call reports the accounts its first call\n// changed as already held or not held, and writes nothing again.\nexport const AdminUpdateAwardGrantsResultSchema = z\n .object({\n awardId: awardIdSchema,\n granted: z.array(userIdSchema),\n alreadyHeld: z.array(userIdSchema),\n revoked: z.array(userIdSchema),\n notHeld: z.array(userIdSchema),\n skipped: z.array(AwardGrantSkipSchema),\n })\n .strict();\nexport type AdminUpdateAwardGrantsResult = z.infer<typeof AdminUpdateAwardGrantsResultSchema>;\n\n// An admin deletes an award nobody holds. Its badge's files are retired with it.\nexport const AdminDeleteAwardDefinitionInputSchema = z.object({ awardId: awardIdSchema }).strict();\nexport type AdminDeleteAwardDefinitionInput = z.infer<typeof AdminDeleteAwardDefinitionInputSchema>;\n\n// `deleted` is false when the award was already gone: nothing was written.\nexport const AdminDeleteAwardDefinitionResultSchema = z\n .object({ awardId: awardIdSchema, deleted: z.boolean() })\n .strict();\nexport type AdminDeleteAwardDefinitionResult = z.infer<typeof AdminDeleteAwardDefinitionResultSchema>;\n\n// The signed-in account chooses which of its own awards to show beside its name: a primary and a\n// secondary badge, each an award it holds, or none. The input is the one change the person made —\n// set a slot, clear a slot, or swap the two — and the core applies it to the pair as stored, so a\n// change to one slot never writes back a stale value of the other. No user id is ever sent.\nconst featuredAwardSlotSchema = z.enum(FEATURED_AWARD_SLOT_KEYS);\nexport const UpdateFeaturedAwardsInputSchema = z.discriminatedUnion('action', [\n z.object({ action: z.literal('set'), slot: featuredAwardSlotSchema, awardId: awardIdSchema }).strict(),\n z.object({ action: z.literal('clear'), slot: featuredAwardSlotSchema }).strict(),\n z.object({ action: z.literal('swap') }).strict(),\n]);\nexport type UpdateFeaturedAwardsInput = z.infer<typeof UpdateFeaturedAwardsInputSchema>;\n\nexport const UpdateFeaturedAwardsResultSchema = z\n .object({\n userId: userIdSchema,\n primaryAwardId: awardIdSchema.nullable(),\n secondaryAwardId: awardIdSchema.nullable(),\n changed: z.boolean(),\n })\n .strict();\nexport type UpdateFeaturedAwardsResult = z.infer<typeof UpdateFeaturedAwardsResultSchema>;\n"]}
@@ -16,11 +16,11 @@ export declare const AdminCreateGameLocationResultSchema: z.ZodObject<{
16
16
  }, z.core.$strict>;
17
17
  export type AdminCreateGameLocationResult = z.infer<typeof AdminCreateGameLocationResultSchema>;
18
18
  export declare const AdminUpdateGameLocationInputSchema: z.ZodObject<{
19
- name: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
20
- streetAddress: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
21
- subLocations: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
22
- memo: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
23
19
  gameLocationId: z.ZodString;
20
+ name: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
21
+ streetAddress: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
22
+ subLocations: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>>;
23
+ memo: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
24
24
  }, z.core.$strict>;
25
25
  export type AdminUpdateGameLocationInput = z.infer<typeof AdminUpdateGameLocationInputSchema>;
26
26
  export declare const AdminUpdateGameLocationResultSchema: z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"game-locations.d.ts","sourceRoot":"","sources":["../../src/schemas/game-locations.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,sBAAsB,wDAAmD,CAAC;AACvF,eAAO,MAAM,+BAA+B,wDAA6D,CAAC;AAE1G,eAAO,MAAM,6BAA6B,wDAA2D,CAAC;AACtG,eAAO,MAAM,8BAA8B,oEAKvC,CAAC;AAEL,eAAO,MAAM,sBAAsB,wDAAmD,CAAC;AAUvF,eAAO,MAAM,kCAAkC;;;;;kBAA6C,CAAC;AAC7F,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAC9F,eAAO,MAAM,mCAAmC;;kBAErC,CAAC;AACZ,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAEhG,eAAO,MAAM,kCAAkC;;;;;;kBAEpC,CAAC;AACZ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAC9F,eAAO,MAAM,mCAAmC;;kBAErC,CAAC;AACZ,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAEhG,eAAO,MAAM,kCAAkC;;kBAEpC,CAAC;AACZ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAC9F,eAAO,MAAM,mCAAmC;;kBAErC,CAAC;AACZ,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC"}
1
+ {"version":3,"file":"game-locations.d.ts","sourceRoot":"","sources":["../../src/schemas/game-locations.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,sBAAsB,wDAAmD,CAAC;AACvF,eAAO,MAAM,+BAA+B,wDAA6D,CAAC;AAE1G,eAAO,MAAM,6BAA6B,wDAA2D,CAAC;AACtG,eAAO,MAAM,8BAA8B,oEAKvC,CAAC;AAEL,eAAO,MAAM,sBAAsB,wDAAmD,CAAC;AAWvF,eAAO,MAAM,kCAAkC;;;;;kBAA6C,CAAC;AAC7F,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAC9F,eAAO,MAAM,mCAAmC;;kBAErC,CAAC;AACZ,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAEhG,eAAO,MAAM,kCAAkC;;;;;;kBAY5C,CAAC;AACJ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAC9F,eAAO,MAAM,mCAAmC;;kBAErC,CAAC;AACZ,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAEhG,eAAO,MAAM,kCAAkC;;kBAEpC,CAAC;AACZ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAC9F,eAAO,MAAM,mCAAmC;;kBAErC,CAAC;AACZ,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC"}
@@ -17,7 +17,8 @@ export const gameLocationSubLocationsSchema = z
17
17
  });
18
18
  // An empty memo means the venue has none.
19
19
  export const gameLocationMemoSchema = textFieldSchema(GAME_LOCATION_MEMO_INPUT_FORMAT);
20
- // The venue's own fields, whole: an edit sends every one of them as the admin wants it to read.
20
+ // The venue's own fields. A create sends all of them; an edit sends only the ones the admin
21
+ // changed, so saving one never rewrites another with what this editor last read.
21
22
  const gameLocationFieldsShape = {
22
23
  name: gameLocationNameSchema,
23
24
  streetAddress: gameLocationStreetAddressSchema,
@@ -29,8 +30,15 @@ export const AdminCreateGameLocationResultSchema = z
29
30
  .object({ gameLocationId: gameLocationIdSchema })
30
31
  .strict();
31
32
  export const AdminUpdateGameLocationInputSchema = z
32
- .object({ gameLocationId: gameLocationIdSchema, ...gameLocationFieldsShape })
33
- .strict();
33
+ .object({
34
+ gameLocationId: gameLocationIdSchema,
35
+ name: gameLocationNameSchema.optional(),
36
+ streetAddress: gameLocationStreetAddressSchema.optional(),
37
+ subLocations: gameLocationSubLocationsSchema.optional(),
38
+ memo: gameLocationMemoSchema.optional(),
39
+ })
40
+ .strict()
41
+ .refine(({ gameLocationId: _gameLocationId, ...fields }) => Object.values(fields).some((value) => value !== undefined), { message: 'Change at least one field.' });
34
42
  export const AdminUpdateGameLocationResultSchema = z
35
43
  .object({ gameLocationId: gameLocationIdSchema })
36
44
  .strict();
@@ -1 +1 @@
1
- {"version":3,"file":"game-locations.js","sourceRoot":"","sources":["../../src/schemas/game-locations.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,yEAAyE;AAEzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAC/B,yCAAyC,EACzC,uCAAuC,GACxC,MAAM,2BAA2B,CAAC;AAEnC,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC,+BAA+B,CAAC,CAAC;AACvF,MAAM,CAAC,MAAM,+BAA+B,GAAG,eAAe,CAAC,yCAAyC,CAAC,CAAC;AAC1G,4FAA4F;AAC5F,MAAM,CAAC,MAAM,6BAA6B,GAAG,eAAe,CAAC,uCAAuC,CAAC,CAAC;AACtG,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC;KAC5C,KAAK,CAAC,6BAA6B,CAAC;KACpC,GAAG,CAAC,+BAA+B,CAAC;KACpC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM,EAAE;IAC5E,OAAO,EAAE,yCAAyC;CACnD,CAAC,CAAC;AACL,0CAA0C;AAC1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC,+BAA+B,CAAC,CAAC;AAEvF,gGAAgG;AAChG,MAAM,uBAAuB,GAAG;IAC9B,IAAI,EAAE,sBAAsB;IAC5B,aAAa,EAAE,+BAA+B;IAC9C,YAAY,EAAE,8BAA8B;IAC5C,IAAI,EAAE,sBAAsB;CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,MAAM,EAAE,CAAC;AAE7F,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC;KACjD,MAAM,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC;KAChD,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC;KAChD,MAAM,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE,GAAG,uBAAuB,EAAE,CAAC;KAC5E,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC;KACjD,MAAM,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC;KAChD,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC;KAChD,MAAM,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC;KAChD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC;KACjD,MAAM,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC;KAChD,MAAM,EAAE,CAAC","sourcesContent":["// Callable contracts for game locations: create, edit, and delete one venue. Admin only. The\n// venue's picture goes through the upload pipeline, never through these.\n\nimport { z } from 'zod';\nimport { MAX_GAME_LOCATION_SUB_LOCATIONS } from '../constants/business.js';\nimport { textFieldSchema } from '../doc-schemas/atoms.js';\nimport { gameLocationIdSchema } from '../doc-schemas/game-location.js';\nimport {\n GAME_LOCATION_MEMO_INPUT_FORMAT,\n GAME_LOCATION_NAME_INPUT_FORMAT,\n GAME_LOCATION_STREET_ADDRESS_INPUT_FORMAT,\n GAME_LOCATION_SUB_LOCATION_INPUT_FORMAT,\n} from '../input-formats/index.js';\n\nexport const gameLocationNameSchema = textFieldSchema(GAME_LOCATION_NAME_INPUT_FORMAT);\nexport const gameLocationStreetAddressSchema = textFieldSchema(GAME_LOCATION_STREET_ADDRESS_INPUT_FORMAT);\n// One court, sheet, or room within a venue — as the venue lists it, and as a game names it.\nexport const gameLocationSubLocationSchema = textFieldSchema(GAME_LOCATION_SUB_LOCATION_INPUT_FORMAT);\nexport const gameLocationSubLocationsSchema = z\n .array(gameLocationSubLocationSchema)\n .max(MAX_GAME_LOCATION_SUB_LOCATIONS)\n .refine((subLocations) => new Set(subLocations).size === subLocations.length, {\n message: 'Each sub-location may appear only once.',\n });\n// An empty memo means the venue has none.\nexport const gameLocationMemoSchema = textFieldSchema(GAME_LOCATION_MEMO_INPUT_FORMAT);\n\n// The venue's own fields, whole: an edit sends every one of them as the admin wants it to read.\nconst gameLocationFieldsShape = {\n name: gameLocationNameSchema,\n streetAddress: gameLocationStreetAddressSchema,\n subLocations: gameLocationSubLocationsSchema,\n memo: gameLocationMemoSchema,\n};\n\nexport const AdminCreateGameLocationInputSchema = z.object(gameLocationFieldsShape).strict();\nexport type AdminCreateGameLocationInput = z.infer<typeof AdminCreateGameLocationInputSchema>;\nexport const AdminCreateGameLocationResultSchema = z\n .object({ gameLocationId: gameLocationIdSchema })\n .strict();\nexport type AdminCreateGameLocationResult = z.infer<typeof AdminCreateGameLocationResultSchema>;\n\nexport const AdminUpdateGameLocationInputSchema = z\n .object({ gameLocationId: gameLocationIdSchema, ...gameLocationFieldsShape })\n .strict();\nexport type AdminUpdateGameLocationInput = z.infer<typeof AdminUpdateGameLocationInputSchema>;\nexport const AdminUpdateGameLocationResultSchema = z\n .object({ gameLocationId: gameLocationIdSchema })\n .strict();\nexport type AdminUpdateGameLocationResult = z.infer<typeof AdminUpdateGameLocationResultSchema>;\n\nexport const AdminDeleteGameLocationInputSchema = z\n .object({ gameLocationId: gameLocationIdSchema })\n .strict();\nexport type AdminDeleteGameLocationInput = z.infer<typeof AdminDeleteGameLocationInputSchema>;\nexport const AdminDeleteGameLocationResultSchema = z\n .object({ gameLocationId: gameLocationIdSchema })\n .strict();\nexport type AdminDeleteGameLocationResult = z.infer<typeof AdminDeleteGameLocationResultSchema>;\n"]}
1
+ {"version":3,"file":"game-locations.js","sourceRoot":"","sources":["../../src/schemas/game-locations.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,yEAAyE;AAEzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAC/B,yCAAyC,EACzC,uCAAuC,GACxC,MAAM,2BAA2B,CAAC;AAEnC,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC,+BAA+B,CAAC,CAAC;AACvF,MAAM,CAAC,MAAM,+BAA+B,GAAG,eAAe,CAAC,yCAAyC,CAAC,CAAC;AAC1G,4FAA4F;AAC5F,MAAM,CAAC,MAAM,6BAA6B,GAAG,eAAe,CAAC,uCAAuC,CAAC,CAAC;AACtG,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC;KAC5C,KAAK,CAAC,6BAA6B,CAAC;KACpC,GAAG,CAAC,+BAA+B,CAAC;KACpC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM,EAAE;IAC5E,OAAO,EAAE,yCAAyC;CACnD,CAAC,CAAC;AACL,0CAA0C;AAC1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC,+BAA+B,CAAC,CAAC;AAEvF,4FAA4F;AAC5F,iFAAiF;AACjF,MAAM,uBAAuB,GAAG;IAC9B,IAAI,EAAE,sBAAsB;IAC5B,aAAa,EAAE,+BAA+B;IAC9C,YAAY,EAAE,8BAA8B;IAC5C,IAAI,EAAE,sBAAsB;CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,MAAM,EAAE,CAAC;AAE7F,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC;KACjD,MAAM,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC;KAChD,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC;KAChD,MAAM,CAAC;IACN,cAAc,EAAE,oBAAoB;IACpC,IAAI,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IACvC,aAAa,EAAE,+BAA+B,CAAC,QAAQ,EAAE;IACzD,YAAY,EAAE,8BAA8B,CAAC,QAAQ,EAAE;IACvD,IAAI,EAAE,sBAAsB,CAAC,QAAQ,EAAE;CACxC,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CACL,CAAC,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,EAC9G,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAC1C,CAAC;AAEJ,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC;KACjD,MAAM,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC;KAChD,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC;KAChD,MAAM,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC;KAChD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC;KACjD,MAAM,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC;KAChD,MAAM,EAAE,CAAC","sourcesContent":["// Callable contracts for game locations: create, edit, and delete one venue. Admin only. The\n// venue's picture goes through the upload pipeline, never through these.\n\nimport { z } from 'zod';\nimport { MAX_GAME_LOCATION_SUB_LOCATIONS } from '../constants/business.js';\nimport { textFieldSchema } from '../doc-schemas/atoms.js';\nimport { gameLocationIdSchema } from '../doc-schemas/game-location.js';\nimport {\n GAME_LOCATION_MEMO_INPUT_FORMAT,\n GAME_LOCATION_NAME_INPUT_FORMAT,\n GAME_LOCATION_STREET_ADDRESS_INPUT_FORMAT,\n GAME_LOCATION_SUB_LOCATION_INPUT_FORMAT,\n} from '../input-formats/index.js';\n\nexport const gameLocationNameSchema = textFieldSchema(GAME_LOCATION_NAME_INPUT_FORMAT);\nexport const gameLocationStreetAddressSchema = textFieldSchema(GAME_LOCATION_STREET_ADDRESS_INPUT_FORMAT);\n// One court, sheet, or room within a venue — as the venue lists it, and as a game names it.\nexport const gameLocationSubLocationSchema = textFieldSchema(GAME_LOCATION_SUB_LOCATION_INPUT_FORMAT);\nexport const gameLocationSubLocationsSchema = z\n .array(gameLocationSubLocationSchema)\n .max(MAX_GAME_LOCATION_SUB_LOCATIONS)\n .refine((subLocations) => new Set(subLocations).size === subLocations.length, {\n message: 'Each sub-location may appear only once.',\n });\n// An empty memo means the venue has none.\nexport const gameLocationMemoSchema = textFieldSchema(GAME_LOCATION_MEMO_INPUT_FORMAT);\n\n// The venue's own fields. A create sends all of them; an edit sends only the ones the admin\n// changed, so saving one never rewrites another with what this editor last read.\nconst gameLocationFieldsShape = {\n name: gameLocationNameSchema,\n streetAddress: gameLocationStreetAddressSchema,\n subLocations: gameLocationSubLocationsSchema,\n memo: gameLocationMemoSchema,\n};\n\nexport const AdminCreateGameLocationInputSchema = z.object(gameLocationFieldsShape).strict();\nexport type AdminCreateGameLocationInput = z.infer<typeof AdminCreateGameLocationInputSchema>;\nexport const AdminCreateGameLocationResultSchema = z\n .object({ gameLocationId: gameLocationIdSchema })\n .strict();\nexport type AdminCreateGameLocationResult = z.infer<typeof AdminCreateGameLocationResultSchema>;\n\nexport const AdminUpdateGameLocationInputSchema = z\n .object({\n gameLocationId: gameLocationIdSchema,\n name: gameLocationNameSchema.optional(),\n streetAddress: gameLocationStreetAddressSchema.optional(),\n subLocations: gameLocationSubLocationsSchema.optional(),\n memo: gameLocationMemoSchema.optional(),\n })\n .strict()\n .refine(\n ({ gameLocationId: _gameLocationId, ...fields }) => Object.values(fields).some((value) => value !== undefined),\n { message: 'Change at least one field.' },\n );\nexport type AdminUpdateGameLocationInput = z.infer<typeof AdminUpdateGameLocationInputSchema>;\nexport const AdminUpdateGameLocationResultSchema = z\n .object({ gameLocationId: gameLocationIdSchema })\n .strict();\nexport type AdminUpdateGameLocationResult = z.infer<typeof AdminUpdateGameLocationResultSchema>;\n\nexport const AdminDeleteGameLocationInputSchema = z\n .object({ gameLocationId: gameLocationIdSchema })\n .strict();\nexport type AdminDeleteGameLocationInput = z.infer<typeof AdminDeleteGameLocationInputSchema>;\nexport const AdminDeleteGameLocationResultSchema = z\n .object({ gameLocationId: gameLocationIdSchema })\n .strict();\nexport type AdminDeleteGameLocationResult = z.infer<typeof AdminDeleteGameLocationResultSchema>;\n"]}
@@ -594,6 +594,7 @@ export declare const GetMigrationConsoleResultSchema: z.ZodObject<{
594
594
  operationId: z.ZodString;
595
595
  heldByUserId: z.ZodString;
596
596
  expiresAt: z.ZodNumber;
597
+ pageClaimedAt: z.ZodOptional<z.ZodNumber>;
597
598
  }, z.core.$strict>>;
598
599
  updatedAt: z.ZodNumber;
599
600
  }, z.core.$strict>;
@@ -1 +1 @@
1
- {"version":3,"file":"migration-console.d.ts","sourceRoot":"","sources":["../../src/schemas/migration-console.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migration-console.d.ts","sourceRoot":"","sources":["../../src/schemas/migration-console.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export declare const GalleryPictureEntrySchema: z.ZodObject<{
7
7
  }>;
8
8
  ownerId: z.ZodString;
9
9
  position: z.ZodString;
10
+ sourceIndex: z.ZodOptional<z.ZodNumber>;
10
11
  createdAt: z.ZodNumber;
11
12
  id: z.ZodString;
12
13
  }, z.core.$strict>;
@@ -25,6 +26,7 @@ export declare const AdminMovePictureResultSchema: z.ZodObject<{
25
26
  }>;
26
27
  ownerId: z.ZodString;
27
28
  position: z.ZodString;
29
+ sourceIndex: z.ZodOptional<z.ZodNumber>;
28
30
  createdAt: z.ZodNumber;
29
31
  id: z.ZodString;
30
32
  }, z.core.$strict>;
@@ -362,6 +364,7 @@ export declare const AdminUpdateFeaturedPictureResultSchema: z.ZodObject<{
362
364
  }>;
363
365
  ownerId: z.ZodString;
364
366
  position: z.ZodString;
367
+ sourceIndex: z.ZodOptional<z.ZodNumber>;
365
368
  createdAt: z.ZodNumber;
366
369
  id: z.ZodString;
367
370
  }, z.core.$strict>;
@@ -1 +1 @@
1
- {"version":3,"file":"pictures.d.ts","sourceRoot":"","sources":["../../src/schemas/pictures.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,yBAAyB;;;;;;;;;;kBAAgE,CAAC;AACvG,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,2BAA2B;;;kBAM7B,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAE9B,CAAC;AACZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,qCAAqC;;kBAAoD,CAAC;AACvG,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AACpG,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAExC,CAAC;AACZ,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sCAAsC,CAAC,CAAC;AAEtG,eAAO,MAAM,6BAA6B;;;;;;;;;;;;kBAO/B,CAAC;AACZ,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAEhC,CAAC;AACZ,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC"}
1
+ {"version":3,"file":"pictures.d.ts","sourceRoot":"","sources":["../../src/schemas/pictures.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,yBAAyB;;;;;;;;;;;kBAAgE,CAAC;AACvG,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,2BAA2B;;;kBAM7B,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAE9B,CAAC;AACZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,qCAAqC;;kBAAoD,CAAC;AACvG,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AACpG,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAExC,CAAC;AACZ,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sCAAsC,CAAC,CAAC;AAEtG,eAAO,MAAM,6BAA6B;;;;;;;;;;;;kBAO/B,CAAC;AACZ,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAEhC,CAAC;AACZ,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC"}
@@ -258,8 +258,10 @@ export declare const RunStatsValidationResultSchema: z.ZodObject<{
258
258
  discrepanciesFound: z.ZodNumber;
259
259
  }, z.core.$strict>;
260
260
  discrepancyCounts: z.ZodRecord<z.ZodEnum<{
261
+ gameUnreadable: "gameUnreadable";
261
262
  invalidEvent: "invalidEvent";
262
263
  eventSequenceMismatch: "eventSequenceMismatch";
264
+ eventSequenceGap: "eventSequenceGap";
263
265
  rollupMismatch: "rollupMismatch";
264
266
  scoreMirrorMismatch: "scoreMirrorMismatch";
265
267
  unrosteredStatLine: "unrosteredStatLine";
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/schemas/stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/schemas/stats.ts"],"names":[],"mappings":"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"}