@quiltdata/benchling-webhook 0.4.13 → 0.5.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 (87) hide show
  1. package/dist/bin/benchling-webhook.d.ts +50 -0
  2. package/dist/bin/benchling-webhook.d.ts.map +1 -0
  3. package/dist/bin/benchling-webhook.js +268 -0
  4. package/dist/bin/benchling-webhook.js.map +1 -0
  5. package/dist/bin/cli.d.ts +3 -0
  6. package/dist/bin/cli.d.ts.map +1 -0
  7. package/dist/bin/cli.js +83 -0
  8. package/dist/bin/cli.js.map +1 -0
  9. package/dist/bin/commands/deploy.d.ts +7 -0
  10. package/dist/bin/commands/deploy.d.ts.map +1 -0
  11. package/dist/bin/commands/deploy.js +154 -0
  12. package/dist/bin/commands/deploy.js.map +1 -0
  13. package/dist/bin/commands/init.d.ts +9 -0
  14. package/dist/bin/commands/init.d.ts.map +1 -0
  15. package/dist/bin/commands/init.js +155 -0
  16. package/dist/bin/commands/init.js.map +1 -0
  17. package/dist/bin/commands/validate.d.ts +5 -0
  18. package/dist/bin/commands/validate.d.ts.map +1 -0
  19. package/dist/bin/commands/validate.js +135 -0
  20. package/dist/bin/commands/validate.js.map +1 -0
  21. package/dist/bin/get-env.js +180 -0
  22. package/dist/bin/publish.js +327 -0
  23. package/{bin → dist/bin}/version.js +73 -37
  24. package/dist/lib/alb-api-gateway.d.ts +17 -0
  25. package/dist/lib/alb-api-gateway.d.ts.map +1 -0
  26. package/dist/lib/alb-api-gateway.js +191 -0
  27. package/dist/lib/alb-api-gateway.js.map +1 -0
  28. package/dist/lib/benchling-webhook-stack.d.ts +25 -0
  29. package/dist/lib/benchling-webhook-stack.d.ts.map +1 -0
  30. package/dist/lib/benchling-webhook-stack.js +165 -0
  31. package/dist/lib/benchling-webhook-stack.js.map +1 -0
  32. package/dist/lib/constants.d.ts +28 -0
  33. package/dist/lib/constants.d.ts.map +1 -0
  34. package/dist/lib/constants.js +31 -0
  35. package/dist/lib/constants.js.map +1 -0
  36. package/dist/lib/ecr-repository.d.ts +16 -0
  37. package/dist/lib/ecr-repository.d.ts.map +1 -0
  38. package/dist/lib/ecr-repository.js +90 -0
  39. package/dist/lib/ecr-repository.js.map +1 -0
  40. package/dist/lib/fargate-service.d.ts +32 -0
  41. package/dist/lib/fargate-service.d.ts.map +1 -0
  42. package/dist/lib/fargate-service.js +294 -0
  43. package/dist/lib/fargate-service.js.map +1 -0
  44. package/{lib/index.ts → dist/lib/index.d.ts} +5 -5
  45. package/dist/lib/index.d.ts.map +1 -0
  46. package/dist/lib/index.js +38 -0
  47. package/dist/lib/index.js.map +1 -0
  48. package/dist/lib/templates/base-template.d.ts +14 -0
  49. package/dist/lib/templates/base-template.d.ts.map +1 -0
  50. package/dist/lib/templates/base-template.js +68 -0
  51. package/dist/lib/templates/base-template.js.map +1 -0
  52. package/dist/lib/templates/readme.d.ts +11 -0
  53. package/dist/lib/templates/readme.d.ts.map +1 -0
  54. package/dist/lib/templates/readme.js +105 -0
  55. package/dist/lib/templates/readme.js.map +1 -0
  56. package/dist/lib/utils/config.d.ts +68 -0
  57. package/dist/lib/utils/config.d.ts.map +1 -0
  58. package/dist/lib/utils/config.js +195 -0
  59. package/dist/lib/utils/config.js.map +1 -0
  60. package/dist/lib/utils/stack-inference.d.ts +73 -0
  61. package/dist/lib/utils/stack-inference.d.ts.map +1 -0
  62. package/dist/lib/utils/stack-inference.js +410 -0
  63. package/dist/lib/utils/stack-inference.js.map +1 -0
  64. package/dist/package.json +90 -0
  65. package/package.json +32 -21
  66. package/AGENTS.md +0 -226
  67. package/CHANGELOG.md +0 -91
  68. package/bin/benchling-webhook.ts +0 -172
  69. package/bin/cli-auth.sh +0 -74
  70. package/bin/get-env.js +0 -564
  71. package/bin/publish-manual.js +0 -211
  72. package/bin/release-notes.sh +0 -82
  73. package/bin/sync-version.js +0 -72
  74. package/cdk.context.json +0 -58
  75. package/cdk.json +0 -85
  76. package/doc/NPM_OIDC_SETUP.md +0 -95
  77. package/doc/PARAMETERS.md +0 -203
  78. package/doc/RELEASE.md +0 -297
  79. package/doc/RELEASE_NOTES.md +0 -64
  80. package/jest.config.js +0 -14
  81. package/lib/README.md +0 -50
  82. package/lib/oauth-tester.json +0 -35
  83. package/tsconfig.json +0 -34
  84. /package/{bin → dist/bin}/check-logs.js +0 -0
  85. /package/{bin → dist/bin}/release.js +0 -0
  86. /package/{bin → dist/bin}/send-event.js +0 -0
  87. /package/{bin → dist/bin}/test-invalid-signature.js +0 -0
