@striae-org/striae 6.1.3 → 6.1.5

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 (33) hide show
  1. package/app/components/actions/case-manage/operations.ts +17 -0
  2. package/app/components/auth/mfa-enrollment.tsx +10 -8
  3. package/app/components/auth/mfa-verification.tsx +10 -10
  4. package/app/components/navbar/case-modals/all-cases-modal.tsx +93 -109
  5. package/app/components/sidebar/cases/case-sidebar.tsx +40 -22
  6. package/app/components/sidebar/files/files-modal.tsx +5 -0
  7. package/app/components/sidebar/sidebar-container.tsx +2 -0
  8. package/app/components/sidebar/sidebar.tsx +4 -0
  9. package/app/components/user/mfa-phone-update.tsx +11 -9
  10. package/app/components/user/mfa-totp-section.tsx +8 -7
  11. package/app/root.tsx +1 -0
  12. package/app/routes/auth/{login.example.tsx → login.tsx} +18 -18
  13. package/app/routes/striae/striae.tsx +82 -46
  14. package/app/utils/data/confirmation-summary/summary-core.ts +6 -0
  15. package/app/utils/data/operations/confirmation-summary-operations.ts +3 -1
  16. package/app/utils/data/permissions.ts +29 -4
  17. package/package.json +138 -140
  18. package/public/_headers +11 -1
  19. package/public/robots.txt +2 -0
  20. package/scripts/deploy-config/modules/scaffolding.sh +0 -17
  21. package/worker-configuration.d.ts +2 -2
  22. package/workers/audit-worker/package.json +1 -1
  23. package/workers/audit-worker/wrangler.jsonc.example +1 -1
  24. package/workers/data-worker/package.json +1 -1
  25. package/workers/data-worker/wrangler.jsonc.example +1 -1
  26. package/workers/image-worker/package.json +1 -1
  27. package/workers/image-worker/wrangler.jsonc.example +1 -1
  28. package/workers/pdf-worker/package.json +1 -1
  29. package/workers/pdf-worker/wrangler.jsonc.example +1 -1
  30. package/workers/user-worker/package.json +1 -1
  31. package/workers/user-worker/wrangler.jsonc.example +1 -1
  32. package/wrangler.toml.example +1 -1
  33. /package/app/routes/auth/{login.module.example.css → login.module.css} +0 -0
