@quiltdata/benchling-webhook 0.5.4 → 0.6.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 (103) hide show
  1. package/README.md +273 -10
  2. package/dist/bin/benchling-webhook.d.ts +1 -1
  3. package/dist/bin/benchling-webhook.d.ts.map +1 -1
  4. package/dist/bin/benchling-webhook.js +8 -22
  5. package/dist/bin/benchling-webhook.js.map +1 -1
  6. package/dist/bin/cdk-dev.js +59 -3
  7. package/dist/bin/cli.js +16 -6
  8. package/dist/bin/cli.js.map +1 -1
  9. package/dist/bin/commands/deploy.d.ts +6 -2
  10. package/dist/bin/commands/deploy.d.ts.map +1 -1
  11. package/dist/bin/commands/deploy.js +149 -90
  12. package/dist/bin/commands/deploy.js.map +1 -1
  13. package/dist/bin/config-profiles.d.ts +59 -0
  14. package/dist/bin/config-profiles.d.ts.map +1 -0
  15. package/dist/bin/config-profiles.js +272 -0
  16. package/dist/bin/config-profiles.js.map +1 -0
  17. package/dist/bin/create-secret.d.ts +25 -0
  18. package/dist/bin/create-secret.d.ts.map +1 -0
  19. package/dist/bin/create-secret.js +239 -0
  20. package/dist/bin/create-secret.js.map +1 -0
  21. package/dist/lib/benchling-auth-validator.d.ts +65 -0
  22. package/dist/lib/benchling-auth-validator.d.ts.map +1 -0
  23. package/dist/lib/benchling-auth-validator.js +213 -0
  24. package/dist/lib/benchling-auth-validator.js.map +1 -0
  25. package/dist/lib/benchling-webhook-stack.d.ts +13 -10
  26. package/dist/lib/benchling-webhook-stack.d.ts.map +1 -1
  27. package/dist/lib/benchling-webhook-stack.js +25 -69
  28. package/dist/lib/benchling-webhook-stack.js.map +1 -1
  29. package/dist/lib/config-logger.d.ts +191 -0
  30. package/dist/lib/config-logger.d.ts.map +1 -0
  31. package/dist/lib/config-logger.js +372 -0
  32. package/dist/lib/config-logger.js.map +1 -0
  33. package/dist/lib/configuration-saver.d.ts +75 -0
  34. package/dist/lib/configuration-saver.d.ts.map +1 -0
  35. package/dist/lib/configuration-saver.js +145 -0
  36. package/dist/lib/configuration-saver.js.map +1 -0
  37. package/dist/lib/configuration-validator.d.ts +63 -0
  38. package/dist/lib/configuration-validator.d.ts.map +1 -0
  39. package/dist/lib/configuration-validator.js +136 -0
  40. package/dist/lib/configuration-validator.js.map +1 -0
  41. package/dist/lib/configuration-wizard.d.ts +52 -0
  42. package/dist/lib/configuration-wizard.d.ts.map +1 -0
  43. package/dist/lib/configuration-wizard.js +193 -0
  44. package/dist/lib/configuration-wizard.js.map +1 -0
  45. package/dist/lib/fargate-service.d.ts +18 -9
  46. package/dist/lib/fargate-service.d.ts.map +1 -1
  47. package/dist/lib/fargate-service.js +177 -61
  48. package/dist/lib/fargate-service.js.map +1 -1
  49. package/dist/lib/quilt-config-resolver.d.ts +53 -0
  50. package/dist/lib/quilt-config-resolver.d.ts.map +1 -0
  51. package/dist/lib/quilt-config-resolver.js +100 -0
  52. package/dist/lib/quilt-config-resolver.js.map +1 -0
  53. package/dist/lib/s3-bucket-validator.d.ts +76 -0
  54. package/dist/lib/s3-bucket-validator.d.ts.map +1 -0
  55. package/dist/lib/s3-bucket-validator.js +237 -0
  56. package/dist/lib/s3-bucket-validator.js.map +1 -0
  57. package/dist/lib/types/config.d.ts +398 -0
  58. package/dist/lib/types/config.d.ts.map +1 -0
  59. package/dist/lib/types/config.js +11 -0
  60. package/dist/lib/types/config.js.map +1 -0
  61. package/dist/lib/utils/config-loader.d.ts +48 -0
  62. package/dist/lib/utils/config-loader.d.ts.map +1 -0
  63. package/dist/lib/utils/config-loader.js +109 -0
  64. package/dist/lib/utils/config-loader.js.map +1 -0
  65. package/dist/lib/utils/config-resolver.d.ts +138 -0
  66. package/dist/lib/utils/config-resolver.d.ts.map +1 -0
  67. package/dist/lib/utils/config-resolver.js +272 -0
  68. package/dist/lib/utils/config-resolver.js.map +1 -0
  69. package/dist/lib/utils/config.d.ts +50 -0
  70. package/dist/lib/utils/config.d.ts.map +1 -1
  71. package/dist/lib/utils/config.js +86 -0
  72. package/dist/lib/utils/config.js.map +1 -1
  73. package/dist/lib/utils/secrets.d.ts +174 -0
  74. package/dist/lib/utils/secrets.d.ts.map +1 -0
  75. package/dist/lib/utils/secrets.js +351 -0
  76. package/dist/lib/utils/secrets.js.map +1 -0
  77. package/dist/lib/xdg-cli-wrapper.d.ts +113 -0
  78. package/dist/lib/xdg-cli-wrapper.d.ts.map +1 -0
  79. package/dist/lib/xdg-cli-wrapper.js +288 -0
  80. package/dist/lib/xdg-cli-wrapper.js.map +1 -0
  81. package/dist/lib/xdg-config.d.ts +187 -0
  82. package/dist/lib/xdg-config.d.ts.map +1 -0
  83. package/dist/lib/xdg-config.js +562 -0
  84. package/dist/lib/xdg-config.js.map +1 -0
  85. package/dist/package.json +33 -25
  86. package/dist/scripts/config-health-check.d.ts +78 -0
  87. package/dist/scripts/config-health-check.d.ts.map +1 -0
  88. package/dist/scripts/config-health-check.js +559 -0
  89. package/dist/scripts/config-health-check.js.map +1 -0
  90. package/dist/scripts/infer-quilt-config.d.ts +50 -0
  91. package/dist/scripts/infer-quilt-config.d.ts.map +1 -0
  92. package/dist/scripts/infer-quilt-config.js +353 -0
  93. package/dist/scripts/infer-quilt-config.js.map +1 -0
  94. package/dist/scripts/install-wizard.d.ts +34 -0
  95. package/dist/scripts/install-wizard.d.ts.map +1 -0
  96. package/dist/scripts/install-wizard.js +719 -0
  97. package/dist/scripts/install-wizard.js.map +1 -0
  98. package/dist/scripts/sync-secrets.d.ts +63 -0
  99. package/dist/scripts/sync-secrets.d.ts.map +1 -0
  100. package/dist/scripts/sync-secrets.js +424 -0
  101. package/dist/scripts/sync-secrets.js.map +1 -0
  102. package/env.template +60 -47
  103. package/package.json +33 -25
