@quiltdata/benchling-webhook 0.5.0 → 0.5.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 +44 -35
- package/dist/bin/cli.js +30 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/commands/deploy.d.ts.map +1 -1
- package/dist/bin/commands/deploy.js +49 -6
- package/dist/bin/commands/deploy.js.map +1 -1
- package/dist/bin/commands/manifest.d.ts +5 -0
- package/dist/bin/commands/manifest.d.ts.map +1 -0
- package/dist/bin/commands/manifest.js +53 -0
- package/dist/bin/commands/manifest.js.map +1 -0
- package/dist/bin/commands/test.d.ts +5 -0
- package/dist/bin/commands/test.d.ts.map +1 -0
- package/dist/bin/commands/test.js +108 -0
- package/dist/bin/commands/test.js.map +1 -0
- package/dist/lib/utils/config.d.ts +6 -1
- package/dist/lib/utils/config.d.ts.map +1 -1
- package/dist/lib/utils/config.js +33 -4
- package/dist/lib/utils/config.js.map +1 -1
- package/dist/package.json +5 -3
- package/package.json +5 -3
- package/README.benchling.md +0 -77
package/README.md
CHANGED
|
@@ -2,51 +2,60 @@
|
|
|
2
2
|
|
|
3
3
|
Connects Benchling lab notebook entries to Quilt data packages via webhooks.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Prerequisites
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
- `npx` from Node.js 18+ ([download](https://nodejs.org))
|
|
8
|
+
- [AWS credentials](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-files.html) configured
|
|
9
|
+
- Existing [Quilt deployment](https://www.quilt.bio/install)
|
|
10
|
+
|
|
11
|
+
## Setup
|
|
12
|
+
|
|
13
|
+
### 1. Create Benchling App
|
|
8
14
|
|
|
9
15
|
```bash
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
cd benchling-webhook
|
|
13
|
-
npm install
|
|
16
|
+
npx @quiltdata/benchling-webhook manifest
|
|
17
|
+
```
|
|
14
18
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
# Everything else is auto-inferred at deploy time!
|
|
22
|
-
|
|
23
|
-
# 3. Deploy
|
|
24
|
-
source .env
|
|
25
|
-
npx cdk bootstrap aws://$CDK_DEFAULT_ACCOUNT/$CDK_DEFAULT_REGION # first time only
|
|
26
|
-
npm run deploy
|
|
27
|
-
|
|
28
|
-
# 4. Configure Benchling app
|
|
29
|
-
# - Create app from app-manifest.yaml
|
|
30
|
-
# - Set webhook URL from .env.deploy
|
|
31
|
-
# - Install and activate
|
|
32
|
-
|
|
33
|
-
# 5. Verify
|
|
34
|
-
source .env.deploy
|
|
35
|
-
curl $WEBHOOK_ENDPOINT/health
|
|
19
|
+
Follow the displayed instructions to [upload the manifest](https://docs.benchling.com/docs/getting-started-benchling-apps#creating-an-app-from-a-manifest) to Benchling and get your App Definition ID.
|
|
20
|
+
|
|
21
|
+
### 2. Deploy to AWS
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx @quiltdata/benchling-webhook
|
|
36
25
|
```
|
|
37
26
|
|
|
27
|
+
The interactive wizard will auto-detect or request configuration information, deploy to AWS, and test the webhook automatically.
|
|
28
|
+
|
|
29
|
+
### 3. Install in Benchling
|
|
30
|
+
|
|
31
|
+
After deployment, you'll receive a webhook URL. Set it in your Benchling app settings and [install the app](https://docs.benchling.com/docs/getting-started-benchling-apps#installing-your-app) in your tenant.
|
|
32
|
+
|
|
38
33
|
## Usage
|
|
39
34
|
|
|
40
|
-
|
|
41
|
-
2. Insert Canvas → "Quilt Integration"
|
|
42
|
-
3. Click "Create" to make package
|
|
43
|
-
4. Add files and click "Update package"
|
|
35
|
+
In Benchling: Create entry → Insert Canvas → "Quilt Integration" → Create/Update package
|
|
44
36
|
|
|
45
|
-
|
|
37
|
+
For all available commands, run:
|
|
46
38
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
39
|
+
```bash
|
|
40
|
+
npx @quiltdata/benchling-webhook --help
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Development
|
|
44
|
+
|
|
45
|
+
For local development and contributing:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
git clone https://github.com/quiltdata/benchling-webhook.git
|
|
49
|
+
cd benchling-webhook
|
|
50
|
+
npm install
|
|
51
|
+
|
|
52
|
+
# Test CLI locally (note the -- separator for passing args)
|
|
53
|
+
npm run cli -- --help
|
|
54
|
+
npm run cli -- deploy
|
|
55
|
+
|
|
56
|
+
npm test # Run tests
|
|
57
|
+
npm run build # Build package
|
|
58
|
+
```
|
|
50
59
|
|
|
51
60
|
## License
|
|
52
61
|
|
package/dist/bin/cli.js
CHANGED
|
@@ -9,6 +9,8 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
9
9
|
const deploy_1 = require("./commands/deploy");
|
|
10
10
|
const init_1 = require("./commands/init");
|
|
11
11
|
const validate_1 = require("./commands/validate");
|
|
12
|
+
const test_1 = require("./commands/test");
|
|
13
|
+
const manifest_1 = require("./commands/manifest");
|
|
12
14
|
// Load package.json for version
|
|
13
15
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
14
16
|
const pkg = require("../package.json");
|
|
@@ -75,6 +77,34 @@ program
|
|
|
75
77
|
process.exit(1);
|
|
76
78
|
}
|
|
77
79
|
});
|
|
80
|
+
// Test command
|
|
81
|
+
program
|
|
82
|
+
.command("test")
|
|
83
|
+
.description("Test the deployed webhook endpoint")
|
|
84
|
+
.option("--url <url>", "Webhook URL to test (auto-detected from stack if omitted)")
|
|
85
|
+
.action(async (options) => {
|
|
86
|
+
try {
|
|
87
|
+
await (0, test_1.testCommand)(options);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error(chalk_1.default.red(error.message));
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
// Manifest command
|
|
95
|
+
program
|
|
96
|
+
.command("manifest")
|
|
97
|
+
.description("Generate Benchling app manifest file")
|
|
98
|
+
.option("--output <path>", "Output file path", "app-manifest.yaml")
|
|
99
|
+
.action(async (options) => {
|
|
100
|
+
try {
|
|
101
|
+
await (0, manifest_1.manifestCommand)(options);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.error(chalk_1.default.red(error.message));
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
78
108
|
// Show help when no command provided
|
|
79
109
|
if (!process.argv.slice(2).length) {
|
|
80
110
|
program.outputHelp();
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";;;;;;AACA,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAkD;AAClD,0CAA8C;AAC9C,kDAAsD;AAEtD,gCAAgC;AAChC,iEAAiE;AACjE,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEvC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,mBAAmB,CAAC;KACzB,WAAW,CAAC,kFAAkF,CAAC;KAC/F,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,wBAAwB,CAAC;KAC/D,UAAU,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAE1D,2BAA2B;AAC3B,OAAO;KACF,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACtC,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;KAC9C,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;KAC/C,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;KAC7C,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;KACvD,MAAM,CAAC,0BAA0B,EAAE,+BAA+B,CAAC;KACnE,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;KACtD,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,CAAC;KACxD,MAAM,CAAC,sBAAsB,EAAE,iCAAiC,CAAC;KACjE,MAAM,CAAC,4BAA4B,EAAE,oBAAoB,EAAE,OAAO,CAAC;KACnE,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;KAChD,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;KACtD,MAAM,CAAC,OAAO,EAAE,2BAA2B,CAAC;KAC5C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACtB,IAAI,CAAC;QACD,MAAM,IAAA,sBAAa,EAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,eAAe;AACf,OAAO;KACF,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,CAAC;KACrD,MAAM,CAAC,SAAS,EAAE,yBAAyB,CAAC;KAC5C,MAAM,CAAC,WAAW,EAAE,iCAAiC,CAAC;KACtD,MAAM,CAAC,SAAS,EAAE,sCAAsC,CAAC;KACzD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACtB,IAAI,CAAC;QACD,MAAM,IAAA,kBAAW,EAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,mBAAmB;AACnB,OAAO;KACF,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,CAAC;KACxD,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACtB,IAAI,CAAC;QACD,MAAM,IAAA,0BAAe,EAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,qCAAqC;AACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,OAAO,CAAC,UAAU,EAAE,CAAC;AACzB,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../bin/commands/deploy.ts"],"names":[],"mappings":"AAKA,OAAO,EAMH,KAAK,aAAa,EACrB,MAAM,wBAAwB,CAAC;AAOhC,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../bin/commands/deploy.ts"],"names":[],"mappings":"AAKA,OAAO,EAMH,KAAK,aAAa,EACrB,MAAM,wBAAwB,CAAC;AAOhC,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoNjJ"}
|
|
@@ -123,7 +123,7 @@ async function deployCommand(options) {
|
|
|
123
123
|
// Execute CDK deploy directly - the app.synth() will be called by CDK
|
|
124
124
|
// We need to synthesize to cdk.out and then deploy
|
|
125
125
|
result.app.synth();
|
|
126
|
-
const cdkCommand = `npx cdk deploy --require-approval ${options.requireApproval || "never"}
|
|
126
|
+
const cdkCommand = `npx cdk deploy --require-approval ${options.requireApproval || "never"}`;
|
|
127
127
|
(0, child_process_1.execSync)(cdkCommand, {
|
|
128
128
|
stdio: "inherit",
|
|
129
129
|
env: {
|
|
@@ -133,15 +133,58 @@ async function deployCommand(options) {
|
|
|
133
133
|
},
|
|
134
134
|
});
|
|
135
135
|
spinner.succeed("Stack deployed successfully");
|
|
136
|
-
// 9.
|
|
136
|
+
// 9. Get stack outputs
|
|
137
|
+
spinner.start("Retrieving stack outputs...");
|
|
138
|
+
let webhookUrl = "";
|
|
139
|
+
try {
|
|
140
|
+
const { CloudFormationClient, DescribeStacksCommand } = require("@aws-sdk/client-cloudformation");
|
|
141
|
+
const cloudformation = new CloudFormationClient({
|
|
142
|
+
region: config.cdkRegion
|
|
143
|
+
});
|
|
144
|
+
const command = new DescribeStacksCommand({
|
|
145
|
+
StackName: "BenchlingWebhookStack"
|
|
146
|
+
});
|
|
147
|
+
const response = await cloudformation.send(command);
|
|
148
|
+
if (response.Stacks && response.Stacks.length > 0) {
|
|
149
|
+
const stack = response.Stacks[0];
|
|
150
|
+
const output = stack.Outputs?.find((o) => o.OutputKey === "WebhookEndpoint");
|
|
151
|
+
webhookUrl = output?.OutputValue || "";
|
|
152
|
+
}
|
|
153
|
+
spinner.succeed("Stack outputs retrieved");
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
spinner.warn("Could not retrieve stack outputs");
|
|
157
|
+
}
|
|
158
|
+
// 10. Test the webhook endpoint
|
|
159
|
+
if (webhookUrl) {
|
|
160
|
+
console.log();
|
|
161
|
+
spinner.start("Testing webhook endpoint...");
|
|
162
|
+
try {
|
|
163
|
+
const testCmd = `curl -s -w "\\n%{http_code}" "${webhookUrl}/health"`;
|
|
164
|
+
const testResult = (0, child_process_1.execSync)(testCmd, { encoding: "utf-8", timeout: 10000 });
|
|
165
|
+
const lines = testResult.trim().split("\n");
|
|
166
|
+
const statusCode = lines[lines.length - 1];
|
|
167
|
+
if (statusCode === "200") {
|
|
168
|
+
spinner.succeed("Webhook health check passed");
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
spinner.warn(`Webhook returned HTTP ${statusCode}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
spinner.warn("Could not test webhook endpoint");
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// 11. Success message
|
|
137
179
|
console.log();
|
|
138
180
|
console.log((0, boxen_1.default)(`${chalk_1.default.green.bold("✓ Deployment completed successfully!")}\n\n` +
|
|
139
181
|
`Stack: ${chalk_1.default.cyan(result.stackName)}\n` +
|
|
140
|
-
`Region: ${chalk_1.default.cyan(config.cdkRegion)}\n
|
|
182
|
+
`Region: ${chalk_1.default.cyan(config.cdkRegion)}\n` +
|
|
183
|
+
(webhookUrl ? `Webhook URL: ${chalk_1.default.cyan(webhookUrl)}\n\n` : "\n") +
|
|
141
184
|
`${chalk_1.default.bold("Next steps:")}\n` +
|
|
142
|
-
" 1.
|
|
143
|
-
|
|
144
|
-
"
|
|
185
|
+
" 1. Set the webhook URL in your Benchling app settings:\n" +
|
|
186
|
+
` ${chalk_1.default.cyan(webhookUrl || "<WEBHOOK_URL>")}\n\n` +
|
|
187
|
+
" 2. Test the integration by creating a Quilt package in Benchling\n\n" +
|
|
145
188
|
`${chalk_1.default.dim("For more info: https://github.com/quiltdata/benchling-webhook#readme")}`, { padding: 1, borderColor: "green", borderStyle: "round" }));
|
|
146
189
|
}
|
|
147
190
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../bin/commands/deploy.ts"],"names":[],"mappings":";;;;;AAmBA,
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../bin/commands/deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../bin/commands/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAK5E,wBAAsB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CjG"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.manifestCommand = manifestCommand;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const boxen_1 = __importDefault(require("boxen"));
|
|
10
|
+
const config_1 = require("../../lib/utils/config");
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
12
|
+
const pkg = require("../../package.json");
|
|
13
|
+
async function manifestCommand(options) {
|
|
14
|
+
const config = (0, config_1.loadConfigSync)(options);
|
|
15
|
+
const outputPath = options.output || "app-manifest.yaml";
|
|
16
|
+
const manifest = `manifestVersion: 1
|
|
17
|
+
info:
|
|
18
|
+
name: Quilt Integration
|
|
19
|
+
description: Package Benchling notebook entries as Quilt data packages
|
|
20
|
+
version: ${pkg.version}
|
|
21
|
+
features:
|
|
22
|
+
- name: Quilt Package
|
|
23
|
+
id: quilt_entry
|
|
24
|
+
type: CANVAS
|
|
25
|
+
subscriptions:
|
|
26
|
+
deliveryMethod: WEBHOOK
|
|
27
|
+
messages:
|
|
28
|
+
- type: v2.canvas.userInteracted
|
|
29
|
+
- type: v2.canvas.created
|
|
30
|
+
- type: v2.entry.created
|
|
31
|
+
- type: v2.entry.updated.fields
|
|
32
|
+
`;
|
|
33
|
+
try {
|
|
34
|
+
(0, fs_1.writeFileSync)(outputPath, manifest);
|
|
35
|
+
console.log(chalk_1.default.green(`✓ Created ${outputPath}`));
|
|
36
|
+
console.log();
|
|
37
|
+
console.log((0, boxen_1.default)(`${chalk_1.default.bold("Next steps:")}\n\n` +
|
|
38
|
+
"1. Upload this manifest to Benchling:\n" +
|
|
39
|
+
` ${chalk_1.default.cyan("https://docs.benchling.com/docs/getting-started-benchling-apps#creating-an-app-from-a-manifest")}\n\n` +
|
|
40
|
+
"2. Copy the App Definition ID from the app overview page\n\n" +
|
|
41
|
+
"3. Install the app in your Benchling tenant (don't set webhook URL yet):\n" +
|
|
42
|
+
` ${chalk_1.default.cyan("https://docs.benchling.com/docs/getting-started-benchling-apps#installing-your-app")}\n\n` +
|
|
43
|
+
"4. Deploy to AWS:\n" +
|
|
44
|
+
` ${chalk_1.default.cyan("npx @quiltdata/benchling-webhook")}\n` +
|
|
45
|
+
` ${chalk_1.default.dim("(You'll be prompted for the App Definition ID)")}\n\n` +
|
|
46
|
+
"5. After deployment, set the webhook URL in your Benchling app settings", { padding: 1, borderColor: "blue", borderStyle: "round" }));
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error(chalk_1.default.red(`✗ Failed to create manifest: ${error.message}`));
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../bin/commands/manifest.ts"],"names":[],"mappings":";;;;;AAQA,0CA6CC;AArDD,2BAAmC;AACnC,kDAA0B;AAC1B,kDAA0B;AAC1B,mDAA4E;AAE5E,iEAAiE;AACjE,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEnC,KAAK,UAAU,eAAe,CAAC,OAA4C;IAC9E,MAAM,MAAM,GAAG,IAAA,uBAAc,EAAC,OAAO,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,mBAAmB,CAAC;IAEzD,MAAM,QAAQ,GAAG;;;;aAIR,GAAG,CAAC,OAAO;;;;;;;;;;;;CAYvB,CAAC;IAEE,IAAI,CAAC;QACD,IAAA,kBAAa,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CACP,IAAA,eAAK,EACD,GAAG,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM;YACxC,yCAAyC;YACzC,MAAM,eAAK,CAAC,IAAI,CAAC,gGAAgG,CAAC,MAAM;YACxH,8DAA8D;YAC9D,4EAA4E;YAC5E,MAAM,eAAK,CAAC,IAAI,CAAC,oFAAoF,CAAC,MAAM;YAC5G,qBAAqB;YACrB,MAAM,eAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,IAAI;YACxD,MAAM,eAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,MAAM;YACvE,yEAAyE,EACnE,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAC5D,CACJ,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,gCAAiC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../bin/commands/test.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmG1F"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.testCommand = testCommand;
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const ora_1 = __importDefault(require("ora"));
|
|
10
|
+
const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
|
|
11
|
+
async function testCommand(options) {
|
|
12
|
+
let webhookUrl = options.url;
|
|
13
|
+
// If no URL provided, try to get it from CloudFormation stack outputs
|
|
14
|
+
if (!webhookUrl) {
|
|
15
|
+
const spinner = (0, ora_1.default)("Retrieving webhook URL from stack...").start();
|
|
16
|
+
try {
|
|
17
|
+
const cloudformation = new client_cloudformation_1.CloudFormationClient({});
|
|
18
|
+
// Try to find the stack
|
|
19
|
+
const command = new client_cloudformation_1.DescribeStacksCommand({
|
|
20
|
+
StackName: "BenchlingWebhookStack"
|
|
21
|
+
});
|
|
22
|
+
const response = await cloudformation.send(command);
|
|
23
|
+
if (response.Stacks && response.Stacks.length > 0) {
|
|
24
|
+
const stack = response.Stacks[0];
|
|
25
|
+
const output = stack.Outputs?.find(o => o.OutputKey === "WebhookEndpoint");
|
|
26
|
+
if (output?.OutputValue) {
|
|
27
|
+
webhookUrl = output.OutputValue;
|
|
28
|
+
spinner.succeed(`Found webhook URL: ${chalk_1.default.cyan(webhookUrl)}`);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
spinner.fail("Could not find WebhookEndpoint in stack outputs");
|
|
32
|
+
console.log();
|
|
33
|
+
console.log(chalk_1.default.yellow("Usage: npx @quiltdata/benchling-webhook test --url <webhook-url>"));
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
spinner.fail("Stack BenchlingWebhookStack not found");
|
|
39
|
+
console.log();
|
|
40
|
+
console.log(chalk_1.default.yellow("Make sure the stack is deployed, or provide a URL:"));
|
|
41
|
+
console.log(chalk_1.default.cyan(" npx @quiltdata/benchling-webhook test --url <webhook-url>"));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
spinner.fail("Could not retrieve stack outputs");
|
|
47
|
+
console.log();
|
|
48
|
+
console.log(chalk_1.default.red(err.message));
|
|
49
|
+
console.log();
|
|
50
|
+
console.log(chalk_1.default.yellow("Make sure the stack is deployed, or provide a URL:"));
|
|
51
|
+
console.log(chalk_1.default.cyan(" npx @quiltdata/benchling-webhook test --url <webhook-url>"));
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Test health endpoint
|
|
56
|
+
console.log();
|
|
57
|
+
const spinner = (0, ora_1.default)("Testing webhook health endpoint...").start();
|
|
58
|
+
try {
|
|
59
|
+
const healthUrl = `${webhookUrl}/health`;
|
|
60
|
+
const result = (0, child_process_1.execSync)(`curl -s -w "\\n%{http_code}" "${healthUrl}"`, {
|
|
61
|
+
encoding: "utf-8",
|
|
62
|
+
timeout: 10000
|
|
63
|
+
});
|
|
64
|
+
const lines = result.trim().split("\n");
|
|
65
|
+
const statusCode = lines[lines.length - 1];
|
|
66
|
+
const body = lines.slice(0, -1).join("\n");
|
|
67
|
+
if (statusCode === "200") {
|
|
68
|
+
spinner.succeed("Health check passed");
|
|
69
|
+
console.log();
|
|
70
|
+
console.log(chalk_1.default.green.bold("✓ Webhook is healthy!"));
|
|
71
|
+
console.log();
|
|
72
|
+
console.log(chalk_1.default.bold("Response:"));
|
|
73
|
+
console.log(chalk_1.default.dim(body));
|
|
74
|
+
console.log();
|
|
75
|
+
console.log(chalk_1.default.bold("Next steps:"));
|
|
76
|
+
console.log(" 1. Ensure your Benchling app's webhook URL is set to:");
|
|
77
|
+
console.log(` ${chalk_1.default.cyan(webhookUrl)}`);
|
|
78
|
+
console.log(" 2. Test the integration by creating a Quilt package in Benchling");
|
|
79
|
+
console.log();
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
spinner.fail(`Health check failed (HTTP ${statusCode})`);
|
|
83
|
+
console.log();
|
|
84
|
+
console.log(chalk_1.default.red.bold("✗ Webhook returned an error"));
|
|
85
|
+
console.log();
|
|
86
|
+
console.log(chalk_1.default.bold("Response:"));
|
|
87
|
+
console.log(body);
|
|
88
|
+
console.log();
|
|
89
|
+
console.log(chalk_1.default.yellow("Troubleshooting:"));
|
|
90
|
+
console.log(" 1. Check CloudWatch logs for errors");
|
|
91
|
+
console.log(" 2. Verify the stack deployed successfully");
|
|
92
|
+
console.log(" 3. Ensure your AWS credentials are configured");
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
spinner.fail("Health check failed");
|
|
98
|
+
console.log();
|
|
99
|
+
console.log(chalk_1.default.red(error.message));
|
|
100
|
+
console.log();
|
|
101
|
+
console.log(chalk_1.default.yellow("This might indicate:"));
|
|
102
|
+
console.log(" - The webhook endpoint is not accessible");
|
|
103
|
+
console.log(" - Network connectivity issues");
|
|
104
|
+
console.log(" - The stack is not fully deployed yet");
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../bin/commands/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,10 @@ export interface ValidationError {
|
|
|
41
41
|
canInfer: boolean;
|
|
42
42
|
helpText?: string;
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Get catalog URL from quilt3 config if available
|
|
46
|
+
*/
|
|
47
|
+
export declare function getQuilt3Catalog(): string | undefined;
|
|
44
48
|
/**
|
|
45
49
|
* Load .env file and expand variables
|
|
46
50
|
*/
|
|
@@ -50,7 +54,8 @@ export declare function loadDotenv(filePath: string): Record<string, string>;
|
|
|
50
54
|
* 1. CLI options (highest)
|
|
51
55
|
* 2. Environment variables
|
|
52
56
|
* 3. .env file
|
|
53
|
-
* 4.
|
|
57
|
+
* 4. quilt3 config (for catalog only)
|
|
58
|
+
* 5. Inferred values (will be added separately)
|
|
54
59
|
*/
|
|
55
60
|
export declare function loadConfigSync(options?: ConfigOptions): Partial<Config>;
|
|
56
61
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../lib/utils/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../lib/utils/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,MAAM;IAErB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IAGtB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAGlC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IAGpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAerD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBnE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+C3E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EACvB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,gBAAgB,CA6ExE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA0CvE"}
|
package/dist/lib/utils/config.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getQuilt3Catalog = getQuilt3Catalog;
|
|
3
4
|
exports.loadDotenv = loadDotenv;
|
|
4
5
|
exports.loadConfigSync = loadConfigSync;
|
|
5
6
|
exports.mergeInferredConfig = mergeInferredConfig;
|
|
@@ -9,6 +10,27 @@ const dotenv_1 = require("dotenv");
|
|
|
9
10
|
const dotenv_expand_1 = require("dotenv-expand");
|
|
10
11
|
const fs_1 = require("fs");
|
|
11
12
|
const path_1 = require("path");
|
|
13
|
+
const child_process_1 = require("child_process");
|
|
14
|
+
/**
|
|
15
|
+
* Get catalog URL from quilt3 config if available
|
|
16
|
+
*/
|
|
17
|
+
function getQuilt3Catalog() {
|
|
18
|
+
try {
|
|
19
|
+
const result = (0, child_process_1.execSync)("quilt3 config", { encoding: "utf-8", stdio: ["pipe", "pipe", "ignore"] });
|
|
20
|
+
const catalog = result.trim();
|
|
21
|
+
// quilt3 config returns the full URL (e.g., https://nightly.quilttest.com)
|
|
22
|
+
// We want just the domain
|
|
23
|
+
if (catalog) {
|
|
24
|
+
const url = new URL(catalog);
|
|
25
|
+
return url.hostname;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// quilt3 not installed or not configured
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
12
34
|
/**
|
|
13
35
|
* Load .env file and expand variables
|
|
14
36
|
*/
|
|
@@ -32,7 +54,8 @@ function loadDotenv(filePath) {
|
|
|
32
54
|
* 1. CLI options (highest)
|
|
33
55
|
* 2. Environment variables
|
|
34
56
|
* 3. .env file
|
|
35
|
-
* 4.
|
|
57
|
+
* 4. quilt3 config (for catalog only)
|
|
58
|
+
* 5. Inferred values (will be added separately)
|
|
36
59
|
*/
|
|
37
60
|
function loadConfigSync(options = {}) {
|
|
38
61
|
// 1. Load .env file
|
|
@@ -40,10 +63,12 @@ function loadConfigSync(options = {}) {
|
|
|
40
63
|
const dotenvVars = (0, fs_1.existsSync)(envFile) ? loadDotenv(envFile) : {};
|
|
41
64
|
// 2. Merge with process.env
|
|
42
65
|
const envVars = { ...dotenvVars, ...process.env };
|
|
43
|
-
// 3.
|
|
66
|
+
// 3. Try to get catalog from quilt3 config as fallback
|
|
67
|
+
const quilt3Catalog = getQuilt3Catalog();
|
|
68
|
+
// 4. Build config with CLI options taking priority
|
|
44
69
|
const config = {
|
|
45
70
|
// Quilt
|
|
46
|
-
quiltCatalog: options.catalog || envVars.QUILT_CATALOG,
|
|
71
|
+
quiltCatalog: options.catalog || envVars.QUILT_CATALOG || quilt3Catalog,
|
|
47
72
|
quiltUserBucket: options.bucket || envVars.QUILT_USER_BUCKET,
|
|
48
73
|
quiltDatabase: envVars.QUILT_DATABASE,
|
|
49
74
|
// Benchling
|
|
@@ -114,7 +139,11 @@ function validateConfig(config) {
|
|
|
114
139
|
field: "benchlingAppDefinitionId",
|
|
115
140
|
message: "Benchling app definition ID",
|
|
116
141
|
canInfer: false,
|
|
117
|
-
helpText: "
|
|
142
|
+
helpText: "Create a Benchling app first:\n" +
|
|
143
|
+
" 1. Run: npx @quiltdata/benchling-webhook manifest\n" +
|
|
144
|
+
" 2. Upload the manifest to Benchling\n" +
|
|
145
|
+
" 3. Copy the App Definition ID from the app overview\n" +
|
|
146
|
+
" Or set ENABLE_WEBHOOK_VERIFICATION=false to skip (NOT recommended for production)",
|
|
118
147
|
});
|
|
119
148
|
}
|
|
120
149
|
// Required inferred values
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../lib/utils/config.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../lib/utils/config.ts"],"names":[],"mappings":";;AAiEA,4CAeC;AAKD,gCAmBC;AAUD,wCA+CC;AAKD,kDAaC;AAKD,wCA6EC;AAKD,wDA0CC;AApTD,mCAAgD;AAChD,iDAAuD;AACvD,2BAAgC;AAChC,+BAA+B;AAC/B,iDAAyC;AA0DzC;;GAEG;AACH,SAAgB,gBAAgB;IAC5B,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnG,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,2EAA2E;QAC3E,0BAA0B;QAC1B,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7B,OAAO,GAAG,CAAC,QAAQ,CAAC;QACxB,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,yCAAyC;QACzC,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,QAAgB;IACvC,MAAM,YAAY,GAAG,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,CAAC,IAAA,eAAU,EAAC,YAAY,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,eAAY,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IAEpD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,+BAA+B;IAC/B,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,IAAA,sBAAY,EAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,UAAyB,EAAE;IACtD,oBAAoB;IACpB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAA,eAAU,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAElE,4BAA4B;IAC5B,MAAM,OAAO,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElD,uDAAuD;IACvD,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IAEzC,mDAAmD;IACnD,MAAM,MAAM,GAAoB;QAChC,QAAQ;QACJ,YAAY,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,IAAI,aAAa;QACvE,eAAe,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,iBAAiB;QAC5D,aAAa,EAAE,OAAO,CAAC,cAAc;QAErC,YAAY;QACZ,eAAe,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,gBAAgB;QAC3D,iBAAiB,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,mBAAmB;QAClE,qBAAqB,EAAE,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,uBAAuB;QAC9E,wBAAwB,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,2BAA2B;QAE9E,MAAM;QACN,UAAU,EAAE,OAAO,CAAC,mBAAmB;QACvC,SAAS,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,UAAU;QAC7E,UAAU,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW;QAElD,MAAM;QACN,SAAS,EAAE,OAAO,CAAC,UAAU;QAC7B,WAAW,EAAE,OAAO,CAAC,aAAa;QAElC,WAAW;QACX,SAAS,EAAE,OAAO,CAAC,UAAU,IAAI,WAAW;QAC5C,MAAM,EAAE,OAAO,CAAC,OAAO,IAAI,eAAe;QAC1C,QAAQ,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM;QACrC,gBAAgB,EAAE,OAAO,CAAC,kBAAkB;QAC5C,yBAAyB,EAAE,OAAO,CAAC,2BAA2B,IAAI,MAAM;QACxE,mBAAmB,EAAE,OAAO,CAAC,qBAAqB;QAClD,iBAAiB,EAAE,OAAO,CAAC,mBAAmB,IAAI,qBAAqB;KAC1E,CAAC;IAEF,0BAA0B;IAC1B,OAAO,MAAM,CAAC,WAAW,CACrB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CACzC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAC/B,MAAuB,EACvB,YAAoC;IAEpC,8CAA8C;IAC9C,OAAO;QACH,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,YAAY,CAAC,mBAAmB;QACjE,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,YAAY,CAAC,kBAAkB;QAC9D,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,YAAY,CAAC,UAAU;QACtD,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,YAAY,CAAC,aAAa;QAC7D,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,YAAY,CAAC,cAAc;QAClE,GAAG,MAAM,EAAE,qCAAqC;KACnD,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,MAAuB;IAClD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,gCAAgC;IAChC,MAAM,kBAAkB,GAA0C;QAC9D,CAAC,cAAc,EAAE,mBAAmB,EAAE,6DAA6D,CAAC;QACpG,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,yDAAyD,CAAC;QACpG,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,wEAAwE,CAAC;QACjH,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,yCAAyC,CAAC;QAC7F,CAAC,uBAAuB,EAAE,+BAA+B,EAAE,6CAA6C,CAAC;KAC5G,CAAC;IAEF,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,kBAAkB,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACR,KAAK,EAAE,KAAe;gBACtB,OAAO;gBACP,QAAQ,EAAE,KAAK;gBACf,QAAQ;aACX,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,gDAAgD;IAChD,IAAI,MAAM,CAAC,yBAAyB,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC;QACnF,MAAM,CAAC,IAAI,CAAC;YACR,KAAK,EAAE,0BAA0B;YACjC,OAAO,EAAE,6BAA6B;YACtC,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,iCAAiC;gBACvC,yDAAyD;gBACzD,2CAA2C;gBAC3C,2DAA2D;gBAC3D,uFAAuF;SAC9F,CAAC,CAAC;IACP,CAAC;IAED,2BAA2B;IAC3B,MAAM,sBAAsB,GAAkC;QAC1D,CAAC,YAAY,EAAE,gBAAgB,CAAC;QAChC,CAAC,WAAW,EAAE,YAAY,CAAC;QAC3B,CAAC,WAAW,EAAE,gBAAgB,CAAC;QAC/B,CAAC,aAAa,EAAE,eAAe,CAAC;QAChC,CAAC,eAAe,EAAE,qBAAqB,CAAC;KAC3C,CAAC;IAEF,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,sBAAsB,EAAE,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACR,KAAK,EAAE,KAAe;gBACtB,OAAO;gBACP,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,mFAAmF;aAChG,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,uCAAuC;IACvC,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAChF,QAAQ,CAAC,IAAI,CAAC,qHAAqH,CAAC,CAAC;IACzI,CAAC;IAED,IAAI,MAAM,CAAC,eAAe,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;QAC/E,QAAQ,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IAED,oBAAoB;IACpB,IAAI,MAAM,CAAC,yBAAyB,KAAK,OAAO,EAAE,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;IACnG,CAAC;IAED,OAAO;QACH,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,QAAQ;KACX,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,MAAwB;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE1D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACvC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACjB,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACxC,CAAC;YACL,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YACjD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACjB,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACxC,CAAC;YACL,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quiltdata/benchling-webhook",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
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",
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"build": "tsc",
|
|
22
22
|
"prebuild": "rm -rf dist",
|
|
23
23
|
"postbuild": "chmod +x dist/bin/cli.js && cp bin/*.js dist/bin/ 2>/dev/null || true",
|
|
24
|
+
"cli": "ts-node bin/cli.ts",
|
|
24
25
|
"synth": "npx cdk synth",
|
|
25
26
|
"logs": "node bin/check-logs.js",
|
|
26
27
|
"event": "node bin/send-event.js",
|
|
@@ -71,17 +72,18 @@
|
|
|
71
72
|
"typescript": "~5.9.0"
|
|
72
73
|
},
|
|
73
74
|
"dependencies": {
|
|
75
|
+
"@aws-sdk/client-cloudformation": "^3.920.0",
|
|
74
76
|
"@aws-sdk/client-s3": "^3.758.0",
|
|
75
77
|
"adm-zip": "^0.5.10",
|
|
76
78
|
"aws-cdk-lib": "2.221.1",
|
|
77
79
|
"aws-sdk": "^2.1574.0",
|
|
78
80
|
"boxen": "^8.0.0",
|
|
79
|
-
"chalk": "^
|
|
81
|
+
"chalk": "^5.0.0",
|
|
80
82
|
"commander": "^14.0.2",
|
|
81
83
|
"constructs": "^10.0.0",
|
|
82
84
|
"dotenv-expand": "^12.0.3",
|
|
83
85
|
"enquirer": "^2.4.1",
|
|
84
|
-
"ora": "^
|
|
86
|
+
"ora": "^9.0.0"
|
|
85
87
|
},
|
|
86
88
|
"engines": {
|
|
87
89
|
"node": ">=18.0.0",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quiltdata/benchling-webhook",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
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",
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"build": "tsc",
|
|
22
22
|
"prebuild": "rm -rf dist",
|
|
23
23
|
"postbuild": "chmod +x dist/bin/cli.js && cp bin/*.js dist/bin/ 2>/dev/null || true",
|
|
24
|
+
"cli": "ts-node bin/cli.ts",
|
|
24
25
|
"synth": "npx cdk synth",
|
|
25
26
|
"logs": "node bin/check-logs.js",
|
|
26
27
|
"event": "node bin/send-event.js",
|
|
@@ -71,17 +72,18 @@
|
|
|
71
72
|
"typescript": "~5.9.0"
|
|
72
73
|
},
|
|
73
74
|
"dependencies": {
|
|
75
|
+
"@aws-sdk/client-cloudformation": "^3.920.0",
|
|
74
76
|
"@aws-sdk/client-s3": "^3.758.0",
|
|
75
77
|
"adm-zip": "^0.5.10",
|
|
76
78
|
"aws-cdk-lib": "2.221.1",
|
|
77
79
|
"aws-sdk": "^2.1574.0",
|
|
78
80
|
"boxen": "^8.0.0",
|
|
79
|
-
"chalk": "^
|
|
81
|
+
"chalk": "^5.0.0",
|
|
80
82
|
"commander": "^14.0.2",
|
|
81
83
|
"constructs": "^10.0.0",
|
|
82
84
|
"dotenv-expand": "^12.0.3",
|
|
83
85
|
"enquirer": "^2.4.1",
|
|
84
|
-
"ora": "^
|
|
86
|
+
"ora": "^9.0.0"
|
|
85
87
|
},
|
|
86
88
|
"engines": {
|
|
87
89
|
"node": ">=18.0.0",
|
package/README.benchling.md
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# **Connecting a Webhook to Benchling via an App**
|
|
2
|
-
|
|
3
|
-
This guide walks you through integrating an **existing webhook** with Benchling by creating a **Benchling App** and subscribing to events.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## **1. Prerequisites**
|
|
8
|
-
|
|
9
|
-
Before proceeding, ensure you have:
|
|
10
|
-
|
|
11
|
-
- **Benchling Tenant Admin Access**: Permissions to create and manage apps.
|
|
12
|
-
- **A Public HTTPS Endpoint**: Your webhook URL that can receive POST requests.
|
|
13
|
-
- **API Credentials** (if required for authentication).
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## **2. Creating a Benchling App**
|
|
18
|
-
|
|
19
|
-
Benchling requires an **app** to manage webhook subscriptions. Follow these steps to create one.
|
|
20
|
-
|
|
21
|
-
### **Step 1: Access the Developer Console**
|
|
22
|
-
|
|
23
|
-
1. **Log in to Benchling**.
|
|
24
|
-
2. **Navigate to the Developer Console**:
|
|
25
|
-
- Click on your **profile icon** (lower-left corner).
|
|
26
|
-
- Select **"Feature Settings"**.
|
|
27
|
-
- Click on **"Developer Console"**.
|
|
28
|
-
|
|
29
|
-
### **Step 2: Create a New App**
|
|
30
|
-
|
|
31
|
-
1. In the **"Apps"** section, click **"Create app"**.
|
|
32
|
-
2. Choose **"From scratch"**.
|
|
33
|
-
3. Provide the following details:
|
|
34
|
-
- **Name**: A short label (e.b., "entry-webhook").
|
|
35
|
-
- **Description**: A brief summary of the app's purpose.
|
|
36
|
-
4. Leave it as Private, or make Public.
|
|
37
|
-
5. Click **"Create"**.
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## **3. Configuring the Webhook Subscription**
|
|
42
|
-
|
|
43
|
-
Now, configure the app to send data to your webhook.
|
|
44
|
-
|
|
45
|
-
### **Step 1: Define Event Subscriptions**
|
|
46
|
-
|
|
47
|
-
1. In the app's settings, find "Webhook URL" (under Overview -> Global Information).
|
|
48
|
-
2. Click the edit icon
|
|
49
|
-
3. Paste in your webhook URL.
|
|
50
|
-
4. Click checkmark to save.
|
|
51
|
-
|
|
52
|
-
NOTE: Enter the top-level endpoint; Benchling will send to the appropriate
|
|
53
|
-
path underneath that:
|
|
54
|
-
|
|
55
|
-
- assayRun: /event
|
|
56
|
-
- configuration: /lifecycle
|
|
57
|
-
- canvas: /canvas
|
|
58
|
-
- entry: /event
|
|
59
|
-
- request: /event
|
|
60
|
-
- workflow: /event
|
|
61
|
-
|
|
62
|
-
### **Step 2: Webhook Testing**
|
|
63
|
-
|
|
64
|
-
1. Go to the **"Webhook Testing"** tab.
|
|
65
|
-
2. Under "**Preview**", select one of the "/event" options.
|
|
66
|
-
3. Click **"Send Test"**.
|
|
67
|
-
4. Confirm that the "**Test**" tab shows "Success"
|
|
68
|
-
5. Verify that a package was properly created.
|
|
69
|
-
|
|
70
|
-
### **Step 3: Add App To Your Tenant**
|
|
71
|
-
|
|
72
|
-
1. Go back to Home (the Benchling jellyfish logo in the upper right).
|
|
73
|
-
2. Go to the Tenant Admin Console (from your profile icon).
|
|
74
|
-
3. Select your organization.
|
|
75
|
-
4. Select Apps under your organization (NOT from your Tenant)
|
|
76
|
-
|
|
77
|
-
---
|