package/package.json CHANGED
@@ -1,141 +1,139 @@
1
- {
2
- "name": "@striae-org/striae",
3
- "version": "6.1.3",
4
- "private": false,
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
- "license": "Apache-2.0",
7
- "homepage": "https://github.com/striae-org/striae/wiki",
8
- "repository": {
9
- "type": "git",
10
- "url": "https://github.com/striae-org/striae.git"
11
- },
12
- "funding": {
13
- "type": "github",
14
- "url": "https://github.com/sponsors/striae-org"
15
- },
16
- "bugs": {
17
- "url": "https://github.com/striae-org/striae/issues"
18
- },
19
- "keywords": [
20
- "forensics",
21
- "firearms",
22
- "annotation",
23
- "react",
24
- "cloudflare-workers",
25
- "authenticated",
26
- "confirmations",
27
- "chain-of-custody",
28
- "audit-trail"
29
- ],
30
- "publishConfig": {
31
- "access": "public"
32
- },
33
- "files": [
34
- "app/",
35
- "!app/config",
36
- "!app/routes/auth/login.tsx",
37
- "!app/routes/auth/login.module.css",
38
- "react-router.config.ts",
39
- "load-context.ts",
40
- "scripts/",
41
- "functions/",
42
- "public/",
43
- "workers/",
44
- "shared/",
45
- "!workers/*/.wrangler",
46
- "!workers/*/package-lock.json",
47
- "!workers/*/worker-configuration.d.ts",
48
- "!workers/*/wrangler.jsonc",
49
- "!workers/*/src/**/*worker.ts",
50
- "!workers/pdf-worker/src/assets/**/*",
51
- "workers/pdf-worker/src/assets/generated-assets.example.ts",
52
- "!workers/pdf-worker/src/formats/**/*",
53
- "workers/pdf-worker/src/formats/format-striae.ts",
54
- ".env.example",
55
- "firebase.json",
56
- "tsconfig.json",
57
- "vite.config.ts",
58
- "/worker-configuration.d.ts",
59
- "wrangler.toml.example",
60
- "LICENSE"
61
- ],
62
- "sideEffects": false,
63
- "type": "module",
64
- "scripts": {
65
- "deploy:all": "bash ./scripts/deploy-all.sh",
66
- "emulators": "firebase emulators:start --only auth",
67
- "dev": "node ./scripts/dev.cjs && react-router dev",
68
- "build": "node ./scripts/dev.cjs && react-router build",
69
- "clean": "rm -rf build node_modules/.cache .cache",
70
- "clean:build": "npm run clean && npm run build",
71
- "deploy": "npm run build && wrangler pages deploy",
72
- "publish:npm": "npm publish --access public --registry=https://registry.npmjs.org --@striae-org:registry=https://registry.npmjs.org",
73
- "publish:npm:dry-run": "npm publish --dry-run --access public --registry=https://registry.npmjs.org --@striae-org:registry=https://registry.npmjs.org",
74
- "publish:github": "npm publish --registry=https://npm.pkg.github.com --@striae-org:registry=https://npm.pkg.github.com",
75
- "publish:github:dry-run": "npm publish --dry-run --registry=https://npm.pkg.github.com --@striae-org:registry=https://npm.pkg.github.com",
76
- "publish:all": "npm run publish:npm && npm run publish:github",
77
- "publish:all:dry-run": "npm run publish:npm:dry-run && npm run publish:github:dry-run",
78
- "lint": "node ./scripts/run-eslint.cjs",
79
- "start": "node ./scripts/dev.cjs && wrangler pages dev",
80
- "typecheck": "react-router typegen && tsc",
81
- "typegen": "wrangler types",
82
- "preview": "npm run build && wrangler pages dev",
83
- "cf-typegen": "wrangler types",
84
- "enable-totp-mfa": "node ./scripts/enable-totp-mfa.mjs",
85
- "unenroll-totp-mfa": "node ./scripts/unenroll-totp-mfa.mjs",
86
- "update-versions": "node ./scripts/update-markdown-versions.cjs",
87
- "update-compatibility-dates": "node ./scripts/update-compatibility-dates.cjs",
88
- "deploy-config": "bash ./scripts/deploy-config.sh",
89
- "update-env": "bash ./scripts/deploy-config.sh --update-env",
90
- "install-workers": "bash ./scripts/install-workers.sh",
91
- "deploy-workers": "npm run deploy-workers:audit && npm run deploy-workers:data && npm run deploy-workers:image && npm run deploy-workers:pdf && npm run deploy-workers:user",
92
- "deploy-workers:secrets": "bash ./scripts/deploy-worker-secrets.sh",
93
- "deploy-pages:secrets": "bash ./scripts/deploy-pages-secrets.sh",
94
- "deploy-pages": "bash ./scripts/deploy-pages.sh",
95
- "deploy-primershear": "bash ./scripts/deploy-primershear-emails.sh",
96
- "deploy-members": "bash ./scripts/deploy-members-emails.sh",
97
- "deploy-workers:audit": "cd workers/audit-worker && npm run deploy",
98
- "deploy-workers:data": "cd workers/data-worker && npm run deploy",
99
- "deploy-workers:image": "cd workers/image-worker && npm run deploy",
100
- "deploy-workers:pdf": "cd workers/pdf-worker && npm run deploy",
101
- "deploy-workers:user": "cd workers/user-worker && npm run deploy"
102
- },
103
- "dependencies": {
104
- "@react-router/cloudflare": "^7.14.1",
105
- "firebase": "^12.12.0",
106
- "isbot": "^5.1.39",
107
- "jszip": "^3.10.1",
108
- "qrcode": "^1.5.4",
109
- "react": "^19.2.5",
110
- "react-dom": "^19.2.5",
111
- "react-router": "^7.14.1"
112
- },
113
- "devDependencies": {
114
- "@react-router/dev": "^7.14.1",
115
- "@react-router/fs-routes": "^7.14.1",
116
- "@types/qrcode": "^1.5.6",
117
- "@types/react": "^19.2.14",
118
- "@types/react-dom": "^19.2.3",
119
- "@typescript-eslint/eslint-plugin": "^8.58.2",
120
- "@typescript-eslint/parser": "^8.58.2",
121
- "eslint": "^9.39.4",
122
- "eslint-import-resolver-typescript": "^4.4.4",
123
- "eslint-plugin-import": "^2.32.0",
124
- "eslint-plugin-jsx-a11y": "^6.10.2",
125
- "eslint-plugin-react": "^7.37.5",
126
- "eslint-plugin-react-hooks": "^7.1.0",
127
- "firebase-admin": "^13.8.0",
128
- "modern-normalize": "^3.0.1",
129
- "typescript": "^5.9.3",
130
- "vite": "^7.3.2",
131
- "vite-tsconfig-paths": "^6.1.1",
132
- "wrangler": "^4.83.0"
133
- },
134
- "overrides": {
135
- "@tootallnate/once": "3.0.1"
136
- },
137
- "engines": {
138
- "node": ">=20.19.0"
139
- },
140
- "packageManager": "npm@11.12.0"
1
+ {
2
+ "name": "@striae-org/striae",
3
+ "version": "6.1.5",
4
+ "private": false,
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
+ "license": "Apache-2.0",
7
+ "homepage": "https://github.com/striae-org/striae/wiki",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/striae-org/striae.git"
11
+ },
12
+ "funding": {
13
+ "type": "github",
14
+ "url": "https://github.com/sponsors/striae-org"
15
+ },
16
+ "bugs": {
17
+ "url": "https://github.com/striae-org/striae/issues"
18
+ },
19
+ "keywords": [
20
+ "forensics",
21
+ "firearms",
22
+ "annotation",
23
+ "react",
24
+ "cloudflare-workers",
25
+ "authenticated",
26
+ "confirmations",
27
+ "chain-of-custody",
28
+ "audit-trail"
29
+ ],
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "files": [
34
+ "app/",
35
+ "!app/config",
36
+ "react-router.config.ts",
37
+ "load-context.ts",
38
+ "scripts/",
39
+ "functions/",
40
+ "public/",
41
+ "workers/",
42
+ "shared/",
43
+ "!workers/*/.wrangler",
44
+ "!workers/*/package-lock.json",
45
+ "!workers/*/worker-configuration.d.ts",
46
+ "!workers/*/wrangler.jsonc",
47
+ "!workers/*/src/**/*worker.ts",
48
+ "!workers/pdf-worker/src/assets/**/*",
49
+ "workers/pdf-worker/src/assets/generated-assets.example.ts",
50
+ "!workers/pdf-worker/src/formats/**/*",
51
+ "workers/pdf-worker/src/formats/format-striae.ts",
52
+ ".env.example",
53
+ "firebase.json",
54
+ "tsconfig.json",
55
+ "vite.config.ts",
56
+ "/worker-configuration.d.ts",
57
+ "wrangler.toml.example",
58
+ "LICENSE"
59
+ ],
60
+ "sideEffects": false,
61
+ "type": "module",
62
+ "scripts": {
63
+ "deploy:all": "bash ./scripts/deploy-all.sh",
64
+ "emulators": "firebase emulators:start --only auth",
65
+ "dev": "node ./scripts/dev.cjs && react-router dev",
66
+ "build": "node ./scripts/dev.cjs && react-router build",
67
+ "clean": "rm -rf build node_modules/.cache .cache",
68
+ "clean:build": "npm run clean && npm run build",
69
+ "deploy": "npm run build && wrangler pages deploy",
70
+ "publish:npm": "npm publish --access public --registry=https://registry.npmjs.org --@striae-org:registry=https://registry.npmjs.org",
71
+ "publish:npm:dry-run": "npm publish --dry-run --access public --registry=https://registry.npmjs.org --@striae-org:registry=https://registry.npmjs.org",
72
+ "publish:github": "npm publish --registry=https://npm.pkg.github.com --@striae-org:registry=https://npm.pkg.github.com",
73
+ "publish:github:dry-run": "npm publish --dry-run --registry=https://npm.pkg.github.com --@striae-org:registry=https://npm.pkg.github.com",
74
+ "publish:all": "npm run publish:npm && npm run publish:github",
75
+ "publish:all:dry-run": "npm run publish:npm:dry-run && npm run publish:github:dry-run",
76
+ "lint": "node ./scripts/run-eslint.cjs",
77
+ "start": "node ./scripts/dev.cjs && wrangler pages dev",
78
+ "typecheck": "react-router typegen && tsc",
79
+ "typegen": "wrangler types",
80
+ "preview": "npm run build && wrangler pages dev",
81
+ "cf-typegen": "wrangler types",
82
+ "enable-totp-mfa": "node ./scripts/enable-totp-mfa.mjs",
83
+ "unenroll-totp-mfa": "node ./scripts/unenroll-totp-mfa.mjs",
84
+ "update-versions": "node ./scripts/update-markdown-versions.cjs",
85
+ "update-compatibility-dates": "node ./scripts/update-compatibility-dates.cjs",
86
+ "deploy-config": "bash ./scripts/deploy-config.sh",
87
+ "update-env": "bash ./scripts/deploy-config.sh --update-env",
88
+ "install-workers": "bash ./scripts/install-workers.sh",
89
+ "deploy-workers": "npm run deploy-workers:audit && npm run deploy-workers:data && npm run deploy-workers:image && npm run deploy-workers:pdf && npm run deploy-workers:user",
90
+ "deploy-workers:secrets": "bash ./scripts/deploy-worker-secrets.sh",
91
+ "deploy-pages:secrets": "bash ./scripts/deploy-pages-secrets.sh",
92
+ "deploy-pages": "bash ./scripts/deploy-pages.sh",
93
+ "deploy-primershear": "bash ./scripts/deploy-primershear-emails.sh",
94
+ "deploy-members": "bash ./scripts/deploy-members-emails.sh",
95
+ "deploy-workers:audit": "cd workers/audit-worker && npm run deploy",
96
+ "deploy-workers:data": "cd workers/data-worker && npm run deploy",
97
+ "deploy-workers:image": "cd workers/image-worker && npm run deploy",
98
+ "deploy-workers:pdf": "cd workers/pdf-worker && npm run deploy",
99
+ "deploy-workers:user": "cd workers/user-worker && npm run deploy"
100
+ },
101
+ "dependencies": {
102
+ "@react-router/cloudflare": "^7.14.1",
103
+ "firebase": "^12.12.0",
104
+ "isbot": "^5.1.39",
105
+ "jszip": "^3.10.1",
106
+ "qrcode": "^1.5.4",
107
+ "react": "^19.2.5",
108
+ "react-dom": "^19.2.5",
109
+ "react-router": "^7.14.1"
110
+ },
111
+ "devDependencies": {
112
+ "@react-router/dev": "^7.14.1",
113
+ "@react-router/fs-routes": "^7.14.1",
114
+ "@types/qrcode": "^1.5.6",
115
+ "@types/react": "^19.2.14",
116
+ "@types/react-dom": "^19.2.3",
117
+ "@typescript-eslint/eslint-plugin": "^8.58.2",
118
+ "@typescript-eslint/parser": "^8.58.2",
119
+ "eslint": "^9.39.4",
120
+ "eslint-import-resolver-typescript": "^4.4.4",
121
+ "eslint-plugin-import": "^2.32.0",
122
+ "eslint-plugin-jsx-a11y": "^6.10.2",
123
+ "eslint-plugin-react": "^7.37.5",
124
+ "eslint-plugin-react-hooks": "^7.1.1",
125
+ "firebase-admin": "^13.8.0",
126
+ "modern-normalize": "^3.0.1",
127
+ "typescript": "^5.9.3",
128
+ "vite": "^7.3.2",
129
+ "vite-tsconfig-paths": "^6.1.1",
130
+ "wrangler": "^4.83.0"
131
+ },
132
+ "overrides": {
133
+ "@tootallnate/once": "3.0.1"
134
+ },
135
+ "engines": {
136
+ "node": ">=20.19.0"
137
+ },
138
+ "packageManager": "npm@11.12.0"
141
139
  }
