@striae-org/striae 4.1.0 → 4.2.1

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 (124) hide show
  1. package/.env.example +8 -0
  2. package/LICENSE +1 -1
  3. package/app/components/actions/case-export/core-export.ts +14 -8
  4. package/app/components/actions/case-export/data-processing.ts +1 -0
  5. package/app/components/actions/case-export/download-handlers.ts +7 -0
  6. package/app/components/actions/case-export/metadata-helpers.ts +2 -1
  7. package/app/components/actions/case-import/confirmation-import.ts +12 -2
  8. package/app/components/actions/case-import/orchestrator.ts +78 -32
  9. package/app/components/actions/case-import/storage-operations.ts +97 -8
  10. package/app/components/actions/case-import/zip-processing.ts +159 -86
  11. package/app/components/actions/case-manage.ts +463 -8
  12. package/app/components/actions/confirm-export.ts +9 -2
  13. package/app/components/actions/image-manage.ts +77 -44
  14. package/app/components/audit/user-audit-viewer.tsx +19 -8
  15. package/app/components/audit/user-audit.module.css +21 -0
  16. package/app/components/audit/viewer/audit-entries-list.tsx +12 -2
  17. package/app/components/audit/viewer/audit-filters-panel.tsx +1 -0
  18. package/app/components/audit/viewer/audit-viewer-utils.ts +2 -0
  19. package/app/components/audit/viewer/use-audit-viewer-data.ts +24 -1
  20. package/app/components/audit/viewer/use-audit-viewer-export.ts +1 -1
  21. package/app/components/canvas/box-annotations/box-annotations.module.css +22 -18
  22. package/app/components/canvas/box-annotations/box-annotations.tsx +15 -0
  23. package/app/components/canvas/canvas.module.css +64 -54
  24. package/app/components/canvas/canvas.tsx +14 -16
  25. package/app/components/canvas/confirmation/confirmation.module.css +1 -0
  26. package/app/components/canvas/confirmation/confirmation.tsx +12 -14
  27. package/app/components/colors/colors.module.css +4 -3
  28. package/app/components/navbar/case-modals/archive-case-modal.module.css +110 -0
  29. package/app/components/navbar/case-modals/archive-case-modal.tsx +129 -0
  30. package/app/components/navbar/case-modals/open-case-modal.module.css +81 -0
  31. package/app/components/navbar/case-modals/open-case-modal.tsx +120 -0
  32. package/app/components/navbar/case-modals/rename-case-modal.module.css +81 -0
  33. package/app/components/navbar/case-modals/rename-case-modal.tsx +107 -0
  34. package/app/components/navbar/navbar.module.css +447 -0
  35. package/app/components/navbar/navbar.tsx +402 -0
  36. package/app/components/public-signing-key-modal/public-signing-key-modal.module.css +1 -0
  37. package/app/components/public-signing-key-modal/public-signing-key-modal.tsx +15 -16
  38. package/app/components/sidebar/case-export/case-export.module.css +1 -0
  39. package/app/components/sidebar/case-export/case-export.tsx +8 -46
  40. package/app/components/sidebar/case-import/case-import.module.css +23 -0
  41. package/app/components/sidebar/case-import/case-import.tsx +64 -16
  42. package/app/components/sidebar/case-import/components/CasePreviewSection.tsx +20 -1
  43. package/app/components/sidebar/case-import/components/ConfirmationDialog.tsx +15 -0
  44. package/app/components/sidebar/cases/case-sidebar.tsx +68 -588
  45. package/app/components/sidebar/cases/cases-modal.module.css +1 -0
  46. package/app/components/sidebar/cases/cases-modal.tsx +82 -43
  47. package/app/components/sidebar/cases/cases.module.css +82 -21
  48. package/app/components/sidebar/files/files-modal.module.css +1 -0
  49. package/app/components/sidebar/files/files-modal.tsx +49 -52
  50. package/app/components/sidebar/notes/addl-notes-modal.tsx +82 -0
  51. package/app/components/sidebar/notes/{notes-sidebar.tsx → notes-editor-form.tsx} +187 -138
  52. package/app/components/sidebar/notes/notes-editor-modal.module.css +49 -0
  53. package/app/components/sidebar/notes/notes-editor-modal.tsx +64 -0
  54. package/app/components/sidebar/notes/notes.module.css +170 -1
  55. package/app/components/sidebar/sidebar-container.tsx +16 -28
  56. package/app/components/sidebar/sidebar.module.css +5 -69
  57. package/app/components/sidebar/sidebar.tsx +27 -125
  58. package/app/components/sidebar/upload/image-upload-zone.module.css +13 -13
  59. package/app/components/user/inactivity-warning.module.css +1 -0
  60. package/app/components/user/inactivity-warning.tsx +15 -2
  61. package/app/components/user/manage-profile.tsx +23 -10
  62. package/app/{tailwind.css → global.css} +1 -3
  63. package/app/hooks/useOverlayDismiss.ts +54 -4
  64. package/app/root.tsx +1 -1
  65. package/app/routes/auth/login.tsx +785 -774
  66. package/app/routes/striae/striae.module.css +10 -3
  67. package/app/routes/striae/striae.tsx +475 -30
  68. package/app/services/audit/audit.service.ts +173 -27
  69. package/app/services/audit/builders/audit-event-builders-case-file.ts +43 -0
  70. package/app/services/audit/builders/audit-event-builders-workflow.ts +2 -0
  71. package/app/services/audit/builders/index.ts +1 -0
  72. package/app/types/audit.ts +4 -1
  73. package/app/types/case.ts +29 -0
  74. package/app/types/import.ts +3 -0
  75. package/app/utils/data/confirmation-summary/summary-core.ts +279 -0
  76. package/app/utils/data/data-operations.ts +17 -861
  77. package/app/utils/data/index.ts +11 -1
  78. package/app/utils/data/operations/batch-operations.ts +113 -0
  79. package/app/utils/data/operations/case-operations.ts +168 -0
  80. package/app/utils/data/operations/confirmation-summary-operations.ts +301 -0
  81. package/app/utils/data/operations/file-annotation-operations.ts +196 -0
  82. package/app/utils/data/operations/index.ts +7 -0
  83. package/app/utils/data/operations/signing-operations.ts +225 -0
  84. package/app/utils/data/operations/types.ts +42 -0
  85. package/app/utils/data/operations/validation-operations.ts +48 -0
  86. package/app/utils/data/permissions.ts +16 -1
  87. package/app/utils/forensics/audit-export-signature.ts +5 -1
  88. package/app/utils/forensics/confirmation-signature.ts +3 -0
  89. package/app/utils/forensics/export-verification.ts +426 -22
  90. package/functions/api/_shared/firebase-auth.ts +2 -7
  91. package/functions/api/image/[[path]].ts +20 -23
  92. package/functions/api/pdf/[[path]].ts +27 -8
  93. package/package.json +7 -12
  94. package/scripts/deploy-primershear-emails.sh +2 -1
  95. package/worker-configuration.d.ts +3 -3
  96. package/workers/audit-worker/package.json +1 -1
  97. package/workers/audit-worker/worker-configuration.d.ts +7448 -11323
  98. package/workers/audit-worker/wrangler.jsonc.example +1 -1
  99. package/workers/data-worker/package.json +1 -1
  100. package/workers/data-worker/worker-configuration.d.ts +7448 -11323
  101. package/workers/data-worker/wrangler.jsonc.example +1 -1
  102. package/workers/image-worker/package.json +1 -1
  103. package/workers/image-worker/src/image-worker.example.ts +16 -5
  104. package/workers/image-worker/worker-configuration.d.ts +7447 -11322
  105. package/workers/image-worker/wrangler.jsonc.example +1 -1
  106. package/workers/keys-worker/package.json +1 -1
  107. package/workers/keys-worker/worker-configuration.d.ts +7447 -11322
  108. package/workers/keys-worker/wrangler.jsonc.example +1 -1
  109. package/workers/pdf-worker/package.json +1 -1
  110. package/workers/pdf-worker/src/formats/format-striae.ts +9 -14
  111. package/workers/pdf-worker/src/pdf-worker.example.ts +37 -58
  112. package/workers/pdf-worker/src/report-types.ts +3 -3
  113. package/workers/pdf-worker/worker-configuration.d.ts +7448 -11323
  114. package/workers/pdf-worker/wrangler.jsonc.example +1 -1
  115. package/workers/user-worker/package.json +1 -1
  116. package/workers/user-worker/src/user-worker.example.ts +17 -0
  117. package/workers/user-worker/worker-configuration.d.ts +7448 -11323
  118. package/workers/user-worker/wrangler.jsonc.example +1 -1
  119. package/wrangler.toml.example +1 -1
  120. package/NOTICE +0 -13
  121. package/app/components/sidebar/notes/notes-modal.tsx +0 -53
  122. package/postcss.config.js +0 -6
  123. package/public/.well-known/keybase.txt +0 -56
  124. package/tailwind.config.ts +0 -22
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@striae-org/striae",
3
- "version": "4.1.0",
3
+ "version": "4.2.1",
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",
@@ -44,7 +44,7 @@
44
44
  "app/entry.server.tsx",
