scrabble-solver 2.18.2 → 2.18.4

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 (183) hide show
  1. package/.nx/workspace-data/d/server-process.json +3 -3
  2. package/.nx/workspace-data/file-map.json +1472 -1435
  3. package/.nx/workspace-data/lockfile-dependencies.hash +1 -1
  4. package/.nx/workspace-data/lockfile-nodes.hash +1 -1
  5. package/.nx/workspace-data/nx_files.nxt +0 -0
  6. package/.nx/workspace-data/parsed-lock-file.dependencies.json +528 -713
  7. package/.nx/workspace-data/parsed-lock-file.nodes.json +965 -1370
  8. package/.nx/workspace-data/project-graph.json +1561 -2156
  9. package/.nx/workspace-data/source-maps.json +48 -8
  10. package/.oxlintrc.json +0 -1
  11. package/CLAUDE.md +10 -8
  12. package/README.md +1 -1
  13. package/bun.lock +230 -279
  14. package/lerna.json +1 -1
  15. package/package.json +7 -6
  16. package/packages/configs/build/games/index.d.ts +1 -0
  17. package/packages/configs/build/games/index.js +1 -0
  18. package/packages/configs/build/games/wyrazy.d.ts +19 -0
  19. package/packages/configs/build/games/wyrazy.js +73 -0
  20. package/packages/configs/build/languages/polish.d.ts +1 -0
  21. package/packages/configs/build/languages/polish.js +39 -1
  22. package/packages/configs/package.json +5 -4
  23. package/packages/configs/src/games/index.ts +1 -0
  24. package/packages/configs/src/games/wyrazy.ts +71 -0
  25. package/packages/configs/src/languages/polish.ts +40 -1
  26. package/packages/constants/package.json +1 -1
  27. package/packages/dictionaries/bin/update-dictionaries.js +2 -5
  28. package/packages/dictionaries/build/Dictionaries.d.ts +1 -1
  29. package/packages/dictionaries/build/Dictionaries.js +9 -4
  30. package/packages/dictionaries/build/lib/DiskCache.js +1 -1
  31. package/packages/dictionaries/build/lib/downloadDictionary.d.ts +1 -1
  32. package/packages/dictionaries/build/lib/downloadDictionary.js +12 -7
  33. package/packages/dictionaries/package.json +4 -4
  34. package/packages/dictionaries/src/Dictionaries.ts +13 -6
  35. package/packages/dictionaries/src/lib/DiskCache.ts +2 -2
  36. package/packages/dictionaries/src/lib/downloadDictionary.ts +14 -6
  37. package/packages/logger/README.md +18 -0
  38. package/packages/logger/build/constants.d.ts +3 -0
  39. package/packages/logger/build/constants.js +4 -1
  40. package/packages/logger/build/describeError.d.ts +5 -0
  41. package/packages/logger/build/describeError.js +23 -0
  42. package/packages/logger/build/events.d.ts +92 -0
  43. package/packages/logger/build/events.js +13 -0
  44. package/packages/logger/build/formatCsvRow.d.ts +2 -0
  45. package/packages/logger/build/formatCsvRow.js +20 -0
  46. package/packages/logger/build/index.d.ts +5 -1
  47. package/packages/logger/build/index.js +13 -3
  48. package/packages/logger/build/logError.d.ts +4 -0
  49. package/packages/logger/build/logError.js +17 -0
  50. package/packages/logger/build/logEvent.d.ts +3 -0
  51. package/packages/logger/build/logEvent.js +29 -0
  52. package/packages/logger/package.json +7 -8
  53. package/packages/logger/scripts/export-csv.ts +113 -0
  54. package/packages/logger/scripts/readEvents.ts +34 -0
  55. package/packages/logger/scripts/tsconfig.json +10 -0
  56. package/packages/logger/src/constants.ts +9 -0
  57. package/packages/logger/src/describeError.test.ts +44 -0
  58. package/packages/logger/src/describeError.ts +30 -0
  59. package/packages/logger/src/events.ts +103 -0
  60. package/packages/logger/src/formatCsvRow.test.ts +41 -0
  61. package/packages/logger/src/formatCsvRow.ts +24 -0
  62. package/packages/logger/src/index.ts +13 -1
  63. package/packages/logger/src/logError.ts +24 -0
  64. package/packages/logger/src/logEvent.test.ts +59 -0
  65. package/packages/logger/src/logEvent.ts +26 -0
  66. package/packages/scrabble-solver/.next/BUILD_ID +1 -1
  67. package/packages/scrabble-solver/.next/build-manifest.json +15 -15
  68. package/packages/scrabble-solver/.next/cache/.previewinfo +1 -1
  69. package/packages/scrabble-solver/.next/cache/.rscinfo +1 -1
  70. package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
  71. package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +0 -0
  72. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
  73. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack.old +0 -0
  74. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack +0 -0
  75. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
  76. package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
  77. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
  78. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack.old +0 -0
  79. package/packages/scrabble-solver/.next/diagnostics/framework.json +1 -1
  80. package/packages/scrabble-solver/.next/dynamic-css-manifest.json +1 -1
  81. package/packages/scrabble-solver/.next/prerender-manifest.json +4 -4
  82. package/packages/scrabble-solver/.next/react-loadable-manifest.json +6 -6
  83. package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
  84. package/packages/scrabble-solver/.next/server/chunks/546.js +1 -1
  85. package/packages/scrabble-solver/.next/server/chunks/612.js +5 -0
  86. package/packages/scrabble-solver/.next/server/chunks/67.js +1 -1
  87. package/packages/scrabble-solver/.next/server/chunks/712.js +1 -1
  88. package/packages/scrabble-solver/.next/server/chunks/715.js +1 -0
  89. package/packages/scrabble-solver/.next/server/chunks/812.js +1 -1
  90. package/packages/scrabble-solver/.next/server/chunks/961.js +1 -1
  91. package/packages/scrabble-solver/.next/server/dynamic-css-manifest.js +1 -1
  92. package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
  93. package/packages/scrabble-solver/.next/server/middleware-react-loadable-manifest.js +1 -1
  94. package/packages/scrabble-solver/.next/server/pages/404.html +3 -3
  95. package/packages/scrabble-solver/.next/server/pages/500.html +3 -3
  96. package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
  97. package/packages/scrabble-solver/.next/server/pages/_document.js +2 -2
  98. package/packages/scrabble-solver/.next/server/pages/_document.js.nft.json +1 -1
  99. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js +2 -2
  100. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js.nft.json +1 -1
  101. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale].js +1 -1
  102. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale].js.nft.json +1 -1
  103. package/packages/scrabble-solver/.next/server/pages/api/solve.js +1 -1
  104. package/packages/scrabble-solver/.next/server/pages/api/solve.js.nft.json +1 -1
  105. package/packages/scrabble-solver/.next/server/pages/api/verify.js +1 -1
  106. package/packages/scrabble-solver/.next/server/pages/api/verify.js.nft.json +1 -1
  107. package/packages/scrabble-solver/.next/server/pages/api/visit.js +1 -1
  108. package/packages/scrabble-solver/.next/server/pages/api/visit.js.nft.json +1 -1
  109. package/packages/scrabble-solver/.next/server/pages/index.html +3 -3
  110. package/packages/scrabble-solver/.next/server/pages/index.js +1 -1
  111. package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
  112. package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
  113. package/packages/scrabble-solver/.next/server/pages/not-found.html +3 -3
  114. package/packages/scrabble-solver/.next/server/pages/not-found.js.nft.json +1 -1
  115. package/packages/scrabble-solver/.next/static/{nvGZh1gPuX98L07YmxlYD → TAqjh9l5VJQOfJ4SzgPk2}/_buildManifest.js +1 -1
  116. package/packages/scrabble-solver/.next/static/chunks/101-f341f70c10d71212.js +3 -0
  117. package/packages/scrabble-solver/.next/static/chunks/256.6a20b23a766cfebd.js +1 -0
  118. package/packages/scrabble-solver/.next/static/chunks/693.d295da7c7b873986.js +1 -0
  119. package/packages/scrabble-solver/.next/static/chunks/980.dd35e807b18063c1.js +1 -0
  120. package/packages/scrabble-solver/.next/static/chunks/{main-7e52da35a4beea0b.js → main-6e9ac37e28d2b899.js} +1 -1
  121. package/packages/scrabble-solver/.next/static/chunks/pages/_app-9340d51f5a6787fc.js +1 -0
  122. package/packages/scrabble-solver/.next/static/chunks/pages/index-ea21d96a88f25000.js +1 -0
  123. package/packages/scrabble-solver/.next/static/chunks/{webpack-9f5c9d275348829b.js → webpack-d73aa4aae49cd800.js} +1 -1
  124. package/packages/scrabble-solver/.next/static/css/{92f85ce358a0a468.css → 4dbcacc1122ac6b9.css} +1 -1
  125. package/packages/scrabble-solver/.next/static/css/8b8087461767360a.css +1 -0
  126. package/packages/scrabble-solver/.next/static/css/{65bcc9440e067113.css → 98051ed25076b896.css} +1 -1
  127. package/packages/scrabble-solver/.next/trace +22 -21
  128. package/packages/scrabble-solver/.next/trace-build +1 -1
  129. package/packages/scrabble-solver/package.json +10 -10
  130. package/packages/scrabble-solver/public/llms.txt +1 -1
  131. package/packages/scrabble-solver/public/service-worker.js +1 -1
  132. package/packages/scrabble-solver/src/api/BadRequestError.ts +6 -0
  133. package/packages/scrabble-solver/src/api/index.ts +2 -1
  134. package/packages/scrabble-solver/src/api/withApiLog.ts +85 -0
  135. package/packages/scrabble-solver/src/components/Button/Button.module.scss +1 -1
  136. package/packages/scrabble-solver/src/components/Solver/Solver.module.scss +4 -4
  137. package/packages/scrabble-solver/src/components/Solver/Solver.tsx +2 -2
  138. package/packages/scrabble-solver/src/hooks/useColumns.ts +5 -7
  139. package/packages/scrabble-solver/src/modals/ResultsModal/ResultsModal.tsx +2 -2
  140. package/packages/scrabble-solver/src/modals/WordsModal/WordsModal.module.scss +1 -1
  141. package/packages/scrabble-solver/src/modals/WordsModal/WordsModal.tsx +2 -2
  142. package/packages/scrabble-solver/src/modals/WordsModal/components/WordsTable/WordsTable.tsx +2 -2
  143. package/packages/scrabble-solver/src/pages/api/dictionary/[locale]/[word].ts +22 -30
  144. package/packages/scrabble-solver/src/pages/api/dictionary/[locale]/index.ts +36 -42
  145. package/packages/scrabble-solver/src/pages/api/solve.ts +32 -42
  146. package/packages/scrabble-solver/src/pages/api/verify.ts +35 -43
  147. package/packages/scrabble-solver/src/pages/api/visit.ts +38 -13
  148. package/packages/scrabble-solver/src/pages/index.tsx +3 -3
  149. package/packages/scrabble-solver/src/parameters/index.ts +0 -2
  150. package/packages/scrabble-solver/src/sdk/solve.ts +3 -9
  151. package/packages/scrabble-solver/src/sdk/verify.ts +2 -10
  152. package/packages/scrabble-solver/src/sdk/visit.ts +8 -3
  153. package/packages/scrabble-solver/src/state/sagas.ts +7 -1
  154. package/packages/scrabble-solver/src/styles/_tokens.scss +0 -2
  155. package/packages/scrabble-solver/src/styles/mixins.scss +0 -5
  156. package/packages/scrabble-solver/src/styles/variables.module.scss +0 -1
  157. package/packages/scrabble-solver/src/styles/variables.module.scss.d.ts +0 -1
  158. package/packages/scrabble-solver/src/styles/variables.scss +1 -1
  159. package/packages/scrabble-solver/src/types/api.ts +7 -0
  160. package/packages/scrabble-solver/tsconfig.tsbuildinfo +1 -1
  161. package/packages/solver/package.json +5 -5
  162. package/packages/types/build/Game.d.ts +2 -1
  163. package/packages/types/build/Game.js +1 -0
  164. package/packages/types/package.json +2 -2
  165. package/packages/types/src/Game.ts +1 -0
  166. package/packages/word-definitions/package.json +2 -2
  167. package/packages/word-lists/package.json +2 -2
  168. package/playwright-report/index.html +1 -1
  169. package/packages/logger/build/logger.d.ts +0 -1
  170. package/packages/logger/build/logger.js +0 -28
  171. package/packages/logger/scripts/stats.js +0 -52
  172. package/packages/logger/src/logger.ts +0 -30
  173. package/packages/scrabble-solver/.next/server/chunks/392.js +0 -1
  174. package/packages/scrabble-solver/.next/static/chunks/101-829ab8a8d310e7a0.js +0 -3
  175. package/packages/scrabble-solver/.next/static/chunks/256.66ff9fb6d7db9ec7.js +0 -1
  176. package/packages/scrabble-solver/.next/static/chunks/693.677c88e0eb1340b5.js +0 -1
  177. package/packages/scrabble-solver/.next/static/chunks/980.7ce17464fc56648a.js +0 -1
  178. package/packages/scrabble-solver/.next/static/chunks/pages/_app-f9ec81278ffa7b1a.js +0 -1
  179. package/packages/scrabble-solver/.next/static/chunks/pages/index-b5bf018100015277.js +0 -1
  180. package/packages/scrabble-solver/.next/static/css/a691348b788f8bc0.css +0 -1
  181. package/packages/scrabble-solver/src/api/getServerLoggingData.ts +0 -17
  182. package/packages/scrabble-solver/src/hooks/useIsCompactLayout.ts +0 -14
  183. /package/packages/scrabble-solver/.next/static/{nvGZh1gPuX98L07YmxlYD → TAqjh9l5VJQOfJ4SzgPk2}/_ssgManifest.js +0 -0
