@restatedev/restate-cdk 0.3.0 → 0.4.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.
package/dist/index.d.ts CHANGED
@@ -1,2 +1,5 @@
1
1
  export * from "./lambda-service-registry";
2
+ export * from "./registration-provider";
3
+ export * from "./restate-cloud-endpoint";
4
+ export * from "./restate-instance";
2
5
  export * from "./single-node-restate-instance";
package/dist/index.js CHANGED
@@ -25,5 +25,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
25
25
  };
26
26
  Object.defineProperty(exports, "__esModule", { value: true });
27
27
  __exportStar(require("./lambda-service-registry"), exports);
28
+ __exportStar(require("./registration-provider"), exports);
29
+ __exportStar(require("./restate-cloud-endpoint"), exports);
30
+ __exportStar(require("./restate-instance"), exports);
28
31
  __exportStar(require("./single-node-restate-instance"), exports);
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvcmVzdGF0ZS1jb25zdHJ1Y3RzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCw0REFBMEM7QUFDMUMsaUVBQStDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMyAtIFJlc3RhdGUgU29mdHdhcmUsIEluYy4sIFJlc3RhdGUgR21iSFxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBSZXN0YXRlIFNESyBmb3IgTm9kZS5qcy9UeXBlU2NyaXB0LFxuICogd2hpY2ggaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICpcbiAqIFlvdSBjYW4gZmluZCBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaW4gZmlsZSBMSUNFTlNFIGluIHRoZSByb290XG4gKiBkaXJlY3Rvcnkgb2YgdGhpcyByZXBvc2l0b3J5IG9yIHBhY2thZ2UsIG9yIGF0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVzdGF0ZWRldi9zZGstdHlwZXNjcmlwdC9ibG9iL21haW4vTElDRU5TRVxuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL2xhbWJkYS1zZXJ2aWNlLXJlZ2lzdHJ5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zaW5nbGUtbm9kZS1yZXN0YXRlLWluc3RhbmNlXCI7Il19
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvcmVzdGF0ZS1jb25zdHJ1Y3RzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCw0REFBMEM7QUFDMUMsMERBQXdDO0FBQ3hDLDJEQUF5QztBQUN6QyxxREFBbUM7QUFDbkMsaUVBQStDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMyAtIFJlc3RhdGUgU29mdHdhcmUsIEluYy4sIFJlc3RhdGUgR21iSFxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBSZXN0YXRlIFNESyBmb3IgTm9kZS5qcy9UeXBlU2NyaXB0LFxuICogd2hpY2ggaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICpcbiAqIFlvdSBjYW4gZmluZCBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaW4gZmlsZSBMSUNFTlNFIGluIHRoZSByb290XG4gKiBkaXJlY3Rvcnkgb2YgdGhpcyByZXBvc2l0b3J5IG9yIHBhY2thZ2UsIG9yIGF0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVzdGF0ZWRldi9zZGstdHlwZXNjcmlwdC9ibG9iL21haW4vTElDRU5TRVxuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL2xhbWJkYS1zZXJ2aWNlLXJlZ2lzdHJ5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZWdpc3RyYXRpb24tcHJvdmlkZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Jlc3RhdGUtY2xvdWQtZW5kcG9pbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Jlc3RhdGUtaW5zdGFuY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NpbmdsZS1ub2RlLXJlc3RhdGUtaW5zdGFuY2VcIjsiXX0=
@@ -1,5 +1,6 @@
1
1
  import * as lambda from "aws-cdk-lib/aws-lambda";
2
2
  import { Construct } from "constructs";
3
+ import { RestateInstance } from "./restate-instance";
3
4
  /**
4
5
  * A Restate RPC service path. Example: `greeter`.
5
6
  */
@@ -7,6 +8,7 @@ type RestatePath = string;
7
8
  export interface RestateInstanceRef {
8
9
  readonly metaEndpoint: string;
9
10
  readonly invokerRoleArn: string;
11
+ readonly authTokenSecretArn?: string;
10
12
  }
11
13
  /**
12
14
  * A collection of Lambda Restate RPC Service handlers.
@@ -19,7 +21,7 @@ export type LambdaServiceRegistryProps = {
19
21
  /**
20
22
  * Custom resource provider token required for service discovery.
21
23
  */
22
- registrationProviderToken: string;
24
+ restate: RestateInstance;
23
25
  };
24
26
  /**
25
27
  * Represents a collection of Lambda-based Restate RPC services. This component is used to register
@@ -45,10 +45,14 @@ const constructs_1 = require("constructs");
45
45
  class LambdaServiceRegistry extends constructs_1.Construct {
46
46
  constructor(scope, id, props) {
47
47
  super(scope, id);
48
+ if (Object.values(props.serviceHandlers).length == 0) {
49
+ throw new Error("Please specify at least one service handler.");
50
+ }
48
51
  this.serviceHandlers = props.serviceHandlers;
49
- this.registrationProviderToken = props.registrationProviderToken;
52
+ this.registrationProviderToken = props.restate.registrationProviderToken.value;
50
53
  }
51
54
  register(restate) {
55
+ const invokerRole = iam.Role.fromRoleArn(this, "InvokerRole", restate.invokerRoleArn);
52
56
  const allowInvokeFunction = new iam.Policy(this, "AllowInvokeFunction", {
53
57
  statements: [
54
58
  new iam.PolicyStatement({
@@ -59,7 +63,6 @@ class LambdaServiceRegistry extends constructs_1.Construct {
59
63
  }),
60
64
  ],
61
65
  });
62
- const invokerRole = iam.Role.fromRoleArn(this, "InvokerRole", restate.invokerRoleArn);
63
66
  invokerRole.attachInlinePolicy(allowInvokeFunction);
64
67
  for (const [path, handler] of Object.entries(this.serviceHandlers)) {
65
68
  this.registerHandler(restate, { path, handler }, allowInvokeFunction);
@@ -86,10 +89,12 @@ class RestateServiceRegistrar extends constructs_1.Construct {
86
89
  properties: {
87
90
  servicePath: props.service.path,
88
91
  metaEndpoint: props.restate.metaEndpoint,
92
+ authTokenSecretArn: props.restate.authTokenSecretArn,
89
93
  serviceLambdaArn: props.service.handler.currentVersion.functionArn,
90
- removalPolicy: cdk.RemovalPolicy.DESTROY,
94
+ invokeRoleArn: props.restate.invokerRoleArn,
95
+ removalPolicy: cdk.RemovalPolicy.RETAIN,
91
96
  },
92
97
  });
93
98
  }
94
99
  }
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLXNlcnZpY2UtcmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvcmVzdGF0ZS1jb25zdHJ1Y3RzL2xhbWJkYS1zZXJ2aWNlLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsaURBQW1DO0FBQ25DLHlEQUEyQztBQUUzQywyQ0FBdUM7QUE0QnZDOzs7O0dBSUc7QUFDSCxNQUFhLHFCQUFzQixTQUFRLHNCQUFTO0lBSWxELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUM7UUFDekUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFDN0MsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQztJQUNuRSxDQUFDO0lBRU0sUUFBUSxDQUFDLE9BQTJCO1FBQ3pDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUN0RSxVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO29CQUN0QixHQUFHLEVBQUUsK0JBQStCO29CQUNwQyxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztvQkFDbEMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQzt5QkFDM0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7aUJBQzlDLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RGLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRXBELEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUNsRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxPQUEyQixFQUFFLE9BR3BELEVBQUUsbUJBQStCO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLElBQUksdUJBQXVCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUU7WUFDekYsT0FBTztZQUNQLE9BQU87WUFDUCxZQUFZLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtTQUM3QyxDQUFDLENBQUM7UUFFSCw2R0FBNkc7UUFDN0csaUdBQWlHO1FBQ2pHLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNGO0FBN0NELHNEQTZDQztBQUVELE1BQU0sdUJBQXdCLFNBQVEsc0JBQVM7SUFDN0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFDNUIsS0FPQztRQUVYLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRTtZQUN4RSxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsWUFBWSxFQUFFLGlDQUFpQztZQUMvQyxVQUFVLEVBQUU7Z0JBQ1YsV0FBVyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSTtnQkFDL0IsWUFBWSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWTtnQkFDeEMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVc7Z0JBQ2xFLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLE9BQU87YUFDUjtTQUNuQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIzIC0gUmVzdGF0ZSBTb2Z0d2FyZSwgSW5jLiwgUmVzdGF0ZSBHbWJIXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFJlc3RhdGUgU0RLIGZvciBOb2RlLmpzL1R5cGVTY3JpcHQsXG4gKiB3aGljaCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICogWW91IGNhbiBmaW5kIGEgY29weSBvZiB0aGUgbGljZW5zZSBpbiBmaWxlIExJQ0VOU0UgaW4gdGhlIHJvb3RcbiAqIGRpcmVjdG9yeSBvZiB0aGlzIHJlcG9zaXRvcnkgb3IgcGFja2FnZSwgb3IgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXN0YXRlZGV2L3Nkay10eXBlc2NyaXB0L2Jsb2IvbWFpbi9MSUNFTlNFXG4gKi9cblxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25Qcm9wZXJ0aWVzIH0gZnJvbSBcIi4vcmVnaXN0ZXItc2VydmljZS1oYW5kbGVyXCI7XG5cbi8qKlxuICogQSBSZXN0YXRlIFJQQyBzZXJ2aWNlIHBhdGguIEV4YW1wbGU6IGBncmVldGVyYC5cbiAqL1xudHlwZSBSZXN0YXRlUGF0aCA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBSZXN0YXRlSW5zdGFuY2VSZWYge1xuICByZWFkb25seSBtZXRhRW5kcG9pbnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgaW52b2tlclJvbGVBcm46IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgTGFtYmRhIFJlc3RhdGUgUlBDIFNlcnZpY2UgaGFuZGxlcnMuXG4gKi9cbmV4cG9ydCB0eXBlIExhbWJkYVNlcnZpY2VSZWdpc3RyeVByb3BzID0ge1xuICAvKipcbiAgICogTWFwcGluZ3MgZnJvbSBzZXJ2aWNlIHBhdGggdG8gTGFtYmRhIGhhbmRsZXIuXG4gICAqL1xuICBzZXJ2aWNlSGFuZGxlcnM6IFJlY29yZDxSZXN0YXRlUGF0aCwgbGFtYmRhLkZ1bmN0aW9uPjtcblxuICAvKipcbiAgICogQ3VzdG9tIHJlc291cmNlIHByb3ZpZGVyIHRva2VuIHJlcXVpcmVkIGZvciBzZXJ2aWNlIGRpc2NvdmVyeS5cbiAgICovXG4gIHJlZ2lzdHJhdGlvblByb3ZpZGVyVG9rZW46IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBMYW1iZGEtYmFzZWQgUmVzdGF0ZSBSUEMgc2VydmljZXMuIFRoaXMgY29tcG9uZW50IGlzIHVzZWQgdG8gcmVnaXN0ZXJcbiAqIHRoZW0gd2l0aCBhIHNpbmdsZSBSZXN0YXRlIGluc3RhbmNlLiBUaGlzIGNyZWF0ZXMgYSBjdXN0b20gcmVzb3VyY2Ugd2hpY2ggd2lsbCB0cmlnZ2VyIHNlcnZpY2VcbiAqIGRpc2NvdmVyeSBvbiBhbnkgaGFuZGxlciBjaGFuZ2VzIGRlcGxveWVkIHRocm91Z2ggQ0RLL0Nsb3VkRm9ybWF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgTGFtYmRhU2VydmljZVJlZ2lzdHJ5IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlSGFuZGxlcnM6IFJlY29yZDxSZXN0YXRlUGF0aCwgbGFtYmRhLkZ1bmN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSByZWdpc3RyYXRpb25Qcm92aWRlclRva2VuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IExhbWJkYVNlcnZpY2VSZWdpc3RyeVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuc2VydmljZUhhbmRsZXJzID0gcHJvcHMuc2VydmljZUhhbmRsZXJzO1xuICAgIHRoaXMucmVnaXN0cmF0aW9uUHJvdmlkZXJUb2tlbiA9IHByb3BzLnJlZ2lzdHJhdGlvblByb3ZpZGVyVG9rZW47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXIocmVzdGF0ZTogUmVzdGF0ZUluc3RhbmNlUmVmKSB7XG4gICAgY29uc3QgYWxsb3dJbnZva2VGdW5jdGlvbiA9IG5ldyBpYW0uUG9saWN5KHRoaXMsIFwiQWxsb3dJbnZva2VGdW5jdGlvblwiLCB7XG4gICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBzaWQ6IFwiQWxsb3dJbnZva2VBbnlGdW5jdGlvblZlcnNpb25cIixcbiAgICAgICAgICBhY3Rpb25zOiBbXCJsYW1iZGE6SW52b2tlRnVuY3Rpb25cIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBPYmplY3QudmFsdWVzKHRoaXMuc2VydmljZUhhbmRsZXJzKVxuICAgICAgICAgICAgLm1hcChoYW5kbGVyID0+IGhhbmRsZXIuZnVuY3Rpb25Bcm4gKyBcIjoqXCIpLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnZva2VyUm9sZSA9IGlhbS5Sb2xlLmZyb21Sb2xlQXJuKHRoaXMsIFwiSW52b2tlclJvbGVcIiwgcmVzdGF0ZS5pbnZva2VyUm9sZUFybik7XG4gICAgaW52b2tlclJvbGUuYXR0YWNoSW5saW5lUG9saWN5KGFsbG93SW52b2tlRnVuY3Rpb24pO1xuXG4gICAgZm9yIChjb25zdCBbcGF0aCwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zZXJ2aWNlSGFuZGxlcnMpKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVySGFuZGxlcihyZXN0YXRlLCB7IHBhdGgsIGhhbmRsZXIgfSwgYWxsb3dJbnZva2VGdW5jdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckhhbmRsZXIocmVzdGF0ZTogUmVzdGF0ZUluc3RhbmNlUmVmLCBzZXJ2aWNlOiB7XG4gICAgcGF0aDogUmVzdGF0ZVBhdGgsXG4gICAgaGFuZGxlcjogbGFtYmRhLkZ1bmN0aW9uXG4gIH0sIGFsbG93SW52b2tlRnVuY3Rpb246IGlhbS5Qb2xpY3kpIHtcbiAgICBjb25zdCByZWdpc3RyYXIgPSBuZXcgUmVzdGF0ZVNlcnZpY2VSZWdpc3RyYXIodGhpcywgc2VydmljZS5oYW5kbGVyLm5vZGUuaWQgKyBcIkRpc2NvdmVyeVwiLCB7XG4gICAgICByZXN0YXRlLFxuICAgICAgc2VydmljZSxcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5yZWdpc3RyYXRpb25Qcm92aWRlclRva2VuLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xvdWRGb3JtYXRpb24gZG9lc24ndCBrbm93IHRoYXQgUmVzdGF0ZSBkZXBlbmRzIG9uIHRoaXMgcm9sZSB0byBjYWxsIHNlcnZpY2VzOyB3ZSBtdXN0IGVuc3VyZSB0aGF0IExhbWJkYVxuICAgIC8vIHBlcm1pc3Npb24gY2hhbmdlcyBhcmUgYXBwbGllZCBiZWZvcmUgd2UgY2FuIHRyaWdnZXIgZGlzY292ZXJ5IChyZXByZXNlbnRlZCBieSB0aGUgcmVnaXN0cmFyKS5cbiAgICByZWdpc3RyYXIubm9kZS5hZGREZXBlbmRlbmN5KGFsbG93SW52b2tlRnVuY3Rpb24pO1xuICB9XG59XG5cbmNsYXNzIFJlc3RhdGVTZXJ2aWNlUmVnaXN0cmFyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICByZXN0YXRlOiBSZXN0YXRlSW5zdGFuY2VSZWYsXG4gICAgICAgICAgICAgICAgc2VydmljZToge1xuICAgICAgICAgICAgICAgICAgcGF0aDogUmVzdGF0ZVBhdGgsXG4gICAgICAgICAgICAgICAgICBoYW5kbGVyOiBsYW1iZGEuRnVuY3Rpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlcnZpY2VUb2tlbjogc3RyaW5nXG4gICAgICAgICAgICAgIH0sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBuZXcgY2RrLkN1c3RvbVJlc291cmNlKHRoaXMsIHByb3BzLnNlcnZpY2UuaGFuZGxlci5ub2RlLmlkICsgXCJEaXNjb3ZlcnlcIiwge1xuICAgICAgc2VydmljZVRva2VuOiBwcm9wcy5zZXJ2aWNlVG9rZW4sXG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpSZXN0YXRlU2VydmljZVJlZ2lzdHJhclwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBzZXJ2aWNlUGF0aDogcHJvcHMuc2VydmljZS5wYXRoLFxuICAgICAgICBtZXRhRW5kcG9pbnQ6IHByb3BzLnJlc3RhdGUubWV0YUVuZHBvaW50LFxuICAgICAgICBzZXJ2aWNlTGFtYmRhQXJuOiBwcm9wcy5zZXJ2aWNlLmhhbmRsZXIuY3VycmVudFZlcnNpb24uZnVuY3Rpb25Bcm4sXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICB9IHNhdGlzZmllcyBSZWdpc3RyYXRpb25Qcm9wZXJ0aWVzLFxuICAgIH0pO1xuICB9XG59Il19
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLXNlcnZpY2UtcmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvcmVzdGF0ZS1jb25zdHJ1Y3RzL2xhbWJkYS1zZXJ2aWNlLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsaURBQW1DO0FBQ25DLHlEQUEyQztBQUUzQywyQ0FBdUM7QUErQnZDOzs7O0dBSUc7QUFDSCxNQUFhLHFCQUFzQixTQUFRLHNCQUFTO0lBSWxELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUM7UUFDekUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1NBQ2pFO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQzdDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQztJQUNqRixDQUFDO0lBRU0sUUFBUSxDQUFDLE9BQTJCO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXRGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUN0RSxVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO29CQUN0QixHQUFHLEVBQUUsK0JBQStCO29CQUNwQyxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztvQkFDbEMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQzt5QkFDM0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7aUJBQzlDLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRXBELEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUNsRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxPQUEyQixFQUFFLE9BR3BELEVBQUUsbUJBQStCO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLElBQUksdUJBQXVCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUU7WUFDekYsT0FBTztZQUNQLE9BQU87WUFDUCxZQUFZLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtTQUM3QyxDQUFDLENBQUM7UUFFSCw2R0FBNkc7UUFDN0csaUdBQWlHO1FBQ2pHLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNGO0FBbERELHNEQWtEQztBQUVELE1BQU0sdUJBQXdCLFNBQVEsc0JBQVM7SUFDN0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFDNUIsS0FPQztRQUVYLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRTtZQUN4RSxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsWUFBWSxFQUFFLGlDQUFpQztZQUMvQyxVQUFVLEVBQUU7Z0JBQ1YsV0FBVyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSTtnQkFDL0IsWUFBWSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWTtnQkFDeEMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0I7Z0JBQ3BELGdCQUFnQixFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXO2dCQUNsRSxhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjO2dCQUMzQyxhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNO2FBQ1A7U0FDbkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMyAtIFJlc3RhdGUgU29mdHdhcmUsIEluYy4sIFJlc3RhdGUgR21iSFxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBSZXN0YXRlIFNESyBmb3IgTm9kZS5qcy9UeXBlU2NyaXB0LFxuICogd2hpY2ggaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICpcbiAqIFlvdSBjYW4gZmluZCBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaW4gZmlsZSBMSUNFTlNFIGluIHRoZSByb290XG4gKiBkaXJlY3Rvcnkgb2YgdGhpcyByZXBvc2l0b3J5IG9yIHBhY2thZ2UsIG9yIGF0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVzdGF0ZWRldi9zZGstdHlwZXNjcmlwdC9ibG9iL21haW4vTElDRU5TRVxuICovXG5cbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgUmVnaXN0cmF0aW9uUHJvcGVydGllcyB9IGZyb20gXCIuL3JlZ2lzdGVyLXNlcnZpY2UtaGFuZGxlclwiO1xuXG5pbXBvcnQgeyBSZXN0YXRlSW5zdGFuY2UgfSBmcm9tIFwiLi9yZXN0YXRlLWluc3RhbmNlXCI7XG5cbi8qKlxuICogQSBSZXN0YXRlIFJQQyBzZXJ2aWNlIHBhdGguIEV4YW1wbGU6IGBncmVldGVyYC5cbiAqL1xudHlwZSBSZXN0YXRlUGF0aCA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBSZXN0YXRlSW5zdGFuY2VSZWYge1xuICByZWFkb25seSBtZXRhRW5kcG9pbnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgaW52b2tlclJvbGVBcm46IHN0cmluZztcbiAgcmVhZG9ubHkgYXV0aFRva2VuU2VjcmV0QXJuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiBMYW1iZGEgUmVzdGF0ZSBSUEMgU2VydmljZSBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IHR5cGUgTGFtYmRhU2VydmljZVJlZ2lzdHJ5UHJvcHMgPSB7XG4gIC8qKlxuICAgKiBNYXBwaW5ncyBmcm9tIHNlcnZpY2UgcGF0aCB0byBMYW1iZGEgaGFuZGxlci5cbiAgICovXG4gIHNlcnZpY2VIYW5kbGVyczogUmVjb3JkPFJlc3RhdGVQYXRoLCBsYW1iZGEuRnVuY3Rpb24+O1xuXG4gIC8qKlxuICAgKiBDdXN0b20gcmVzb3VyY2UgcHJvdmlkZXIgdG9rZW4gcmVxdWlyZWQgZm9yIHNlcnZpY2UgZGlzY292ZXJ5LlxuICAgKi9cbiAgcmVzdGF0ZTogUmVzdGF0ZUluc3RhbmNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIExhbWJkYS1iYXNlZCBSZXN0YXRlIFJQQyBzZXJ2aWNlcy4gVGhpcyBjb21wb25lbnQgaXMgdXNlZCB0byByZWdpc3RlclxuICogdGhlbSB3aXRoIGEgc2luZ2xlIFJlc3RhdGUgaW5zdGFuY2UuIFRoaXMgY3JlYXRlcyBhIGN1c3RvbSByZXNvdXJjZSB3aGljaCB3aWxsIHRyaWdnZXIgc2VydmljZVxuICogZGlzY292ZXJ5IG9uIGFueSBoYW5kbGVyIGNoYW5nZXMgZGVwbG95ZWQgdGhyb3VnaCBDREsvQ2xvdWRGb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBMYW1iZGFTZXJ2aWNlUmVnaXN0cnkgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2VIYW5kbGVyczogUmVjb3JkPFJlc3RhdGVQYXRoLCBsYW1iZGEuRnVuY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJhdGlvblByb3ZpZGVyVG9rZW46IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTGFtYmRhU2VydmljZVJlZ2lzdHJ5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKE9iamVjdC52YWx1ZXMocHJvcHMuc2VydmljZUhhbmRsZXJzKS5sZW5ndGggPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHNwZWNpZnkgYXQgbGVhc3Qgb25lIHNlcnZpY2UgaGFuZGxlci5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5zZXJ2aWNlSGFuZGxlcnMgPSBwcm9wcy5zZXJ2aWNlSGFuZGxlcnM7XG4gICAgdGhpcy5yZWdpc3RyYXRpb25Qcm92aWRlclRva2VuID0gcHJvcHMucmVzdGF0ZS5yZWdpc3RyYXRpb25Qcm92aWRlclRva2VuLnZhbHVlO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyKHJlc3RhdGU6IFJlc3RhdGVJbnN0YW5jZVJlZikge1xuICAgIGNvbnN0IGludm9rZXJSb2xlID0gaWFtLlJvbGUuZnJvbVJvbGVBcm4odGhpcywgXCJJbnZva2VyUm9sZVwiLCByZXN0YXRlLmludm9rZXJSb2xlQXJuKTtcblxuICAgIGNvbnN0IGFsbG93SW52b2tlRnVuY3Rpb24gPSBuZXcgaWFtLlBvbGljeSh0aGlzLCBcIkFsbG93SW52b2tlRnVuY3Rpb25cIiwge1xuICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgc2lkOiBcIkFsbG93SW52b2tlQW55RnVuY3Rpb25WZXJzaW9uXCIsXG4gICAgICAgICAgYWN0aW9uczogW1wibGFtYmRhOkludm9rZUZ1bmN0aW9uXCJdLFxuICAgICAgICAgIHJlc291cmNlczogT2JqZWN0LnZhbHVlcyh0aGlzLnNlcnZpY2VIYW5kbGVycylcbiAgICAgICAgICAgIC5tYXAoaGFuZGxlciA9PiBoYW5kbGVyLmZ1bmN0aW9uQXJuICsgXCI6KlwiKSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgaW52b2tlclJvbGUuYXR0YWNoSW5saW5lUG9saWN5KGFsbG93SW52b2tlRnVuY3Rpb24pO1xuXG4gICAgZm9yIChjb25zdCBbcGF0aCwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zZXJ2aWNlSGFuZGxlcnMpKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVySGFuZGxlcihyZXN0YXRlLCB7IHBhdGgsIGhhbmRsZXIgfSwgYWxsb3dJbnZva2VGdW5jdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckhhbmRsZXIocmVzdGF0ZTogUmVzdGF0ZUluc3RhbmNlUmVmLCBzZXJ2aWNlOiB7XG4gICAgcGF0aDogUmVzdGF0ZVBhdGgsXG4gICAgaGFuZGxlcjogbGFtYmRhLkZ1bmN0aW9uXG4gIH0sIGFsbG93SW52b2tlRnVuY3Rpb246IGlhbS5Qb2xpY3kpIHtcbiAgICBjb25zdCByZWdpc3RyYXIgPSBuZXcgUmVzdGF0ZVNlcnZpY2VSZWdpc3RyYXIodGhpcywgc2VydmljZS5oYW5kbGVyLm5vZGUuaWQgKyBcIkRpc2NvdmVyeVwiLCB7XG4gICAgICByZXN0YXRlLFxuICAgICAgc2VydmljZSxcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5yZWdpc3RyYXRpb25Qcm92aWRlclRva2VuLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xvdWRGb3JtYXRpb24gZG9lc24ndCBrbm93IHRoYXQgUmVzdGF0ZSBkZXBlbmRzIG9uIHRoaXMgcm9sZSB0byBjYWxsIHNlcnZpY2VzOyB3ZSBtdXN0IGVuc3VyZSB0aGF0IExhbWJkYVxuICAgIC8vIHBlcm1pc3Npb24gY2hhbmdlcyBhcmUgYXBwbGllZCBiZWZvcmUgd2UgY2FuIHRyaWdnZXIgZGlzY292ZXJ5IChyZXByZXNlbnRlZCBieSB0aGUgcmVnaXN0cmFyKS5cbiAgICByZWdpc3RyYXIubm9kZS5hZGREZXBlbmRlbmN5KGFsbG93SW52b2tlRnVuY3Rpb24pO1xuICB9XG59XG5cbmNsYXNzIFJlc3RhdGVTZXJ2aWNlUmVnaXN0cmFyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICByZXN0YXRlOiBSZXN0YXRlSW5zdGFuY2VSZWYsXG4gICAgICAgICAgICAgICAgc2VydmljZToge1xuICAgICAgICAgICAgICAgICAgcGF0aDogUmVzdGF0ZVBhdGgsXG4gICAgICAgICAgICAgICAgICBoYW5kbGVyOiBsYW1iZGEuRnVuY3Rpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlcnZpY2VUb2tlbjogc3RyaW5nLFxuICAgICAgICAgICAgICB9LFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IGNkay5DdXN0b21SZXNvdXJjZSh0aGlzLCBwcm9wcy5zZXJ2aWNlLmhhbmRsZXIubm9kZS5pZCArIFwiRGlzY292ZXJ5XCIsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvcHMuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6UmVzdGF0ZVNlcnZpY2VSZWdpc3RyYXJcIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc2VydmljZVBhdGg6IHByb3BzLnNlcnZpY2UucGF0aCxcbiAgICAgICAgbWV0YUVuZHBvaW50OiBwcm9wcy5yZXN0YXRlLm1ldGFFbmRwb2ludCxcbiAgICAgICAgYXV0aFRva2VuU2VjcmV0QXJuOiBwcm9wcy5yZXN0YXRlLmF1dGhUb2tlblNlY3JldEFybixcbiAgICAgICAgc2VydmljZUxhbWJkYUFybjogcHJvcHMuc2VydmljZS5oYW5kbGVyLmN1cnJlbnRWZXJzaW9uLmZ1bmN0aW9uQXJuLFxuICAgICAgICBpbnZva2VSb2xlQXJuOiBwcm9wcy5yZXN0YXRlLmludm9rZXJSb2xlQXJuLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gICAgICB9IHNhdGlzZmllcyBSZWdpc3RyYXRpb25Qcm9wZXJ0aWVzLFxuICAgIH0pO1xuICB9XG59Il19
@@ -1,4 +1,3 @@
1
- import { CloudFormationCustomResourceResponse } from "aws-lambda";
2
1
  import { Handler } from "aws-lambda/handler";
3
2
  import { CloudFormationCustomResourceEvent } from "aws-lambda/trigger/cloudformation-custom-resource";
4
3
  import * as cdk from "aws-cdk-lib";
@@ -7,10 +6,12 @@ export interface RegistrationProperties {
7
6
  metaEndpoint?: string;
8
7
  serviceEndpoint?: string;
9
8
  serviceLambdaArn?: string;
9
+ invokeRoleArn?: string;
10
10
  removalPolicy?: cdk.RemovalPolicy;
11
+ authTokenSecretArn?: string;
11
12
  }
12
13
  /**
13
14
  * Custom Resource event handler for Restate service registration. This handler backs the custom resources created by
14
- * {@link RestateLambdaServiceCollection} to facilitate Lambda service handler discovery.
15
+ * {@link LambdaServiceRegistry} to facilitate Lambda service handler discovery.
15
16
  */
