@striae-org/striae 4.3.4 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/.env.example +9 -2
  2. package/app/components/actions/case-export/download-handlers.ts +66 -11
  3. package/app/components/actions/case-import/confirmation-import.ts +50 -7
  4. package/app/components/actions/case-import/confirmation-package.ts +99 -22
  5. package/app/components/actions/case-import/orchestrator.ts +116 -13
  6. package/app/components/actions/case-import/validation.ts +171 -7
  7. package/app/components/actions/case-import/zip-processing.ts +224 -127
  8. package/app/components/actions/case-manage.ts +74 -15
  9. package/app/components/actions/confirm-export.ts +32 -3
  10. package/app/components/actions/generate-pdf.ts +43 -1
  11. package/app/components/actions/image-manage.ts +13 -45
  12. package/app/components/navbar/navbar.module.css +0 -10
  13. package/app/components/navbar/navbar.tsx +0 -22
  14. package/app/components/sidebar/case-import/case-import.module.css +7 -131
  15. package/app/components/sidebar/case-import/case-import.tsx +7 -14
  16. package/app/components/sidebar/case-import/components/CasePreviewSection.tsx +17 -60
  17. package/app/components/sidebar/case-import/components/ConfirmationDialog.tsx +23 -39
  18. package/app/components/sidebar/case-import/components/ConfirmationPreviewSection.tsx +5 -45
  19. package/app/components/sidebar/case-import/components/FileSelector.tsx +5 -6
  20. package/app/components/sidebar/case-import/hooks/useFilePreview.ts +2 -48
  21. package/app/components/sidebar/case-import/utils/file-validation.ts +9 -21
  22. package/app/config-example/config.json +5 -0
  23. package/app/routes/auth/login.tsx +1 -1
  24. package/app/routes/striae/hooks/use-striae-reset-helpers.ts +4 -0
  25. package/app/routes/striae/striae.tsx +15 -4
  26. package/app/utils/data/operations/case-operations.ts +13 -1
  27. package/app/utils/data/operations/confirmation-summary-operations.ts +38 -1
  28. package/app/utils/data/operations/file-annotation-operations.ts +13 -1
  29. package/app/utils/data/operations/signing-operations.ts +93 -0
  30. package/app/utils/data/operations/types.ts +6 -0
  31. package/app/utils/forensics/export-encryption.ts +316 -0
  32. package/app/utils/forensics/export-verification.ts +1 -409
  33. package/app/utils/forensics/index.ts +1 -0
  34. package/app/utils/ui/case-messages.ts +5 -2
  35. package/package.json +2 -2
  36. package/scripts/deploy-config.sh +244 -7
  37. package/scripts/deploy-pages-secrets.sh +0 -6
  38. package/scripts/deploy-worker-secrets.sh +66 -5
  39. package/scripts/encrypt-r2-backfill.mjs +376 -0
  40. package/worker-configuration.d.ts +13 -7
  41. package/workers/audit-worker/package.json +1 -4
  42. package/workers/audit-worker/src/audit-worker.example.ts +522 -61
  43. package/workers/audit-worker/wrangler.jsonc.example +6 -1
  44. package/workers/data-worker/package.json +1 -4
  45. package/workers/data-worker/src/data-worker.example.ts +409 -1
  46. package/workers/data-worker/src/encryption-utils.ts +269 -0
  47. package/workers/data-worker/worker-configuration.d.ts +1 -1
  48. package/workers/data-worker/wrangler.jsonc.example +6 -2
  49. package/workers/image-worker/package.json +1 -4
  50. package/workers/image-worker/src/encryption-utils.ts +217 -0
  51. package/workers/image-worker/src/image-worker.example.ts +196 -127
  52. package/workers/image-worker/wrangler.jsonc.example +8 -1
  53. package/workers/keys-worker/package.json +1 -4
  54. package/workers/keys-worker/wrangler.jsonc.example +1 -1
  55. package/workers/pdf-worker/package.json +1 -4
  56. package/workers/pdf-worker/wrangler.jsonc.example +1 -1
  57. package/workers/user-worker/package.json +1 -4
  58. package/workers/user-worker/wrangler.jsonc.example +1 -1
  59. package/wrangler.toml.example +1 -1
  60. package/app/components/public-signing-key-modal/public-signing-key-modal.module.css +0 -287
  61. package/app/components/public-signing-key-modal/public-signing-key-modal.tsx +0 -470