package/env.template CHANGED
@@ -1,66 +1,79 @@
1
- # ==============================================================================
2
- # REQUIRED USER VALUES
3
- # ==============================================================================
4
- # These are the ONLY values you need to provide. Everything else is inferred
5
- # from your Quilt catalog configuration at deployment time.
1
+ #
2
+ # ALWAYS REQUIRED PARAMETERS
3
+ #
6
4
 
7
- # ==============================================================================
8
- # Quilt Configuration
9
- # ==============================================================================
5
+ # --- Benchling OAuth Configuration ---
6
+ # Tenant: Use XXX if you login at XXX.benchling.com
7
+ BENCHLING_TENANT=your-tenant
10
8
 
11
- # Your Quilt catalog URL (just the domain, without https://)
12
- QUILT_CATALOG=quilt-catalog.yourcompany.com
9
+ # OAuth credentials from your Benchling app
10
+ BENCHLING_CLIENT_ID=your-client-id
11
+ BENCHLING_CLIENT_SECRET=your-client-secret
13
12
 
14
- # The S3 bucket where you want to store Benchling exports
15
- # This is YOUR data bucket, not the Quilt system buckets
16
- QUILT_USER_BUCKET=your-data-bucket
13
+ # App definition ID from Benchling app manifest
14
+ BENCHLING_APP_DEFINITION_ID=appdef_your_id_here
17
15
 