@@ -0,0 +1,294 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.FargateService = void 0;
37
+ const cdk = __importStar(require("aws-cdk-lib"));
38
+ const ec2 = __importStar(require("aws-cdk-lib/aws-ec2"));
39
+ const ecs = __importStar(require("aws-cdk-lib/aws-ecs"));
40
+ const elbv2 = __importStar(require("aws-cdk-lib/aws-elasticloadbalancingv2"));
41
+ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
42
+ const logs = __importStar(require("aws-cdk-lib/aws-logs"));
43
+ const secretsmanager = __importStar(require("aws-cdk-lib/aws-secretsmanager"));
44
+ const s3 = __importStar(require("aws-cdk-lib/aws-s3"));
45
+ const constructs_1 = require("constructs");
46
+ class FargateService extends constructs_1.Construct {
47
+ constructor(scope, id, props) {
48
+ super(scope, id);
49
+ // Create ECS Cluster
50
+ this.cluster = new ecs.Cluster(this, "BenchlingWebhookCluster", {
51
+ vpc: props.vpc,
52
+ clusterName: "benchling-webhook-cluster",
53
+ enableFargateCapacityProviders: true,
54
+ });
55
+ // Enable Container Insights for monitoring
56
+ const cfnCluster = this.cluster.node.defaultChild;
57
+ cfnCluster.clusterSettings = [
58
+ {
59
+ name: "containerInsights",
60
+ value: "enabled",
61
+ },
62
+ ];
63
+ // Create CloudWatch Log Group for container logs
64
+ this.logGroup = new logs.LogGroup(this, "ContainerLogGroup", {
65
+ logGroupName: "/ecs/benchling-webhook",
66
+ retention: logs.RetentionDays.ONE_WEEK,
67
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
68
+ });
69
+ // Create IAM Task Execution Role (for ECS to pull images and write logs)
70
+ const taskExecutionRole = new iam.Role(this, "TaskExecutionRole", {
71
+ assumedBy: new iam.ServicePrincipal("ecs-tasks.amazonaws.com"),
72
+ managedPolicies: [
73
+ iam.ManagedPolicy.fromAwsManagedPolicyName("service-role/AmazonECSTaskExecutionRolePolicy"),
74
+ ],
75
+ });
76
+ // Note: ECR pull permissions will be automatically granted by fromEcrRepository()
77
+ // Create IAM Task Role (for the container to access AWS services)
78
+ const taskRole = new iam.Role(this, "TaskRole", {
79
+ assumedBy: new iam.ServicePrincipal("ecs-tasks.amazonaws.com"),
80
+ });
81
+ // Grant S3 bucket access to task role
82
+ props.bucket.grantReadWrite(taskRole);
83
+ // Grant SQS access to task role
84
+ const queueArn = `arn:aws:sqs:${props.region}:${props.account}:${props.queueName}`;
85
+ taskRole.addToPolicy(new iam.PolicyStatement({
86
+ actions: [
87
+ "sqs:SendMessage",
88
+ "sqs:GetQueueUrl",
89
+ "sqs:GetQueueAttributes",
90
+ ],
91
+ resources: [queueArn],
92
+ }));
93
+ // Grant Athena access to task role for package querying
94
+ taskRole.addToPolicy(new iam.PolicyStatement({
95
+ actions: [
96
+ "athena:StartQueryExecution",
97
+ "athena:GetQueryExecution",
98
+ "athena:GetQueryResults",
99
+ "athena:StopQueryExecution",
100
+ "athena:GetWorkGroup",
101
+ ],
102
+ resources: [
103
+ `arn:aws:athena:${props.region}:${props.account}:workgroup/primary`,
104
+ ],
105
+ }));
106
+ // Grant Glue Data Catalog access (required for Athena queries)
107
+ taskRole.addToPolicy(new iam.PolicyStatement({
108
+ actions: [
109
+ "glue:GetDatabase",
110
+ "glue:GetTable",
111
+ "glue:GetPartitions",
112
+ ],
113
+ resources: [
114
+ `arn:aws:glue:${props.region}:${props.account}:catalog`,
115
+ `arn:aws:glue:${props.region}:${props.account}:database/${props.quiltDatabase}`,
116
+ `arn:aws:glue:${props.region}:${props.account}:table/${props.quiltDatabase}/*`,
117
+ ],
118
+ }));
119
+ // Grant S3 access for Athena query results
120
+ // Athena needs to write query results to an S3 bucket
121
+ const athenaResultsBucketArn = `arn:aws:s3:::aws-athena-query-results-${props.account}-${props.region}`;
122
+ taskRole.addToPolicy(new iam.PolicyStatement({
123
+ actions: [
124
+ "s3:GetBucketLocation",
125
+ "s3:GetObject",
126
+ "s3:ListBucket",
127
+ "s3:PutObject",
128
+ ],
129
+ resources: [
130
+ athenaResultsBucketArn,
131
+ `${athenaResultsBucketArn}/*`,
132
+ ],
133
+ }));
134
+ // Create or reference Secrets Manager secret for Benchling credentials
135
+ // In production, this should be created separately and referenced
136
+ const benchlingSecret = new secretsmanager.Secret(this, "BenchlingCredentials", {
137
+ secretName: "benchling-webhook/credentials",
138
+ description: "Benchling API credentials for webhook processor",
139
+ secretObjectValue: {
140
+ client_id: cdk.SecretValue.unsafePlainText(props.benchlingClientId),
141
+ client_secret: cdk.SecretValue.unsafePlainText(props.benchlingClientSecret),
142
+ },
143
+ });
144
+ // Grant read access to secrets
145
+ benchlingSecret.grantRead(taskRole);
146
+ // Create Fargate Task Definition
147
+ const taskDefinition = new ecs.FargateTaskDefinition(this, "TaskDefinition", {
148
+ memoryLimitMiB: 2048,
149
+ cpu: 1024,
150
+ executionRole: taskExecutionRole,
151
+ taskRole: taskRole,
152
+ family: "benchling-webhook-task",
153
+ });
154
+ // Add container to task definition
155
+ const container = taskDefinition.addContainer("BenchlingWebhookContainer", {
156
+ image: ecs.ContainerImage.fromEcrRepository(props.ecrRepository, props.imageTag || "latest"),
157
+ logging: ecs.LogDriver.awsLogs({
158
+ streamPrefix: "benchling-webhook",
159
+ logGroup: this.logGroup,
160
+ }),
161
+ environment: {
162
+ QUILT_USER_BUCKET: props.bucket.bucketName,
163
+ SQS_QUEUE_URL: `https://sqs.${props.region}.amazonaws.com/${props.account}/${props.queueName}`,
164
+ PKG_PREFIX: props.prefix,
165
+ BENCHLING_TENANT: props.benchlingTenant,
166
+ QUILT_CATALOG: props.quiltCatalog,
167
+ QUILT_DATABASE: props.quiltDatabase,
168
+ WEBHOOK_ALLOW_LIST: props.webhookAllowList,
169
+ AWS_REGION: props.region,
170
+ AWS_DEFAULT_REGION: props.region,
171
+ FLASK_ENV: "production",
172
+ LOG_LEVEL: props.logLevel || "INFO",
173
+ ENABLE_WEBHOOK_VERIFICATION: "false",
174
+ },
175
+ secrets: {
176
+ BENCHLING_CLIENT_ID: ecs.Secret.fromSecretsManager(benchlingSecret, "client_id"),
177
+ BENCHLING_CLIENT_SECRET: ecs.Secret.fromSecretsManager(benchlingSecret, "client_secret"),
178
+ },
179
+ healthCheck: {
180
+ command: ["CMD-SHELL", "curl -f http://localhost:5000/health || exit 1"],
181
+ interval: cdk.Duration.seconds(30),
182
+ timeout: cdk.Duration.seconds(10),
183
+ retries: 3,
184
+ startPeriod: cdk.Duration.seconds(60),
185
+ },
186
+ });
187
+ // Map container port
188
+ container.addPortMappings({
189
+ containerPort: 5000,
190
+ protocol: ecs.Protocol.TCP,
191
+ });
192
+ // Create S3 bucket for ALB access logs
193
+ const albLogsBucket = new s3.Bucket(this, "AlbLogsBucket", {
194
+ bucketName: `benchling-webhook-alb-logs-${props.account}`,
195
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
196
+ autoDeleteObjects: true,
197
+ lifecycleRules: [
198
+ {
199
+ expiration: cdk.Duration.days(7),
200
+ },
201
+ ],
202
+ });
203
+ // Create Application Load Balancer
204
+ this.loadBalancer = new elbv2.ApplicationLoadBalancer(this, "ALB", {
205
+ vpc: props.vpc,
206
+ internetFacing: true,
207
+ loadBalancerName: "benchling-webhook-alb",
208
+ });
209
+ // Enable ALB access logs
210
+ this.loadBalancer.logAccessLogs(albLogsBucket, "alb-access-logs");
211
+ // Create ALB Target Group
212
+ const targetGroup = new elbv2.ApplicationTargetGroup(this, "TargetGroup", {
213
+ vpc: props.vpc,
214
+ port: 5000,
215
+ protocol: elbv2.ApplicationProtocol.HTTP,
216
+ targetType: elbv2.TargetType.IP,
217
+ healthCheck: {
218
+ path: "/health/ready",
219
+ interval: cdk.Duration.seconds(30),
220
+ timeout: cdk.Duration.seconds(10),
221
+ healthyThresholdCount: 2,
222
+ unhealthyThresholdCount: 3,
223
+ healthyHttpCodes: "200",
224
+ },
225
+ deregistrationDelay: cdk.Duration.seconds(30),
226
+ });
227
+ // Add HTTP listener
228
+ this.loadBalancer.addListener("HttpListener", {
229
+ port: 80,
230
+ protocol: elbv2.ApplicationProtocol.HTTP,
231
+ defaultAction: elbv2.ListenerAction.forward([targetGroup]),
232
+ });
233
+ // Create Security Group for Fargate tasks
234
+ const fargateSecurityGroup = new ec2.SecurityGroup(this, "FargateSecurityGroup", {
235
+ vpc: props.vpc,
236
+ description: "Security group for Benchling webhook Fargate tasks",
237
+ allowAllOutbound: true,
238
+ });
239
+ // Allow ALB to communicate with Fargate tasks
240
+ fargateSecurityGroup.addIngressRule(ec2.Peer.securityGroupId(this.loadBalancer.connections.securityGroups[0].securityGroupId), ec2.Port.tcp(5000), "Allow traffic from ALB");
241
+ // Create Fargate Service
242
+ this.service = new ecs.FargateService(this, "Service", {
243
+ cluster: this.cluster,
244
+ taskDefinition: taskDefinition,
245
+ desiredCount: 2,
246
+ serviceName: "benchling-webhook-service",
247
+ assignPublicIp: true,
248
+ securityGroups: [fargateSecurityGroup],
249
+ healthCheckGracePeriod: cdk.Duration.seconds(60),
250
+ minHealthyPercent: 50,
251
+ maxHealthyPercent: 200,
252
+ circuitBreaker: {
253
+ rollback: true,
254
+ },
255
+ });
256
+ // Attach the service to the target group
257
+ this.service.attachToApplicationTargetGroup(targetGroup);
258
+ // Configure auto-scaling
259
+ const scaling = this.service.autoScaleTaskCount({
260
+ minCapacity: 2,
261
+ maxCapacity: 10,
262
+ });
263
+ // Scale based on CPU utilization
264
+ scaling.scaleOnCpuUtilization("CpuScaling", {
265
+ targetUtilizationPercent: 70,
266
+ scaleInCooldown: cdk.Duration.seconds(300),
267
+ scaleOutCooldown: cdk.Duration.seconds(60),
268
+ });
269
+ // Scale based on memory utilization
270
+ scaling.scaleOnMemoryUtilization("MemoryScaling", {
271
+ targetUtilizationPercent: 80,
272
+ scaleInCooldown: cdk.Duration.seconds(300),
273
+ scaleOutCooldown: cdk.Duration.seconds(60),
274
+ });
275
+ // Outputs
276
+ new cdk.CfnOutput(this, "LoadBalancerDNS", {
277
+ value: this.loadBalancer.loadBalancerDnsName,
278
+ description: "Load Balancer DNS Name",
279
+ exportName: "BenchlingWebhookALBDNS",
280
+ });
281
+ new cdk.CfnOutput(this, "ServiceName", {
282
+ value: this.service.serviceName,
283
+ description: "ECS Service Name",
284
+ exportName: "BenchlingWebhookServiceName",
285
+ });
286
+ new cdk.CfnOutput(this, "ClusterName", {
287
+ value: this.cluster.clusterName,
288
+ description: "ECS Cluster Name",
289
+ exportName: "BenchlingWebhookClusterName",
290
+ });
291
+ }
292
+ }
293
+ exports.FargateService = FargateService;
294
+ //# sourceMappingURL=fargate-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fargate-service.js","sourceRoot":"","sources":["../../lib/fargate-service.ts"],"names":[],"mappings":"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"}
@@ -24,8 +24,8 @@
24
24
  *