@@ -1,287 +0,0 @@
1
- .overlay {
2
- position: fixed;
3
- inset: 0;
4
- background-color: color-mix(in lab, var(--background) 60%, transparent);
5
- display: flex;
6
- justify-content: center;
7
- align-items: center;
8
- z-index: var(--zIndex5);
9
- padding: var(--spaceL);
10
- cursor: default;
11
- }
12
-
13
- .modal {
14
- position: relative;
15
- width: 100%;
16
- max-width: 640px;
17
- max-height: 90vh;
18
- background: var(--backgroundLight);
19
- border-radius: var(--spaceXS);
20
- display: flex;
21
- flex-direction: column;
22
- box-shadow: 0 var(--spaceXS) var(--spaceL)
23
- color-mix(in lab, var(--black) 18%, transparent);
24
- overflow: hidden;
25
- cursor: default;
26
- }
27
-
28
- .header {
29
- display: flex;
30
- justify-content: space-between;
31
- align-items: center;
32
- padding: var(--spaceL);
33
- border-bottom: 1px solid color-mix(in lab, var(--text) 10%, transparent);
34
- }
35
-
36
- .title {
37
- margin: 0;
38
- font-size: var(--fontSizeBodyL);
39
- font-weight: 600;
40
- color: var(--textTitle);
41
- }
42
-
43
- .closeButton {
44
- background: none;
45
- border: none;
46
- font-size: var(--fontSizeH5);
47
- cursor: pointer;
48
- padding: var(--spaceS);
49
- color: var(--textLight);
50
- transition: color var(--durationS) var(--bezierFastoutSlowin);
51
- }
52
-
53
- .closeButton:hover {
54
- color: var(--text);
55
- }
56
-
57
- .content {
58
- padding: var(--spaceL);
59
- flex: 1 1 auto;
60
- min-height: 0;
61
- display: flex;
62
- flex-direction: column;
63
- gap: var(--spaceM);
64
- overflow-y: auto;
65
- overflow-x: hidden;
66
- }
67
-
68
- .description {
69
- margin: 0;
70
- font-size: var(--fontSizeBodyS);
71
- color: var(--textBody);
72
- }
73
-
74
- .meta {
75
- margin: 0;
76
- font-size: var(--fontSizeBodyS);
77
- color: var(--textTitle);
78
- }
79
-
80
- .meta span {
81
- font-weight: var(--fontWeightMedium);
82
- }
83
-
84
- .verifierLayout {
85
- display: flex;
86
- flex-direction: column;
87
- gap: var(--spaceL);
88
- }
89
-
90
- .verificationField {
91
- display: flex;
92
- flex-direction: column;
93
- gap: var(--spaceS);
94
- }
95
-
96
- .fieldHeader {
97
- display: flex;
98
- align-items: center;
99
- justify-content: space-between;
100
- gap: var(--spaceS);
101
- }
102
-
103
- .fieldLabel {
104
- font-size: var(--fontSizeBodyXS);
105
- font-weight: var(--fontWeightMedium);
106
- color: var(--textTitle);
107
- }
108
-
109
- .hiddenFileInput {
110
- display: none;
111
- }
112
-
113
- .clearButton {
114
- background: none;
115
- border: none;
116
- padding: 0;
117
- color: var(--primary);
118
- font-size: var(--fontSizeBodyXS);
119
- font-weight: var(--fontWeightMedium);
120
- cursor: pointer;
121
- }
122
-
123
- .dropZone {
124
- min-height: 144px;
125
- margin: 0;
126
- display: flex;
127
- flex-direction: column;
128
- justify-content: center;
129
- gap: var(--spaceXS);
130
- padding: var(--spaceL);
131
- border: 1px dashed color-mix(in lab, var(--text) 18%, transparent);
132
- border-radius: var(--radiusM);
133
- background: linear-gradient(
134
- 135deg,
135
- color-mix(in lab, var(--primary) 4%, var(--backgroundLight)),
136
- color-mix(in lab, var(--background) 94%, transparent)
137
- );
138
- cursor: pointer;
139
- transition:
140
- border-color var(--durationS) var(--bezierFastoutSlowin),
141
- background-color var(--durationS) var(--bezierFastoutSlowin),
142
- box-shadow var(--durationS) var(--bezierFastoutSlowin);
143
- }
144
-
145
- .dropZone:hover {
146
- border-color: color-mix(in lab, var(--primary) 35%, transparent);
147
- background: linear-gradient(
148
- 135deg,
149
- color-mix(in lab, var(--primary) 7%, var(--backgroundLight)),
150
- color-mix(in lab, var(--background) 92%, transparent)
151
- );
152
- }
153
-
154
- .dropZone:focus-visible {
155
- outline: none;
156
- border-color: color-mix(in lab, var(--primary) 48%, transparent);
157
- box-shadow: 0 0 0 3px color-mix(in lab, var(--primary) 14%, transparent);
158
- }
159
-
160
- .dropZoneActive {
161
- border-color: color-mix(in lab, var(--primary) 50%, transparent);
162
- background: linear-gradient(
163
- 135deg,
164
- color-mix(in lab, var(--primary) 10%, var(--backgroundLight)),
165
- color-mix(in lab, var(--background) 90%, transparent)
166
- );
167
- box-shadow: 0 0 0 3px color-mix(in lab, var(--primary) 12%, transparent);
168
- }
169
-
170
- .dropZoneDisabled {
171
- opacity: 0.7;
172
- cursor: not-allowed;
173
- }
174
-
175
- .dropZonePrimary {
176
- margin: 0;
177
- font-size: var(--fontSizeBodyS);
178
- font-weight: var(--fontWeightMedium);
179
- color: var(--textTitle);
180
- }
181
-
182
- .dropZoneSecondary {
183
- margin: 0;
184
- font-size: var(--fontSizeBodyXS);
185
- color: var(--textBody);
186
- }
187
-
188
- .fieldActions {
189
- display: flex;
190
- flex-wrap: wrap;
191
- gap: var(--spaceS);
192
- }
193
-
194
- .fieldError {
195
- margin: 0;
196
- font-size: var(--fontSizeBodyXS);
197
- color: var(--error);
198
- }
199
-
200
- .resultCard {
201
- display: flex;
202
- flex-direction: column;
203
- gap: var(--spaceXS);
204
- padding: var(--spaceM) var(--spaceL);
205
- border-radius: var(--radiusM);
206
- }
207
-
208
- .resultPass {
209
- border: 1px solid color-mix(in lab, var(--success) 38%, transparent);
210
- background: color-mix(in lab, var(--success) 12%, var(--backgroundLight));
211
- }
212
-
213
- .resultFail {
214
- border: 1px solid color-mix(in lab, var(--error) 32%, transparent);
215
- background: color-mix(in lab, var(--errorLight) 40%, var(--backgroundLight));
216
- }
217
-
218
- .resultTitle {
219
- margin: 0;
220
- font-size: var(--fontSizeBodyM);
221
- font-weight: var(--fontWeightBold);
222
- letter-spacing: 0.06em;
223
- }
224
-
225
- .resultPass .resultTitle {
226
- color: color-mix(in lab, var(--success) 78%, var(--black));
227
- }
228
-
229
- .resultFail .resultTitle {
230
- color: color-mix(in lab, var(--error) 78%, var(--black));
231
- }
232
-
233
- .resultMessage {
234
- margin: 0;
235
- font-size: var(--fontSizeBodyS);
236
- color: var(--textBody);
237
- }
238
-
239
- .actions {
240
- display: flex;
241
- justify-content: flex-end;
242
- gap: var(--spaceS);
243
- flex-wrap: wrap;
244
- }
245
-
246
- .primaryButton,
247
- .secondaryButton {
248
- border-radius: var(--spaceXS);
249
- padding: var(--spaceS) var(--spaceL);
250
- font-size: var(--fontSizeBodyS);
251
- font-weight: var(--fontWeightMedium);
252
- cursor: pointer;
253
- transition:
254
- background-color var(--durationS) var(--bezierFastoutSlowin),
255
- border-color var(--durationS) var(--bezierFastoutSlowin),
256
- color var(--durationS) var(--bezierFastoutSlowin);
257
- }
258
-
259
- .primaryButton {
260
- background: var(--primary);
261
- color: var(--white);
262
- border: 1px solid var(--primary);
263
- }
264
-
265
- .primaryButton:hover:not(:disabled) {
266
- background: color-mix(in lab, var(--primary) 84%, var(--black));
267
- border-color: color-mix(in lab, var(--primary) 84%, var(--black));
268
- }
269
-
270
- .secondaryButton {
271
- background: transparent;
272
- color: var(--textTitle);
273
- border: 1px solid color-mix(in lab, var(--text) 16%, transparent);
274
- }
275
-
276
- .secondaryButton:hover:not(:disabled) {
277
- background: color-mix(in lab, var(--text) 5%, transparent);
278
- border-color: color-mix(in lab, var(--text) 22%, transparent);
279
- }
280
-
281
- .primaryButton:disabled,
282
- .secondaryButton:disabled {
283
- background: color-mix(in lab, var(--background) 95%, transparent);
284
- color: var(--textLight);
285
- border-color: color-mix(in lab, var(--text) 10%, transparent);
286
- cursor: not-allowed;
287
- }