@striae-org/striae 4.0.2 → 4.0.3

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.
@@ -0,0 +1,523 @@
1
+ .container {
2
+ position: relative;
3
+ display: flex;
4
+ justify-content: center;
5
+ align-items: center;
6
+ min-height: 100vh;
7
+ padding: var(--spaceL);
8
+ z-index: var(--zIndex0);
9
+ }
10
+
11
+ .logo {
12
+ position: fixed;
13
+ top: var(--spaceL);
14
+ left: var(--spaceL);
15
+ width: 150px;
16
+ height: 150px;
17
+ background-image: url("/logo-dark.png");
18
+ background-size: contain;
19
+ background-repeat: no-repeat;
20
+ background-position: center;
21
+ z-index: var(--zIndex2);
22
+ transition: transform var(--durationM) var(--bezierFastoutSlowin);
23
+ }
24
+
25
+ .logo:hover {
26
+ transform: scale(1.05);
27
+ }
28
+
29
+ .formWrapper {
30
+ background-color: color-mix(in lab, var(--backgroundLight) 95%, transparent);
31
+ padding: var(--space2XL);
32
+ border-radius: var(--spaceXS);
33
+ box-shadow: 0 var(--spaceXS) var(--spaceM)
34
+ color-mix(in lab, var(--black) 10%, transparent);
35
+ width: 100%;
36
+ max-width: var(--maxWidthS);
37
+ }
38
+
39
+ .title {
40
+ text-align: center;
41
+ color: var(--textTitle);
42
+ margin-bottom: var(--spaceXL);
43
+ font-size: var(--fontSizeH4);
44
+ }
45
+
46
+ .form {
47
+ display: flex;
48
+ flex-direction: column;
49
+ gap: var(--spaceM);
50
+ }
51
+
52
+ .input {
53
+ padding: var(--spaceM);
54
+ border: 1.5px solid color-mix(in lab, var(--text) 20%, transparent);
55
+ border-radius: var(--spaceXS);
56
+ font-size: var(--fontSizeBodyM);
57
+ transition: all var(--durationS) var(--bezierFastoutSlowin);
58
+ }
59
+
60
+ .input:focus {
61
+ outline: none;
62
+ border-color: var(--primary);
63
+ box-shadow: 0 0 0 2px color-mix(in lab, var(--primary) 25%, transparent);
64
+ }
65
+
66
+ .input:disabled {
67
+ background-color: color-mix(in lab, var(--background) 95%, transparent);
68
+ cursor: not-allowed;
69
+ }
70
+
71
+ .passwordField {
72
+ position: relative;
73
+ display: flex;
74
+ align-items: center;
75
+ width: 100%;
76
+ }
77
+
78
+ .passwordField .input {
79
+ padding-right: var(--space2XL);
80
+ width: 100%;
81
+ }
82
+
83
+ .passwordToggle {
84
+ position: absolute;
85
+ right: var(--spaceM);
86
+ background: none;
87
+ border: none;
88
+ cursor: pointer;
89
+ font-size: 16px;
90
+ padding: var(--spaceXS);
91
+ border-radius: var(--spaceXS);
92
+ display: flex;
93
+ align-items: center;
94
+ justify-content: center;
95
+ transition: background-color var(--durationS) var(--bezierFastoutSlowin);
96
+ z-index: 1;
97
+ height: auto;
98
+ min-width: 24px;
99
+ }
100
+
101
+ .passwordToggle:hover {
102
+ background-color: color-mix(in lab, var(--text) 10%, transparent);
103
+ }
104
+
105
+ .passwordToggle:focus {
106
+ outline: 2px solid var(--primary);
107
+ outline-offset: 2px;
108
+ }
109
+
110
+ .button {
111
+ padding: var(--spaceM) var(--spaceL);
112
+ border-radius: var(--spaceXS);
113
+ font-size: var(--fontSizeBodyS);
114
+ cursor: pointer;
115
+ background-color: var(--primary);
116
+ color: var(--white);
117
+ border: none;
118
+ transition: all var(--durationS) var(--bezierFastoutSlowin);
119
+ }
120
+
121
+ .button:hover:not(:disabled) {
122
+ background-color: color-mix(in lab, var(--primary) 85%, var(--black));
123
+ }
124
+
125
+ .button:disabled {
126
+ background-color: color-mix(in lab, var(--background) 95%, transparent);
127
+ color: var(--textLight);
128
+ cursor: not-allowed;
129
+ }
130
+
131
+ .error {
132
+ color: color-mix(in lab, var(--error) 90%, var(--black));
133
+ text-align: left;
134
+ margin: var(--spaceXS) 0 var(--spaceS) 0;
135
+ font-size: var(--fontSizeBodyXS);
136
+ padding: var(--spaceS) var(--spaceM);
137
+ background: linear-gradient(
138
+ 135deg,
139
+ color-mix(in lab, var(--error) 12%, transparent),
140
+ color-mix(in lab, var(--error) 8%, transparent)
141
+ );
142
+ border-radius: var(--spaceXS);
143
+ border: 1px solid color-mix(in lab, var(--error) 30%, transparent);
144
+ border-left: 3px solid var(--error);
145
+ animation: slideInError var(--durationS) var(--bezierFastoutSlowin);
146
+ position: relative;
147
+ overflow: hidden;
148
+ box-shadow: 0 2px 8px color-mix(in lab, var(--text) 8%, transparent);
149
+ }
150
+
151
+ .error::before {
152
+ content: "";
153
+ position: absolute;
154
+ top: 0;
155
+ left: 0;
156
+ bottom: 0;
157
+ width: 3px;
158
+ background: var(--error);
159
+ animation: errorPulse 1.5s ease-in-out infinite;
160
+ }
161
+
162
+ .success {
163
+ color: color-mix(in lab, var(--success) 90%, var(--black));
164
+ text-align: left;
165
+ margin: var(--spaceXS) 0 var(--spaceS) 0;
166
+ font-size: var(--fontSizeBodyXS);
167
+ padding: var(--spaceS) var(--spaceM);
168
+ background: linear-gradient(
169
+ 135deg,
170
+ color-mix(in lab, var(--success) 12%, transparent),
171
+ color-mix(in lab, var(--success) 8%, transparent)
172
+ );
173
+ border-radius: var(--spaceXS);
174
+ border: 1px solid color-mix(in lab, var(--success) 30%, transparent);
175
+ border-left: 3px solid var(--success);
176
+ animation: slideInSuccess var(--durationS) var(--bezierFastoutSlowin);
177
+ position: relative;
178
+ overflow: hidden;
179
+ box-shadow: 0 2px 8px color-mix(in lab, var(--text) 8%, transparent);
180
+ }
181
+
182
+ .success::before {
183
+ content: "";
184
+ position: absolute;
185
+ top: 0;
186
+ left: 0;
187
+ bottom: 0;
188
+ width: 3px;
189
+ background: var(--success);
190
+ animation: successPulse 1.5s ease-in-out infinite;
191
+ }
192
+
193
+ .hint {
194
+ color: var(--textLight);
195
+ text-align: center;
196
+ margin: calc(var(--spaceS) * -0.5) 0 var(--spaceS) 0;
197
+ font-size: var(--fontSizeBodyXS);
198
+ line-height: 1.4;
199
+ }
200
+
201
+ .toggle {
202
+ text-align: center;
203
+ margin-top: var(--spaceL);
204
+ color: var(--textLight);
205
+ }
206
+
207
+ .toggleButton {
208
+ background: none;
209
+ border: none;
210
+ color: var(--primary);
211
+ cursor: pointer;
212
+ font-size: inherit;
213
+ padding: 0;
214
+ text-decoration: underline;
215
+ transition: color var(--durationS) var(--bezierFastoutSlowin);
216
+ }
217
+
218
+ .toggleButton:hover:not(:disabled) {
219
+ color: color-mix(in lab, var(--primary) 85%, var(--black));
220
+ }
221
+
222
+ .toggleButton:disabled {
223
+ color: var(--textLight);
224
+ cursor: not-allowed;
225
+ }
226
+
227
+ .resetLink {
228
+ background: none;
229
+ border: none;
230
+ color: var(--primary);
231
+ cursor: pointer;
232
+ font-size: inherit;
233
+ padding: 0;
234
+ text-decoration: underline;
235
+ transition: color var(--durationS) var(--bezierFastoutSlowin);
236
+ }
237
+
238
+ .resetLink:hover {
239
+ color: color-mix(in lab, var(--primary) 85%, var(--black));
240
+ }
241
+
242
+ .passwordStrength {
243
+ font-size: var(--fontSizeBodyXS);
244
+ color: var(--textLight);
245
+ margin-top: var(--spaceS);
246
+ white-space: pre-line;
247
+ }
248
+
249
+ .caseReviewToggleSection {
250
+ display: flex;
251
+ align-items: center;
252
+ justify-content: space-between;
253
+ padding: var(--spaceM);
254
+ background: var(--backgroundLight);
255
+ border-radius: var(--spaceXS);
256
+ border: 1px solid color-mix(in lab, var(--text) 10%, transparent);
257
+ margin: var(--spaceM) 0;
258
+ }
259
+
260
+ .caseReviewLabel {
261
+ font-size: var(--fontSizeBodyS);
262
+ font-weight: var(--fontWeightMedium);
263
+ color: var(--textTitle);
264
+ margin: 0;
265
+ background: none;
266
+ border: none;
267
+ padding: 0;
268
+ cursor: pointer;
269
+ text-decoration: underline;
270
+ text-decoration-color: color-mix(in lab, var(--primary) 50%, transparent);
271
+ transition: color var(--durationS) var(--bezierFastoutSlowin);
272
+ }
273
+
274
+ .caseReviewLabel:hover {
275
+ color: var(--primary);
276
+ text-decoration-color: var(--primary);
277
+ }
278
+
279
+ .caseReviewToggle {
280
+ display: flex;
281
+ background: color-mix(in lab, var(--primary) 10%, transparent);
282
+ border: 1px solid color-mix(in lab, var(--primary) 20%, transparent);
283
+ border-radius: var(--spaceXS);
284
+ overflow: hidden;
285
+ box-shadow: 0 1px 3px color-mix(in lab, var(--primary) 15%, transparent);
286
+ }
287
+
288
+ .caseReviewOption {
289
+ background: transparent;
290
+ border: none;
291
+ padding: var(--spaceS) var(--spaceM);
292
+ font-size: var(--fontSizeBodyS);
293
+ font-weight: var(--fontWeightMedium);
294
+ color: var(--primary);
295
+ cursor: pointer;
296
+ transition: all var(--durationS) var(--bezierFastoutSlowin);
297
+ position: relative;
298
+ min-width: 50px;
299
+ }
300
+
301
+ .caseReviewOption:hover:not(:disabled) {
302
+ background: color-mix(in lab, var(--primary) 15%, transparent);
303
+ color: var(--primary);
304
+ }
305
+
306
+ .caseReviewOption:disabled {
307
+ opacity: 0.5;
308
+ cursor: not-allowed;
309
+ }
310
+
311
+ .caseReviewOptionActive {
312
+ background: var(--primary) !important;
313
+ color: white !important;
314
+ box-shadow: 0 1px 3px color-mix(in lab, var(--primary) 30%, transparent);
315
+ }
316
+
317
+ .caseReviewOptionActive:hover:not(:disabled) {
318
+ background: color-mix(in lab, var(--primary) 85%, var(--black)) !important;
319
+ }
320
+
321
+ /* Animations */
322
+ @keyframes slideInError {
323
+ from {
324
+ opacity: 0;
325
+ transform: translateY(calc(-1 * var(--spaceM))) scaleY(0.8);
326
+ max-height: 0;
327
+ padding-top: 0;
328
+ padding-bottom: 0;
329
+ margin-top: 0;
330
+ margin-bottom: 0;
331
+ }
332
+ to {
333
+ opacity: 1;
334
+ transform: translateY(0) scaleY(1);
335
+ max-height: 200px;
336
+ padding-top: var(--spaceS);
337
+ padding-bottom: var(--spaceS);
338
+ margin-top: var(--spaceXS);
339
+ margin-bottom: var(--spaceS);
340
+ }
341
+ }
342
+
343
+ @keyframes errorPulse {
344
+ 0%,
345
+ 100% {
346
+ opacity: 1;
347
+ box-shadow: 0 0 0 0 color-mix(in lab, var(--error) 40%, transparent);
348
+ }
349
+ 50% {
350
+ opacity: 0.7;
351
+ box-shadow: 0 0 0 4px color-mix(in lab, var(--error) 20%, transparent);
352
+ }
353
+ }
354
+
355
+ @keyframes slideInSuccess {
356
+ from {
357
+ opacity: 0;
358
+ transform: translateY(calc(-1 * var(--spaceM))) scaleY(0.8);
359
+ max-height: 0;
360
+ padding-top: 0;
361
+ padding-bottom: 0;
362
+ margin-top: 0;
363
+ margin-bottom: 0;
364
+ }
365
+ to {
366
+ opacity: 1;
367
+ transform: translateY(0) scaleY(1);
368
+ max-height: 200px;
369
+ padding-top: var(--spaceS);
370
+ padding-bottom: var(--spaceS);
371
+ margin-top: var(--spaceXS);
372
+ margin-bottom: var(--spaceS);
373
+ }
374
+ }
375
+
376
+ @keyframes successPulse {
377
+ 0%,
378
+ 100% {
379
+ opacity: 1;
380
+ box-shadow: 0 0 0 0 color-mix(in lab, var(--success) 40%, transparent);
381
+ }
382
+ 50% {
383
+ opacity: 0.7;
384
+ box-shadow: 0 0 0 4px color-mix(in lab, var(--success) 20%, transparent);
385
+ }
386
+ }
387
+
388
+ /* Reduce motion for accessibility */
389
+ @media (prefers-reduced-motion: reduce) {
390
+ .error,
391
+ .success {
392
+ animation: none;
393
+ }
394
+
395
+ .error::before,
396
+ .success::before {
397
+ animation: none;
398
+ }
399
+ }
400
+
401
+ /* Email Verification Description */
402
+ .verificationDescription {
403
+ font-size: var(--fontSizeBodyM);
404
+ color: var(--textBody);
405
+ text-align: center;
406
+ margin-bottom: var(--spaceL);
407
+ line-height: var(--lineHeightBody);
408
+ }
409
+
410
+ .verificationActions {
411
+ display: flex;
412
+ flex-direction: column;
413
+ gap: var(--spaceM);
414
+ width: 100%;
415
+ margin-bottom: var(--spaceL);
416
+ }
417
+
418
+ .secondaryButton {
419
+ background: transparent;
420
+ border: 1px solid var(--primary);
421
+ color: var(--primary);
422
+ padding: var(--spaceM) var(--spaceL);
423
+ border-radius: var(--spaceXS);
424
+ font-size: var(--fontSizeBodyS);
425
+ font-weight: var(--fontWeightMedium);
426
+ cursor: pointer;
427
+ transition: all var(--durationS) var(--bezierFastoutSlowin);
428
+ }
429
+
430
+ .secondaryButton:hover:not(:disabled) {
431
+ background: color-mix(in lab, var(--primary) 10%, transparent);
432
+ }
433
+
434
+ .secondaryButton:disabled {
435
+ opacity: 0.5;
436
+ cursor: not-allowed;
437
+ }
438
+
439
+ .secondaryButtonLink {
440
+ display: inline-block;
441
+ background: transparent;
442
+ border: 1px solid var(--primary);
443
+ color: var(--primary);
444
+ padding: var(--spaceM) var(--spaceL);
445
+ border-radius: var(--spaceXS);
446
+ font-size: var(--fontSizeBodyS);
447
+ font-weight: var(--fontWeightMedium);
448
+ cursor: pointer;
449
+ transition: all var(--durationS) var(--bezierFastoutSlowin);
450
+ text-decoration: none;
451
+ text-align: center;
452
+ width: 100%;
453
+ box-sizing: border-box;
454
+ }
455
+
456
+ .secondaryButtonLink:hover {
457
+ background: color-mix(in lab, var(--primary) 10%, transparent);
458
+ text-decoration: none;
459
+ color: var(--primary);
460
+ transform: translateY(-1px);
461
+ box-shadow: 0 2px 6px color-mix(in lab, currentColor 20%, transparent);
462
+ }
463
+
464
+ .verificationHints {
465
+ text-align: left;
466
+ background: color-mix(in lab, var(--backgroundLight) 50%, transparent);
467
+ padding: var(--spaceL);
468
+ border-radius: var(--spaceXS);
469
+ border: 1px solid color-mix(in lab, var(--text) 10%, transparent);
470
+ }
471
+
472
+ .loginToStriaeButton {
473
+ width: 100%;
474
+ padding: var(--spaceL);
475
+ background-color: #1e7e34;
476
+ color: var(--white);
477
+ border: none;
478
+ border-radius: var(--spaceXS);
479
+ font-weight: var(--fontWeightMedium);
480
+ font-size: var(--fontSizeBodyM);
481
+ cursor: pointer;
482
+ transition: all var(--durationS) var(--bezierFastoutSlowin);
483
+ box-sizing: border-box;
484
+ }
485
+
486
+ .loginToStriaeButton:hover:not(:disabled) {
487
+ background-color: #155724;
488
+ }
489
+
490
+ .loginToStriaeButton:disabled {
491
+ background-color: color-mix(in lab, var(--background) 95%, transparent);
492
+ color: var(--textLight);
493
+ cursor: not-allowed;
494
+ }
495
+
496
+ .verificationHints .hint {
497
+ font-size: var(--fontSizeBodyS);
498
+ color: var(--textTitle);
499
+ margin: 0 0 var(--spaceS) 0;
500
+ font-weight: var(--fontWeightMedium);
501
+ }
502
+
503
+ .hintList {
504
+ list-style: none;
505
+ padding: 0;
506
+ margin: 0;
507
+ }
508
+
509
+ .hintList li {
510
+ font-size: var(--fontSizeBodyXS);
511
+ color: var(--textBody);
512
+ margin-bottom: var(--spaceXS);
513
+ padding-left: var(--spaceM);
514
+ position: relative;
515
+ }
516
+
517
+ .hintList li::before {
518
+ content: "•";
519
+ color: var(--primary);
520
+ position: absolute;
521
+ left: 0;
522
+ font-weight: bold;
523
+ }
@@ -580,7 +580,7 @@ export const Login = () => {
580
580
  <Link
581
581
  viewTransition
582
582
  prefetch="intent"
583
- to="https://striae.app"
583
+ to="/"
584
584
  className={styles.logoLink}>
585
585
  <div className={styles.logo} />
586
586
  </Link>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@striae-org/striae",
3
- "version": "4.0.2",
3
+ "version": "4.0.3",
4
4
  "private": false,
5
5
  "description": "Striae is a specialized, cloud-native platform designed to streamline forensic firearms identification by providing an intuitive environment for digital comparison image annotation, authenticated confirmations, and automated report generation.",
6
6
  "license": "Apache-2.0",
@@ -697,6 +697,8 @@ validate_generated_configs() {
697
697
  "app/config/config.json"
698
698
  "app/config/firebase.ts"
699
699
  "app/config/admin-service.json"
700
+ "app/routes/auth/login.tsx"
701
+ "app/routes/auth/login.module.css"
700
702
  "workers/audit-worker/wrangler.jsonc"
701
703
  "workers/data-worker/wrangler.jsonc"
702
704
  "workers/image-worker/wrangler.jsonc"
@@ -741,6 +743,7 @@ validate_generated_configs() {
741
743
 
742
744
  assert_contains_literal "app/config/config.json" "https://$PAGES_CUSTOM_DOMAIN" "PAGES_CUSTOM_DOMAIN missing in app/config/config.json"
743
745
  assert_contains_literal "app/config/config.json" "$ACCOUNT_HASH" "ACCOUNT_HASH missing in app/config/config.json"
746
+ assert_contains_literal "app/routes/auth/login.tsx" "const APP_CANONICAL_ORIGIN = 'https://$PAGES_CUSTOM_DOMAIN';" "PAGES_CUSTOM_DOMAIN missing in app/routes/auth/login.tsx canonical origin"
744
747
 
745
748
  assert_contains_literal "app/config/firebase.ts" "$API_KEY" "API_KEY missing in app/config/firebase.ts"
746
749
  assert_contains_literal "app/config/firebase.ts" "$AUTH_DOMAIN" "AUTH_DOMAIN missing in app/config/firebase.ts"
@@ -776,6 +779,7 @@ validate_generated_configs() {
776
779
  "workers/user-worker/src/user-worker.ts"
777
780
  "app/config/config.json"
778
781
  "app/config/firebase.ts"
782
+ "app/routes/auth/login.tsx"
779
783
  )
780
784
 
781
785
  for file_path in "${files_to_scan[@]}"; do
@@ -862,6 +866,23 @@ copy_example_configs() {
862
866
 
863
867
  echo -e "${GREEN} ✅ app: copied $copied_config_files config file(s) from config-example${NC}"
864
868
  fi
869
+
870
+ # Copy auth route template files
871
+ echo -e "${YELLOW} Copying auth route template files...${NC}"
872
+
873
+ if [ -f "app/routes/auth/login.example.tsx" ] && { [ "$update_env" = "true" ] || [ ! -f "app/routes/auth/login.tsx" ]; }; then
874
+ cp app/routes/auth/login.example.tsx app/routes/auth/login.tsx
875
+ echo -e "${GREEN} ✅ auth: login.tsx created from example${NC}"
876
+ elif [ -f "app/routes/auth/login.tsx" ]; then
877
+ echo -e "${YELLOW} ⚠️ auth: login.tsx already exists, skipping copy${NC}"
878
+ fi
879
+
880
+ if [ -f "app/routes/auth/login.module.example.css" ] && { [ "$update_env" = "true" ] || [ ! -f "app/routes/auth/login.module.css" ]; }; then
881
+ cp app/routes/auth/login.module.example.css app/routes/auth/login.module.css
882
+ echo -e "${GREEN} ✅ auth: login.module.css created from example${NC}"
883
+ elif [ -f "app/routes/auth/login.module.css" ]; then
884
+ echo -e "${YELLOW} ⚠️ auth: login.module.css already exists, skipping copy${NC}"
885
+ fi
865
886
 
866
887
  # Navigate to each worker directory and copy the example file
867
888
  echo -e "${YELLOW} Copying worker configuration files...${NC}"
@@ -1450,6 +1471,12 @@ update_wrangler_configs() {
1450
1471
  sed -i "s|\"YOUR_FIREBASE_MEASUREMENT_ID\"|\"$MEASUREMENT_ID\"|g" app/config/firebase.ts
1451
1472
  echo -e "${GREEN} ✅ app firebase.ts updated${NC}"
1452
1473
  fi
1474
+
1475
+ if [ -f "app/routes/auth/login.tsx" ]; then
1476
+ echo -e "${YELLOW} Updating app/routes/auth/login.tsx...${NC}"
1477
+ sed -i "s|^const APP_CANONICAL_ORIGIN = .*;|const APP_CANONICAL_ORIGIN = 'https://$escaped_pages_custom_domain';|g" app/routes/auth/login.tsx
1478
+ echo -e "${GREEN} ✅ app login.tsx canonical origin updated${NC}"
1479
+ fi
1453
1480
 
1454
1481
  echo -e "${GREEN}✅ All configuration files updated${NC}"
1455
1482
  }
@@ -2,7 +2,7 @@
2
2
  "name": "AUDIT_WORKER_NAME",
3
3
  "account_id": "ACCOUNT_ID",
4
4
  "main": "src/audit-worker.ts",
5
- "compatibility_date": "2026-03-17",
5
+ "compatibility_date": "2026-03-18",
6
6
  "compatibility_flags": [
7
7
  "nodejs_compat"
8
8
  ],
@@ -3,7 +3,7 @@
3
3
  "name": "DATA_WORKER_NAME",
4
4
  "account_id": "ACCOUNT_ID",
5
5
  "main": "src/data-worker.ts",
6
- "compatibility_date": "2026-03-17",
6
+ "compatibility_date": "2026-03-18",
7
7
  "compatibility_flags": [
8
8
  "nodejs_compat"
9
9
  ],
@@ -2,7 +2,7 @@
2
2
  "name": "IMAGES_WORKER_NAME",
3
3
  "account_id": "ACCOUNT_ID",
4
4
  "main": "src/image-worker.ts",
5
- "compatibility_date": "2026-03-17",
5
+ "compatibility_date": "2026-03-18",
6
6
  "compatibility_flags": [
7
7
  "nodejs_compat"
8
8
  ],
@@ -2,7 +2,7 @@
2
2
  "name": "KEYS_WORKER_NAME",
3
3
  "account_id": "ACCOUNT_ID",
4
4
  "main": "src/keys.ts",
5
- "compatibility_date": "2026-03-17",
5
+ "compatibility_date": "2026-03-18",
6
6
  "compatibility_flags": [
7
7
  "nodejs_compat"
8
8
  ],
@@ -2,7 +2,7 @@
2
2
  "name": "PDF_WORKER_NAME",
3
3
  "account_id": "ACCOUNT_ID",
4
4
  "main": "src/pdf-worker.ts",
5
- "compatibility_date": "2026-03-17",
5
+ "compatibility_date": "2026-03-18",
6
6
  "compatibility_flags": [
7
7
  "nodejs_compat"
8
8
  ],
@@ -2,7 +2,7 @@
2
2
  "name": "USER_WORKER_NAME",
3
3
  "account_id": "ACCOUNT_ID",
4
4
  "main": "src/user-worker.ts",
5
- "compatibility_date": "2026-03-17",
5
+ "compatibility_date": "2026-03-18",
6
6
  "compatibility_flags": [
7
7
  "nodejs_compat"
8
8
  ],
@@ -1,6 +1,6 @@
1
1
  #:schema node_modules/wrangler/config-schema.json
2
2
  name = "PAGES_PROJECT_NAME"
3
- compatibility_date = "2026-03-17"
3
+ compatibility_date = "2026-03-18"
4
4
  compatibility_flags = ["nodejs_compat"]
5
5
  pages_build_output_dir = "./build/client"
6
6