25
25
  * @module quilt-benchling-webhook
26
26
  */
27
-
28
- export { BenchlingWebhookStack, type BenchlingWebhookStackProps } from './benchling-webhook-stack';
29
- export { FargateService } from './fargate-service';
30
- export { AlbApiGateway } from './alb-api-gateway';
31
- export { EcrRepository } from './ecr-repository';
27
+ export { BenchlingWebhookStack, type BenchlingWebhookStackProps } from "./benchling-webhook-stack";
28
+ export { FargateService } from "./fargate-service";
29
+ export { AlbApiGateway } from "./alb-api-gateway";
30
+ export { EcrRepository } from "./ecr-repository";
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ /**
3
+ * Benchling Webhook Integration for Quilt
4
+ *
5
+ * This module exports CDK constructs for deploying a Benchling webhook integration
6
+ * that creates Quilt packages from Benchling lab notebook entries.
7
+ *
8
+ * @example Basic usage
9
+ * ```typescript
10
+ * import * as cdk from 'aws-cdk-lib';
11
+ * import { BenchlingWebhookStack } from 'quilt-benchling-webhook';
12
+ *
13
+ * const app = new cdk.App();
14
+ * new BenchlingWebhookStack(app, 'MyBenchlingWebhook', {
15
+ * env: { account: '123456789012', region: 'us-east-1' },
16
+ * bucketName: 'my-data-bucket',
17
+ * queueName: 'my-packager-queue',
18
+ * benchlingClientId: process.env.BENCHLING_CLIENT_ID!,
19
+ * benchlingClientSecret: process.env.BENCHLING_CLIENT_SECRET!,
20
+ * benchlingTenant: 'my-org',
21
+ * quiltCatalog: 'my-catalog.quiltdata.com',
22
+ * quiltDatabase: 'my_athena_db',
23
+ * });
24
+ * ```
25
+ *
26
+ * @module quilt-benchling-webhook
27
+ */
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.EcrRepository = exports.AlbApiGateway = exports.FargateService = exports.BenchlingWebhookStack = void 0;
30
+ var benchling_webhook_stack_1 = require("./benchling-webhook-stack");
31
+ Object.defineProperty(exports, "BenchlingWebhookStack", { enumerable: true, get: function () { return benchling_webhook_stack_1.BenchlingWebhookStack; } });
32
+ var fargate_service_1 = require("./fargate-service");
33
+ Object.defineProperty(exports, "FargateService", { enumerable: true, get: function () { return fargate_service_1.FargateService; } });
34
+ var alb_api_gateway_1 = require("./alb-api-gateway");
35
+ Object.defineProperty(exports, "AlbApiGateway", { enumerable: true, get: function () { return alb_api_gateway_1.AlbApiGateway; } });
36
+ var ecr_repository_1 = require("./ecr-repository");
37
+ Object.defineProperty(exports, "EcrRepository", { enumerable: true, get: function () { return ecr_repository_1.EcrRepository; } });
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;AAEH,qEAAmG;AAA1F,gIAAA,qBAAqB,OAAA;AAC9B,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,qDAAkD;AAAzC,gHAAA,aAAa,OAAA;AACtB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA"}
@@ -0,0 +1,14 @@
1
+ import * as stepfunctions from "aws-cdk-lib/aws-stepfunctions";
2
+ import * as lambda from "aws-cdk-lib/aws-lambda";
3
+ import * as s3 from "aws-cdk-lib/aws-s3";
4
+ import { Construct } from "constructs";
5
+ export declare abstract class BaseTemplate {
6
+ protected readonly scope: Construct;
7
+ protected readonly name: string;
8
+ constructor(scope: Construct);
9
+ protected abstract template(): string;
10
+ protected abstract createContent(): stepfunctions.Pass;
11
+ createMarkdown(): stepfunctions.Chain;
12
+ write(stringProcessor: lambda.IFunction, bucket: s3.IBucket, key: string): stepfunctions.Chain;
13
+ }
14
+ //# sourceMappingURL=base-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-template.d.ts","sourceRoot":"","sources":["../../../lib/templates/base-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,+BAA+B,CAAC;AAE/D,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,8BAAsB,YAAY;IAC9B,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEpB,KAAK,EAAE,SAAS;IAK5B,SAAS,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM;IACrC,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI;IAE/C,cAAc,IAAI,aAAa,CAAC,KAAK;IAerC,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC,KAAK;CAkBxG"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.BaseTemplate = void 0;
37
+ const stepfunctions = __importStar(require("aws-cdk-lib/aws-stepfunctions"));
38
+ const tasks = __importStar(require("aws-cdk-lib/aws-stepfunctions-tasks"));
39
+ class BaseTemplate {
40
+ constructor(scope) {
41
+ this.scope = scope;
42
+ this.name = this.constructor.name;
43
+ }
44
+ createMarkdown() {
45
+ return stepfunctions.Chain
46
+ .start(this.createContent())
47
+ .next(new stepfunctions.Pass(this.scope, `Create${this.name}Markdown`, {
48
+ parameters: {
49
+ "markdown.$": "$.content.content",
50
+ },
51
+ resultPath: "$.markdown",
52
+ }));
53
+ }
54
+ write(stringProcessor, bucket, key) {
55
+ return this.createMarkdown()
56
+ .next(new tasks.LambdaInvoke(this.scope, `Write${this.name}`, {
57
+ lambdaFunction: stringProcessor,
58
+ payload: stepfunctions.TaskInput.fromObject({
59
+ bucket: bucket.bucketName,
60
+ key: stepfunctions.JsonPath.stringAt(`States.Format('{}/{}', $.packageName, '${key}')`),
61
+ body: stepfunctions.JsonPath.stringAt("$.markdown.markdown"),
62
+ }),
63
+ resultPath: "$.writeResult",
64
+ }));
65
+ }
66
+ }
67
+ exports.BaseTemplate = BaseTemplate;
68
+ //# sourceMappingURL=base-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-template.js","sourceRoot":"","sources":["../../../lib/templates/base-template.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6EAA+D;AAC/D,2EAA6D;AAK7D,MAAsB,YAAY;IAI9B,YAAY,KAAgB;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACtC,CAAC;IAKM,cAAc;QACjB,OAAO,aAAa,CAAC,KAAK;aACrB,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;aAC3B,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CACxB,IAAI,CAAC,KAAK,EACV,SAAS,IAAI,CAAC,IAAI,UAAU,EAC5B;YACI,UAAU,EAAE;gBACR,YAAY,EAAE,mBAAmB;aACpC;YACD,UAAU,EAAE,YAAY;SAC3B,CACJ,CAAC,CAAC;IACX,CAAC;IAEM,KAAK,CAAC,eAAiC,EAAE,MAAkB,EAAE,GAAW;QAC3E,OAAO,IAAI,CAAC,cAAc,EAAE;aACvB,IAAI,CAAC,IAAI,KAAK,CAAC,YAAY,CACxB,IAAI,CAAC,KAAK,EACV,QAAQ,IAAI,CAAC,IAAI,EAAE,EACnB;YACI,cAAc,EAAE,eAAe;YAC/B,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC;gBACxC,MAAM,EAAE,MAAM,CAAC,UAAU;gBACzB,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAChC,0CAA0C,GAAG,IAAI,CACpD;gBACD,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC;aAC/D,CAAC;YACF,UAAU,EAAE,eAAe;SAC9B,CACJ,CAAC,CAAC;IACX,CAAC;CACJ;AA7CD,oCA6CC"}
@@ -0,0 +1,11 @@
1
+ import * as stepfunctions from "aws-cdk-lib/aws-stepfunctions";
2
+ import { BaseTemplate } from "./base-template";
3
+ export declare class ReadmeTemplate extends BaseTemplate {
4
+ protected template(): string;
5
+ protected createContent(): stepfunctions.Pass;
6
+ private setupFiles;
7
+ private formatAuthors;
8
+ private joinListVariables;
9
+ createMarkdown(): stepfunctions.Chain;
10
+ }
11
+ //# sourceMappingURL=readme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readme.d.ts","sourceRoot":"","sources":["../../../lib/templates/readme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,qBAAa,cAAe,SAAQ,YAAY;IAC5C,SAAS,CAAC,QAAQ,IAAI,MAAM;IAe5B,SAAS,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI;IA2B7C,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,iBAAiB;IAMlB,cAAc,IAAI,aAAa,CAAC,KAAK;CAO/C"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ReadmeTemplate = void 0;
37
+ const stepfunctions = __importStar(require("aws-cdk-lib/aws-stepfunctions"));
38
+ const constants_1 = require("../constants");
39
+ const base_template_1 = require("./base-template");
40
+ class ReadmeTemplate extends base_template_1.BaseTemplate {
41
+ template() {
42
+ return "# [{}]({})\n\n" +
43
+ "## {}\n\n" +
44
+ "* **Entry ID**: {}\n" +
45
+ "* **Display ID**: {}\n" +
46
+ "* **Folder ID**: {}\n" +
47
+ "* **API URL**: {}\n" +
48
+ "* **Created**: {} by {}\n" +
49
+ "* **Modified**: {}\n\n" +
50
+ "## Author (first only)\n\n{}\n\n" +
51
+ "## Files\n\n" +
52
+ "- [{}](./{}): Entry data\n" +
53
+ "- [{}](./{}): Webhook event message\n";
54
+ }
55
+ createContent() {
56
+ return new stepfunctions.Pass(this.scope, "CreateReadmeContent", {
57
+ parameters: {
58
+ "content.$": "States.Format('" + this.template() + "'" +
59
+ ", $.entry.entryData.name" + // H1 title (name)
60
+ ", $.entry.entryData.webURL" + // H1 url
61
+ ", $.entry.entryData.displayId" + // Blockquote (display ID)
62
+ ", $.entry.entryData.id" + // Entry ID
63
+ ", $.entry.entryData.displayId" + // Display ID
64
+ ", $.entry.entryData.folderId" + // Folder ID
65
+ ", $.entry.entryData.apiURL" + // API URL
66
+ ", $.entry.entryData.createdAt" + // Created timestamp
67
+ ", $.entry.entryData.creator.name" + // Creator name
68
+ ", $.entry.entryData.modifiedAt" + // Modified timestamp
69
+ ", States.Format('* {} <{}@{}>', $.entry.entryData.authors[0].name, $.entry.entryData.authors[0].handle, $.entry.entryData.authors[0].id)" + // First author only for simplicity
70
+ ", $.files.FILES.ENTRY_JSON, $.files.FILES.ENTRY_JSON" + // Files section - entry.json
71
+ ", $.files.FILES.INPUT_JSON, $.files.FILES.INPUT_JSON" + // Files section - input.json
72
+ ")",
73
+ },
74
+ resultPath: "$.content",
75
+ });
76
+ }
77
+ setupFiles() {
78
+ return new stepfunctions.Pass(this.scope, "SetupREADME", {
79
+ parameters: {
80
+ "FILES": constants_1.FILES,
81
+ },
82
+ resultPath: "$.files",
83
+ });
84
+ }
85
+ formatAuthors() {
86
+ // Simple pass - just pass through the authors array
87
+ return new stepfunctions.Pass(this.scope, "FormatAuthors", {
88
+ resultPath: stepfunctions.JsonPath.DISCARD,
89
+ });
90
+ }
91
+ joinListVariables() {
92
+ return new stepfunctions.Pass(this.scope, "JoinFormattedLists", {
93
+ resultPath: stepfunctions.JsonPath.DISCARD,
94
+ });
95
+ }
96
+ createMarkdown() {
97
+ return stepfunctions.Chain
98
+ .start(this.setupFiles())
99
+ .next(this.formatAuthors())
100
+ .next(this.joinListVariables())
101
+ .next(super.createMarkdown());
102
+ }
103
+ }
104
+ exports.ReadmeTemplate = ReadmeTemplate;
105
+ //# sourceMappingURL=readme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readme.js","sourceRoot":"","sources":["../../../lib/templates/readme.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6EAA+D;AAC/D,4CAAqC;AACrC,mDAA+C;AAE/C,MAAa,cAAe,SAAQ,4BAAY;IAClC,QAAQ;QACd,OAAO,gBAAgB;YACnB,WAAW;YACX,sBAAsB;YACtB,wBAAwB;YACxB,uBAAuB;YACvB,qBAAqB;YACrB,2BAA2B;YAC3B,wBAAwB;YACxB,kCAAkC;YAClC,cAAc;YACd,4BAA4B;YAC5B,uCAAuC,CAAC;IAChD,CAAC;IAES,aAAa;QACnB,OAAO,IAAI,aAAa,CAAC,IAAI,CACzB,IAAI,CAAC,KAAK,EACV,qBAAqB,EACrB;YACI,UAAU,EAAE;gBACR,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG;oBAClD,0BAA0B,GAAI,kBAAkB;oBAChD,4BAA4B,GAAG,SAAS;oBACxC,+BAA+B,GAAG,0BAA0B;oBAC5D,wBAAwB,GAAG,WAAW;oBACtC,+BAA+B,GAAG,aAAa;oBAC/C,8BAA8B,GAAG,YAAY;oBAC7C,4BAA4B,GAAG,UAAU;oBACzC,+BAA+B,GAAG,oBAAoB;oBACtD,kCAAkC,GAAG,eAAe;oBACpD,gCAAgC,GAAG,qBAAqB;oBACxD,0IAA0I,GAAG,mCAAmC;oBAChL,sDAAsD,GAAG,6BAA6B;oBACtF,sDAAsD,GAAG,6BAA6B;oBACtF,GAAG;aACV;YACD,UAAU,EAAE,WAAW;SAC1B,CACJ,CAAC;IACN,CAAC;IAEO,UAAU;QACd,OAAO,IAAI,aAAa,CAAC,IAAI,CACzB,IAAI,CAAC,KAAK,EACV,aAAa,EACb;YACI,UAAU,EAAE;gBACR,OAAO,EAAE,iBAAK;aACjB;YACD,UAAU,EAAE,SAAS;SACxB,CACJ,CAAC;IACN,CAAC;IAEO,aAAa;QACjB,oDAAoD;QACpD,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE;YACvD,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO;SAC7C,CAAC,CAAC;IACP,CAAC;IAEO,iBAAiB;QACrB,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,EAAE;YAC5D,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO;SAC7C,CAAC,CAAC;IACP,CAAC;IAEM,cAAc;QACjB,OAAO,aAAa,CAAC,KAAK;aACrB,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;aACxB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;aAC1B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC9B,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;IACtC,CAAC;CACJ;AA5ED,wCA4EC"}
@@ -0,0 +1,68 @@
1
+ export interface Config {
2
+ quiltCatalog: string;
3
+ quiltUserBucket: string;
4
+ quiltDatabase: string;
5
+ benchlingTenant: string;
6
+ benchlingClientId: string;
7
+ benchlingClientSecret: string;
8
+ benchlingAppDefinitionId?: string;
9
+ cdkAccount: string;
10
+ cdkRegion: string;
11
+ awsProfile?: string;
12
+ queueName: string;
13
+ sqsQueueUrl: string;
14
+ pkgPrefix?: string;
15
+ pkgKey?: string;
16
+ logLevel?: string;
17
+ webhookAllowList?: string;
18
+ enableWebhookVerification?: string;
19
+ createEcrRepository?: string;
20
+ ecrRepositoryName?: string;
21
+ }
22
+ export interface ConfigOptions {
23
+ envFile?: string;
24
+ catalog?: string;
25
+ bucket?: string;
26
+ tenant?: string;
27
+ clientId?: string;
28
+ clientSecret?: string;
29
+ appId?: string;
30
+ profile?: string;
31
+ region?: string;
32
+ }
33
+ export interface ValidationResult {
34
+ valid: boolean;
35
+ errors: ValidationError[];
36
+ warnings: string[];
37
+ }
38
+ export interface ValidationError {
39
+ field: string;
40
+ message: string;
41
+ canInfer: boolean;
42
+ helpText?: string;
43
+ }
44
+ /**
45
+ * Load .env file and expand variables
46
+ */
47
+ export declare function loadDotenv(filePath: string): Record<string, string>;
48
+ /**
49
+ * Load configuration from multiple sources with priority:
50
+ * 1. CLI options (highest)
51
+ * 2. Environment variables
52
+ * 3. .env file
53
+ * 4. Inferred values (will be added separately)
54
+ */
55
+ export declare function loadConfigSync(options?: ConfigOptions): Partial<Config>;
56
+ /**
57
+ * Merge inferred configuration with loaded config
58
+ */
59
+ export declare function mergeInferredConfig(config: Partial<Config>, inferredVars: Record<string, string>): Partial<Config>;
60
+ /**
61
+ * Validate configuration and return detailed errors
62
+ */
63
+ export declare function validateConfig(config: Partial<Config>): ValidationResult;
64
+ /**
65
+ * Format validation errors for CLI display
66
+ */
67
+ export declare function formatValidationErrors(result: ValidationResult): string;
68
+ //# sourceMappingURL=config.d.ts.map