16
- export declare const handler: Handler<CloudFormationCustomResourceEvent, Partial<CloudFormationCustomResourceResponse>>;
17
+ export declare const handler: Handler<CloudFormationCustomResourceEvent, void>;
@@ -9,15 +9,43 @@
9
9
  * directory of this repository or package, or at
10
10
  * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE
11
11
  */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
12
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
13
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
14
37
  };
15
38
  Object.defineProperty(exports, "__esModule", { value: true });
16
39
  exports.handler = void 0;
17
40
  const node_fetch_1 = __importDefault(require("node-fetch"));
41
+ const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
42
+ const https = __importStar(require("https"));
43
+ const MAX_HEALTH_CHECK_ATTEMPTS = 4;
44
+ const MAX_REGISTRATION_ATTEMPTS = 3;
45
+ const INSECURE = true;
18
46
  /**
19
47
  * Custom Resource event handler for Restate service registration. This handler backs the custom resources created by
20
- * {@link RestateLambdaServiceCollection} to facilitate Lambda service handler discovery.
48
+ * {@link LambdaServiceRegistry} to facilitate Lambda service handler discovery.
21
49
  */
22
50
  const handler = async function (event) {
23
51
  console.log({ event });
@@ -28,82 +56,120 @@ const handler = async function (event) {
28
56
  // version from Lambda.
29
57
  // const props = event.ResourceProperties as RegistrationProperties;
30
58
  // if (props.removalPolicy === cdk.RemovalPolicy.DESTROY) {
59
+ // console.log(`De-registering service ${props.serviceLambdaArn}`);
31
60
  // const controller = new AbortController();
32
61
  // const id = btoa(props.serviceLambdaArn!); // TODO: we should be treating service ids as opaque
33
- // const deleteResponse = await fetch(`${props.metaEndpoint}/endpoints/${id}?force=true`,
34
- // {
35
- // signal: controller.signal,
36
- // method: "DELETE",
37
- // })
38
- // .finally(() => clearTimeout(registerCallTimeout));
62
+ // const deleteCallTimeout = setTimeout(() => controller.abort("timeout"), 5_000);
63
+ // const deleteResponse = await fetch(`${props.metaEndpoint}/endpoints/${id}?force=true`, {
64
+ // signal: controller.signal,
65
+ // method: "DELETE",
66
+ // agent: INSECURE ? new https.Agent({ rejectUnauthorized: false }) : undefined,
67
+ // }).finally(() => clearTimeout(deleteCallTimeout));
68
+ //
39
69
  // console.log(`Got delete response back: ${deleteResponse.status}`);
70
+ // if (deleteResponse.status != 202) {
71
+ // throw new Error(`Deleting service endpoint failed: ${deleteResponse.statusText} (${deleteResponse.status})`);
72
+ // }
40
73
  // }
41
- return {
42
- Status: "SUCCESS",
43
- };
74
+ console.warn("De-registering services is not supported currently. Previous version will remain registered.");
75
+ return;
44
76
  }
45
77
  const props = event.ResourceProperties;
78
+ const authHeader = await createAuthHeader(props);
79
+ let attempt;
46
80
  const controller = new AbortController();
47
- const healthCheckTimeout = setTimeout(() => controller.abort("timeout"), 5000);
48
81
  const healthCheckUrl = `${props.metaEndpoint}/health`;
49
82
  console.log(`Performing health check against: ${healthCheckUrl}`);
50
- const healthResponse = await (0, node_fetch_1.default)(healthCheckUrl, {
51
- signal: controller.signal,
52
- })
53
- .finally(() => clearTimeout(healthCheckTimeout));
54
- console.log(`Got health check response back: ${healthResponse.status}`);
55
- if (!(healthResponse.status >= 200 && healthResponse.status < 300)) {
56
- console.error(`Restate health check failed: ${healthResponse.statusText} (${healthResponse.status})`);
57
- return {
58
- Reason: `Restate health check failed: ${healthResponse.statusText} (${healthResponse.status})`,
59
- Status: "FAILED",
60
- };
83
+ attempt = 1;
84
+ while (true) {
85
+ const healthCheckTimeout = setTimeout(() => controller.abort("timeout"), 5000);
86
+ let healthResponse = undefined;
87
+ let errorMessage = undefined;
88
+ try {
89
+ healthResponse = await (0, node_fetch_1.default)(healthCheckUrl, {
90
+ signal: controller.signal,
91
+ headers: authHeader,
92
+ agent: INSECURE ? new https.Agent({ rejectUnauthorized: false }) : undefined,
93
+ }).finally(() => clearTimeout(healthCheckTimeout));
94
+ console.log(`Got health check response back: ${healthResponse.status}`);
95
+ if (healthResponse.status >= 200 && healthResponse.status < 300) {
96
+ break;
97
+ }
98
+ console.error(`Restate health check failed: ${healthResponse.statusText} (${healthResponse.status}; attempt ${attempt})`);
99
+ }
100
+ catch (e) {
101
+ errorMessage = e?.message;
102
+ console.error(`Restate health check failed: "${errorMessage}" (attempt ${attempt})`);
103
+ }
104
+ if (attempt >= MAX_HEALTH_CHECK_ATTEMPTS) {
105
+ console.error(`Service registration failed after ${attempt} attempts.`);
106
+ throw new Error(errorMessage ?? `${healthResponse?.statusText} (${healthResponse?.status})`);
107
+ }
108
+ attempt += 1;
109
+ const waitTimeMillis = 2 ** attempt * 1000;
110
+ console.log(`Retrying after ${waitTimeMillis} ms...`);
111
+ await sleep(waitTimeMillis);
61
112
  }
62
- let attempt = 1;
63
- const registerCallTimeout = setTimeout(() => controller.abort("timeout"), 10000);
64
- const discoveryEndpointUrl = `${props.metaEndpoint}/endpoints`;
65
- const registrationRequest = JSON.stringify({ arn: props.serviceLambdaArn });
66
- console.log(`Triggering registration at ${discoveryEndpointUrl}: ${registrationRequest} (attempt ${attempt})`);
113
+ const endpointsUrl = `${props.metaEndpoint}/endpoints`;
114
+ const registrationRequest = JSON.stringify({
115
+ arn: props.serviceLambdaArn,
116
+ assume_role_arn: props.invokeRoleArn,
117
+ });
118
+ console.log(`Triggering registration at ${endpointsUrl}: ${registrationRequest} (attempt ${attempt})`);
119
+ attempt = 1;
67
120
  while (true) {
68
121
  try {
69
- const discoveryResponse = await (0, node_fetch_1.default)(discoveryEndpointUrl, {
122
+ const registerCallTimeout = setTimeout(() => controller.abort("timeout"), 10000);
123
+ const discoveryResponse = await (0, node_fetch_1.default)(endpointsUrl, {
70
124
  signal: controller.signal,
71
125
  method: "POST",
72
126
  body: registrationRequest,
73
127
  headers: {
74
128
  "Content-Type": "application/json",
129
+ ...authHeader,
75
130
  },
76
- })
77
- .finally(() => clearTimeout(registerCallTimeout));
131
+ agent: INSECURE ? new https.Agent({ rejectUnauthorized: false }) : undefined,
132
+ }).finally(() => clearTimeout(registerCallTimeout));
78
133
  console.log(`Got registration response back: ${discoveryResponse.status}`);
79
134
  if (discoveryResponse.status >= 200 && discoveryResponse.status < 300) {
80
- const response = await discoveryResponse.json();
135
+ const response = (await discoveryResponse.json());
81
136
  if (response?.services?.[0]?.name !== props.servicePath) {
82
- console.error(`Service registration failed: ${discoveryResponse.statusText} (${discoveryResponse.status})`);
83
- return {
84
- Reason: `Restate service registration failed: name returned by service ("${response?.services?.[0]?.name})) does not match expected ("${props.servicePath}")`,
85
- Status: "FAILED",
86
- };
137
+ console.error("Restate service registration failed: service name indicated by service response" +
138
+ ` ("${response?.services?.[0]?.name})) does not match the expected value ("${props.servicePath}")!`);
139
+ break;
87
140
  }
88
- return {
89
- Data: response,
90
- Status: "SUCCESS",
91
- };
141
+ console.log("Success!");
142
+ return;
92
143
  }
93
144
  }
94
145
  catch (e) {
95
- console.log(`Service registration call failed: ${e?.message} (attempt ${attempt})`);
146
+ console.error(`Service registration call failed: ${e?.message} (attempt ${attempt})`);
96
147
  }
97
- attempt += 1;
98
- if (attempt >= 3) {
148
+ if (attempt >= MAX_REGISTRATION_ATTEMPTS) {
99
149
  console.error(`Service registration failed after ${attempt} attempts.`);
100
150
  break;
101
151
  }
152
+ attempt += 1;
153
+ await sleep(1000);
102
154
  }
103
- return {
104
- Reason: `Restate service registration failed: ${healthResponse.statusText} (${healthResponse.status})`,
105
- Status: "FAILED",
106
- };
155
+ throw new Error("Failed to register service with Restate.");
107
156
  };
108
157
  exports.handler = handler;
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcmVzdGF0ZS1jb25zdHJ1Y3RzL3JlZ2lzdGVyLXNlcnZpY2UtaGFuZGxlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOzs7Ozs7QUFLSCw0REFBK0I7QUFnQi9COzs7R0FHRztBQUNJLE1BQU0sT0FBTyxHQUNsQixLQUFLLFdBQVUsS0FBSztJQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUV2QixJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFO1FBQ2xDLGlIQUFpSDtRQUNqSCwyR0FBMkc7UUFDM0csK0dBQStHO1FBQy9HLHVCQUF1QjtRQUV2QixvRUFBb0U7UUFDcEUsMkRBQTJEO1FBQzNELDhDQUE4QztRQUM5QyxtR0FBbUc7UUFDbkcsMkZBQTJGO1FBQzNGLFFBQVE7UUFDUixtQ0FBbUM7UUFDbkMsMEJBQTBCO1FBQzFCLFNBQVM7UUFDVCx5REFBeUQ7UUFDekQsdUVBQXVFO1FBQ3ZFLElBQUk7UUFFSixPQUFPO1lBQ0wsTUFBTSxFQUFFLFNBQVM7U0FDc0MsQ0FBQztLQUMzRDtJQUVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxrQkFBNEMsQ0FBQztJQUVqRSxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSyxDQUFDLENBQUM7SUFDaEYsTUFBTSxjQUFjLEdBQUcsR0FBRyxLQUFLLENBQUMsWUFBWSxTQUFTLENBQUM7SUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNsRSxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUEsb0JBQUssRUFBQyxj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YixJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUU7WUFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsT0FBTyxZQUFZLENBQUMsQ0FBQztZQUN4RSxNQUFNO1NBQ1A7S0FDRjtJQUVELE9BQU87UUFDTCxNQUFNLEVBQUUsd0NBQXdDLGNBQWMsQ0FBQyxVQUFVLEtBQUssY0FBYyxDQUFDLE1BQU0sR0FBRztRQUN0RyxNQUFNLEVBQUUsUUFBUTtLQUNqQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBcEdTLFFBQUEsT0FBTyxXQW9HaEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIzIC0gUmVzdGF0ZSBTb2Z0d2FyZSwgSW5jLiwgUmVzdGF0ZSBHbWJIXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFJlc3RhdGUgU0RLIGZvciBOb2RlLmpzL1R5cGVTY3JpcHQsXG4gKiB3aGljaCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICogWW91IGNhbiBmaW5kIGEgY29weSBvZiB0aGUgbGljZW5zZSBpbiBmaWxlIExJQ0VOU0UgaW4gdGhlIHJvb3RcbiAqIGRpcmVjdG9yeSBvZiB0aGlzIHJlcG9zaXRvcnkgb3IgcGFja2FnZSwgb3IgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXN0YXRlZGV2L3Nkay10eXBlc2NyaXB0L2Jsb2IvbWFpbi9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlIH0gZnJvbSBcImF3cy1sYW1iZGFcIjtcbmltcG9ydCB7IEhhbmRsZXIgfSBmcm9tIFwiYXdzLWxhbWJkYS9oYW5kbGVyXCI7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQgfSBmcm9tIFwiYXdzLWxhbWJkYS90cmlnZ2VyL2Nsb3VkZm9ybWF0aW9uLWN1c3RvbS1yZXNvdXJjZVwiO1xuaW1wb3J0IGZldGNoIGZyb20gXCJub2RlLWZldGNoXCI7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uUHJvcGVydGllcyB7XG4gIHNlcnZpY2VQYXRoPzogc3RyaW5nO1xuICBtZXRhRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHNlcnZpY2VFbmRwb2ludD86IHN0cmluZztcbiAgc2VydmljZUxhbWJkYUFybj86IHN0cmluZztcbiAgcmVtb3ZhbFBvbGljeT86IGNkay5SZW1vdmFsUG9saWN5O1xufVxuXG50eXBlIEVuZHBvaW50UmVzcG9uc2UgPSB7XG4gIGlkPzogc3RyaW5nLFxuICBzZXJ2aWNlcz86IHsgbmFtZT86IHN0cmluZywgcmV2aXNpb24/OiBudW1iZXIgfVtdXG59XG5cbi8qKlxuICogQ3VzdG9tIFJlc291cmNlIGV2ZW50IGhhbmRsZXIgZm9yIFJlc3RhdGUgc2VydmljZSByZWdpc3RyYXRpb24uIFRoaXMgaGFuZGxlciBiYWNrcyB0aGUgY3VzdG9tIHJlc291cmNlcyBjcmVhdGVkIGJ5XG4gKiB7QGxpbmsgUmVzdGF0ZUxhbWJkYVNlcnZpY2VDb2xsZWN0aW9ufSB0byBmYWNpbGl0YXRlIExhbWJkYSBzZXJ2aWNlIGhhbmRsZXIgZGlzY292ZXJ5LlxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlcjogSGFuZGxlcjxDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIFBhcnRpYWw8Q2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlPj4gPVxuICBhc3luYyBmdW5jdGlvbihldmVudCkge1xuICAgIGNvbnNvbGUubG9nKHsgZXZlbnQgfSk7XG5cbiAgICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09IFwiRGVsZXRlXCIpIHtcbiAgICAgIC8vIFNpbmNlIHdlIHJldGFpbiBvbGRlciBMYW1iZGEgaGFuZGxlciB2ZXJzaW9ucyBvbiB1cGRhdGUsIHdlIGFsc28gbGVhdmUgdGhlIHJlZ2lzdGVyZWQgc2VydmljZSBhbG9uZS4gVGhlcmUgbWF5XG4gICAgICAvLyBiZSB1bmZpbmlzaGVkIGludm9jYXRpb25zIHRoYXQgcmVxdWlyZSBpdDsgaW4gdGhlIGZ1dHVyZSB3ZSB3b3VsZCB3YW50IHRvIGluZm9ybSBSZXN0YXRlIHRoYXQgd2Ugd2FudCB0b1xuICAgICAgLy8gZGUtcmVnaXN0ZXIgdGhlIHNlcnZpY2UsIGFuZCB3YWl0IGZvciBSZXN0YXRlIHRvIGxldCB1cyBrbm93IHRoYXQgaXQgaXMgc2FmZSB0byBkZWxldGUgdGhlIGRlcGxveWVkIEZ1bmN0aW9uXG4gICAgICAvLyB2ZXJzaW9uIGZyb20gTGFtYmRhLlxuXG4gICAgICAvLyBjb25zdCBwcm9wcyA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcyBhcyBSZWdpc3RyYXRpb25Qcm9wZXJ0aWVzO1xuICAgICAgLy8gaWYgKHByb3BzLnJlbW92YWxQb2xpY3kgPT09IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpIHtcbiAgICAgIC8vICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIC8vICAgY29uc3QgaWQgPSBidG9hKHByb3BzLnNlcnZpY2VMYW1iZGFBcm4hKTsgLy8gVE9ETzogd2Ugc2hvdWxkIGJlIHRyZWF0aW5nIHNlcnZpY2UgaWRzIGFzIG9wYXF1ZVxuICAgICAgLy8gICBjb25zdCBkZWxldGVSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3Byb3BzLm1ldGFFbmRwb2ludH0vZW5kcG9pbnRzLyR7aWR9P2ZvcmNlPXRydWVgLFxuICAgICAgLy8gICAgIHtcbiAgICAgIC8vICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAvLyAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAvLyAgICAgfSlcbiAgICAgIC8vICAgICAuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQocmVnaXN0ZXJDYWxsVGltZW91dCkpO1xuICAgICAgLy8gICBjb25zb2xlLmxvZyhgR290IGRlbGV0ZSByZXNwb25zZSBiYWNrOiAke2RlbGV0ZVJlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgIC8vIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgU3RhdHVzOiBcIlNVQ0NFU1NcIixcbiAgICAgIH0gc2F0aXNmaWVzIFBhcnRpYWw8Q2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlPjtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wcyA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcyBhcyBSZWdpc3RyYXRpb25Qcm9wZXJ0aWVzO1xuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBoZWFsdGhDaGVja1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoXCJ0aW1lb3V0XCIpLCA1XzAwMCk7XG4gICAgY29uc3QgaGVhbHRoQ2hlY2tVcmwgPSBgJHtwcm9wcy5tZXRhRW5kcG9pbnR9L2hlYWx0aGA7XG4gICAgY29uc29sZS5sb2coYFBlcmZvcm1pbmcgaGVhbHRoIGNoZWNrIGFnYWluc3Q6ICR7aGVhbHRoQ2hlY2tVcmx9YCk7XG4gICAgY29uc3QgaGVhbHRoUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChoZWFsdGhDaGVja1VybCxcbiAgICAgIHtcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQoaGVhbHRoQ2hlY2tUaW1lb3V0KSk7XG5cbiAgICBjb25zb2xlLmxvZyhgR290IGhlYWx0aCBjaGVjayByZXNwb25zZSBiYWNrOiAke2hlYWx0aFJlc3BvbnNlLnN0YXR1c31gKTtcbiAgICBpZiAoIShoZWFsdGhSZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIGhlYWx0aFJlc3BvbnNlLnN0YXR1cyA8IDMwMCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFJlc3RhdGUgaGVhbHRoIGNoZWNrIGZhaWxlZDogJHtoZWFsdGhSZXNwb25zZS5zdGF0dXNUZXh0fSAoJHtoZWFsdGhSZXNwb25zZS5zdGF0dXN9KWApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUmVhc29uOiBgUmVzdGF0ZSBoZWFsdGggY2hlY2sgZmFpbGVkOiAke2hlYWx0aFJlc3BvbnNlLnN0YXR1c1RleHR9ICgke2hlYWx0aFJlc3BvbnNlLnN0YXR1c30pYCxcbiAgICAgICAgU3RhdHVzOiBcIkZBSUxFRFwiLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgYXR0ZW1wdCA9IDE7XG4gICAgY29uc3QgcmVnaXN0ZXJDYWxsVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydChcInRpbWVvdXRcIiksIDEwXzAwMCk7XG4gICAgY29uc3QgZGlzY292ZXJ5RW5kcG9pbnRVcmwgPSBgJHtwcm9wcy5tZXRhRW5kcG9pbnR9L2VuZHBvaW50c2A7XG4gICAgY29uc3QgcmVnaXN0cmF0aW9uUmVxdWVzdCA9IEpTT04uc3RyaW5naWZ5KHsgYXJuOiBwcm9wcy5zZXJ2aWNlTGFtYmRhQXJuIH0pO1xuICAgIGNvbnNvbGUubG9nKGBUcmlnZ2VyaW5nIHJlZ2lzdHJhdGlvbiBhdCAke2Rpc2NvdmVyeUVuZHBvaW50VXJsfTogJHtyZWdpc3RyYXRpb25SZXF1ZXN0fSAoYXR0ZW1wdCAke2F0dGVtcHR9KWApO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkaXNjb3ZlcnlSZXNwb25zZSA9IGF3YWl0IGZldGNoKGRpc2NvdmVyeUVuZHBvaW50VXJsLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgYm9keTogcmVnaXN0cmF0aW9uUmVxdWVzdCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHJlZ2lzdGVyQ2FsbFRpbWVvdXQpKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhgR290IHJlZ2lzdHJhdGlvbiByZXNwb25zZSBiYWNrOiAke2Rpc2NvdmVyeVJlc3BvbnNlLnN0YXR1c31gKTtcblxuICAgICAgICBpZiAoZGlzY292ZXJ5UmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiBkaXNjb3ZlcnlSZXNwb25zZS5zdGF0dXMgPCAzMDApIHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGRpc2NvdmVyeVJlc3BvbnNlLmpzb24oKSBhcyBFbmRwb2ludFJlc3BvbnNlO1xuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlPy5zZXJ2aWNlcz8uWzBdPy5uYW1lICE9PSBwcm9wcy5zZXJ2aWNlUGF0aCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgU2VydmljZSByZWdpc3RyYXRpb24gZmFpbGVkOiAke2Rpc2NvdmVyeVJlc3BvbnNlLnN0YXR1c1RleHR9ICgke2Rpc2NvdmVyeVJlc3BvbnNlLnN0YXR1c30pYCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBSZWFzb246IGBSZXN0YXRlIHNlcnZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZDogbmFtZSByZXR1cm5lZCBieSBzZXJ2aWNlIChcIiR7cmVzcG9uc2U/LnNlcnZpY2VzPy5bMF0/Lm5hbWV9KSkgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgKFwiJHtwcm9wcy5zZXJ2aWNlUGF0aH1cIilgLFxuICAgICAgICAgICAgICBTdGF0dXM6IFwiRkFJTEVEXCIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBEYXRhOiByZXNwb25zZSxcbiAgICAgICAgICAgIFN0YXR1czogXCJTVUNDRVNTXCIsXG4gICAgICAgICAgfSBzYXRpc2ZpZXMgUGFydGlhbDxDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U+O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlIHJlZ2lzdHJhdGlvbiBjYWxsIGZhaWxlZDogJHsoZSBhcyBFcnJvcik/Lm1lc3NhZ2V9IChhdHRlbXB0ICR7YXR0ZW1wdH0pYCk7XG4gICAgICB9XG5cbiAgICAgIGF0dGVtcHQgKz0gMTtcbiAgICAgIGlmIChhdHRlbXB0ID49IDMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgU2VydmljZSByZWdpc3RyYXRpb24gZmFpbGVkIGFmdGVyICR7YXR0ZW1wdH0gYXR0ZW1wdHMuYCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBSZWFzb246IGBSZXN0YXRlIHNlcnZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZDogJHtoZWFsdGhSZXNwb25zZS5zdGF0dXNUZXh0fSAoJHtoZWFsdGhSZXNwb25zZS5zdGF0dXN9KWAsXG4gICAgICBTdGF0dXM6IFwiRkFJTEVEXCIsXG4gICAgfTtcbiAgfTsiXX0=
158
+ async function createAuthHeader(props) {
159
+ if (!props.authTokenSecretArn) {
160
+ return {};
161
+ }
162
+ console.log(`Using bearer authentication token from secret ${props.authTokenSecretArn}`);
163
+ const ssm = new client_secrets_manager_1.SecretsManagerClient();
164
+ const response = await ssm.send(new client_secrets_manager_1.GetSecretValueCommand({
165
+ SecretId: props.authTokenSecretArn,
166
+ }));
167
+ console.log(`Successfully retrieved secret "${response.Name}" version ${response.VersionId}`);
168
+ return {
169
+ Authorization: `Bearer ${response.SecretString}`,
170
+ };
171
+ }
172
+ async function sleep(millis) {
173
+ await new Promise((resolve) => setTimeout(resolve, millis));
174
+ }
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcmVzdGF0ZS1jb25zdHJ1Y3RzL3JlZ2lzdGVyLXNlcnZpY2UtaGFuZGxlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlILDREQUErQjtBQUUvQiw0RUFBOEY7QUFDOUYsNkNBQStCO0FBaUIvQixNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUNwQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUVwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFFdEI7OztHQUdHO0FBQ0ksTUFBTSxPQUFPLEdBQXFELEtBQUssV0FBVyxLQUFLO0lBQzVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRXZCLElBQUksS0FBSyxDQUFDLFdBQVcsS0FBSyxRQUFRLEVBQUU7UUFDbEMsaUhBQWlIO1FBQ2pILDJHQUEyRztRQUMzRywrR0FBK0c7UUFDL0csdUJBQXVCO1FBRXZCLG9FQUFvRTtRQUNwRSwyREFBMkQ7UUFDM0QscUVBQXFFO1FBQ3JFLDhDQUE4QztRQUM5QyxtR0FBbUc7UUFDbkcsb0ZBQW9GO1FBQ3BGLDZGQUE2RjtRQUM3RixpQ0FBaUM7UUFDakMsd0JBQXdCO1FBQ3hCLG9GQUFvRjtRQUNwRix1REFBdUQ7UUFDdkQsRUFBRTtRQUNGLHVFQUF1RTtRQUN2RSx3Q0FBd0M7UUFDeEMsb0hBQW9IO1FBQ3BILE1BQU07UUFDTixJQUFJO1FBRUosT0FBTyxDQUFDLElBQUksQ0FBQyw4RkFBOEYsQ0FBQyxDQUFDO1FBQzdHLE9BQU87S0FDUjtJQUVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxrQkFBNEMsQ0FBQztJQUNqRSxNQUFNLFVBQVUsR0FBRyxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpELElBQUks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O0FBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIzIC0gUmVzdGF0ZSBTb2Z0d2FyZSwgSW5jLiwgUmVzdGF0ZSBHbWJIXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFJlc3RhdGUgU0RLIGZvciBOb2RlLmpzL1R5cGVTY3JpcHQsXG4gKiB3aGljaCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICogWW91IGNhbiBmaW5kIGEgY29weSBvZiB0aGUgbGljZW5zZSBpbiBmaWxlIExJQ0VOU0UgaW4gdGhlIHJvb3RcbiAqIGRpcmVjdG9yeSBvZiB0aGlzIHJlcG9zaXRvcnkgb3IgcGFja2FnZSwgb3IgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXN0YXRlZGV2L3Nkay10eXBlc2NyaXB0L2Jsb2IvbWFpbi9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gXCJhd3MtbGFtYmRhL2hhbmRsZXJcIjtcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCB9IGZyb20gXCJhd3MtbGFtYmRhL3RyaWdnZXIvY2xvdWRmb3JtYXRpb24tY3VzdG9tLXJlc291cmNlXCI7XG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIjtcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IEdldFNlY3JldFZhbHVlQ29tbWFuZCwgU2VjcmV0c01hbmFnZXJDbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlclwiO1xuaW1wb3J0ICogYXMgaHR0cHMgZnJvbSBcImh0dHBzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uUHJvcGVydGllcyB7XG4gIHNlcnZpY2VQYXRoPzogc3RyaW5nO1xuICBtZXRhRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHNlcnZpY2VFbmRwb2ludD86IHN0cmluZztcbiAgc2VydmljZUxhbWJkYUFybj86IHN0cmluZztcbiAgaW52b2tlUm9sZUFybj86IHN0cmluZztcbiAgcmVtb3ZhbFBvbGljeT86IGNkay5SZW1vdmFsUG9saWN5O1xuICBhdXRoVG9rZW5TZWNyZXRBcm4/OiBzdHJpbmc7XG59XG5cbnR5cGUgRW5kcG9pbnRSZXNwb25zZSA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIHNlcnZpY2VzPzogeyBuYW1lPzogc3RyaW5nOyByZXZpc2lvbj86IG51bWJlciB9W107XG59O1xuXG5jb25zdCBNQVhfSEVBTFRIX0NIRUNLX0FUVEVNUFRTID0gNDtcbmNvbnN0IE1BWF9SRUdJU1RSQVRJT05fQVRURU1QVFMgPSAzO1xuXG5jb25zdCBJTlNFQ1VSRSA9IHRydWU7XG5cbi8qKlxuICogQ3VzdG9tIFJlc291cmNlIGV2ZW50IGhhbmRsZXIgZm9yIFJlc3RhdGUgc2VydmljZSByZWdpc3RyYXRpb24uIFRoaXMgaGFuZGxlciBiYWNrcyB0aGUgY3VzdG9tIHJlc291cmNlcyBjcmVhdGVkIGJ5XG4gKiB7QGxpbmsgTGFtYmRhU2VydmljZVJlZ2lzdHJ5fSB0byBmYWNpbGl0YXRlIExhbWJkYSBzZXJ2aWNlIGhhbmRsZXIgZGlzY292ZXJ5LlxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlcjogSGFuZGxlcjxDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIHZvaWQ+ID0gYXN5bmMgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnNvbGUubG9nKHsgZXZlbnQgfSk7XG5cbiAgaWYgKGV2ZW50LlJlcXVlc3RUeXBlID09PSBcIkRlbGV0ZVwiKSB7XG4gICAgLy8gU2luY2Ugd2UgcmV0YWluIG9sZGVyIExhbWJkYSBoYW5kbGVyIHZlcnNpb25zIG9uIHVwZGF0ZSwgd2UgYWxzbyBsZWF2ZSB0aGUgcmVnaXN0ZXJlZCBzZXJ2aWNlIGFsb25lLiBUaGVyZSBtYXlcbiAgICAvLyBiZSB1bmZpbmlzaGVkIGludm9jYXRpb25zIHRoYXQgcmVxdWlyZSBpdDsgaW4gdGhlIGZ1dHVyZSB3ZSB3b3VsZCB3YW50IHRvIGluZm9ybSBSZXN0YXRlIHRoYXQgd2Ugd2FudCB0b1xuICAgIC8vIGRlLXJlZ2lzdGVyIHRoZSBzZXJ2aWNlLCBhbmQgd2FpdCBmb3IgUmVzdGF0ZSB0byBsZXQgdXMga25vdyB0aGF0IGl0IGlzIHNhZmUgdG8gZGVsZXRlIHRoZSBkZXBsb3llZCBGdW5jdGlvblxuICAgIC8vIHZlcnNpb24gZnJvbSBMYW1iZGEuXG5cbiAgICAvLyBjb25zdCBwcm9wcyA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcyBhcyBSZWdpc3RyYXRpb25Qcm9wZXJ0aWVzO1xuICAgIC8vIGlmIChwcm9wcy5yZW1vdmFsUG9saWN5ID09PSBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKSB7XG4gICAgLy8gICBjb25zb2xlLmxvZyhgRGUtcmVnaXN0ZXJpbmcgc2VydmljZSAke3Byb3BzLnNlcnZpY2VMYW1iZGFBcm59YCk7XG4gICAgLy8gICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIC8vICAgY29uc3QgaWQgPSBidG9hKHByb3BzLnNlcnZpY2VMYW1iZGFBcm4hKTsgLy8gVE9ETzogd2Ugc2hvdWxkIGJlIHRyZWF0aW5nIHNlcnZpY2UgaWRzIGFzIG9wYXF1ZVxuICAgIC8vICAgY29uc3QgZGVsZXRlQ2FsbFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoXCJ0aW1lb3V0XCIpLCA1XzAwMCk7XG4gICAgLy8gICBjb25zdCBkZWxldGVSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3Byb3BzLm1ldGFFbmRwb2ludH0vZW5kcG9pbnRzLyR7aWR9P2ZvcmNlPXRydWVgLCB7XG4gICAgLy8gICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgLy8gICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAvLyAgICAgYWdlbnQ6IElOU0VDVVJFID8gbmV3IGh0dHBzLkFnZW50KHsgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSB9KSA6IHVuZGVmaW5lZCxcbiAgICAvLyAgIH0pLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KGRlbGV0ZUNhbGxUaW1lb3V0KSk7XG4gICAgLy9cbiAgICAvLyAgIGNvbnNvbGUubG9nKGBHb3QgZGVsZXRlIHJlc3BvbnNlIGJhY2s6ICR7ZGVsZXRlUmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIC8vICAgaWYgKGRlbGV0ZVJlc3BvbnNlLnN0YXR1cyAhPSAyMDIpIHtcbiAgICAvLyAgICAgdGhyb3cgbmV3IEVycm9yKGBEZWxldGluZyBzZXJ2aWNlIGVuZHBvaW50IGZhaWxlZDogJHtkZWxldGVSZXNwb25zZS5zdGF0dXNUZXh0fSAoJHtkZWxldGVSZXNwb25zZS5zdGF0dXN9KWApO1xuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGNvbnNvbGUud2FybihcIkRlLXJlZ2lzdGVyaW5nIHNlcnZpY2VzIGlzIG5vdCBzdXBwb3J0ZWQgY3VycmVudGx5LiBQcmV2aW91cyB2ZXJzaW9uIHdpbGwgcmVtYWluIHJlZ2lzdGVyZWQuXCIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHByb3BzID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzIGFzIFJlZ2lzdHJhdGlvblByb3BlcnRpZXM7XG4gIGNvbnN0IGF1dGhIZWFkZXIgPSBhd2FpdCBjcmVhdGVBdXRoSGVhZGVyKHByb3BzKTtcblxuICBsZXQgYXR0ZW1wdDtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBjb25zdCBoZWFsdGhDaGVja1VybCA9IGAke3Byb3BzLm1ldGFFbmRwb2ludH0vaGVhbHRoYDtcblxuICBjb25zb2xlLmxvZyhgUGVyZm9ybWluZyBoZWFsdGggY2hlY2sgYWdhaW5zdDogJHtoZWFsdGhDaGVja1VybH1gKTtcbiAgYXR0ZW1wdCA9IDE7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgaGVhbHRoQ2hlY2tUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KFwidGltZW91dFwiKSwgNV8wMDApO1xuICAgIGxldCBoZWFsdGhSZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBoZWFsdGhSZXNwb25zZSA9IGF3YWl0IGZldGNoKGhlYWx0aENoZWNrVXJsLCB7XG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIGhlYWRlcnM6IGF1dGhIZWFkZXIsXG4gICAgICAgIGFnZW50OiBJTlNFQ1VSRSA/IG5ldyBodHRwcy5BZ2VudCh7IHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UgfSkgOiB1bmRlZmluZWQsXG4gICAgICB9KS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dChoZWFsdGhDaGVja1RpbWVvdXQpKTtcblxuICAgICAgY29uc29sZS5sb2coYEdvdCBoZWFsdGggY2hlY2sgcmVzcG9uc2UgYmFjazogJHtoZWFsdGhSZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgICBpZiAoaGVhbHRoUmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiBoZWFsdGhSZXNwb25zZS5zdGF0dXMgPCAzMDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgUmVzdGF0ZSBoZWFsdGggY2hlY2sgZmFpbGVkOiAke2hlYWx0aFJlc3BvbnNlLnN0YXR1c1RleHR9ICgke2hlYWx0aFJlc3BvbnNlLnN0YXR1c307IGF0dGVtcHQgJHthdHRlbXB0fSlgLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSAoZSBhcyBFcnJvcik/Lm1lc3NhZ2U7XG4gICAgICBjb25zb2xlLmVycm9yKGBSZXN0YXRlIGhlYWx0aCBjaGVjayBmYWlsZWQ6IFwiJHtlcnJvck1lc3NhZ2V9XCIgKGF0dGVtcHQgJHthdHRlbXB0fSlgKTtcbiAgICB9XG5cbiAgICBpZiAoYXR0ZW1wdCA+PSBNQVhfSEVBTFRIX0NIRUNLX0FUVEVNUFRTKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBTZXJ2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQgYWZ0ZXIgJHthdHRlbXB0fSBhdHRlbXB0cy5gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UgPz8gYCR7aGVhbHRoUmVzcG9uc2U/LnN0YXR1c1RleHR9ICgke2hlYWx0aFJlc3BvbnNlPy5zdGF0dXN9KWApO1xuICAgIH1cbiAgICBhdHRlbXB0ICs9IDE7XG5cbiAgICBjb25zdCB3YWl0VGltZU1pbGxpcyA9IDIgKiogYXR0ZW1wdCAqIDFfMDAwO1xuICAgIGNvbnNvbGUubG9nKGBSZXRyeWluZyBhZnRlciAke3dhaXRUaW1lTWlsbGlzfSBtcy4uLmApO1xuICAgIGF3YWl0IHNsZWVwKHdhaXRUaW1lTWlsbGlzKTtcbiAgfVxuXG4gIGNvbnN0IGVuZHBvaW50c1VybCA9IGAke3Byb3BzLm1ldGFFbmRwb2ludH0vZW5kcG9pbnRzYDtcbiAgY29uc3QgcmVnaXN0cmF0aW9uUmVxdWVzdCA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBhcm46IHByb3BzLnNlcnZpY2VMYW1iZGFBcm4sXG4gICAgYXNzdW1lX3JvbGVfYXJuOiBwcm9wcy5pbnZva2VSb2xlQXJuLFxuICB9KTtcblxuICBjb25zb2xlLmxvZyhgVHJpZ2dlcmluZyByZWdpc3RyYXRpb24gYXQgJHtlbmRwb2ludHNVcmx9OiAke3JlZ2lzdHJhdGlvblJlcXVlc3R9IChhdHRlbXB0ICR7YXR0ZW1wdH0pYCk7XG4gIGF0dGVtcHQgPSAxO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZWdpc3RlckNhbGxUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KFwidGltZW91dFwiKSwgMTBfMDAwKTtcbiAgICAgIGNvbnN0IGRpc2NvdmVyeVJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZW5kcG9pbnRzVXJsLCB7XG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGJvZHk6IHJlZ2lzdHJhdGlvblJlcXVlc3QsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAuLi5hdXRoSGVhZGVyLFxuICAgICAgICB9LFxuICAgICAgICBhZ2VudDogSU5TRUNVUkUgPyBuZXcgaHR0cHMuQWdlbnQoeyByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlIH0pIDogdW5kZWZpbmVkLFxuICAgICAgfSkuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQocmVnaXN0ZXJDYWxsVGltZW91dCkpO1xuXG4gICAgICBjb25zb2xlLmxvZyhgR290IHJlZ2lzdHJhdGlvbiByZXNwb25zZSBiYWNrOiAke2Rpc2NvdmVyeVJlc3BvbnNlLnN0YXR1c31gKTtcblxuICAgICAgaWYgKGRpc2NvdmVyeVJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgZGlzY292ZXJ5UmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IGRpc2NvdmVyeVJlc3BvbnNlLmpzb24oKSkgYXMgRW5kcG9pbnRSZXNwb25zZTtcblxuICAgICAgICBpZiAocmVzcG9uc2U/LnNlcnZpY2VzPy5bMF0/Lm5hbWUgIT09IHByb3BzLnNlcnZpY2VQYXRoKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiUmVzdGF0ZSBzZXJ2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6IHNlcnZpY2UgbmFtZSBpbmRpY2F0ZWQgYnkgc2VydmljZSByZXNwb25zZVwiICtcbiAgICAgICAgICAgICAgYCAoXCIke3Jlc3BvbnNlPy5zZXJ2aWNlcz8uWzBdPy5uYW1lfSkpIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCB2YWx1ZSAoXCIke3Byb3BzLnNlcnZpY2VQYXRofVwiKSFgLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhcIlN1Y2Nlc3MhXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgU2VydmljZSByZWdpc3RyYXRpb24gY2FsbCBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpPy5tZXNzYWdlfSAoYXR0ZW1wdCAke2F0dGVtcHR9KWApO1xuICAgIH1cblxuICAgIGlmIChhdHRlbXB0ID49IE1BWF9SRUdJU1RSQVRJT05fQVRURU1QVFMpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFNlcnZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZCBhZnRlciAke2F0dGVtcHR9IGF0dGVtcHRzLmApO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGF0dGVtcHQgKz0gMTtcbiAgICBhd2FpdCBzbGVlcCgxXzAwMCk7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVnaXN0ZXIgc2VydmljZSB3aXRoIFJlc3RhdGUuXCIpO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXV0aEhlYWRlcihwcm9wczogUmVnaXN0cmF0aW9uUHJvcGVydGllcyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBpZiAoIXByb3BzLmF1dGhUb2tlblNlY3JldEFybikge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGBVc2luZyBiZWFyZXIgYXV0aGVudGljYXRpb24gdG9rZW4gZnJvbSBzZWNyZXQgJHtwcm9wcy5hdXRoVG9rZW5TZWNyZXRBcm59YCk7XG4gIGNvbnN0IHNzbSA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCgpO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNzbS5zZW5kKFxuICAgIG5ldyBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQoe1xuICAgICAgU2VjcmV0SWQ6IHByb3BzLmF1dGhUb2tlblNlY3JldEFybixcbiAgICB9KSxcbiAgKTtcblxuICBjb25zb2xlLmxvZyhgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBzZWNyZXQgXCIke3Jlc3BvbnNlLk5hbWV9XCIgdmVyc2lvbiAke3Jlc3BvbnNlLlZlcnNpb25JZH1gKTtcbiAgcmV0dXJuIHtcbiAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7cmVzcG9uc2UuU2VjcmV0U3RyaW5nfWAsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1pbGxpczogbnVtYmVyKSB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1pbGxpcykpO1xufVxuIl19
@@ -0,0 +1,12 @@
1
+ import { Construct } from "constructs";
2
+ import * as ssm from "aws-cdk-lib/aws-secretsmanager";
3
+ import * as cdk from "aws-cdk-lib";
4
+ import * as ec2 from "aws-cdk-lib/aws-ec2";
5
+ export declare class RegistrationProvider extends Construct {
6
+ readonly serviceToken: string;
7
+ constructor(scope: Construct, id: string, props: {
8
+ authToken?: ssm.ISecret;
9
+ timeout?: cdk.Duration;
10
+ vpc?: ec2.Vpc;
11
+ });
12
+ }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2023 - Restate Software, Inc., Restate GmbH
4
+ *
5
+ * This file is part of the Restate SDK for Node.js/TypeScript,
6
+ * which is released under the MIT license.
7
+ *
8
+ * You can find a copy of the license in file LICENSE in the root
9
+ * directory of this repository or package, or at
10
+ * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.RegistrationProvider = void 0;
40
+ const constructs_1 = require("constructs");
41
+ const lambda_node = __importStar(require("aws-cdk-lib/aws-lambda-nodejs"));
42
+ const node_path_1 = __importDefault(require("node:path"));
43
+ const lambda = __importStar(require("aws-cdk-lib/aws-lambda"));
44
+ const cdk = __importStar(require("aws-cdk-lib"));
45
+ const cr = __importStar(require("aws-cdk-lib/custom-resources"));
46
+ const DEFAULT_TIMEOUT = cdk.Duration.seconds(120);
47
+ class RegistrationProvider extends constructs_1.Construct {
48
+ constructor(scope, id, props) {
49
+ super(scope, id);
50
+ if (props.vpc) {
51
+ console.log("Using VPC!");
52
+ }
53
+ const registrationHandler = new lambda_node.NodejsFunction(this, "RegistrationHandler", {
54
+ description: "Restate custom registration handler",
55
+ entry: node_path_1.default.join(__dirname, "register-service-handler/index.js"),
56
+ architecture: lambda.Architecture.ARM_64,
57
+ runtime: lambda.Runtime.NODEJS_LATEST,
58
+ memorySize: 128,
59
+ timeout: props.timeout ?? DEFAULT_TIMEOUT,
60
+ environment: {
61
+ NODE_OPTIONS: "--enable-source-maps",
62
+ },
63
+ bundling: {
64
+ minify: false,
65
+ sourceMap: true,
66
+ },
67
+ ...(props.vpc ? { vpc: props.vpc, subnets: props.vpc.privateSubnets } : {}),
68
+ });
69
+ props.authToken?.grantRead(registrationHandler);
70
+ const registrationProvider = new cr.Provider(this, "RegistrationProvider", {
71
+ onEventHandler: registrationHandler,
72
+ });
73
+ this.serviceToken = registrationProvider.serviceToken;
74
+ }
75
+ }
76
+ exports.RegistrationProvider = RegistrationProvider;
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cmF0aW9uLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL3Jlc3RhdGUtY29uc3RydWN0cy9yZWdpc3RyYXRpb24tcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7R0FTRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCwyQ0FBdUM7QUFFdkMsMkVBQTZEO0FBQzdELDBEQUE2QjtBQUM3QiwrREFBaUQ7QUFDakQsaURBQW1DO0FBQ25DLGlFQUFtRDtBQUduRCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVsRCxNQUFhLG9CQUFxQixTQUFRLHNCQUFTO0lBR2pELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUU7UUFDakgsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzNCO1FBRUQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO1lBQ3RGLFdBQVcsRUFBRSxxQ0FBcUM7WUFDbEQsS0FBSyxFQUFFLG1CQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxtQ0FBbUMsQ0FBQztZQUNoRSxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQ3hDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWE7WUFDckMsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO1lBQ3pDLFdBQVcsRUFBRTtnQkFDWCxZQUFZLEVBQUUsc0JBQXNCO2FBQ3JDO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLE1BQU0sRUFBRSxLQUFLO2dCQUNiLFNBQVMsRUFBRSxJQUFJO2FBQ2hCO1lBQ0QsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUM1RSxDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRWhELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUN6RSxjQUFjLEVBQUUsbUJBQW1CO1NBQ3BDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsb0JBQW9CLENBQUMsWUFBWSxDQUFDO0lBQ3hELENBQUM7Q0FDRjtBQWpDRCxvREFpQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIzIC0gUmVzdGF0ZSBTb2Z0d2FyZSwgSW5jLiwgUmVzdGF0ZSBHbWJIXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFJlc3RhdGUgU0RLIGZvciBOb2RlLmpzL1R5cGVTY3JpcHQsXG4gKiB3aGljaCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICogWW91IGNhbiBmaW5kIGEgY29weSBvZiB0aGUgbGljZW5zZSBpbiBmaWxlIExJQ0VOU0UgaW4gdGhlIHJvb3RcbiAqIGRpcmVjdG9yeSBvZiB0aGlzIHJlcG9zaXRvcnkgb3IgcGFja2FnZSwgb3IgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXN0YXRlZGV2L3Nkay10eXBlc2NyaXB0L2Jsb2IvbWFpbi9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIHNzbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQgKiBhcyBsYW1iZGFfbm9kZSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgY3IgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuXG5jb25zdCBERUZBVUxUX1RJTUVPVVQgPSBjZGsuRHVyYXRpb24uc2Vjb25kcygxMjApO1xuXG5leHBvcnQgY2xhc3MgUmVnaXN0cmF0aW9uUHJvdmlkZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICByZWFkb25seSBzZXJ2aWNlVG9rZW46IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogeyBhdXRoVG9rZW4/OiBzc20uSVNlY3JldDsgdGltZW91dD86IGNkay5EdXJhdGlvbjsgdnBjPzogZWMyLlZwYyB9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChwcm9wcy52cGMpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiVXNpbmcgVlBDIVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWdpc3RyYXRpb25IYW5kbGVyID0gbmV3IGxhbWJkYV9ub2RlLk5vZGVqc0Z1bmN0aW9uKHRoaXMsIFwiUmVnaXN0cmF0aW9uSGFuZGxlclwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJSZXN0YXRlIGN1c3RvbSByZWdpc3RyYXRpb24gaGFuZGxlclwiLFxuICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsIFwicmVnaXN0ZXItc2VydmljZS1oYW5kbGVyL2luZGV4LmpzXCIpLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU19MQVRFU1QsXG4gICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0ID8/IERFRkFVTFRfVElNRU9VVCxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIE5PREVfT1BUSU9OUzogXCItLWVuYWJsZS1zb3VyY2UtbWFwc1wiLFxuICAgICAgfSxcbiAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgIG1pbmlmeTogZmFsc2UsXG4gICAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICAuLi4ocHJvcHMudnBjID8geyB2cGM6IHByb3BzLnZwYywgc3VibmV0czogcHJvcHMudnBjLnByaXZhdGVTdWJuZXRzIH0gOiB7fSksXG4gICAgfSk7XG4gICAgcHJvcHMuYXV0aFRva2VuPy5ncmFudFJlYWQocmVnaXN0cmF0aW9uSGFuZGxlcik7XG5cbiAgICBjb25zdCByZWdpc3RyYXRpb25Qcm92aWRlciA9IG5ldyBjci5Qcm92aWRlcih0aGlzLCBcIlJlZ2lzdHJhdGlvblByb3ZpZGVyXCIsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiByZWdpc3RyYXRpb25IYW5kbGVyLFxuICAgIH0pO1xuICAgIHRoaXMuc2VydmljZVRva2VuID0gcmVnaXN0cmF0aW9uUHJvdmlkZXIuc2VydmljZVRva2VuO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,27 @@
1
+ import { Construct } from "constructs";
2
+ import * as cdk from "aws-cdk-lib";
3
+ import * as iam from "aws-cdk-lib/aws-iam";
4
+ import * as ssm from "aws-cdk-lib/aws-secretsmanager";
5
+ import { RestateInstance } from "./restate-instance";
6
+ export interface ManagedRestateProps {
7
+ /** Prefix for resources created by this construct that require unique names. */
8
+ prefix?: string;
9
+ /** ID of the Restate service cluster to which this service will be registered. */
10
+ clusterId: string;
11
+ /** Auth token to use with Restate cluster. Used to authenticate access to the meta endpoint for registration. */
12
+ authTokenSecretArn: string;
13
+ }
14
+ /**
15
+ * Models a Restate managed service cluster provided to the application. In the case of a managed service, this
16
+ * construct only creates an appropriately configured registration provider custom component for use by the service
17
+ * registry elsewhere, and creates the role assumed by the cluster. An appropriate trust policy will be added to this
18
+ * role that allows Restate to assume it from outside the deployment AWS account.
19
+ */
20
+ export declare class RestateCloudEndpoint extends Construct implements RestateInstance {
21
+ readonly invokerRole: iam.Role;
22
+ readonly ingressEndpoint: string;
23
+ readonly metaEndpoint: string;
24
+ readonly authToken: ssm.ISecret;
25
+ readonly registrationProviderToken: cdk.CfnOutput;
26
+ constructor(scope: Construct, id: string, props: ManagedRestateProps);
27
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2023 - Restate Software, Inc., Restate GmbH
4
+ *
5
+ * This file is part of the Restate SDK for Node.js/TypeScript,
6
+ * which is released under the MIT license.
7
+ *
8
+ * You can find a copy of the license in file LICENSE in the root
9
+ * directory of this repository or package, or at
10
+ * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.RestateCloudEndpoint = void 0;
37
+ const constructs_1 = require("constructs");
38
+ const cdk = __importStar(require("aws-cdk-lib"));
39
+ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
40
+ const ssm = __importStar(require("aws-cdk-lib/aws-secretsmanager"));
41
+ const registration_provider_1 = require("./registration-provider");
42
+ const RESTATE_INGRESS_PORT = 8080;
43
+ const RESTATE_META_PORT = 9070;
44
+ /**
45
+ * Models a Restate managed service cluster provided to the application. In the case of a managed service, this
46
+ * construct only creates an appropriately configured registration provider custom component for use by the service
47
+ * registry elsewhere, and creates the role assumed by the cluster. An appropriate trust policy will be added to this
48
+ * role that allows Restate to assume it from outside the deployment AWS account.
49
+ */
50
+ class RestateCloudEndpoint extends constructs_1.Construct {
51
+ constructor(scope, id, props) {
52
+ super(scope, id);
53
+ this.invokerRole = new iam.Role(this, "ManagedServiceRole", {
54
+ description: "Role assumed by the Restate managed service to invoke our services",
55
+ assumedBy: new iam.ArnPrincipal("arn:aws:iam::663487780041:role/restate-dev"),
56
+ externalIds: [props.clusterId],
57
+ });
58
+ this.ingressEndpoint = `https://${props.clusterId}.dev.restate.cloud:${RESTATE_INGRESS_PORT}`;
59
+ this.metaEndpoint = `https://${props.clusterId}.dev.restate.cloud:${RESTATE_META_PORT}`;
60
+ this.authToken = ssm.Secret.fromSecretCompleteArn(this, "ClusterAuthToken", props.authTokenSecretArn);
61
+ const registrationProvider = new registration_provider_1.RegistrationProvider(this, "RegistrationProvider", { authToken: this.authToken });
62
+ this.registrationProviderToken = new cdk.CfnOutput(this, "RegistrationProviderToken", {
63
+ description: "Restate service registration provider custom component token used by registry to perform discovery",
64
+ exportName: [props.prefix, "RegistrationProviderToken"].filter(Boolean).join("-"),
65
+ value: registrationProvider.serviceToken,
66
+ });
67
+ }
68
+ }
69
+ exports.RestateCloudEndpoint = RestateCloudEndpoint;
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdGF0ZS1jbG91ZC1lbmRwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2xpYi9yZXN0YXRlLWNvbnN0cnVjdHMvcmVzdGF0ZS1jbG91ZC1lbmRwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILDJDQUF1QztBQUN2QyxpREFBbUM7QUFDbkMseURBQTJDO0FBQzNDLG9FQUFzRDtBQUV0RCxtRUFBK0Q7QUFFL0QsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7QUFDbEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFhL0I7Ozs7O0dBS0c7QUFDSCxNQUFhLG9CQUFxQixTQUFRLHNCQUFTO0lBT2pELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDMUQsV0FBVyxFQUFFLG9FQUFvRTtZQUNqRixTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLDRDQUE0QyxDQUFDO1lBQzdFLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7U0FDL0IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLEtBQUssQ0FBQyxTQUFTLHNCQUFzQixvQkFBb0IsRUFBRSxDQUFDO1FBQzlGLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxLQUFLLENBQUMsU0FBUyxzQkFBc0IsaUJBQWlCLEVBQUUsQ0FBQztRQUN4RixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRXRHLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSw0Q0FBb0IsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDbkgsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUU7WUFDcEYsV0FBVyxFQUFFLG9HQUFvRztZQUNqSCxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLDJCQUEyQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDakYsS0FBSyxFQUFFLG9CQUFvQixDQUFDLFlBQVk7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBM0JELG9EQTJCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMgLSBSZXN0YXRlIFNvZnR3YXJlLCBJbmMuLCBSZXN0YXRlIEdtYkhcbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUmVzdGF0ZSBTREsgZm9yIE5vZGUuanMvVHlwZVNjcmlwdCxcbiAqIHdoaWNoIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqXG4gKiBZb3UgY2FuIGZpbmQgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGluIGZpbGUgTElDRU5TRSBpbiB0aGUgcm9vdFxuICogZGlyZWN0b3J5IG9mIHRoaXMgcmVwb3NpdG9yeSBvciBwYWNrYWdlLCBvciBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Jlc3RhdGVkZXYvc2RrLXR5cGVzY3JpcHQvYmxvYi9tYWluL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0IHsgUmVzdGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vcmVzdGF0ZS1pbnN0YW5jZVwiO1xuaW1wb3J0IHsgUmVnaXN0cmF0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi9yZWdpc3RyYXRpb24tcHJvdmlkZXJcIjtcblxuY29uc3QgUkVTVEFURV9JTkdSRVNTX1BPUlQgPSA4MDgwO1xuY29uc3QgUkVTVEFURV9NRVRBX1BPUlQgPSA5MDcwO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZWRSZXN0YXRlUHJvcHMge1xuICAvKiogUHJlZml4IGZvciByZXNvdXJjZXMgY3JlYXRlZCBieSB0aGlzIGNvbnN0cnVjdCB0aGF0IHJlcXVpcmUgdW5pcXVlIG5hbWVzLiAqL1xuICBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqIElEIG9mIHRoZSBSZXN0YXRlIHNlcnZpY2UgY2x1c3RlciB0byB3aGljaCB0aGlzIHNlcnZpY2Ugd2lsbCBiZSByZWdpc3RlcmVkLiAqL1xuICBjbHVzdGVySWQ6IHN0cmluZztcblxuICAvKiogQXV0aCB0b2tlbiB0byB1c2Ugd2l0aCBSZXN0YXRlIGNsdXN0ZXIuIFVzZWQgdG8gYXV0aGVudGljYXRlIGFjY2VzcyB0byB0aGUgbWV0YSBlbmRwb2ludCBmb3IgcmVnaXN0cmF0aW9uLiAqL1xuICBhdXRoVG9rZW5TZWNyZXRBcm46IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBSZXN0YXRlIG1hbmFnZWQgc2VydmljZSBjbHVzdGVyIHByb3ZpZGVkIHRvIHRoZSBhcHBsaWNhdGlvbi4gSW4gdGhlIGNhc2Ugb2YgYSBtYW5hZ2VkIHNlcnZpY2UsIHRoaXNcbiAqIGNvbnN0cnVjdCBvbmx5IGNyZWF0ZXMgYW4gYXBwcm9wcmlhdGVseSBjb25maWd1cmVkIHJlZ2lzdHJhdGlvbiBwcm92aWRlciBjdXN0b20gY29tcG9uZW50IGZvciB1c2UgYnkgdGhlIHNlcnZpY2VcbiAqIHJlZ2lzdHJ5IGVsc2V3aGVyZSwgYW5kIGNyZWF0ZXMgdGhlIHJvbGUgYXNzdW1lZCBieSB0aGUgY2x1c3Rlci4gQW4gYXBwcm9wcmlhdGUgdHJ1c3QgcG9saWN5IHdpbGwgYmUgYWRkZWQgdG8gdGhpc1xuICogcm9sZSB0aGF0IGFsbG93cyBSZXN0YXRlIHRvIGFzc3VtZSBpdCBmcm9tIG91dHNpZGUgdGhlIGRlcGxveW1lbnQgQVdTIGFjY291bnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXN0YXRlQ2xvdWRFbmRwb2ludCBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIFJlc3RhdGVJbnN0YW5jZSB7XG4gIHJlYWRvbmx5IGludm9rZXJSb2xlOiBpYW0uUm9sZTtcbiAgcmVhZG9ubHkgaW5ncmVzc0VuZHBvaW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1ldGFFbmRwb2ludDogc3RyaW5nO1xuICByZWFkb25seSBhdXRoVG9rZW46IHNzbS5JU2VjcmV0O1xuICByZWFkb25seSByZWdpc3RyYXRpb25Qcm92aWRlclRva2VuOiBjZGsuQ2ZuT3V0cHV0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNYW5hZ2VkUmVzdGF0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuaW52b2tlclJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJNYW5hZ2VkU2VydmljZVJvbGVcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiUm9sZSBhc3N1bWVkIGJ5IHRoZSBSZXN0YXRlIG1hbmFnZWQgc2VydmljZSB0byBpbnZva2Ugb3VyIHNlcnZpY2VzXCIsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uQXJuUHJpbmNpcGFsKFwiYXJuOmF3czppYW06OjY2MzQ4Nzc4MDA0MTpyb2xlL3Jlc3RhdGUtZGV2XCIpLFxuICAgICAgZXh0ZXJuYWxJZHM6IFtwcm9wcy5jbHVzdGVySWRdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5pbmdyZXNzRW5kcG9pbnQgPSBgaHR0cHM6Ly8ke3Byb3BzLmNsdXN0ZXJJZH0uZGV2LnJlc3RhdGUuY2xvdWQ6JHtSRVNUQVRFX0lOR1JFU1NfUE9SVH1gO1xuICAgIHRoaXMubWV0YUVuZHBvaW50ID0gYGh0dHBzOi8vJHtwcm9wcy5jbHVzdGVySWR9LmRldi5yZXN0YXRlLmNsb3VkOiR7UkVTVEFURV9NRVRBX1BPUlR9YDtcbiAgICB0aGlzLmF1dGhUb2tlbiA9IHNzbS5TZWNyZXQuZnJvbVNlY3JldENvbXBsZXRlQXJuKHRoaXMsIFwiQ2x1c3RlckF1dGhUb2tlblwiLCBwcm9wcy5hdXRoVG9rZW5TZWNyZXRBcm4pO1xuXG4gICAgY29uc3QgcmVnaXN0cmF0aW9uUHJvdmlkZXIgPSBuZXcgUmVnaXN0cmF0aW9uUHJvdmlkZXIodGhpcywgXCJSZWdpc3RyYXRpb25Qcm92aWRlclwiLCB7IGF1dGhUb2tlbjogdGhpcy5hdXRoVG9rZW4gfSk7XG4gICAgdGhpcy5yZWdpc3RyYXRpb25Qcm92aWRlclRva2VuID0gbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJSZWdpc3RyYXRpb25Qcm92aWRlclRva2VuXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlJlc3RhdGUgc2VydmljZSByZWdpc3RyYXRpb24gcHJvdmlkZXIgY3VzdG9tIGNvbXBvbmVudCB0b2tlbiB1c2VkIGJ5IHJlZ2lzdHJ5IHRvIHBlcmZvcm0gZGlzY292ZXJ5XCIsXG4gICAgICBleHBvcnROYW1lOiBbcHJvcHMucHJlZml4LCBcIlJlZ2lzdHJhdGlvblByb3ZpZGVyVG9rZW5cIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCItXCIpLFxuICAgICAgdmFsdWU6IHJlZ2lzdHJhdGlvblByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICB9KTtcbiAgfVxufSJdfQ==
@@ -0,0 +1,13 @@
1
+ import * as iam from "aws-cdk-lib/aws-iam";
2
+ import * as cdk from "aws-cdk-lib";
3
+ import * as ssm from "aws-cdk-lib/aws-secretsmanager";
4
+ /**
5
+ * Represents an instance of the Restate service. This could represent a self-hosted broker, or Restate's managed
6
+ * service.
7
+ */
8
+ export interface RestateInstance {
9
+ readonly invokerRole: iam.IRole;
10
+ readonly metaEndpoint: string;
11
+ readonly authToken?: ssm.ISecret;
12
+ readonly registrationProviderToken: cdk.CfnOutput;
13
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdGF0ZS1pbnN0YW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2xpYi9yZXN0YXRlLWNvbnN0cnVjdHMvcmVzdGF0ZS1pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gaW5zdGFuY2Ugb2YgdGhlIFJlc3RhdGUgc2VydmljZS4gVGhpcyBjb3VsZCByZXByZXNlbnQgYSBzZWxmLWhvc3RlZCBicm9rZXIsIG9yIFJlc3RhdGUncyBtYW5hZ2VkXG4gKiBzZXJ2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RhdGVJbnN0YW5jZSB7XG4gIHJlYWRvbmx5IGludm9rZXJSb2xlOiBpYW0uSVJvbGU7XG4gIHJlYWRvbmx5IG1ldGFFbmRwb2ludDogc3RyaW5nO1xuICByZWFkb25seSBhdXRoVG9rZW4/OiBzc20uSVNlY3JldDtcbiAgcmVhZG9ubHkgcmVnaXN0cmF0aW9uUHJvdmlkZXJUb2tlbjogY2RrLkNmbk91dHB1dDtcbn0iXX0=
@@ -3,17 +3,7 @@ import * as logs from "aws-cdk-lib/aws-logs";
3
3
  import * as ec2 from "aws-cdk-lib/aws-ec2";
4
4
  import * as iam from "aws-cdk-lib/aws-iam";
5
5
  import * as cdk from "aws-cdk-lib";
6
- import * as cr from "aws-cdk-lib/custom-resources";
7
- import * as acm from "aws-cdk-lib/aws-certificatemanager";
8
- /**
9
- * Represents an instance of the Restate service. This could represent a self-hosted broker, or Restate's managed
10
- * service.
11
- */
12
- export interface RestateInstance {
13
- readonly invokerRole: iam.Role;
14
- readonly metaEndpoint: string;
15
- readonly registrationProviderToken: cdk.CfnOutput;
16
- }
6
+ import { RestateInstance } from "./restate-instance";
17
7
  export declare enum TracingMode {
18
8
  DISABLED = "DISABLED",
19
9
  AWS_XRAY = "AWS_XRAY"
@@ -21,7 +11,7 @@ export declare enum TracingMode {
21
11
  export interface RestateInstanceProps {
22
12
  /** Log group for Restate service logs. */
23
13
  logGroup: logs.LogGroup;
24
- /** Tracing mode for Restate services. Disabled by default. */
14
+ /** Tracing mode for Restate services. Defaults to {@link TracingMode.DISABLED}. */
25
15
  tracing?: TracingMode;
26
16
  /** Prefix for resources created by this construct that require unique names. */
27
17
  prefix?: string;
@@ -29,26 +19,19 @@ export interface RestateInstanceProps {
29
19
  restateTag?: string;
30
20
  /** Amazon Distro for Open Telemetry Docker image tag. Defaults to `latest`. */
31
21
  adotTag?: string;
32
- /** Optional certificate for ingress endpoint. If unspecified, a plain HTTP listener will be created. */
33
- certificate?: acm.ICertificate;
34
22
  }
35
23
  /**
36
24
  * Creates a Restate service deployment backed by a single EC2 instance,
37
- * suitable for development and testing purposes.
25
+ * suitable for development and testing purposes. The instance will be created
26
+ * in a dedicated VPC (unless one is provided). EC2 instance will be allocated
27
+ * a public IP address.
38
28
  */
39
29
  export declare class SingleNodeRestateInstance extends Construct implements RestateInstance {
40
30
  readonly instance: ec2.Instance;
41
- readonly invokerRole: iam.Role;
31
+ readonly invokerRole: iam.IRole;
42
32
  readonly vpc: ec2.Vpc;
43
- readonly publicIngressEndpoint: string;
44
- readonly privateIngressEndpoint: string;
33
+ readonly ingressEndpoint: string;
45
34
  readonly metaEndpoint: string;
46
- readonly registrationProvider: cr.Provider;
47
35
  readonly registrationProviderToken: cdk.CfnOutput;
48
36
  constructor(scope: Construct, id: string, props: RestateInstanceProps);
49
- /**
50
- * Creates a custom resource provider to facilitate service discovery. Note that the custom resource event handler
51
- * must be able to reach the Restate instance's meta endpoint - which is why it is deployed within the same VPC.
52
- */
53
- private createRegistrationProvider;
54
37
  }
@@ -32,22 +32,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
32
32
  __setModuleDefault(result, mod);
33
33
  return result;
34
34
  };
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
35
  Object.defineProperty(exports, "__esModule", { value: true });
39
36
  exports.SingleNodeRestateInstance = exports.TracingMode = void 0;
40
37
  const constructs_1 = require("constructs");
41
38
  const ec2 = __importStar(require("aws-cdk-lib/aws-ec2"));
42
39
  const iam = __importStar(require("aws-cdk-lib/aws-iam"));
43
- const elb_v2 = __importStar(require("aws-cdk-lib/aws-elasticloadbalancingv2"));
44
- const aws_elasticloadbalancingv2_1 = require("aws-cdk-lib/aws-elasticloadbalancingv2");
45
- const aws_elasticloadbalancingv2_targets_1 = require("aws-cdk-lib/aws-elasticloadbalancingv2-targets");
46
- const lambda_node = __importStar(require("aws-cdk-lib/aws-lambda-nodejs"));
47
- const node_path_1 = __importDefault(require("node:path"));
48
- const lambda = __importStar(require("aws-cdk-lib/aws-lambda"));
49
40
  const cdk = __importStar(require("aws-cdk-lib"));
50
- const cr = __importStar(require("aws-cdk-lib/custom-resources"));
41
+ const registration_provider_1 = require("./registration-provider");
42
+ const PUBLIC_INGRESS_PORT = 443;
43
+ const PUBLIC_META_PORT = 9073;
51
44
  const RESTATE_INGRESS_PORT = 8080;
52
45
  const RESTATE_META_PORT = 9070;
53
46
  const RESTATE_DOCKER_DEFAULT_TAG = "latest";
@@ -59,25 +52,27 @@ var TracingMode;
59
52
  })(TracingMode || (exports.TracingMode = TracingMode = {}));
60
53
  /**
61
54
  * Creates a Restate service deployment backed by a single EC2 instance,
62
- * suitable for development and testing purposes.
55
+ * suitable for development and testing purposes. The instance will be created
56
+ * in a dedicated VPC (unless one is provided). EC2 instance will be allocated
57
+ * a public IP address.
63
58
  */
64
59
  class SingleNodeRestateInstance extends constructs_1.Construct {
65
60
  constructor(scope, id, props) {
66
61
  super(scope, id);
67
- this.vpc = new ec2.Vpc(this, "RestateVpc", {
62
+ this.vpc = new ec2.Vpc(this, "Vpc", {
68
63
  maxAzs: 3,
64
+ createInternetGateway: true,
65
+ natGateways: 0,
69
66
  });
70
67
  this.invokerRole = new iam.Role(this, "InstanceRole", {
71
68
  assumedBy: new iam.ServicePrincipal("ec2.amazonaws.com"),
72
- managedPolicies: [
73
- iam.ManagedPolicy.fromAwsManagedPolicyName("AmazonSSMManagedInstanceCore"),
74
- ],
69
+ managedPolicies: [iam.ManagedPolicy.fromAwsManagedPolicyName("AmazonSSMManagedInstanceCore")],
75
70
  });
76
71
  props.logGroup.grantWrite(this.invokerRole);
77
72
  const restateTag = props.restateTag ?? RESTATE_DOCKER_DEFAULT_TAG;
78
73
  const adotTag = props.adotTag ?? ADOT_DOCKER_DEFAULT_TAG;
79
74
  const restateInitCommands = ec2.UserData.forLinux();
80
- restateInitCommands.addCommands("yum update -y", "yum install -y docker", "systemctl enable docker.service", "systemctl start docker.service", [
75
+ restateInitCommands.addCommands("yum update -y", "yum install -y docker nginx", "systemctl enable docker.service", "systemctl start docker.service", [
81
76
  "docker run --name adot --restart unless-stopped --detach",
82
77
  " -p 4317:4317 -p 55680:55680 -p 8889:8888",
83
78
  ` public.ecr.aws/aws-observability/aws-otel-collector:${adotTag}`,
@@ -88,9 +83,14 @@ class SingleNodeRestateInstance extends constructs_1.Construct {
88
83
  " -e RESTATE_OBSERVABILITY__TRACING__ENDPOINT=http://localhost:4317",
89
84
  ` --log-driver=awslogs --log-opt awslogs-group=${props.logGroup.logGroupName}`,
90
85
  ` docker.io/restatedev/restate:${restateTag}`,
91
- ].join(""));
86
+ ].join(""), "mkdir -p /etc/pki/private", [
87
+ "openssl req -new -x509 -nodes -sha256 -days 365 -extensions v3_ca",
88
+ " -subj '/C=DE/ST=Berlin/L=Berlin/O=restate.dev/OU=demo/CN=restate.example.com'",
89
+ " -newkey rsa:2048 -keyout /etc/pki/private/restate-selfsigned.key -out /etc/pki/private/restate-selfsigned.crt",
90
+ ].join(""), ["cat << EOF > /etc/nginx/conf.d/restate-ingress.conf", NGINX_REVERSE_PROXY_CONFIG, "EOF"].join("\n"), "systemctl enable nginx", "systemctl start nginx");
92
91
  const restateInstance = new ec2.Instance(this, "Host", {
93
92
  vpc: this.vpc,
93
+ vpcSubnets: { subnetType: ec2.SubnetType.PUBLIC },
94
94
  instanceType: new ec2.InstanceType("t4g.micro"),
95
95
  machineImage: ec2.MachineImage.latestAmazonLinux2023({
96
96
  cpuType: ec2.AmazonLinuxCpuType.ARM_64,
@@ -107,81 +107,57 @@ class SingleNodeRestateInstance extends constructs_1.Construct {
107
107
  const restateInstanceSecurityGroup = new ec2.SecurityGroup(this, "RestateSecurityGroup", {
108
108
  vpc: this.vpc,
109
109
  securityGroupName: "RestateSecurityGroup",
110
- description: "Allow inbound traffic to Restate",
111
- });
112
- const ingressLoadBalancer = new elb_v2.ApplicationLoadBalancer(this, "RestateAlb", {
113
- vpc: this.vpc,
114
- internetFacing: true,
115
- });
116
- const targetGroup = new elb_v2.ApplicationTargetGroup(this, "TargetGroup", {
117
- vpc: this.vpc,
118
- protocol: elb_v2.ApplicationProtocol.HTTP,
119
- port: RESTATE_INGRESS_PORT,
120
- targets: [new aws_elasticloadbalancingv2_targets_1.InstanceTarget(restateInstance)],
121
- healthCheck: {
122
- protocol: elb_v2.Protocol.HTTP,
123
- path: "/grpc.health.v1.Health/Check",
124
- interval: cdk.Duration.seconds(60),
125
- },
126
- });
127
- ingressLoadBalancer.addListener("Listener", {
128
- port: props.certificate ? 443 : 80,
129
- protocol: props.certificate ? aws_elasticloadbalancingv2_1.ApplicationProtocol.HTTPS : aws_elasticloadbalancingv2_1.ApplicationProtocol.HTTP,
130
- defaultTargetGroups: [targetGroup],
131
- certificates: props.certificate ? [elb_v2.ListenerCertificate.fromCertificateManager(props.certificate)] : [],
132
- });
133
- const albSecurityGroup = new ec2.SecurityGroup(this, "AlbSecurityGroup", {
134
- vpc: this.vpc,
135
- description: "ALB security group",
136
- allowAllOutbound: false,
137
- });
138
- albSecurityGroup.addEgressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(RESTATE_INGRESS_PORT), "Allow outbound HTTP traffic to Restate ingress");
139
- ingressLoadBalancer.addSecurityGroup(albSecurityGroup);
140
- restateInstanceSecurityGroup.addIngressRule(albSecurityGroup, ec2.Port.tcp(RESTATE_INGRESS_PORT), "Allow traffic from ALB to Restate ingress");
141
- // These rules allow the service registration component to trigger service discovery as needed; the requests
142
- // originate from a VPC-bound Lambda function that backs the custom resource.
143
- this.vpc.privateSubnets.forEach((subnet) => {
144
- restateInstanceSecurityGroup.addIngressRule(ec2.Peer.ipv4(subnet.ipv4CidrBlock), ec2.Port.tcp(RESTATE_META_PORT), "Allow traffic from the VPC to Restate meta");
145
- });
146
- this.vpc.privateSubnets.forEach((subnet) => {
147
- restateInstanceSecurityGroup.addIngressRule(ec2.Peer.ipv4(subnet.ipv4CidrBlock), ec2.Port.tcp(RESTATE_INGRESS_PORT), "Allow traffic from the VPC to Restate ingress");
110
+ description: "Restate service ACLs",
148
111
  });
149
112
  restateInstance.addSecurityGroup(restateInstanceSecurityGroup);
150
- const registrationProvider = this.createRegistrationProvider();
151
- this.registrationProvider = registrationProvider;
113
+ restateInstanceSecurityGroup.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(443), "Allow traffic from anywhere to Restate ingress");
114
+ restateInstanceSecurityGroup.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(9073), "Allow traffic from anywhere to Restate meta");
115
+ const registrationProvider = new registration_provider_1.RegistrationProvider(this, "RegistrationProvider", {});
152
116
  this.registrationProviderToken = new cdk.CfnOutput(this, "RegistrationProviderToken", {
153
117
  description: "Custom resource provider service token, needed by the Restate service registry component to trigger discovery",
154
118
  exportName: [props.prefix, "RegistrationProviderToken"].join("-"),
155
119
  value: registrationProvider.serviceToken,
156
120
  });
157
- this.publicIngressEndpoint = `${props.certificate ? "https" : "http"}://${ingressLoadBalancer.loadBalancerDnsName}`;
158
- this.privateIngressEndpoint = `http://${this.instance.instancePrivateDnsName}:${RESTATE_INGRESS_PORT}`;
159
- this.metaEndpoint = `http://${this.instance.instancePrivateDnsName}:${RESTATE_META_PORT}`;
160
- }
161
- /**
162
- * Creates a custom resource provider to facilitate service discovery. Note that the custom resource event handler
163
- * must be able to reach the Restate instance's meta endpoint - which is why it is deployed within the same VPC.
164
- */
165
- createRegistrationProvider() {
166
- const registrationHandler = new lambda_node.NodejsFunction(this, "RegistrationHandler", {
167
- description: "Restate custom registration handler",
168
- entry: node_path_1.default.join(__dirname, "register-service-handler/index.js"),
169
- architecture: lambda.Architecture.ARM_64,
170
- runtime: lambda.Runtime.NODEJS_LATEST,
171
- memorySize: 128,
172
- timeout: cdk.Duration.seconds(60),
173
- environment: {
174
- NODE_OPTIONS: "--enable-source-maps",
175
- },
176
- vpc: this.vpc,
177
- vpcSubnets: {
178
- subnets: this.vpc.privateSubnets,
179
- },
180
- });
181
- return new cr.Provider(this, "RegistrationProvider", {
182
- onEventHandler: registrationHandler,
183
- });
121
+ this.ingressEndpoint = `https://${restateInstance.instancePublicDnsName}${PUBLIC_INGRESS_PORT == 443 ? "" : `:${PUBLIC_INGRESS_PORT}`}`;
122
+ this.metaEndpoint = `https://${restateInstance.instancePublicDnsName}:${PUBLIC_META_PORT}`;
184
123
  }
185
124
  }
186
125
  exports.SingleNodeRestateInstance = SingleNodeRestateInstance;
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLW5vZGUtcmVzdGF0ZS1pbnN0YW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2xpYi9yZXN0YXRlLWNvbnN0cnVjdHMvc2luZ2xlLW5vZGUtcmVzdGF0ZS1pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILDJDQUF1QztBQUV2Qyx5REFBMkM7QUFDM0MseURBQTJDO0FBQzNDLCtFQUFpRTtBQUNqRSx1RkFBNkU7QUFDN0UsdUdBQWdGO0FBQ2hGLDJFQUE2RDtBQUM3RCwwREFBNkI7QUFDN0IsK0RBQWlEO0FBQ2pELGlEQUFtQztBQUNuQyxpRUFBbUQ7QUFHbkQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7QUFDbEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDL0IsTUFBTSwwQkFBMEIsR0FBRyxRQUFRLENBQUM7QUFDNUMsTUFBTSx1QkFBdUIsR0FBRyxRQUFRLENBQUM7QUFZekMsSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLG9DQUFxQixDQUFBO0lBQ3JCLG9DQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxXQUFXLDJCQUFYLFdBQVcsUUFHdEI7QUFzQkQ7OztHQUdHO0FBQ0gsTUFBYSx5QkFBMEIsU0FBUSxzQkFBUztJQVd0RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTJCO1FBQ25FLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUN6QyxNQUFNLEVBQUUsQ0FBQztTQUNWLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDcEQsU0FBUyxF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ZXN0YXRlIFNvZnR3YXJlLCBJbmMuLCBSZXN0YXRlIEdtYkhcbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUmVzdGF0ZSBTREsgZm9yIE5vZGUuanMvVHlwZVNjcmlwdCxcbiAqIHdoaWNoIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqXG4gKiBZb3UgY2FuIGZpbmQgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGluIGZpbGUgTElDRU5TRSBpbiB0aGUgcm9vdFxuICogZGlyZWN0b3J5IG9mIHRoaXMgcmVwb3NpdG9yeSBvciBwYWNrYWdlLCBvciBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Jlc3RhdGVkZXYvc2RrLXR5cGVzY3JpcHQvYmxvYi9tYWluL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBlbGJfdjIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCI7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblByb3RvY29sIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCI7XG5pbXBvcnQgeyBJbnN0YW5jZVRhcmdldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi10YXJnZXRzXCI7XG5pbXBvcnQgKiBhcyBsYW1iZGFfbm9kZSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgY3IgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCAqIGFzIGFjbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuXG5jb25zdCBSRVNUQVRFX0lOR1JFU1NfUE9SVCA9IDgwODA7XG5jb25zdCBSRVNUQVRFX01FVEFfUE9SVCA9IDkwNzA7XG5jb25zdCBSRVNUQVRFX0RPQ0tFUl9ERUZBVUxUX1RBRyA9IFwibGF0ZXN0XCI7XG5jb25zdCBBRE9UX0RPQ0tFUl9ERUZBVUxUX1RBRyA9IFwibGF0ZXN0XCI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBpbnN0YW5jZSBvZiB0aGUgUmVzdGF0ZSBzZXJ2aWNlLiBUaGlzIGNvdWxkIHJlcHJlc2VudCBhIHNlbGYtaG9zdGVkIGJyb2tlciwgb3IgUmVzdGF0ZSdzIG1hbmFnZWRcbiAqIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdGF0ZUluc3RhbmNlIHtcbiAgcmVhZG9ubHkgaW52b2tlclJvbGU6IGlhbS5Sb2xlO1xuICByZWFkb25seSBtZXRhRW5kcG9pbnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaXN0cmF0aW9uUHJvdmlkZXJUb2tlbjogY2RrLkNmbk91dHB1dDtcbn1cblxuZXhwb3J0IGVudW0gVHJhY2luZ01vZGUge1xuICBESVNBQkxFRCA9IFwiRElTQUJMRURcIixcbiAgQVdTX1hSQVkgPSBcIkFXU19YUkFZXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdGF0ZUluc3RhbmNlUHJvcHMge1xuICAvKiogTG9nIGdyb3VwIGZvciBSZXN0YXRlIHNlcnZpY2UgbG9ncy4gKi9cbiAgbG9nR3JvdXA6IGxvZ3MuTG9nR3JvdXA7XG5cbiAgLyoqIFRyYWNpbmcgbW9kZSBmb3IgUmVzdGF0ZSBzZXJ2aWNlcy4gRGlzYWJsZWQgYnkgZGVmYXVsdC4gKi9cbiAgdHJhY2luZz86IFRyYWNpbmdNb2RlO1xuXG4gIC8qKiBQcmVmaXggZm9yIHJlc291cmNlcyBjcmVhdGVkIGJ5IHRoaXMgY29uc3RydWN0IHRoYXQgcmVxdWlyZSB1bmlxdWUgbmFtZXMuICovXG4gIHByZWZpeD86IHN0cmluZztcblxuICAvKiogUmVzdGF0ZSBEb2NrZXIgaW1hZ2UgdGFnLiBEZWZhdWx0cyB0byBgbGF0ZXN0YC4gKi9cbiAgcmVzdGF0ZVRhZz86IHN0cmluZztcblxuICAvKiogQW1hem9uIERpc3RybyBmb3IgT3BlbiBUZWxlbWV0cnkgRG9ja2VyIGltYWdlIHRhZy4gRGVmYXVsdHMgdG8gYGxhdGVzdGAuICovXG4gIGFkb3RUYWc/OiBzdHJpbmc7XG5cbiAgLyoqIE9wdGlvbmFsIGNlcnRpZmljYXRlIGZvciBpbmdyZXNzIGVuZHBvaW50LiBJZiB1bnNwZWNpZmllZCwgYSBwbGFpbiBIVFRQIGxpc3RlbmVyIHdpbGwgYmUgY3JlYXRlZC4gKi9cbiAgY2VydGlmaWNhdGU/OiBhY20uSUNlcnRpZmljYXRlO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBSZXN0YXRlIHNlcnZpY2UgZGVwbG95bWVudCBiYWNrZWQgYnkgYSBzaW5nbGUgRUMyIGluc3RhbmNlLFxuICogc3VpdGFibGUgZm9yIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgY2xhc3MgU2luZ2xlTm9kZVJlc3RhdGVJbnN0YW5jZSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIFJlc3RhdGVJbnN0YW5jZSB7XG4gIHJlYWRvbmx5IGluc3RhbmNlOiBlYzIuSW5zdGFuY2U7XG4gIHJlYWRvbmx5IGludm9rZXJSb2xlOiBpYW0uUm9sZTtcbiAgcmVhZG9ubHkgdnBjOiBlYzIuVnBjO1xuXG4gIHJlYWRvbmx5IHB1YmxpY0luZ3Jlc3NFbmRwb2ludDogc3RyaW5nO1xuICByZWFkb25seSBwcml2YXRlSW5ncmVzc0VuZHBvaW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1ldGFFbmRwb2ludDogc3RyaW5nO1xuICByZWFkb25seSByZWdpc3RyYXRpb25Qcm92aWRlcjogY3IuUHJvdmlkZXI7XG4gIHJlYWRvbmx5IHJlZ2lzdHJhdGlvblByb3ZpZGVyVG9rZW46IGNkay5DZm5PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJlc3RhdGVJbnN0YW5jZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMudnBjID0gbmV3IGVjMi5WcGModGhpcywgXCJSZXN0YXRlVnBjXCIsIHtcbiAgICAgIG1heEF6czogMyxcbiAgICB9KTtcblxuICAgIHRoaXMuaW52b2tlclJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJJbnN0YW5jZVJvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJlYzIuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXCJBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlXCIpLFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBwcm9wcy5sb2dHcm91cC5ncmFudFdyaXRlKHRoaXMuaW52b2tlclJvbGUpO1xuXG4gICAgY29uc3QgcmVzdGF0ZVRhZyA9IHByb3BzLnJlc3RhdGVUYWcgPz8gUkVTVEFURV9ET0NLRVJfREVGQVVMVF9UQUc7XG4gICAgY29uc3QgYWRvdFRhZyA9IHByb3BzLmFkb3RUYWcgPz8gQURPVF9ET0NLRVJfREVGQVVMVF9UQUc7XG4gICAgY29uc3QgcmVzdGF0ZUluaXRDb21tYW5kcyA9IGVjMi5Vc2VyRGF0YS5mb3JMaW51eCgpO1xuICAgIHJlc3RhdGVJbml0Q29tbWFuZHMuYWRkQ29tbWFuZHMoXG4gICAgICBcInl1bSB1cGRhdGUgLXlcIixcbiAgICAgIFwieXVtIGluc3RhbGwgLXkgZG9ja2VyXCIsXG4gICAgICBcInN5c3RlbWN0bCBlbmFibGUgZG9ja2VyLnNlcnZpY2VcIixcbiAgICAgIFwic3lzdGVtY3RsIHN0YXJ0IGRvY2tlci5zZXJ2aWNlXCIsXG4gICAgICBbXG4gICAgICAgIFwiZG9ja2VyIHJ1biAtLW5hbWUgYWRvdCAtLXJlc3RhcnQgdW5sZXNzLXN0b3BwZWQgLS1kZXRhY2hcIixcbiAgICAgICAgXCIgLXAgNDMxNzo0MzE3IC1wIDU1NjgwOjU1NjgwIC1wIDg4ODk6ODg4OFwiLFxuICAgICAgICBgIHB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1vdGVsLWNvbGxlY3Rvcjoke2Fkb3RUYWd9YCxcbiAgICAgIF0uam9pbihcIlwiKSxcbiAgICAgIFtcbiAgICAgICAgXCJkb2NrZXIgcnVuIC0tbmFtZSByZXN0YXRlIC0tcmVzdGFydCB1bmxlc3Mtc3RvcHBlZCAtLWRldGFjaFwiLFxuICAgICAgICBcIiAtLXZvbHVtZSAvdmFyL3Jlc3RhdGU6L3RhcmdldCAtLW5ldHdvcms9aG9zdFwiLFxuICAgICAgICBcIiAtZSBSRVNUQVRFX09CU0VSVkFCSUxJVFlfX0xPR19fRk9STUFUPUpzb24gLWUgUlVTVF9MT0c9aW5mbyxyZXN0YXRlX3dvcmtlcjo6cGFydGl0aW9uPXdhcm5cIixcbiAgICAgICAgXCIgLWUgUkVTVEFURV9PQlNFUlZBQklMSVRZX19UUkFDSU5HX19FTkRQT0lOVD1odHRwOi8vbG9jYWxob3N0OjQzMTdcIixcbiAgICAgICAgYCAtLWxvZy1kcml2ZXI9YXdzbG9ncyAtLWxvZy1vcHQgYXdzbG9ncy1ncm91cD0ke3Byb3BzLmxvZ0dyb3VwLmxvZ0dyb3VwTmFtZX1gLFxuICAgICAgICBgIGRvY2tlci5pby9yZXN0YXRlZGV2L3Jlc3RhdGU6JHtyZXN0YXRlVGFnfWAsXG4gICAgICBdLmpvaW4oXCJcIiksXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3RhdGVJbnN0YW5jZSA9IG5ldyBlYzIuSW5zdGFuY2UodGhpcywgXCJIb3N0XCIsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBpbnN0YW5jZVR5cGU6IG5ldyBlYzIuSW5zdGFuY2VUeXBlKFwidDRnLm1pY3JvXCIpLFxuICAgICAgbWFjaGluZUltYWdlOiBlYzIuTWFjaGluZUltYWdlLmxhdGVzdEFtYXpvbkxpbnV4MjAyMyh7XG4gICAgICAgIGNwdVR5cGU6IGVjMi5BbWF6b25MaW51eENwdVR5cGUuQVJNXzY0LFxuICAgICAgfSksXG4gICAgICByb2xlOiB0aGlzLmludm9rZXJSb2xlLFxuICAgICAgdXNlckRhdGE6IHJlc3RhdGVJbml0Q29tbWFuZHMsXG4gICAgfSk7XG4gICAgdGhpcy5pbnN0YW5jZSA9IHJlc3RhdGVJbnN0YW5jZTtcblxuICAgIC8vIFdlIHN0YXJ0IHRoZSBBRE9UIGNvbGxlY3RvciByZWdhcmRsZXNzLCBhbmQgb25seSBjb250cm9sIHdoZXRoZXIgdGhleSB3aWxsIGJlIHB1Ymxpc2hlZCB0byBYLVJheSB2aWEgaW5zdGFuY2VcbiAgICAvLyByb2xlIHBlcm1pc3Npb25zLiBUaGlzIHdheSBoaXN0b3JpYyB0cmFjZXMgd2lsbCBiZSBidWZmZXJlZCBvbiB0aGUgaG9zdCwgZXZlbiBpZiB0cmFjaW5nIGlzIGRpc2FibGVkIGluaXRpYWxseS5cbiAgICBpZiAocHJvcHMudHJhY2luZyA9PT0gVHJhY2luZ01vZGUuQVdTX1hSQVkpIHtcbiAgICAgIHJlc3RhdGVJbnN0YW5jZS5yb2xlLmFkZE1hbmFnZWRQb2xpY3koaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFwiQVdTWHJheVdyaXRlT25seUFjY2Vzc1wiKSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdGF0ZUluc3RhbmNlU2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCBcIlJlc3RhdGVTZWN1cml0eUdyb3VwXCIsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBzZWN1cml0eUdyb3VwTmFtZTogXCJSZXN0YXRlU2VjdXJpdHlHcm91cFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQWxsb3cgaW5ib3VuZCB0cmFmZmljIHRvIFJlc3RhdGVcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IGluZ3Jlc3NMb2FkQmFsYW5jZXIgPSBuZXcgZWxiX3YyLkFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyKHRoaXMsIFwiUmVzdGF0ZUFsYlwiLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgaW50ZXJuZXRGYWNpbmc6IHRydWUsXG4gICAgfSk7XG4gICAgY29uc3QgdGFyZ2V0R3JvdXAgPSBuZXcgZWxiX3YyLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAodGhpcywgXCJUYXJnZXRHcm91cFwiLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgcHJvdG9jb2w6IGVsYl92Mi5BcHBsaWNhdGlvblByb3RvY29sLkhUVFAsXG4gICAgICBwb3J0OiBSRVNUQVRFX0lOR1JFU1NfUE9SVCxcbiAgICAgIHRhcmdldHM6IFtuZXcgSW5zdGFuY2VUYXJnZXQocmVzdGF0ZUluc3RhbmNlKV0sXG4gICAgICBoZWFsdGhDaGVjazoge1xuICAgICAgICBwcm90b2NvbDogZWxiX3YyLlByb3RvY29sLkhUVFAsXG4gICAgICAgIHBhdGg6IFwiL2dycGMuaGVhbHRoLnYxLkhlYWx0aC9DaGVja1wiLFxuICAgICAgICBpbnRlcnZhbDogY2RrLkR1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBpbmdyZXNzTG9hZEJhbGFuY2VyLmFkZExpc3RlbmVyKFwiTGlzdGVuZXJcIiwge1xuICAgICAgcG9ydDogcHJvcHMuY2VydGlmaWNhdGUgPyA0NDMgOiA4MCxcbiAgICAgIHByb3RvY29sOiBwcm9wcy5jZXJ0aWZpY2F0ZSA/IEFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUFMgOiBBcHBsaWNhdGlvblByb3RvY29sLkhUVFAsXG4gICAgICBkZWZhdWx0VGFyZ2V0R3JvdXBzOiBbdGFyZ2V0R3JvdXBdLFxuICAgICAgY2VydGlmaWNhdGVzOiBwcm9wcy5jZXJ0aWZpY2F0ZSA/IFtlbGJfdjIuTGlzdGVuZXJDZXJ0aWZpY2F0ZS5mcm9tQ2VydGlmaWNhdGVNYW5hZ2VyKHByb3BzLmNlcnRpZmljYXRlKV0gOiBbXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFsYlNlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgXCJBbGJTZWN1cml0eUdyb3VwXCIsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTEIgc2VjdXJpdHkgZ3JvdXBcIixcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IGZhbHNlLFxuICAgIH0pO1xuICAgIGFsYlNlY3VyaXR5R3JvdXAuYWRkRWdyZXNzUnVsZShlYzIuUGVlci5hbnlJcHY0KCksIGVjMi5Qb3J0LnRjcChSRVNUQVRFX0lOR1JFU1NfUE9SVCksIFwiQWxsb3cgb3V0Ym91bmQgSFRUUCB0cmFmZmljIHRvIFJlc3RhdGUgaW5ncmVzc1wiKTtcbiAgICBpbmdyZXNzTG9hZEJhbGFuY2VyLmFkZFNlY3VyaXR5R3JvdXAoYWxiU2VjdXJpdHlHcm91cCk7XG5cbiAgICByZXN0YXRlSW5zdGFuY2VTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKGFsYlNlY3VyaXR5R3JvdXAsIGVjMi5Qb3J0LnRjcChSRVNUQVRFX0lOR1JFU1NfUE9SVCksIFwiQWxsb3cgdHJhZmZpYyBmcm9tIEFMQiB0byBSZXN0YXRlIGluZ3Jlc3NcIik7XG5cbiAgICAvLyBUaGVzZSBydWxlcyBhbGxvdyB0aGUgc2VydmljZSByZWdpc3RyYXRpb24gY29tcG9uZW50IHRvIHRyaWdnZXIgc2VydmljZSBkaXNjb3ZlcnkgYXMgbmVlZGVkOyB0aGUgcmVxdWVzdHNcbiAgICAvLyBvcmlnaW5hdGUgZnJvbSBhIFZQQy1ib3VuZCBMYW1iZGEgZnVuY3Rpb24gdGhhdCBiYWNrcyB0aGUgY3VzdG9tIHJlc291cmNlLlxuICAgIHRoaXMudnBjLnByaXZhdGVTdWJuZXRzLmZvckVhY2goKHN1Ym5ldCkgPT4ge1xuICAgICAgcmVzdGF0ZUluc3RhbmNlU2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShlYzIuUGVlci5pcHY0KHN1Ym5ldC5pcHY0Q2lkckJsb2NrKSwgZWMyLlBvcnQudGNwKFJFU1RBVEVfTUVUQV9QT1JUKSwgXCJBbGxvdyB0cmFmZmljIGZyb20gdGhlIFZQQyB0byBSZXN0YXRlIG1ldGFcIik7XG4gICAgfSk7XG4gICAgdGhpcy52cGMucHJpdmF0ZVN1Ym5ldHMuZm9yRWFjaCgoc3VibmV0KSA9PiB7XG4gICAgICByZXN0YXRlSW5zdGFuY2VTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKGVjMi5QZWVyLmlwdjQoc3VibmV0LmlwdjRDaWRyQmxvY2spLCBlYzIuUG9ydC50Y3AoUkVTVEFURV9JTkdSRVNTX1BPUlQpLCBcIkFsbG93IHRyYWZmaWMgZnJvbSB0aGUgVlBDIHRvIFJlc3RhdGUgaW5ncmVzc1wiKTtcbiAgICB9KTtcbiAgICByZXN0YXRlSW5zdGFuY2UuYWRkU2VjdXJpdHlHcm91cChyZXN0YXRlSW5zdGFuY2VTZWN1cml0eUdyb3VwKTtcblxuICAgIGNvbnN0IHJlZ2lzdHJhdGlvblByb3ZpZGVyID0gdGhpcy5jcmVhdGVSZWdpc3RyYXRpb25Qcm92aWRlcigpO1xuICAgIHRoaXMucmVnaXN0cmF0aW9uUHJvdmlkZXIgPSByZWdpc3RyYXRpb25Qcm92aWRlcjtcbiAgICB0aGlzLnJlZ2lzdHJhdGlvblByb3ZpZGVyVG9rZW4gPSBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIlJlZ2lzdHJhdGlvblByb3ZpZGVyVG9rZW5cIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiQ3VzdG9tIHJlc291cmNlIHByb3ZpZGVyIHNlcnZpY2UgdG9rZW4sIG5lZWRlZCBieSB0aGUgUmVzdGF0ZSBzZXJ2aWNlIHJlZ2lzdHJ5IGNvbXBvbmVudCB0byB0cmlnZ2VyIGRpc2NvdmVyeVwiLFxuICAgICAgZXhwb3J0TmFtZTogW3Byb3BzLnByZWZpeCwgXCJSZWdpc3RyYXRpb25Qcm92aWRlclRva2VuXCJdLmpvaW4oXCItXCIpLFxuICAgICAgdmFsdWU6IHJlZ2lzdHJhdGlvblByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICB9KTtcblxuICAgIHRoaXMucHVibGljSW5ncmVzc0VuZHBvaW50ID0gYCR7cHJvcHMuY2VydGlmaWNhdGUgPyBcImh0dHBzXCIgOiBcImh0dHBcIn06Ly8ke2luZ3Jlc3NMb2FkQmFsYW5jZXIubG9hZEJhbGFuY2VyRG5zTmFtZX1gO1xuICAgIHRoaXMucHJpdmF0ZUluZ3Jlc3NFbmRwb2ludCA9IGBodHRwOi8vJHt0aGlzLmluc3RhbmNlLmluc3RhbmNlUHJpdmF0ZURuc05hbWV9OiR7UkVTVEFURV9JTkdSRVNTX1BPUlR9YDtcbiAgICB0aGlzLm1ldGFFbmRwb2ludCA9IGBodHRwOi8vJHt0aGlzLmluc3RhbmNlLmluc3RhbmNlUHJpdmF0ZURuc05hbWV9OiR7UkVTVEFURV9NRVRBX1BPUlR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY3VzdG9tIHJlc291cmNlIHByb3ZpZGVyIHRvIGZhY2lsaXRhdGUgc2VydmljZSBkaXNjb3ZlcnkuIE5vdGUgdGhhdCB0aGUgY3VzdG9tIHJlc291cmNlIGV2ZW50IGhhbmRsZXJcbiAgICogbXVzdCBiZSBhYmxlIHRvIHJlYWNoIHRoZSBSZXN0YXRlIGluc3RhbmNlJ3MgbWV0YSBlbmRwb2ludCAtIHdoaWNoIGlzIHdoeSBpdCBpcyBkZXBsb3llZCB3aXRoaW4gdGhlIHNhbWUgVlBDLlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVSZWdpc3RyYXRpb25Qcm92aWRlcigpIHtcbiAgICBjb25zdCByZWdpc3RyYXRpb25IYW5kbGVyID0gbmV3IGxhbWJkYV9ub2RlLk5vZGVqc0Z1bmN0aW9uKHRoaXMsIFwiUmVnaXN0cmF0aW9uSGFuZGxlclwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJSZXN0YXRlIGN1c3RvbSByZWdpc3RyYXRpb24gaGFuZGxlclwiLFxuICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsIFwicmVnaXN0ZXItc2VydmljZS1oYW5kbGVyL2luZGV4LmpzXCIpLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU19MQVRFU1QsXG4gICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBOT0RFX09QVElPTlM6IFwiLS1lbmFibGUtc291cmNlLW1hcHNcIixcbiAgICAgIH0sXG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICBzdWJuZXRzOiB0aGlzLnZwYy5wcml2YXRlU3VibmV0cyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IGNyLlByb3ZpZGVyKHRoaXMsIFwiUmVnaXN0cmF0aW9uUHJvdmlkZXJcIiwge1xuICAgICAgb25FdmVudEhhbmRsZXI6IHJlZ2lzdHJhdGlvbkhhbmRsZXIsXG4gICAgfSk7XG4gIH1cbn0iXX0=
126
+ const NGINX_REVERSE_PROXY_CONFIG = [
127
+ "server {",
128
+ " listen 443 ssl http2;",
129
+ " listen [::]:443 ssl http2;",
130
+ " server_name _;",
131
+ " root /usr/share/nginx/html;",
132
+ "",
133
+ ' ssl_certificate "/etc/pki/private/restate-selfsigned.crt";',
134
+ ' ssl_certificate_key "/etc/pki/private/restate-selfsigned.key";',
135
+ " ssl_session_cache shared:SSL:1m;",
136
+ " ssl_session_timeout 10m;",
137
+ " ssl_ciphers PROFILE=SYSTEM;",
138
+ " ssl_prefer_server_ciphers on;",
139
+ "",
140
+ " location / {",
141
+ ` proxy_pass http://localhost:${RESTATE_INGRESS_PORT};`,
142
+ " }",
143
+ "}",
144
+ "",
145
+ "server {",
146
+ " listen 9073 ssl http2;",
147
+ " listen [::]:9073 ssl http2;",
148
+ " server_name _;",
149
+ " root /usr/share/nginx/html;",
150
+ "",
151
+ ' ssl_certificate "/etc/pki/private/restate-selfsigned.crt";',
152
+ ' ssl_certificate_key "/etc/pki/private/restate-selfsigned.key";',
153
+ " ssl_session_cache shared:SSL:1m;",
154
+ " ssl_session_timeout 10m;",
155
+ " ssl_ciphers PROFILE=SYSTEM;",
156
+ " ssl_prefer_server_ciphers on;",
157
+ "",
158
+ " location / {",
159
+ ` proxy_pass http://localhost:${RESTATE_META_PORT};`,
160
+ " }",
161
+ "}",
162
+ ].join("\n");
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLW5vZGUtcmVzdGF0ZS1pbnN0YW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2xpYi9yZXN0YXRlLWNvbnN0cnVjdHMvc2luZ2xlLW5vZGUtcmVzdGF0ZS1pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILDJDQUF1QztBQUV2Qyx5REFBMkM7QUFDM0MseURBQTJDO0FBQzNDLGlEQUFtQztBQUVuQyxtRUFBK0Q7QUFFL0QsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDOUIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7QUFDbEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDL0IsTUFBTSwwQkFBMEIsR0FBRyxRQUFRLENBQUM7QUFDNUMsTUFBTSx1QkFBdUIsR0FBRyxRQUFRLENBQUM7QUFFekMsSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLG9DQUFxQixDQUFBO0lBQ3JCLG9DQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxXQUFXLDJCQUFYLFdBQVcsUUFHdEI7QUFtQkQ7Ozs7O0dBS0c7QUFDSCxNQUFhLHlCQUEwQixTQUFRLHNCQUFTO0lBU3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMkI7UUFDbkUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQ2xDLE1BQU0sRUFBRSxDQUFDO1lBQ1QscUJBQXFCLEVBQUUsSUFBSTtZQUMzQixXQUFXLEVBQUUsQ0FBQztTQUNmLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElB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SztJQUNMLEdBQUc7SUFDSCxFQUFFO0lBQ0YsVUFBVTtJQUNWLDBCQUEwQjtJQUMxQiwrQkFBK0I7SUFDL0Isa0JBQWtCO0lBQ2xCLCtCQUErQjtJQUMvQixFQUFFO0lBQ0YsOERBQThEO0lBQzlELGtFQUFrRTtJQUNsRSxvQ0FBb0M7SUFDcEMsNEJBQTRCO0lBQzVCLCtCQUErQjtJQUMvQixpQ0FBaUM7SUFDakMsRUFBRTtJQUNGLGdCQUFnQjtJQUNoQixtQ0FBbUMsaUJBQWlCLEdBQUc7SUFDdkQsS0FBSztJQUNMLEdBQUc7Q0FDSixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMgLSBSZXN0YXRlIFNvZnR3YXJlLCBJbmMuLCBSZXN0YXRlIEdtYkhcbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUmVzdGF0ZSBTREsgZm9yIE5vZGUuanMvVHlwZVNjcmlwdCxcbiAqIHdoaWNoIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqXG4gKiBZb3UgY2FuIGZpbmQgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGluIGZpbGUgTElDRU5TRSBpbiB0aGUgcm9vdFxuICogZGlyZWN0b3J5IG9mIHRoaXMgcmVwb3NpdG9yeSBvciBwYWNrYWdlLCBvciBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Jlc3RhdGVkZXYvc2RrLXR5cGVzY3JpcHQvYmxvYi9tYWluL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBSZXN0YXRlSW5zdGFuY2UgfSBmcm9tIFwiLi9yZXN0YXRlLWluc3RhbmNlXCI7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25Qcm92aWRlciB9IGZyb20gXCIuL3JlZ2lzdHJhdGlvbi1wcm92aWRlclwiO1xuXG5jb25zdCBQVUJMSUNfSU5HUkVTU19QT1JUID0gNDQzO1xuY29uc3QgUFVCTElDX01FVEFfUE9SVCA9IDkwNzM7XG5jb25zdCBSRVNUQVRFX0lOR1JFU1NfUE9SVCA9IDgwODA7XG5jb25zdCBSRVNUQVRFX01FVEFfUE9SVCA9IDkwNzA7XG5jb25zdCBSRVNUQVRFX0RPQ0tFUl9ERUZBVUxUX1RBRyA9IFwibGF0ZXN0XCI7XG5jb25zdCBBRE9UX0RPQ0tFUl9ERUZBVUxUX1RBRyA9IFwibGF0ZXN0XCI7XG5cbmV4cG9ydCBlbnVtIFRyYWNpbmdNb2RlIHtcbiAgRElTQUJMRUQgPSBcIkRJU0FCTEVEXCIsXG4gIEFXU19YUkFZID0gXCJBV1NfWFJBWVwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RhdGVJbnN0YW5jZVByb3BzIHtcbiAgLyoqIExvZyBncm91cCBmb3IgUmVzdGF0ZSBzZXJ2aWNlIGxvZ3MuICovXG4gIGxvZ0dyb3VwOiBsb2dzLkxvZ0dyb3VwO1xuXG4gIC8qKiBUcmFjaW5nIG1vZGUgZm9yIFJlc3RhdGUgc2VydmljZXMuIERlZmF1bHRzIHRvIHtAbGluayBUcmFjaW5nTW9kZS5ESVNBQkxFRH0uICovXG4gIHRyYWNpbmc/OiBUcmFjaW5nTW9kZTtcblxuICAvKiogUHJlZml4IGZvciByZXNvdXJjZXMgY3JlYXRlZCBieSB0aGlzIGNvbnN0cnVjdCB0aGF0IHJlcXVpcmUgdW5pcXVlIG5hbWVzLiAqL1xuICBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqIFJlc3RhdGUgRG9ja2VyIGltYWdlIHRhZy4gRGVmYXVsdHMgdG8gYGxhdGVzdGAuICovXG4gIHJlc3RhdGVUYWc/OiBzdHJpbmc7XG5cbiAgLyoqIEFtYXpvbiBEaXN0cm8gZm9yIE9wZW4gVGVsZW1ldHJ5IERvY2tlciBpbWFnZSB0YWcuIERlZmF1bHRzIHRvIGBsYXRlc3RgLiAqL1xuICBhZG90VGFnPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBSZXN0YXRlIHNlcnZpY2UgZGVwbG95bWVudCBiYWNrZWQgYnkgYSBzaW5nbGUgRUMyIGluc3RhbmNlLFxuICogc3VpdGFibGUgZm9yIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHB1cnBvc2VzLiBUaGUgaW5zdGFuY2Ugd2lsbCBiZSBjcmVhdGVkXG4gKiBpbiBhIGRlZGljYXRlZCBWUEMgKHVubGVzcyBvbmUgaXMgcHJvdmlkZWQpLiBFQzIgaW5zdGFuY2Ugd2lsbCBiZSBhbGxvY2F0ZWRcbiAqIGEgcHVibGljIElQIGFkZHJlc3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaW5nbGVOb2RlUmVzdGF0ZUluc3RhbmNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgUmVzdGF0ZUluc3RhbmNlIHtcbiAgcmVhZG9ubHkgaW5zdGFuY2U6IGVjMi5JbnN0YW5jZTtcbiAgcmVhZG9ubHkgaW52b2tlclJvbGU6IGlhbS5JUm9sZTtcbiAgcmVhZG9ubHkgdnBjOiBlYzIuVnBjO1xuXG4gIHJlYWRvbmx5IGluZ3Jlc3NFbmRwb2ludDogc3RyaW5nO1xuICByZWFkb25seSBtZXRhRW5kcG9pbnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaXN0cmF0aW9uUHJvdmlkZXJUb2tlbjogY2RrLkNmbk91dHB1dDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmVzdGF0ZUluc3RhbmNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy52cGMgPSBuZXcgZWMyLlZwYyh0aGlzLCBcIlZwY1wiLCB7XG4gICAgICBtYXhBenM6IDMsXG4gICAgICBjcmVhdGVJbnRlcm5ldEdhdGV3YXk6IHRydWUsXG4gICAgICBuYXRHYXRld2F5czogMCxcbiAgICB9KTtcblxuICAgIHRoaXMuaW52b2tlclJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJJbnN0YW5jZVJvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJlYzIuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcIkFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmVcIildLFxuICAgIH0pO1xuICAgIHByb3BzLmxvZ0dyb3VwLmdyYW50V3JpdGUodGhpcy5pbnZva2VyUm9sZSk7XG5cbiAgICBjb25zdCByZXN0YXRlVGFnID0gcHJvcHMucmVzdGF0ZVRhZyA/PyBSRVNUQVRFX0RPQ0tFUl9ERUZBVUxUX1RBRztcbiAgICBjb25zdCBhZG90VGFnID0gcHJvcHMuYWRvdFRhZyA/PyBBRE9UX0RPQ0tFUl9ERUZBVUxUX1RBRztcbiAgICBjb25zdCByZXN0YXRlSW5pdENvbW1hbmRzID0gZWMyLlVzZXJEYXRhLmZvckxpbnV4KCk7XG4gICAgcmVzdGF0ZUluaXRDb21tYW5kcy5hZGRDb21tYW5kcyhcbiAgICAgIFwieXVtIHVwZGF0ZSAteVwiLFxuICAgICAgXCJ5dW0gaW5zdGFsbCAteSBkb2NrZXIgbmdpbnhcIixcblxuICAgICAgXCJzeXN0ZW1jdGwgZW5hYmxlIGRvY2tlci5zZXJ2aWNlXCIsXG4gICAgICBcInN5c3RlbWN0bCBzdGFydCBkb2NrZXIuc2VydmljZVwiLFxuICAgICAgW1xuICAgICAgICBcImRvY2tlciBydW4gLS1uYW1lIGFkb3QgLS1yZXN0YXJ0IHVubGVzcy1zdG9wcGVkIC0tZGV0YWNoXCIsXG4gICAgICAgIFwiIC1wIDQzMTc6NDMxNyAtcCA1NTY4MDo1NTY4MCAtcCA4ODg5Ojg4ODhcIixcbiAgICAgICAgYCBwdWJsaWMuZWNyLmF3cy9hd3Mtb2JzZXJ2YWJpbGl0eS9hd3Mtb3RlbC1jb2xsZWN0b3I6JHthZG90VGFnfWAsXG4gICAgICBdLmpvaW4oXCJcIiksXG4gICAgICBbXG4gICAgICAgIFwiZG9ja2VyIHJ1biAtLW5hbWUgcmVzdGF0ZSAtLXJlc3RhcnQgdW5sZXNzLXN0b3BwZWQgLS1kZXRhY2hcIixcbiAgICAgICAgXCIgLS12b2x1bWUgL3Zhci9yZXN0YXRlOi90YXJnZXQgLS1uZXR3b3JrPWhvc3RcIixcbiAgICAgICAgXCIgLWUgUkVTVEFURV9PQlNFUlZBQklMSVRZX19MT0dfX0ZPUk1BVD1Kc29uIC1lIFJVU1RfTE9HPWluZm8scmVzdGF0ZV93b3JrZXI6OnBhcnRpdGlvbj13YXJuXCIsXG4gICAgICAgIFwiIC1lIFJFU1RBVEVfT0JTRVJWQUJJTElUWV9fVFJBQ0lOR19fRU5EUE9JTlQ9aHR0cDovL2xvY2FsaG9zdDo0MzE3XCIsXG4gICAgICAgIGAgLS1sb2ctZHJpdmVyPWF3c2xvZ3MgLS1sb2ctb3B0IGF3c2xvZ3MtZ3JvdXA9JHtwcm9wcy5sb2dHcm91cC5sb2dHcm91cE5hbWV9YCxcbiAgICAgICAgYCBkb2NrZXIuaW8vcmVzdGF0ZWRldi9yZXN0YXRlOiR7cmVzdGF0ZVRhZ31gLFxuICAgICAgXS5qb2luKFwiXCIpLFxuXG4gICAgICBcIm1rZGlyIC1wIC9ldGMvcGtpL3ByaXZhdGVcIixcbiAgICAgIFtcbiAgICAgICAgXCJvcGVuc3NsIHJlcSAtbmV3IC14NTA5IC1ub2RlcyAtc2hhMjU2IC1kYXlzIDM2NSAtZXh0ZW5zaW9ucyB2M19jYVwiLFxuICAgICAgICBcIiAtc3ViaiAnL0M9REUvU1Q9QmVybGluL0w9QmVybGluL089cmVzdGF0ZS5kZXYvT1U9ZGVtby9DTj1yZXN0YXRlLmV4YW1wbGUuY29tJ1wiLFxuICAgICAgICBcIiAtbmV3a2V5IHJzYToyMDQ4IC1rZXlvdXQgL2V0Yy9wa2kvcHJpdmF0ZS9yZXN0YXRlLXNlbGZzaWduZWQua2V5IC1vdXQgL2V0Yy9wa2kvcHJpdmF0ZS9yZXN0YXRlLXNlbGZzaWduZWQuY3J0XCIsXG4gICAgICBdLmpvaW4oXCJcIiksXG4gICAgICBbXCJjYXQgPDwgRU9GID4gL2V0Yy9uZ2lueC9jb25mLmQvcmVzdGF0ZS1pbmdyZXNzLmNvbmZcIiwgTkdJTlhfUkVWRVJTRV9QUk9YWV9DT05GSUcsIFwiRU9GXCJdLmpvaW4oXCJcXG5cIiksXG4gICAgICBcInN5c3RlbWN0bCBlbmFibGUgbmdpbnhcIixcbiAgICAgIFwic3lzdGVtY3RsIHN0YXJ0IG5naW54XCIsXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3RhdGVJbnN0YW5jZSA9IG5ldyBlYzIuSW5zdGFuY2UodGhpcywgXCJIb3N0XCIsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICB2cGNTdWJuZXRzOiB7IHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBVQkxJQyB9LFxuICAgICAgaW5zdGFuY2VUeXBlOiBuZXcgZWMyLkluc3RhbmNlVHlwZShcInQ0Zy5taWNyb1wiKSxcbiAgICAgIG1hY2hpbmVJbWFnZTogZWMyLk1hY2hpbmVJbWFnZS5sYXRlc3RBbWF6b25MaW51eDIwMjMoe1xuICAgICAgICBjcHVUeXBlOiBlYzIuQW1hem9uTGludXhDcHVUeXBlLkFSTV82NCxcbiAgICAgIH0pLFxuICAgICAgcm9sZTogdGhpcy5pbnZva2VyUm9sZSxcbiAgICAgIHVzZXJEYXRhOiByZXN0YXRlSW5pdENvbW1hbmRzLFxuICAgIH0pO1xuICAgIHRoaXMuaW5zdGFuY2UgPSByZXN0YXRlSW5zdGFuY2U7XG5cbiAgICAvLyBXZSBzdGFydCB0aGUgQURPVCBjb2xsZWN0b3IgcmVnYXJkbGVzcywgYW5kIG9ubHkgY29udHJvbCB3aGV0aGVyIHRoZXkgd2lsbCBiZSBwdWJsaXNoZWQgdG8gWC1SYXkgdmlhIGluc3RhbmNlXG4gICAgLy8gcm9sZSBwZXJtaXNzaW9ucy4gVGhpcyB3YXkgaGlzdG9yaWMgdHJhY2VzIHdpbGwgYmUgYnVmZmVyZWQgb24gdGhlIGhvc3QsIGV2ZW4gaWYgdHJhY2luZyBpcyBkaXNhYmxlZCBpbml0aWFsbHkuXG4gICAgaWYgKHByb3BzLnRyYWNpbmcgPT09IFRyYWNpbmdNb2RlLkFXU19YUkFZKSB7XG4gICAgICByZXN0YXRlSW5zdGFuY2Uucm9sZS5hZGRNYW5hZ2VkUG9saWN5KGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcIkFXU1hyYXlXcml0ZU9ubHlBY2Nlc3NcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3RhdGVJbnN0YW5jZVNlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgXCJSZXN0YXRlU2VjdXJpdHlHcm91cFwiLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgc2VjdXJpdHlHcm91cE5hbWU6IFwiUmVzdGF0ZVNlY3VyaXR5R3JvdXBcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlJlc3RhdGUgc2VydmljZSBBQ0xzXCIsXG4gICAgfSk7XG4gICAgcmVzdGF0ZUluc3RhbmNlLmFkZFNlY3VyaXR5R3JvdXAocmVzdGF0ZUluc3RhbmNlU2VjdXJpdHlHcm91cCk7XG5cbiAgICByZXN0YXRlSW5zdGFuY2VTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgZWMyLlBlZXIuYW55SXB2NCgpLFxuICAgICAgZWMyLlBvcnQudGNwKDQ0MyksXG4gICAgICBcIkFsbG93IHRyYWZmaWMgZnJvbSBhbnl3aGVyZSB0byBSZXN0YXRlIGluZ3Jlc3NcIixcbiAgICApO1xuICAgIHJlc3RhdGVJbnN0YW5jZVNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICBlYzIuUGVlci5hbnlJcHY0KCksXG4gICAgICBlYzIuUG9ydC50Y3AoOTA3MyksXG4gICAgICBcIkFsbG93IHRyYWZmaWMgZnJvbSBhbnl3aGVyZSB0byBSZXN0YXRlIG1ldGFcIixcbiAgICApO1xuXG4gICAgY29uc3QgcmVnaXN0cmF0aW9uUHJvdmlkZXIgPSBuZXcgUmVnaXN0cmF0aW9uUHJvdmlkZXIodGhpcywgXCJSZWdpc3RyYXRpb25Qcm92aWRlclwiLCB7fSk7XG4gICAgdGhpcy5yZWdpc3RyYXRpb25Qcm92aWRlclRva2VuID0gbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJSZWdpc3RyYXRpb25Qcm92aWRlclRva2VuXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkN1c3RvbSByZXNvdXJjZSBwcm92aWRlciBzZXJ2aWNlIHRva2VuLCBuZWVkZWQgYnkgdGhlIFJlc3RhdGUgc2VydmljZSByZWdpc3RyeSBjb21wb25lbnQgdG8gdHJpZ2dlciBkaXNjb3ZlcnlcIixcbiAgICAgIGV4cG9ydE5hbWU6IFtwcm9wcy5wcmVmaXgsIFwiUmVnaXN0cmF0aW9uUHJvdmlkZXJUb2tlblwiXS5qb2luKFwiLVwiKSxcbiAgICAgIHZhbHVlOiByZWdpc3RyYXRpb25Qcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgfSk7XG5cbiAgICB0aGlzLmluZ3Jlc3NFbmRwb2ludCA9IGBodHRwczovLyR7cmVzdGF0ZUluc3RhbmNlLmluc3RhbmNlUHVibGljRG5zTmFtZX0ke1xuICAgICAgUFVCTElDX0lOR1JFU1NfUE9SVCA9PSA0NDMgPyBcIlwiIDogYDoke1BVQkxJQ19JTkdSRVNTX1BPUlR9YFxuICAgIH1gO1xuICAgIHRoaXMubWV0YUVuZHBvaW50ID0gYGh0dHBzOi8vJHtyZXN0YXRlSW5zdGFuY2UuaW5zdGFuY2VQdWJsaWNEbnNOYW1lfToke1BVQkxJQ19NRVRBX1BPUlR9YDtcbiAgfVxufVxuXG5jb25zdCBOR0lOWF9SRVZFUlNFX1BST1hZX0NPTkZJRyA9IFtcbiAgXCJzZXJ2ZXIge1wiLFxuICBcIiAgbGlzdGVuIDQ0MyBzc2wgaHR0cDI7XCIsXG4gIFwiICBsaXN0ZW4gWzo6XTo0NDMgc3NsIGh0dHAyO1wiLFxuICBcIiAgc2VydmVyX25hbWUgXztcIixcbiAgXCIgIHJvb3QgL3Vzci9zaGFyZS9uZ2lueC9odG1sO1wiLFxuICBcIlwiLFxuICAnICBzc2xfY2VydGlmaWNhdGUgXCIvZXRjL3BraS9wcml2YXRlL3Jlc3RhdGUtc2VsZnNpZ25lZC5jcnRcIjsnLFxuICAnICBzc2xfY2VydGlmaWNhdGVfa2V5IFwiL2V0Yy9wa2kvcHJpdmF0ZS9yZXN0YXRlLXNlbGZzaWduZWQua2V5XCI7JyxcbiAgXCIgIHNzbF9zZXNzaW9uX2NhY2hlIHNoYXJlZDpTU0w6MW07XCIsXG4gIFwiICBzc2xfc2Vzc2lvbl90aW1lb3V0IDEwbTtcIixcbiAgXCIgIHNzbF9jaXBoZXJzIFBST0ZJTEU9U1lTVEVNO1wiLFxuICBcIiAgc3NsX3ByZWZlcl9zZXJ2ZXJfY2lwaGVycyBvbjtcIixcbiAgXCJcIixcbiAgXCIgIGxvY2F0aW9uIC8ge1wiLFxuICBgICAgIHByb3h5X3Bhc3MgaHR0cDovL2xvY2FsaG9zdDoke1JFU1RBVEVfSU5HUkVTU19QT1JUfTtgLFxuICBcIiAgfVwiLFxuICBcIn1cIixcbiAgXCJcIixcbiAgXCJzZXJ2ZXIge1wiLFxuICBcIiAgbGlzdGVuIDkwNzMgc3NsIGh0dHAyO1wiLFxuICBcIiAgbGlzdGVuIFs6Ol06OTA3MyBzc2wgaHR0cDI7XCIsXG4gIFwiICBzZXJ2ZXJfbmFtZSBfO1wiLFxuICBcIiAgcm9vdCAvdXNyL3NoYXJlL25naW54L2h0bWw7XCIsXG4gIFwiXCIsXG4gICcgIHNzbF9jZXJ0aWZpY2F0ZSBcIi9ldGMvcGtpL3ByaXZhdGUvcmVzdGF0ZS1zZWxmc2lnbmVkLmNydFwiOycsXG4gICcgIHNzbF9jZXJ0aWZpY2F0ZV9rZXkgXCIvZXRjL3BraS9wcml2YXRlL3Jlc3RhdGUtc2VsZnNpZ25lZC5rZXlcIjsnLFxuICBcIiAgc3NsX3Nlc3Npb25fY2FjaGUgc2hhcmVkOlNTTDoxbTtcIixcbiAgXCIgIHNzbF9zZXNzaW9uX3RpbWVvdXQgMTBtO1wiLFxuICBcIiAgc3NsX2NpcGhlcnMgUFJPRklMRT1TWVNURU07XCIsXG4gIFwiICBzc2xfcHJlZmVyX3NlcnZlcl9jaXBoZXJzIG9uO1wiLFxuICBcIlwiLFxuICBcIiAgbG9jYXRpb24gLyB7XCIsXG4gIGAgICAgcHJveHlfcGFzcyBodHRwOi8vbG9jYWxob3N0OiR7UkVTVEFURV9NRVRBX1BPUlR9O2AsXG4gIFwiICB9XCIsXG4gIFwifVwiLFxuXS5qb2luKFwiXFxuXCIpO1xuIl19
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@restatedev/restate-cdk",
3
3
  "description": "Restate.dev CDK constructs",
4
- "version": "0.3.0",
4
+ "version": "0.4.0",
5
5
  "author": "Restate Developers",
6
6
  "license": "MIT",
7
7
  "email": "code@restate.dev",
@@ -30,11 +30,13 @@
30
30
  "aws-cdk": "2.108.0",
31
31
  "esbuild": "^0.19.6",
32
32
  "jest": "^29.7.0",
33
+ "prettier": "^3.1.0",
33
34
  "ts-jest": "^29.1.1",
34
35
  "ts-node": "^10.9.1",
35
36
  "typescript": "~5.2.2"
36
37
  },
37
38
  "dependencies": {
39
+ "@aws-sdk/client-secrets-manager": "^3.462.0",
38
40
  "aws-cdk-lib": "2.108.0",
39
41
  "constructs": "^10.0.0",
40
42
  "node-fetch": "^3.3.2",