package/public/_headers CHANGED
@@ -1,12 +1,22 @@
1
1
  /*.css
2
2
  Cache-Control: public, max-age=31536000, immutable
3
3
  /*.js
4
- Cache-Control: public, max-age=31536000, immutable
4
+ Cache-Control: public, max-age=31536000, immutable
5
5
  /*.svg
6
6
  Cache-Control: public, max-age=31536000, immutable
7
7
  /*.jpg
8
8
  Cache-Control: public, max-age=31536000, immutable
9
+ /*.jpeg
10
+ Cache-Control: public, max-age=31536000, immutable
9
11
  /*.png
10
12
  Cache-Control: public, max-age=31536000, immutable
13
+ /*.woff2
14
+ Cache-Control: public, max-age=31536000, immutable
15
+ /*.woff
16
+ Cache-Control: public, max-age=31536000, immutable
11
17
  /*
12
18
  Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
19
+ X-Robots-Tag: noindex, nofollow
20
+ X-Content-Type-Options: nosniff
21
+ X-Frame-Options: DENY
22
+ Referrer-Policy: strict-origin-when-cross-origin
@@ -0,0 +1,2 @@
1
+ User-agent: *
2
+ Disallow: /
@@ -63,23 +63,6 @@ copy_example_configs() {
63
63
  echo -e "${GREEN} ✅ app: copied $copied_config_files config file(s) from config-example${NC}"
64
64
  fi
65
65
 
66
- # Copy auth route template files
67
- echo -e "${YELLOW} Copying auth route template files...${NC}"
68
-
69
- if [ -f "app/routes/auth/login.example.tsx" ] && { [ "$update_env" = "true" ] || [ ! -f "app/routes/auth/login.tsx" ]; }; then
70
- cp app/routes/auth/login.example.tsx app/routes/auth/login.tsx
71
- echo -e "${GREEN} ✅ auth: login.tsx created from example${NC}"
72
- elif [ -f "app/routes/auth/login.tsx" ]; then
73
- echo -e "${YELLOW} ⚠️ auth: login.tsx already exists, skipping copy${NC}"
74
- fi
75
-
76
- if [ -f "app/routes/auth/login.module.example.css" ] && { [ "$update_env" = "true" ] || [ ! -f "app/routes/auth/login.module.css" ]; }; then
77
- cp app/routes/auth/login.module.example.css app/routes/auth/login.module.css
78
- echo -e "${GREEN} ✅ auth: login.module.css created from example${NC}"
79
- elif [ -f "app/routes/auth/login.module.css" ]; then
80
- echo -e "${YELLOW} ⚠️ auth: login.module.css already exists, skipping copy${NC}"
81
- fi
82
-
83
66
  # Navigate to each worker directory and copy the example file
84
67
  echo -e "${YELLOW} Copying worker configuration files...${NC}"
85
68
 
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable */
2
- // Generated by Wrangler by running `wrangler types` (hash: df3e4db815fe1724ed2abbb4f6b2065f)
3
- // Runtime types generated with workerd@1.20250823.0 2026-03-31 nodejs_compat
2
+ // Generated by Wrangler by running `wrangler types` (hash: 57aa85f6e2227c762f9bb6f456f0a167)
3
+ // Runtime types generated with workerd@1.20250823.0 2026-04-17 nodejs_compat
4
4
  declare namespace Cloudflare {
5
5
  interface Env {
6
6
  ACCOUNT_ID: string;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "audit-worker",
3
- "version": "6.1.3",
3
+ "version": "6.1.5",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "deploy": "wrangler deploy",
@@ -7,7 +7,7 @@
7
7
  "name": "AUDIT_WORKER_NAME",
8
8
  "account_id": "ACCOUNT_ID",
9
9
  "main": "src/audit-worker.ts",
10
- "compatibility_date": "2026-04-16",
10
+ "compatibility_date": "2026-04-18",
11
11
  "compatibility_flags": [
12
12
  "nodejs_compat"
13
13
  ],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "data-worker",
3
- "version": "6.1.3",
3
+ "version": "6.1.5",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "deploy": "wrangler deploy",
@@ -5,7 +5,7 @@
5
5
  "name": "DATA_WORKER_NAME",
6
6
  "account_id": "ACCOUNT_ID",
7
7
  "main": "src/data-worker.ts",
8
- "compatibility_date": "2026-04-16",
8
+ "compatibility_date": "2026-04-18",
9
9
  "compatibility_flags": [
10
10
  "nodejs_compat"
11
11
  ],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "image-worker",
3
- "version": "6.1.3",
3
+ "version": "6.1.5",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "deploy": "wrangler deploy",
@@ -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-04-16",
5
+ "compatibility_date": "2026-04-18",
6
6
  "compatibility_flags": [
7
7
  "nodejs_compat"
8
8
  ],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pdf-worker",
3
- "version": "6.1.3",
3
+ "version": "6.1.5",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "generate:assets": "node scripts/generate-assets.js",
@@ -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-04-16",
5
+ "compatibility_date": "2026-04-18",
6
6
  "compatibility_flags": [
7
7
  "nodejs_compat"
8
8
  ],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "user-worker",
3
- "version": "6.1.3",
3
+ "version": "6.1.5",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "deploy": "wrangler deploy",
@@ -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-04-16",
5
+ "compatibility_date": "2026-04-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-04-16"
3
+ compatibility_date = "2026-04-18"
4
4
  compatibility_flags = ["nodejs_compat"]
5
5
  pages_build_output_dir = "./build/client"
6
6