18
- # ==============================================================================
19
- # Benchling Configuration
20
- # ==============================================================================
21
- # BENCHLING_TENANT: Use XXX if you login to Benchling at XXX.benchling.com
16
+ # S3 bucket for storing Benchling exports (YOUR data bucket)
17
+ BENCHLING_PKG_BUCKET=your-data-bucket # (without s3:// prefix)
22
18
 
23
- BENCHLING_TENANT=your-tenant
24
- BENCHLING_APP_DEFINITION_ID=appdef_your_id_here
25
- BENCHLING_CLIENT_ID=your-client-id
26
- BENCHLING_CLIENT_SECRET=your-client-secret
19
+ #
20
+ # POSSIBLY REQUIRED PARAMETERS
21
+ #
27
22
 
28
- # BENCHLING_API_KEY=your-api-key # not currently used
23
+ QUILT_CATALOG=quilt-stack.your-company.com
24
+ # Required UNLESS available from 'quilt3 config'
29
25
 
30
- # ==============================================================================
31
- # OPTIONAL VALUES (Override defaults if needed)
32
- # ==============================================================================
26
+ BENCHLING_TEST_ENTRY=etr_123456789
27
+ # Actual entry ID from your tenant, needed to run integration tests
33
28
 
29
+ #
30
+ # Optional PARAMETERS
31
+ #
34
32
 
35
- # Package Configuration
36
- PKG_PREFIX=benchling # Prefix for Quilt package names (e.g., "benchling/my-experiment")
37
- PKG_KEY=experiment_id # Metadata key used to link Benchling entries to packages
33
+ # --- Package Configuration ---
34
+ # Prefix for Quilt package names (e.g., "benchling/my-experiment")
35
+ BENCHLING_PKG_PREFIX=benchling
38
36
 
37
+ # Metadata key to link Benchling entries to packages
38
+ BENCHLING_PKG_KEY=experiment_id
39
39
 
40
- # Webhook Security
41
- ENABLE_WEBHOOK_VERIFICATION=true # Set to false ONLY for local development
42
40
 
43
- # Logging (optional - defaults to INFO)
44
- # LOG_LEVEL=DEBUG # Options: DEBUG, INFO, WARNING, ERROR, CRITICAL
41
+ # --- Application Configuration (Required) ---
42
+ # Logging level: DEBUG, INFO, WARNING, ERROR, CRITICAL
43
+ BENCHLING_LOG_LEVEL=INFO
45
44
 
46
- # Test Configuration (for running tests)
47
- BENCHLING_TEST_ENTRY=etr_123456789
45
+ # Enable/disable webhook signature verification (true/false)
46
+ BENCHLING_ENABLE_WEBHOOK_VERIFICATION=true
48
47
 
49
- # Ngrok Configuration (optional - for local development)
50
- # Get your authtoken from: https://dashboard.ngrok.com/get-started/your-authtoken
51
- # NGROK_AUTHTOKEN=your_ngrok_authtoken_here
52
- # NGROK_DOMAIN=your-subdomain.ngrok-free.app
48
+ # Comma-separated list of allowed source IPs (leave empty to allow all)
49
+ # Example: 34.216.192.90,34.217.183.162
50
+ BENCHLING_WEBHOOK_ALLOW_LIST=
53
51
 