45
45
  "app/root.tsx",
46
46
  "app/routes.ts",
47
- "app/tailwind.css",
47
+ "app/global.css",
48
48
  "react-router.config.ts",
49
49
  "load-context.ts",
50
50
  "functions/",
@@ -64,14 +64,11 @@
64
64
  ".env.example",
65
65
  "primershear.emails.example",
66
66
  "firebase.json",
67
- "postcss.config.js",
68
- "tailwind.config.ts",
69
67
  "tsconfig.json",
70
68
  "vite.config.ts",
71
69
  "worker-configuration.d.ts",
72
70
  "wrangler.toml.example",
73
- "LICENSE",
74
- "NOTICE"
71
+ "LICENSE"
75
72
  ],
76
73
  "sideEffects": false,
77
74
  "type": "module",
@@ -102,9 +99,9 @@
102
99
  "install-workers": "bash ./scripts/install-workers.sh",
103
100
  "deploy-workers": "npm run deploy-workers:audit && npm run deploy-workers:data && npm run deploy-workers:image && npm run deploy-workers:keys && npm run deploy-workers:pdf && npm run deploy-workers:user",
104
101
  "deploy-workers:secrets": "bash ./scripts/deploy-worker-secrets.sh",
105
- "deploy-pages:secrets": "bash ./scripts/deploy-pages-secrets.sh",
102
+ "deploy-pages:secrets": "bash ./scripts/deploy-pages-secrets.sh --production-only",
106
103
  "deploy-pages": "bash ./scripts/deploy-pages.sh",
