@striae-org/striae 6.0.0 → 6.0.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.
package/README.md CHANGED
@@ -8,6 +8,7 @@ This npm package publishes the Striae application source for teams that run/deve
8
8
 
9
9
  - Application: [https://striae.app](https://striae.app)
10
10
  - Source repository: [https://github.com/striae-org/striae](https://github.com/striae-org/striae)
11
+ - Installation guide: [https://github.com/striae-org/striae/wiki/Installation-Guide](https://github.com/striae-org/striae/wiki/Installation-Guide)
11
12
  - Releases: [https://github.com/striae-org/striae/releases](https://github.com/striae-org/striae/releases)
12
13
  - Security policy: [https://github.com/striae-org/striae/security/policy](https://github.com/striae-org/striae/security/policy)
13
14
 
@@ -55,9 +56,10 @@ Excluded (by design):
55
56
 
56
57
  ## License
57
58
 
58
- See `LICENSE` and `NOTICE`.
59
+ See `LICENSE`.
59
60
 
60
61
  ## Support
61
62
 
63
+ - Striae Community: [https://community.striae.org](https://community.striae.org)
62
64
  - Support page: [https://www.striae.org/support](https://www.striae.org/support)
63
65
  - Contact: [info@striae.org](mailto:info@striae.org)
@@ -109,6 +109,13 @@ export const SidebarContainer: React.FC<SidebarContainerProps> = (props) => {
109
109
  rel="noopener noreferrer"
110
110
  className={styles.footerModalLink}>
111
111
  Security Policy
112
+ </Link>
113
+ <Link
114
+ to="https://community.striae.org"
115
+ target="_blank"
116
+ rel="noopener noreferrer"
117
+ className={styles.footerModalLink}>
118
+ Striae Community
112
119
  </Link>
113
120
  </div>
114
121
 
@@ -8,4 +8,4 @@
8
8
  #
9
9
  # Examples:
10
10
  # analyst@organization.com
11
- # @striae.org
11
+ # @striae.org
@@ -3,4 +3,4 @@
3
3
  # This file is untracked. Run: npm run deploy-primershear to push changes.
4
4
  #
5
5
  # Example:
6
- # analyst@organization.com
6
+ # analyst@organization.com
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@striae-org/striae",
3
- "version": "6.0.0",
3
+ "version": "6.0.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",
@@ -50,9 +50,7 @@
50
50
  "workers/pdf-worker/src/assets/generated-assets.example.ts",
51
51
  "!workers/pdf-worker/src/formats/**/*",
52
52
  "workers/pdf-worker/src/formats/format-striae.ts",
53
- ".env.example",
54
- "primershear.emails.example",
55
- "members.emails.example",
53
+ ".env.example",
56
54
  "firebase.json",
57
55
  "tsconfig.json",
58
56
  "vite.config.ts",
@@ -200,6 +200,36 @@ source "$DEPLOY_CONFIG_VALIDATION_MODULE"
200
200
  source "$DEPLOY_CONFIG_SCAFFOLDING_MODULE"
201
201
  source "$DEPLOY_CONFIG_PROMPT_MODULE"
202
202
 
203
+ EMAIL_LIST_CONFIG_DIR="app/config"
204
+ MEMBERS_EMAILS_FILE="$EMAIL_LIST_CONFIG_DIR/members.emails"
205
+ PRIMERSHEAR_EMAILS_FILE="$EMAIL_LIST_CONFIG_DIR/primershear.emails"
206
+
207
+ sync_env_var_from_email_list_file() {
208
+ local env_var_name=$1
209
+ local file_path=$2
210
+ local loaded_values=""
211
+
212
+ if [ ! -f "$file_path" ]; then
213
+ echo -e "${YELLOW}⚠️ $file_path not found; keeping existing $env_var_name value in .env${NC}"
214
+ return 0
215
+ fi
216
+
217
+ loaded_values=$(grep -v '^[[:space:]]*#' "$file_path" | grep -v '^[[:space:]]*$' | sed -e 's/\r$//' -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | paste -sd ',' - || true)
218
+
219
+ write_env_var "$env_var_name" "$loaded_values"
220
+ export "$env_var_name=$loaded_values"
221
+
222
+ local loaded_count
223
+ loaded_count=$(echo "$loaded_values" | tr ',' '\n' | grep -c '[^[:space:]]' || true)
224
+ echo -e "${GREEN}✅ Synced $env_var_name from $file_path ($loaded_count entry/entries)${NC}"
225
+ }
226
+
227
+ sync_email_list_env_vars_from_config() {
228
+ echo -e "${YELLOW}📧 Syncing optional email list env vars from app/config...${NC}"
229
+ sync_env_var_from_email_list_file "REGISTRATION_EMAILS" "$MEMBERS_EMAILS_FILE"
230
+ sync_env_var_from_email_list_file "PRIMERSHEAR_EMAILS" "$PRIMERSHEAR_EMAILS_FILE"
231
+ }
232
+
203
233
  if [ "$validate_only" = "true" ]; then
204
234
  echo -e "\n${BLUE}🧪 Validate-only mode enabled${NC}"
205
235
  run_validation_checkpoint
@@ -217,6 +247,9 @@ load_admin_service_credentials
217
247
  # Always prompt for secrets to ensure configuration
218
248
  prompt_for_secrets
219
249
 
250
+ # Keep optional email list env vars aligned with app/config source files.
251
+ sync_email_list_env_vars_from_config
252
+
220
253
  # Validate after secrets have been configured
221
254
  validate_required_vars
222
255
 
@@ -3,7 +3,7 @@
3
3
  # ============================================
4
4
  # MEMBERS EMAIL LIST DEPLOYMENT SCRIPT
5
5
  # ============================================
6
- # Reads members.emails, updates REGISTRATION_EMAILS in .env,
6
+ # Reads app/config/members.emails, updates REGISTRATION_EMAILS in .env,
7
7
  # then deploys that secret directly to Cloudflare Pages (production).
8
8
 
9
9
  set -e
@@ -26,12 +26,12 @@ trap 'echo -e "\n${RED}❌ deploy-members-emails.sh failed near line ${LINENO}${
26
26
 
27
27
  # ── Read emails file ──────────────────────────────────────────────────────────
28
28
 
29
- EMAILS_FILE="$PROJECT_ROOT/members.emails"
29
+ EMAILS_FILE="$PROJECT_ROOT/app/config/members.emails"
30
30
 
31
31
  if [ ! -f "$EMAILS_FILE" ]; then
32
32
  echo -e "${RED}❌ members.emails not found at: $EMAILS_FILE${NC}"
33
33
  echo -e "${YELLOW} Create it with one email address or @domain.com wildcard per line.${NC}"
34
- echo -e "${YELLOW} See members.emails.example for the format.${NC}"
34
+ echo -e "${YELLOW} See app/config-example/members.emails for the format.${NC}"
35
35
  exit 1
36
36
  fi
37
37
 
@@ -45,7 +45,7 @@ if [ -z "$REGISTRATION_EMAILS" ]; then
45
45
  fi
46
46
 
47
47
  ENTRY_COUNT=$(echo "$REGISTRATION_EMAILS" | tr ',' '\n' | grep -c '[^[:space:]]' || true)
48
- echo -e "${GREEN}✅ Loaded $ENTRY_COUNT entry(ies) from members.emails${NC}"
48
+ echo -e "${GREEN}✅ Loaded $ENTRY_COUNT entry(ies) from app/config/members.emails${NC}"
49
49
 
50
50
  # ── Update .env ───────────────────────────────────────────────────────────────
51
51
 
@@ -3,7 +3,7 @@
3
3
  # ============================================
4
4
  # PRIMERSHEAR EMAIL LIST DEPLOYMENT SCRIPT
5
5
  # ============================================
6
- # Reads primershear.emails, updates PRIMERSHEAR_EMAILS in .env,
6
+ # Reads app/config/primershear.emails, updates PRIMERSHEAR_EMAILS in .env,
7
7
  # then deploys that secret directly to Cloudflare Pages (production).
8
8
 
9
9
  set -e
@@ -26,7 +26,7 @@ trap 'echo -e "\n${RED}❌ deploy-primershear-emails.sh failed near line ${LINEN
26
26
 
27
27
  # ── Read emails file ──────────────────────────────────────────────────────────
28
28
 
29
- EMAILS_FILE="$PROJECT_ROOT/primershear.emails"
29
+ EMAILS_FILE="$PROJECT_ROOT/app/config/primershear.emails"
30
30
 
31
31
  if [ ! -f "$EMAILS_FILE" ]; then
32
32
  echo -e "${RED}❌ primershear.emails not found at: $EMAILS_FILE${NC}"
@@ -44,7 +44,7 @@ if [ -z "$PRIMERSHEAR_EMAILS" ]; then
44
44
  fi
45
45
 
46
46
  EMAIL_COUNT=$(echo "$PRIMERSHEAR_EMAILS" | tr ',' '\n' | grep -c '[^[:space:]]' || true)
47
- echo -e "${GREEN}✅ Loaded $EMAIL_COUNT email address(es) from primershear.emails${NC}"
47
+ echo -e "${GREEN}✅ Loaded $EMAIL_COUNT email address(es) from app/config/primershear.emails${NC}"
48
48
 
49
49
  # ── Update .env ───────────────────────────────────────────────────────────────
50
50
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "audit-worker",
3
- "version": "6.0.0",
3
+ "version": "6.0.1",
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-11",
10
+ "compatibility_date": "2026-04-12",
11
11
  "compatibility_flags": [
12
12
  "nodejs_compat"
13
13
  ],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "data-worker",
3
- "version": "6.0.0",
3
+ "version": "6.0.1",
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-11",
8
+ "compatibility_date": "2026-04-12",
9
9
  "compatibility_flags": [
10
10
  "nodejs_compat"
11
11
  ],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "image-worker",
3
- "version": "6.0.0",
3
+ "version": "6.0.1",
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-11",
5
+ "compatibility_date": "2026-04-12",
6
6
  "compatibility_flags": [
7
7
  "nodejs_compat"
8
8
  ],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pdf-worker",
3
- "version": "6.0.0",
3
+ "version": "6.0.1",
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-11",
5
+ "compatibility_date": "2026-04-12",
6
6
  "compatibility_flags": [
7
7
  "nodejs_compat"
8
8
  ],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "user-worker",
3
- "version": "6.0.0",
3
+ "version": "6.0.1",
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-11",
5
+ "compatibility_date": "2026-04-12",
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-11"
3
+ compatibility_date = "2026-04-12"
4
4
  compatibility_flags = ["nodejs_compat"]
5
5
  pages_build_output_dir = "./build/client"
6
6