54
52
  # ==============================================================================
55
- # AUTOMATICALLY INFERRED VALUES
53
+ # NOTES
56
54
  # ==============================================================================
57
- # The following values are automatically inferred from your Quilt catalog
58
- # at deployment time via bin/get-env.js:
59
55
  #
60
- # - CDK_DEFAULT_ACCOUNT (from AWS STS)
61
- # - CDK_DEFAULT_REGION (from catalog config)
62
- # - QUEUE_ARN (from Quilt stack outputs)
63
- # - QUILT_DATABASE (from Quilt stack outputs)
56
+ # Quick Start:
57
+ # 1. Copy this file to .env: cp env.template .env
58
+ # 2. Fill in BENCHLING_* variables (section 2)
59
+ # 3. Create secret: npm run config
60
+ # 4. Fill in QuiltStackARN (section 1)
61
+ # 5. Deploy: npm run deploy
62
+ #
63
+ # Configuration at Runtime:
64
+ # The deployed stack resolves ALL configuration from just 2 sources:
65
+ # - QuiltStackARN → gets Quilt catalog, database, SQS queue from CloudFormation
66
+ # - BenchlingSecret → gets all Benchling credentials and app config from Secrets Manager
67
+ #
68
+ # No other environment variables are needed for production deployment.
69
+ #
70
+ # Local Development:
71
+ # For testing locally without AWS:
72
+ # - make -C docker run-local (starts Flask with mocked AWS)
73
+ # - make -C docker test-local (runs tests against local server)
74
+ #
75
+ # For More Information:
76
+ # - See docs/PARAMETERS.md for parameter reference
77
+ # - See README.md for complete setup guide
78
+ # - Run: npm run cli -- --help
64
79
  #
65
- # You do NOT need to set these unless you want to override the inferred values.
66
- # ==============================================================================
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quiltdata/benchling-webhook",
3
- "version": "0.5.4",
3
+ "version": "0.6.0",
4
4
  "description": "AWS CDK deployment for Benchling webhook processing using Fargate - Deploy directly with npx",
5
5
  "main": "dist/lib/index.js",
6
6
  "types": "dist/lib/index.d.ts",
@@ -14,32 +14,29 @@
14
14
  "benchling-webhook": "./dist/bin/cli.js"
15
15
  },