107
- "deploy-primershear": "bash ./scripts/deploy-primershear-emails.sh",
104
+ "deploy-primershear": "bash ./scripts/deploy-primershear-emails.sh --production-only",
108
105
  "deploy-workers:audit": "cd workers/audit-worker && npm run deploy",
109
106
  "deploy-workers:data": "cd workers/data-worker && npm run deploy",
110
107
  "deploy-workers:image": "cd workers/image-worker && npm run deploy",
@@ -129,15 +126,13 @@
129
126
  "@types/react-dom": "^19.2.3",
130
127
  "@typescript-eslint/eslint-plugin": "^8.57.1",
131
128
  "@typescript-eslint/parser": "^8.57.1",
132
- "autoprefixer": "^10.4.27",
133
129
  "eslint": "^9.39.4",
134
130
  "eslint-import-resolver-typescript": "^4.4.4",
135
131
  "eslint-plugin-import": "^2.32.0",
136
132
  "eslint-plugin-jsx-a11y": "^6.10.2",
137
133
  "eslint-plugin-react": "^7.37.5",
138
134
  "eslint-plugin-react-hooks": "^7.0.1",
139
- "postcss": "^8.5.8",
140
- "tailwindcss": "^3.4.19",
135
+ "modern-normalize": "^3.0.1",
141
136
  "typescript": "^5.9.3",
142
137
  "vite": "^6.4.1",
143
138
  "vite-tsconfig-paths": "^6.1.1",
@@ -157,4 +152,4 @@
157
152
  "node": ">=20.0.0"
158
153
  },
159
154
  "packageManager": "npm@11.11.0"
160
- }
155
+ }
@@ -81,7 +81,8 @@ if [ ! -f "$EMAILS_FILE" ]; then
81
81
  fi
82
82
 
83
83
  # Strip comment lines and blank lines, then join with commas
84
- PRIMERSHEAR_EMAILS=$(grep -v '^\s*#' "$EMAILS_FILE" | grep -v '^\s*$' | paste -sd ',' -)
84
+ # Use || true to avoid failure if paste gets no input (handles empty file gracefully)
85
+ PRIMERSHEAR_EMAILS=$(grep -v '^[[:space:]]*#' "$EMAILS_FILE" | grep -v '^[[:space:]]*$' | paste -sd ',' - || true)
85
86
 
86
87
  if [ -z "$PRIMERSHEAR_EMAILS" ]; then
87
88
  echo -e "${YELLOW}⚠️ primershear.emails contains no active email addresses.${NC}"
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable */
2
2
  // Generated by Wrangler by running `wrangler types` (hash: 3509cf2c6fcfb4a2a6e6bd16efbe22b3)
3
- // Runtime types generated with workerd@1.20250823.0 2026-03-19 nodejs_compat
3
+ // Runtime types generated with workerd@1.20250823.0 2026-03-20 nodejs_compat
4
4
  declare namespace Cloudflare {
5
5
  interface Env {
6
6
  ACCOUNT_ID: string;
@@ -5485,7 +5485,7 @@ type AIGatewayHeaders = {
5485
5485
  [key: string]: string | number | boolean | object;
5486
5486
  };
5487
5487
  type AIGatewayUniversalRequest = {
5488
- provider: AIGatewayProviders | string; // eslint-disable-line
5488
+ provider: AIGatewayProviders | string;
5489
5489
  endpoint: string;
5490
5490
  headers: Partial<AIGatewayHeaders>;
5491
5491
  query: unknown;
@@ -5501,7 +5501,7 @@ declare abstract class AiGateway {
5501
5501
  gateway?: UniversalGatewayOptions;
5502
5502
  extraHeaders?: object;
5503
5503
  }): Promise<Response>;
5504
- getUrl(provider?: AIGatewayProviders | string): Promise<string>; // eslint-disable-line
5504
+ getUrl(provider?: AIGatewayProviders | string): Promise<string>;
5505
5505
  }
5506
5506
  interface AutoRAGInternalError extends Error {
5507
5507
  }
@@ -12,7 +12,7 @@
12
12
  "@cloudflare/puppeteer": "^1.0.6",
13
13
  "@cloudflare/vitest-pool-workers": "^0.13.0",
14
14
  "vitest": "~4.1.0",
15
- "wrangler": "^4.73.0"
15
+ "wrangler": "^4.76.0"
16
16
  },
17
17
  "overrides": {
18
18
  "undici": "7.24.1",