@@ -0,0 +1,24 @@
1
+ import { type EventValue } from './events';
2
+
3
+ const FORMULA_PREFIX = /^[=+\-@\t\r]/;
4
+
5
+ export function formatCsvRow(values: EventValue[]): string {
6
+ return `${values.map(formatCsvField).join(',')}\n`;
7
+ }
8
+
9
+ function formatCsvField(value: EventValue): string {
10
+ if (typeof value === 'undefined') {
11
+ return '';
12
+ }
13
+
14
+ const text = typeof value === 'string' ? escapeFormula(value) : String(value);
15
+ return needsQuoting(text) ? `"${text.replaceAll('"', '""')}"` : text;
16
+ }
17
+
18
+ function escapeFormula(text: string): string {
19
+ return FORMULA_PREFIX.test(text) ? `'${text}` : text;
20
+ }
21
+
22
+ function needsQuoting(text: string): boolean {
23
+ return /[",\n\r]/.test(text) || text !== text.trim();
24
+ }
@@ -1 +1,13 @@
1
- export { logger } from './logger';
1
+ export { CSV_DIRECTORY, EVENTS_FILEPATH, OUTPUT_DIRECTORY } from './constants';
2
+ export {
3
+ EVENT_FIELDS,
4
+ type Event,
5
+ type EventOf,
6
+ type EventType,
7
+ type EventValue,
8
+ type LoggedEvent,
9
+ type Operation,
10
+ } from './events';
11
+ export { formatCsvRow } from './formatCsvRow';
12
+ export { logError } from './logError';
13
+ export { logEvent } from './logEvent';
@@ -0,0 +1,24 @@
1
+ import { IS_TEST_RUN } from './constants';
2
+ import { describeError, type ErrorDescription } from './describeError';
3
+ import { type EventOf, type Operation } from './events';
4
+ import { logEvent } from './logEvent';
5
+
6
+ type ErrorContext = Partial<Pick<EventOf<'error'>, 'level' | 'input' | 'ip' | 'locale' | 'ua'>>;
7
+
8
+ export function logError(
9
+ operation: Operation,
10
+ error: unknown,
11
+ { level = 'error', ...context }: ErrorContext = {},
12
+ ): void {
13
+ const description = describeError(error);
14
+ logEvent({ type: 'error', level, operation, ...description, ...context });
15
+
16
+ if (level === 'error' && !IS_TEST_RUN) {
17
+ process.stderr.write(formatStderrEntry(operation, description));
18
+ }
19
+ }
20
+
21
+ function formatStderrEntry(operation: Operation, { message, stack }: ErrorDescription): string {
22
+ const frames = stack?.split('\n').filter((line) => line.startsWith(' at ')) ?? [];
23
+ return `${[`${operation}: ${message}`, ...frames].join('\n')}\n`;
24
+ }
@@ -0,0 +1,59 @@
1
+ import { formatEventLine } from './logEvent';
2
+
3
+ const NOW = new Date('2026-08-23T02:09:02.123Z');
4
+
5
+ describe('formatEventLine', () => {
6
+ it('orders keys as timestamp, type, then the declared fields', () => {
7
+ const line = formatEventLine(
8
+ {
9
+ type: 'solve',
10
+ results: 312,
11
+ rack: 'p,z, ,c,v,m,t',
12
+ blanks: 4,
13
+ tiles: 61,
14
+ game: 'scrabble',
15
+ locale: 'en-US',
16
+ ms: 14,
17
+ ip: '203.0.113.7',
18
+ },
19
+ NOW,
20
+ );
21
+
22
+ expect(Object.keys(JSON.parse(line) as Record<string, unknown>)).toEqual([
23
+ 'timestamp',
24
+ 'type',
25
+ 'ip',
26
+ 'ms',
27
+ 'locale',
28
+ 'game',
29
+ 'tiles',
30
+ 'blanks',
31
+ 'rack',
32
+ 'results',
33
+ ]);
34
+ });
35
+
36
+ it('formats the timestamp in UTC with seconds precision', () => {
37
+ const line = formatEventLine({ type: 'build', locale: 'pl-PL', words: 3, download_ms: 1, build_ms: 2 }, NOW);
38
+
39
+ expect(line).toBe(
40
+ '{"timestamp":"2026-08-23T02:09:02Z","type":"build","locale":"pl-PL","words":3,"download_ms":1,"build_ms":2}\n',
41
+ );
42
+ });
43
+
44
+ it('omits undefined fields', () => {
45
+ const line = formatEventLine({ type: 'visit', ip: '::1', referrer: undefined }, NOW);
46
+
47
+ expect(line).toBe('{"timestamp":"2026-08-23T02:09:02Z","type":"visit","ip":"::1"}\n');
48
+ });
49
+
50
+ it('keeps multi-line values on a single line', () => {
51
+ const line = formatEventLine(
52
+ { type: 'error', level: 'error', operation: 'solve', message: 'Error: boom', stack: 'Error: boom\n at solve' },
53
+ NOW,
54
+ );
55
+
56
+ expect(line.endsWith('\n')).toBe(true);
57
+ expect(line.slice(0, -1)).not.toContain('\n');
58
+ });
59
+ });
@@ -0,0 +1,26 @@
1
+ import fs from 'fs';
2
+
3
+ import { EVENTS_FILEPATH, IS_TEST_RUN, OUTPUT_DIRECTORY } from './constants';
4
+ import { EVENT_FIELDS, type Event } from './events';
5
+
6
+ export function logEvent(event: Event): void {
7
+ if (IS_TEST_RUN) {
8
+ return;
9
+ }
10
+
11
+ try {
12
+ fs.mkdirSync(OUTPUT_DIRECTORY, { recursive: true });
13
+ fs.appendFileSync(EVENTS_FILEPATH, formatEventLine(event, new Date()));
14
+ } catch (error) {
15
+ process.stderr.write(`Could not append to ${EVENTS_FILEPATH}: ${String(error)}\n`);
16
+ }
17
+ }
18
+
19
+ export function formatEventLine(event: Event, now: Date): string {
20
+ const line = { timestamp: formatTimestamp(now), ...event };
21
+ return `${JSON.stringify(line, ['timestamp', 'type', ...EVENT_FIELDS[event.type]])}\n`;
22
+ }
23
+
24
+ function formatTimestamp(date: Date): string {
25
+ return `${date.toISOString().slice(0, 19)}Z`;
26
+ }
@@ -1 +1 @@
1
- nvGZh1gPuX98L07YmxlYD
1
+ TAqjh9l5VJQOfJ4SzgPk2
@@ -4,37 +4,37 @@
4
4
  ],