16
16
  "scripts": {
17
- "clean": "rm -rf cdk.out */{*.js,*.d.ts}",
18
- "test": "npm run typecheck && npm run test:ts && npm run test:python",
19
- "test-ci": "npm run typecheck && npm run test:ts",
20
- "typecheck": "tsc --noEmit",
21
- "test:ts": "NODE_ENV=test TMPDIR=./.tmp node --max-old-space-size=4096 ./node_modules/.bin/jest",
22
- "test:python": "make -C docker test-unit",
23
- "cdk": "npm run test && npm run cli -- --yes",
24
- "cdk:dev": "node bin/cdk-dev.js",
25
- "lint": "eslint . --ext .ts --fix",
26
17
  "build": "tsc",
18
+ "build:clean": "rm -rf cdk.out dist */{*.js,*.d.ts}",
19
+ "build:synth": "npx cdk synth",
20
+ "build:typecheck": "tsc --noEmit",
21
+ "cli": "node dist/bin/cli.js",
22
+ "lint": "eslint . --ext .ts --fix && make -C docker lint",
27
23
  "prebuild": "rm -rf dist",
24
+ "prepublishOnly": "npm run build",
28
25
  "postbuild": "chmod +x dist/bin/cli.js && cp bin/*.js dist/bin/ 2>/dev/null || true",
29
- "cli": "ts-node bin/cli.ts",
30
- "synth": "npx cdk synth",
31
- "logs": "node bin/check-logs.js",
32
- "event": "node bin/send-event.js",
33
- "check": "npm run cdk && npm run event && sleep 45 && npm run logs",
34
- "docker:test": "make -C docker test",
35
- "docker-push": "make -C docker push-local",
36
- "docker-check": "make -C docker docker-validate",
37
- "release": "npm run test && node bin/release.js",
38
- "release:dev": "npm run test && node bin/release.js dev",
39
- "notes": "bin/release-notes.sh \"$(jq -r .version package.json)\" \"712023778557.dkr.ecr.us-east-1.amazonaws.com/quiltdata/benchling:$(jq -r .version package.json)\" \"false\" \"$(jq -r .name package.json)\"",
40
- "version": "node bin/version.js patch",
41
- "version:patch": "npm run version -- patch",
42
- "prepublishOnly": "npm run build"
26
+ "release": "npm run test && node bin/release.js && make -C docker push-ci",
27
+ "release:dev": "npm run test && node bin/cdk-dev.js",
28
+ "release:tag": "node bin/version.js && git push --tags",
29
+ "setup": "ts-node scripts/install-wizard.ts",
30
+ "setup:health": "ts-node scripts/config-health-check.ts",
31
+ "setup:infer": "ts-node scripts/infer-quilt-config.ts",
32
+ "setup:sync-secrets": "ts-node scripts/sync-secrets.ts",
33
+ "test": "npm run build:typecheck && npm run test:ts && npm run test:python",
34
+ "test:ci": "npm run build:typecheck && npm run test:ts",
35
+ "test:local": "make -C docker build && make -C docker test-local",
36
+ "test:python": "make -C docker test-unit",
37
+ "test:remote": "npm run release:dev && make -C docker test-deployed-dev",
38
+ "test:ts": "cross-env NODE_ENV=test jest --maxWorkers=50%",
39
+ "version": "node bin/version.js"
43
40
  },
44
41
  "keywords": [
45
42
  "benchling",
@@ -67,8 +64,10 @@
67
64
  "@typescript-eslint/eslint-plugin": "^8.26.1",
68
65
  "@typescript-eslint/parser": "^8.26.1",
69
66
  "aws-cdk": "2.1031.1",
67
+ "aws-sdk-client-mock": "^4.1.0",
68
+ "cross-env": "^10.1.0",
70
69
  "dotenv": "^17.2.3",
71
- "esbuild": "0.25.11",
70
+ "esbuild": "0.25.12",
72
71
  "eslint": "^9.22.0",
73
72
  "globals": "^16.0.0",
74
73
  "jest": "^30.0.0",
@@ -79,7 +78,13 @@
79
78
  "dependencies": {
80
79
  "@aws-sdk/client-cloudformation": "^3.920.0",
81
80
  "@aws-sdk/client-s3": "^3.758.0",
81
+ "@aws-sdk/client-secrets-manager": "^3.922.0",
82
+ "@aws-sdk/client-sts": "^3.922.0",
83
+ "@aws-sdk/credential-providers": "^3.922.0",
84
+ "@types/inquirer": "^9.0.9",
85
+ "@types/lodash.merge": "^4.6.9",
82
86
  "adm-zip": "^0.5.10",
87
+ "ajv": "^8.17.1",
83
88
  "aws-cdk-lib": "2.221.1",
84
89
  "aws-sdk": "^2.1574.0",
85
90
  "boxen": "^8.0.0",
@@ -88,6 +93,9 @@
88
93
  "constructs": "^10.0.0",
89
94
  "dotenv-expand": "^12.0.3",
90
95
  "enquirer": "^2.4.1",
96
+ "execa": "^5.1.1",
97
+ "inquirer": "^12.10.0",
98
+ "lodash.merge": "^4.6.2",
91
99
  "ora": "^9.0.0"
92
100
  },
93
101
  "engines": {