5
5
  "devFiles": [],
6
6
  "lowPriorityFiles": [
7
- "static/nvGZh1gPuX98L07YmxlYD/_buildManifest.js",
8
- "static/nvGZh1gPuX98L07YmxlYD/_ssgManifest.js"
7
+ "static/TAqjh9l5VJQOfJ4SzgPk2/_buildManifest.js",
8
+ "static/TAqjh9l5VJQOfJ4SzgPk2/_ssgManifest.js"
9
9
  ],
10
10
  "rootMainFiles": [],
11
11
  "rootMainFilesTree": {},
12
12
  "pages": {
13
13
  "/": [
14
- "static/chunks/webpack-9f5c9d275348829b.js",
14
+ "static/chunks/webpack-d73aa4aae49cd800.js",
15
15
  "static/chunks/framework-626cbd48ac5aca57.js",
16
- "static/chunks/main-7e52da35a4beea0b.js",
17
- "static/chunks/101-829ab8a8d310e7a0.js",
18
- "static/css/a691348b788f8bc0.css",
19
- "static/chunks/pages/index-b5bf018100015277.js"
16
+ "static/chunks/main-6e9ac37e28d2b899.js",
17
+ "static/chunks/101-f341f70c10d71212.js",
18
+ "static/css/8b8087461767360a.css",
19
+ "static/chunks/pages/index-ea21d96a88f25000.js"
20
20
  ],
21
21
  "/_app": [
22
- "static/chunks/webpack-9f5c9d275348829b.js",
22
+ "static/chunks/webpack-d73aa4aae49cd800.js",
23
23
  "static/chunks/framework-626cbd48ac5aca57.js",
24
- "static/chunks/main-7e52da35a4beea0b.js",
25
- "static/css/92f85ce358a0a468.css",
26
- "static/chunks/pages/_app-f9ec81278ffa7b1a.js"
24
+ "static/chunks/main-6e9ac37e28d2b899.js",
25
+ "static/css/4dbcacc1122ac6b9.css",
26
+ "static/chunks/pages/_app-9340d51f5a6787fc.js"
27
27
  ],
28
28
  "/_error": [
29
- "static/chunks/webpack-9f5c9d275348829b.js",
29
+ "static/chunks/webpack-d73aa4aae49cd800.js",
30
30
  "static/chunks/framework-626cbd48ac5aca57.js",
31
- "static/chunks/main-7e52da35a4beea0b.js",
31
+ "static/chunks/main-6e9ac37e28d2b899.js",
32
32
  "static/chunks/pages/_error-f0290a98eb3ed0ec.js"
33
33
  ],
34
34
  "/not-found": [
35
- "static/chunks/webpack-9f5c9d275348829b.js",
35
+ "static/chunks/webpack-d73aa4aae49cd800.js",
36
36
  "static/chunks/framework-626cbd48ac5aca57.js",
37
- "static/chunks/main-7e52da35a4beea0b.js",
37
+ "static/chunks/main-6e9ac37e28d2b899.js",
38
38
  "static/css/dee878eb64099d92.css",
39
39
  "static/chunks/pages/not-found-a59f9deeeff63d17.js"
40
40
  ]
@@ -1 +1 @@
1
- {"previewModeId":"a0d7e48d2f751f641ae8d4e15ae2a9dc","previewModeSigningKey":"80604c8e4164b32e142703706235bffd675c80348fdfef7f93e5d13ef7760c2a","previewModeEncryptionKey":"356a31690fd9d3054c9de7112f4dee3c0d25d77d322ea00b9f7e8c673ddd0a88","expireAt":1788642382928}
1
+ {"previewModeId":"e5170c92693187cbcaea7f0870f1dee9","previewModeSigningKey":"0c5a68123049e96214b96449ac2369512c92f037cbaa7ba1fcbbb5cc88a9f616","previewModeEncryptionKey":"f221cca83515401e7209f83f08b599624beae995a831fce2f0cad7b3ad0717c4","expireAt":1789073653209}
@@ -1 +1 @@
1
- {"encryption.key":"uC1/GoeGHlLbV2czZ46EDoCC+XobPQZuP42mkVQI9ws=","encryption.expire_at":1788642382925}
1
+ {"encryption.key":"J2cfMTok6hqjBhYuQZFGtnkvM8aA3sSVCNwugUSwtMc=","encryption.expire_at":1789073653206}