@anyakichi/cdk-rsync-backup 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,13 +6,13 @@ jobs:
6
6
  build:
7
7
  runs-on: ubuntu-latest
8
8
  steps:
9
- - uses: actions/checkout@v3
10
- - uses: actions/setup-node@v3
9
+ - uses: actions/checkout@v5
10
+ - uses: actions/setup-node@v6
11
11
  with:
12
- node-version: "16.x"
12
+ node-version: "24.x"
13
13
  registry-url: "https://registry.npmjs.org"
14
14
  - run: npm install
15
15
  - run: npm run build
16
- - run: npm publish --access public
16
+ - run: npm publish
17
17
  env:
18
18
  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -18,7 +18,7 @@ main() {
18
18
  local name="backup-$1"
19
19
  local mnt="/srv/rsync-backup/mnt/$host"
20
20
  local logfile="/srv/rsync-backup/rsync-backup.$host.log"
21
- local args logfile_gz s3base snapshot_id timestamp volume_id
21
+ local args dev logfile_gz s3base snapshot_id timestamp volume_id
22
22
  local -a snapshot_ids
23
23
 
24
24
  timestamp="$(date -u "+%Y%m%dT%H%MZ")"
@@ -60,8 +60,14 @@ main() {
60
60
  aws ec2 attach-volume --volume-id "$volume_id" \
61
61
  --instance-id "$INSTANCE_ID" --device "$device" &>/dev/null
62
62
 
63
+ if [[ -e /dev/disk/by-id ]]; then
64
+ dev="/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_${volume_id/-/}_1"
65
+ else
66
+ dev="${device/sd/xvd}"
67
+ fi
68
+
63
69
  while true; do
64
- if [[ -e $device ]]; then
70
+ if [[ -e $dev ]]; then
65
71
  break
66
72
  fi
67
73
  sleep 1
@@ -69,18 +75,18 @@ main() {
69
75
 
70
76
  mkdir -p "$mnt"
71
77
  if [[ $snapshot_id == None ]]; then
72
- mkfs.ext4 -q "$device"
78
+ mkfs.ext4 -q "$dev"
73
79
  fi
74
- mount "$device" "$mnt"
80
+ mount "$dev" "$mnt"
75
81
  fi
76
82
 
77
83
  mkdir -p "$mnt/$host"
78
84
 
79
- df -h "$device" >>"$logfile"
85
+ df -h "$dev" >>"$logfile"
80
86
 
81
87
  rsync --server --daemon --config="/srv/rsync-backup/rsyncd.$host.conf" .
82
88
 
83
- df -h "$device" >>"$logfile"
89
+ df -h "$dev" >>"$logfile"
84
90
 
85
91
  umount "$mnt"
86
92
 
package/assets/rsyncd.inc CHANGED
@@ -3,6 +3,4 @@ gid = root
3
3
  read only = no
4
4
  write only = yes
5
5
 
6
- filter = -x security.selinux
7
-
8
6
  transfer logging = yes
package/lib/index.d.ts CHANGED
@@ -14,7 +14,6 @@ export interface RsyncBackupProps {
14
14
  readonly vpc?: ec2.IVpc;
15
15
  readonly securityGroup?: ec2.ISecurityGroup;
16
16
  readonly instanceType?: ec2.InstanceType;
17
- readonly init?: ec2.CloudFormationInit;
18
17
  readonly useEIP?: boolean;
19
18
  readonly logsBucket?: s3.IBucket;
20
19
  readonly autoDeleteLogs?: boolean;
package/lib/index.js CHANGED
@@ -5,6 +5,7 @@ const cdk = require("aws-cdk-lib");
5
5
  const ec2 = require("aws-cdk-lib/aws-ec2");
6
6
  const iam = require("aws-cdk-lib/aws-iam");
7
7
  const s3 = require("aws-cdk-lib/aws-s3");
8
+ const s3assets = require("aws-cdk-lib/aws-s3-assets");
8
9
  const constructs_1 = require("constructs");
9
10
  const path = require("path");
10
11
  const version_1 = require("./version");
@@ -20,7 +21,10 @@ class RsyncBackup extends constructs_1.Construct {
20
21
  removalPolicy: cdk.RemovalPolicy.DESTROY,
21
22
  autoDeleteObjects: props.autoDeleteLogs,
22
23
  });
23
- const vpc = props.vpc || cdk.aws_ec2.Vpc.fromLookup(this, "VPC", { isDefault: true });
24
+ const vpc = props.vpc ||
25
+ new cdk.aws_ec2.Vpc(this, "Vpc", {
26
+ ipProtocol: ec2.IpProtocol.DUAL_STACK,
27
+ });
24
28
  let securityGroup;
25
29
  if (props.securityGroup) {
26
30
  securityGroup = props.securityGroup;
@@ -31,13 +35,16 @@ class RsyncBackup extends constructs_1.Construct {
31
35
  allowAllOutbound: true,
32
36
  });
33
37
  securityGroup.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(22), "Allow SSH Access");
38
+ securityGroup.addIngressRule(ec2.Peer.anyIpv6(), ec2.Port.tcp(22), "Allow SSH Access");
34
39
  }
35
40
  const instanceType = props.instanceType ||
36
41
  ec2.InstanceType.of(ec2.InstanceClass.T4G, ec2.InstanceSize.NANO);
37
- const machineImage = ec2.MachineImage.latestAmazonLinux2023({
38
- cpuType: instanceType.architecture == ec2.InstanceArchitecture.X86_64
39
- ? ec2.AmazonLinuxCpuType.X86_64
40
- : ec2.AmazonLinuxCpuType.ARM_64,
42
+ const arch = instanceType.architecture == ec2.InstanceArchitecture.ARM_64
43
+ ? "arm64"
44
+ : "amd64";
45
+ const machineImage = ec2.MachineImage.lookup({
46
+ name: `ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-${arch}-server-*`,
47
+ owners: ["099720109477"],
41
48
  });
42
49
  const policy = new iam.PolicyDocument({
43
50
  statements: [
@@ -69,71 +76,49 @@ class RsyncBackup extends constructs_1.Construct {
69
76
  rsyncBackup: policy,
70
77
  },
71
78
  });
72
- const keyPair = new ec2.CfnKeyPair(this, "KeyPair", {
73
- keyName: "rsync-backup",
79
+ const keyPair = new ec2.KeyPair(this, "KeyPair", {
80
+ keyPairName: "rsync-backup",
74
81
  });
75
82
  keyPair.applyRemovalPolicy(cdk.RemovalPolicy.DESTROY);
76
- const initConfig = new ec2.InitConfig([
77
- ec2.InitFile.fromString("/etc/environment", `MAX_SNAPSHOTS=${maxSnapshots}
78
- S3_LOGS_BUCKET=${logsBucket.bucketName}`.replace(/^\s+/gm, "")),
79
- ec2.InitFile.fromAsset("/usr/local/bin/rsync-backup", path.join(__dirname, "../assets/rsync-backup.sh"), {
80
- mode: "000755",
81
- }),
82
- ec2.InitFile.fromAsset("/srv/rsync-backup/rsyncd.inc", path.join(__dirname, "../assets/rsyncd.inc")),
83
- ]);
84
- if (props.modules) {
85
- for (const [i, m] of props.modules.entries()) {
86
- if (m.size < 0 || !Number.isInteger(m.size)) {
87
- throw new Error("module size must be a positive integer");
88
- }
89
- const device = String.fromCharCode("b".charCodeAt(0) + i);
90
- initConfig.add(ec2.InitFile.fromAsset(`/srv/rsync-backup/rsyncd.${m.name}.conf`, path.join(__dirname, "../assets/rsyncd.conf")));
91
- initConfig.add(ec2.InitCommand.argvCommand([
92
- "/usr/bin/sed",
93
- "-i",
94
- `s/@host@/${m.name}/g`,
95
- `/srv/rsync-backup/rsyncd.${m.name}.conf`,
96
- ]));
97
- initConfig.add(ec2.InitCommand.shellCommand(`echo 'no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="rsync-backup ${m.name} ${m.size} /dev/sd${device}" ${m.sshKey}' >> /root/.ssh/authorized_keys`));
98
- }
99
- }
100
- else {
101
- initConfig.add(ec2.InitFile.fromAsset("/srv/rsync-backup/rsyncd.backup.conf", path.join(__dirname, "../assets/rsyncd.conf")));
102
- initConfig.add(ec2.InitCommand.argvCommand([
103
- "/usr/bin/sed",
104
- "-i",
105
- `s/@host@/backup/g`,
106
- `/srv/rsync-backup/rsyncd.backup.conf`,
107
- ]));
108
- initConfig.add(ec2.InitCommand.argvCommand([
109
- "/usr/bin/sed",
110
- "-i",
111
- 's|command=".*" |command="rsync-backup backup 100 /dev/sdb" |',
112
- "/root/.ssh/authorized_keys",
113
- ]));
114
- }
115
- const init = (() => {
116
- if (props.init) {
117
- props.init.addConfig("rsyncBackup", initConfig);
118
- return props.init;
119
- }
120
- else {
121
- return ec2.CloudFormationInit.fromConfig(initConfig);
122
- }
123
- })();
124
83
  let instanceId = `Instance-${version_1.LIB_VERSION.replace(/\.\d+$/, "")}`;
125
84
  if (props.instanceVersion) {
126
85
  instanceId += `-${props.instanceVersion}`;
127
86
  }
128
87
  const instance = new ec2.Instance(this, instanceId, {
129
- keyName: cdk.Token.asString(keyPair.ref),
88
+ keyPair,
130
89
  vpc,
90
+ vpcSubnets: {
91
+ subnetType: ec2.SubnetType.PUBLIC,
92
+ },
131
93
  securityGroup,
132
94
  instanceType,
133
95
  machineImage,
134
96
  role,
135
- init,
97
+ associatePublicIpAddress: true,
98
+ });
99
+ instance.userData.addCommands("apt-get update", "apt-get install -y unzip", "snap install aws-cli --classic");
100
+ const rsync_backup_sh = new s3assets.Asset(this, "RsyncBackupSh", {
101
+ path: path.join(__dirname, "../assets"),
102
+ });
103
+ rsync_backup_sh.grantRead(instance);
104
+ const asset_path = instance.userData.addS3DownloadCommand({
105
+ bucket: rsync_backup_sh.bucket,
106
+ bucketKey: rsync_backup_sh.s3ObjectKey,
136
107
  });
108
+ instance.userData.addCommands(`unzip ${asset_path} -d /srv/rsync-backup`, `rm ${asset_path}`, "mv /srv/rsync-backup/rsync-backup.sh /usr/local/bin/rsync-backup", `echo MAX_SNAPSHOTS=${maxSnapshots} >> /etc/environment`, `echo S3_LOGS_BUCKET=${logsBucket.bucketName} >> /etc/environment`);
109
+ if (props.modules) {
110
+ for (const [i, m] of props.modules.entries()) {
111
+ if (m.size < 0 || !Number.isInteger(m.size)) {
112
+ throw new Error("module size must be a positive integer");
113
+ }
114
+ const device = String.fromCharCode("f".charCodeAt(0) + i);
115
+ instance.userData.addCommands(`cp /srv/rsync-backup/rsyncd.conf /srv/rsync-backup/rsyncd.${m.name}.conf`, `sed -i 's/@host@/${m.name}/g' /srv/rsync-backup/rsyncd.${m.name}.conf`, `echo 'no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="rsync-backup ${m.name} ${m.size} /dev/sd${device}" ${m.sshKey}' >> /root/.ssh/authorized_keys`);
116
+ }
117
+ }
118
+ else {
119
+ instance.userData.addCommands("cp /srv/rsync-backup/rsyncd.conf /srv/rsync-backup/rsyncd.backup.conf", "sed -i 's/@host@/backup/g' /srv/rsync-backup/rsyncd.backup.conf", `sed -i 's|command=".*" |command="rsync-backup backup 100 /dev/sdf" |' /root/.ssh/authorized_keys`);
120
+ }
121
+ instance.userData.addCommands("rm /srv/rsync-backup/rsyncd.conf");
137
122
  let eip, eIPAssociation;
138
123
  if (props.useEIP) {
139
124
  eip = new ec2.CfnEIP(this, "EIP");
@@ -147,4 +132,4 @@ class RsyncBackup extends constructs_1.Construct {
147
132
  }
148
133
  }
149
134
  exports.RsyncBackup = RsyncBackup;
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFDekMsMkNBQXVDO0FBQ3ZDLDZCQUE2QjtBQUU3Qix1Q0FBd0M7QUF5QnhDLE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBSXhDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBMEIsRUFBRTtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQzlDLElBQUksWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzVEO1FBRUQsTUFBTSxVQUFVLEdBQ2QsS0FBSyxDQUFDLFVBQVU7WUFDaEIsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQ2hDLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLE9BQU87Z0JBQ3hDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxjQUFjO2FBQ3hDLENBQUMsQ0FBQztRQUVMLE1BQU0sR0FBRyxHQUNQLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU1RSxJQUFJLGFBQWlDLENBQUM7UUFDdEMsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1NBQ3JDO2FBQU07WUFDTCxhQUFhLEdBQUcsSUFB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O1lBQ0gsYUFBYTtZQUNiLFlBQVk7WUFDWixZQUFZO1lBQ1osSUFBSTtZQUNKLElBQUk7U0FDTCxDQUFDLENBQUM7UUFFSCxJQUFJLEdBQUcsRUFBRSxjQUFjLENBQUM7UUFDeEIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2hCLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ2pFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztnQkFDWixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7YUFDaEMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFqTUQsa0NBaU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IExJQl9WRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJzeW5jQmFja3VwTW9kdWxlIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBzc2hLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJzeW5jQmFja3VwUHJvcHMge1xuICByZWFkb25seSBtb2R1bGVzPzogUnN5bmNCYWNrdXBNb2R1bGVbXTtcbiAgcmVhZG9ubHkgbWF4U25hcHNob3RzPzogbnVtYmVyO1xuXG4gIHJlYWRvbmx5IGluc3RhbmNlVmVyc2lvbj86IHN0cmluZztcblxuICByZWFkb25seSBrZXlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB2cGM/OiBlYzIuSVZwYztcbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cD86IGVjMi5JU2VjdXJpdHlHcm91cDtcbiAgcmVhZG9ubHkgaW5zdGFuY2VUeXBlPzogZWMyLkluc3RhbmNlVHlwZTtcbiAgcmVhZG9ubHkgaW5pdD86IGVjMi5DbG91ZEZvcm1hdGlvbkluaXQ7XG4gIHJlYWRvbmx5IHVzZUVJUD86IGJvb2xlYW47XG5cbiAgcmVhZG9ubHkgbG9nc0J1Y2tldD86IHMzLklCdWNrZXQ7XG4gIHJlYWRvbmx5IGF1dG9EZWxldGVMb2dzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFJzeW5jQmFja3VwIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGxvZ3NCdWNrZXQ6IHMzLklCdWNrZXQ7XG4gIHB1YmxpYyByZWFkb25seSBpbnN0YW5jZTogZWMyLklJbnN0YW5jZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUnN5bmNCYWNrdXBQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IG1heFNuYXBzaG90cyA9IHByb3BzLm1heFNuYXBzaG90cyB8fCAxNTtcbiAgICBpZiAobWF4U25hcHNob3RzIDwgMCB8fCAhTnVtYmVyLmlzSW50ZWdlcihtYXhTbmFwc2hvdHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtYXhTbmFwc2hvdHMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJcIik7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nc0J1Y2tldCA9XG4gICAgICBwcm9wcy5sb2dzQnVja2V0IHx8XG4gICAgICBuZXcgczMuQnVja2V0KHRoaXMsIFwiTG9nc0J1Y2tldFwiLCB7XG4gICAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgIGF1dG9EZWxldGVPYmplY3RzOiBwcm9wcy5hdXRvRGVsZXRlTG9ncyxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgdnBjID1cbiAgICAgIHByb3BzLnZwYyB8fCBjZGsuYXdzX2VjMi5WcGMuZnJvbUxvb2t1cCh0aGlzLCBcIlZQQ1wiLCB7IGlzRGVmYXVsdDogdHJ1ZSB9KTtcblxuICAgIGxldCBzZWN1cml0eUdyb3VwOiBlYzIuSVNlY3VyaXR5R3JvdXA7XG4gICAgaWYgKHByb3BzLnNlY3VyaXR5R3JvdXApIHtcbiAgICAgIHNlY3VyaXR5R3JvdXAgPSBwcm9wcy5zZWN1cml0eUdyb3VwO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsIFwiU2VjdXJpdHlHcm91cFwiLCB7XG4gICAgICAgIHZwYyxcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBzZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgICBlYzIuUGVlci5hbnlJcHY0KCksXG4gICAgICAgIGVjMi5Qb3J0LnRjcCgyMiksXG4gICAgICAgIFwiQWxsb3cgU1NIIEFjY2Vzc1wiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9XG4gICAgICBwcm9wcy5pbnN0YW5jZVR5cGUgfHxcbiAgICAgIGVjMi5JbnN0YW5jZVR5cGUub2YoZWMyLkluc3RhbmNlQ2xhc3MuVDRHLCBlYzIuSW5zdGFuY2VTaXplLk5BTk8pO1xuXG4gICAgY29uc3QgbWFjaGluZUltYWdlID0gZWMyLk1hY2hpbmVJbWFnZS5sYXRlc3RBbWF6b25MaW51eDIwMjMoe1xuICAgICAgY3B1VHlwZTpcbiAgICAgICAgaW5zdGFuY2VUeXBlLmFyY2hpdGVjdHVyZSA9PSBlYzIuSW5zdGFuY2VBcmNoaXRlY3R1cmUuWDg2XzY0XG4gICAgICAgICAgPyBlYzIuQW1hem9uTGludXhDcHVUeXBlLlg4Nl82NFxuICAgICAgICAgIDogZWMyLkFtYXpvbkxpbnV4Q3B1VHlwZS5BUk1fNjQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb2xpY3kgPSBuZXcgaWFtLlBvbGljeURvY3VtZW50KHtcbiAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiZWMyOkRlc2NyaWJlSW5zdGFuY2VzXCIsXG4gICAgICAgICAgICBcImVjMjpEZXNjcmliZVNuYXBzaG90c1wiLFxuICAgICAgICAgICAgXCJlYzI6RGVzY3JpYmVWb2x1bWVzXCIsXG4gICAgICAgICAgICBcImVjMjpEZXNjcmliZVZvbHVtZVN0YXR1c1wiLFxuICAgICAgICAgICAgXCJlYzI6QXR0YWNoVm9sdW1lXCIsXG4gICAgICAgICAgICBcImVjMjpEZXRhY2hWb2x1bWVcIixcbiAgICAgICAgICAgIFwiZWMyOkNyZWF0ZVZvbHVtZVwiLFxuICAgICAgICAgICAgXCJlYzI6RGVsZXRlVm9sdW1lXCIsXG4gICAgICAgICAgICBcImVjMjpDcmVhdGVTbmFwc2hvdFwiLFxuICAgICAgICAgICAgXCJlYzI6RGVsZXRlU25hcHNob3RcIixcbiAgICAgICAgICAgIFwiZWMyOkNyZWF0ZVRhZ3NcIixcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJzMzpQdXRPYmplY3RcIiwgXCJzMzpQdXRPYmplY3RBY2xcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbbG9nc0J1Y2tldC5idWNrZXRBcm4sIGxvZ3NCdWNrZXQuYnVja2V0QXJuICsgXCIvKlwiXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkluc3RhbmNlUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImVjMi5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgcnN5bmNCYWNrdXA6IHBvbGljeSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBrZXlQYWlyID0gbmV3IGVjMi5DZm5LZXlQYWlyKHRoaXMsIFwiS2V5UGFpclwiLCB7XG4gICAgICBrZXlOYW1lOiBcInJzeW5jLWJhY2t1cFwiLFxuICAgIH0pO1xuICAgIGtleVBhaXIuYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuXG4gICAgY29uc3QgaW5pdENvbmZpZyA9IG5ldyBlYzIuSW5pdENvbmZpZyhbXG4gICAgICBlYzIuSW5pdEZpbGUuZnJvbVN0cmluZyhcbiAgICAgICAgXCIvZXRjL2Vudmlyb25tZW50XCIsXG4gICAgICAgIGBNQVhfU05BUFNIT1RTPSR7bWF4U25hcHNob3RzfVxuICAgICAgICAgUzNfTE9HU19CVUNLRVQ9JHtsb2dzQnVja2V0LmJ1Y2tldE5hbWV9YC5yZXBsYWNlKC9eXFxzKy9nbSwgXCJcIilcbiAgICAgICksXG4gICAgICBlYzIuSW5pdEZpbGUuZnJvbUFzc2V0KFxuICAgICAgICBcIi91c3IvbG9jYWwvYmluL3JzeW5jLWJhY2t1cFwiLFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL2Fzc2V0cy9yc3luYy1iYWNrdXAuc2hcIiksXG4gICAgICAgIHtcbiAgICAgICAgICBtb2RlOiBcIjAwMDc1NVwiLFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgZWMyLkluaXRGaWxlLmZyb21Bc3NldChcbiAgICAgICAgXCIvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuaW5jXCIsXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vYXNzZXRzL3JzeW5jZC5pbmNcIilcbiAgICAgICksXG4gICAgXSk7XG5cbiAgICBpZiAocHJvcHMubW9kdWxlcykge1xuICAgICAgZm9yIChjb25zdCBbaSwgbV0gb2YgcHJvcHMubW9kdWxlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKG0uc2l6ZSA8IDAgfHwgIU51bWJlci5pc0ludGVnZXIobS5zaXplKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm1vZHVsZSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGV2aWNlID0gU3RyaW5nLmZyb21DaGFyQ29kZShcImJcIi5jaGFyQ29kZUF0KDApICsgaSk7XG5cbiAgICAgICAgaW5pdENvbmZpZy5hZGQoXG4gICAgICAgICAgZWMyLkluaXRGaWxlLmZyb21Bc3NldChcbiAgICAgICAgICAgIGAvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuJHttLm5hbWV9LmNvbmZgLFxuICAgICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9hc3NldHMvcnN5bmNkLmNvbmZcIilcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGluaXRDb25maWcuYWRkKFxuICAgICAgICAgIGVjMi5Jbml0Q29tbWFuZC5hcmd2Q29tbWFuZChbXG4gICAgICAgICAgICBcIi91c3IvYmluL3NlZFwiLFxuICAgICAgICAgICAgXCItaVwiLFxuICAgICAgICAgICAgYHMvQGhvc3RALyR7bS5uYW1lfS9nYCxcbiAgICAgICAgICAgIGAvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuJHttLm5hbWV9LmNvbmZgLFxuICAgICAgICAgIF0pXG4gICAgICAgICk7XG4gICAgICAgIGluaXRDb25maWcuYWRkKFxuICAgICAgICAgIGVjMi5Jbml0Q29tbWFuZC5zaGVsbENvbW1hbmQoXG4gICAgICAgICAgICBgZWNobyAnbm8tcG9ydC1mb3J3YXJkaW5nLG5vLWFnZW50LWZvcndhcmRpbmcsbm8tWDExLWZvcndhcmRpbmcsY29tbWFuZD1cInJzeW5jLWJhY2t1cCAke20ubmFtZX0gJHttLnNpemV9IC9kZXYvc2Qke2RldmljZX1cIiAke20uc3NoS2V5fScgPj4gL3Jvb3QvLnNzaC9hdXRob3JpemVkX2tleXNgXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpbml0Q29uZmlnLmFkZChcbiAgICAgICAgZWMyLkluaXRGaWxlLmZyb21Bc3NldChcbiAgICAgICAgICBcIi9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC5iYWNrdXAuY29uZlwiLFxuICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vYXNzZXRzL3JzeW5jZC5jb25mXCIpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBpbml0Q29uZmlnLmFkZChcbiAgICAgICAgZWMyLkluaXRDb21tYW5kLmFyZ3ZDb21tYW5kKFtcbiAgICAgICAgICBcIi91c3IvYmluL3NlZFwiLFxuICAgICAgICAgIFwiLWlcIixcbiAgICAgICAgICBgcy9AaG9zdEAvYmFja3VwL2dgLFxuICAgICAgICAgIGAvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuYmFja3VwLmNvbmZgLFxuICAgICAgICBdKVxuICAgICAgKTtcbiAgICAgIGluaXRDb25maWcuYWRkKFxuICAgICAgICBlYzIuSW5pdENvbW1hbmQuYXJndkNvbW1hbmQoW1xuICAgICAgICAgIFwiL3Vzci9iaW4vc2VkXCIsXG4gICAgICAgICAgXCItaVwiLFxuICAgICAgICAgICdzfGNvbW1hbmQ9XCIuKlwiIHxjb21tYW5kPVwicnN5bmMtYmFja3VwIGJhY2t1cCAxMDAgL2Rldi9zZGJcIiB8JyxcbiAgICAgICAgICBcIi9yb290Ly5zc2gvYXV0aG9yaXplZF9rZXlzXCIsXG4gICAgICAgIF0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXQgPSAoKCkgPT4ge1xuICAgICAgaWYgKHByb3BzLmluaXQpIHtcbiAgICAgICAgcHJvcHMuaW5pdC5hZGRDb25maWcoXCJyc3luY0JhY2t1cFwiLCBpbml0Q29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHByb3BzLmluaXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZWMyLkNsb3VkRm9ybWF0aW9uSW5pdC5mcm9tQ29uZmlnKGluaXRDb25maWcpO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICBsZXQgaW5zdGFuY2VJZCA9IGBJbnN0YW5jZS0ke0xJQl9WRVJTSU9OLnJlcGxhY2UoL1xcLlxcZCskLywgXCJcIil9YDtcbiAgICBpZiAocHJvcHMuaW5zdGFuY2VWZXJzaW9uKSB7XG4gICAgICBpbnN0YW5jZUlkICs9IGAtJHtwcm9wcy5pbnN0YW5jZVZlcnNpb259YDtcbiAgICB9XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgZWMyLkluc3RhbmNlKHRoaXMsIGluc3RhbmNlSWQsIHtcbiAgICAgIGtleU5hbWU6IGNkay5Ub2tlbi5hc1N0cmluZyhrZXlQYWlyLnJlZiksXG4gICAgICB2cGMsXG4gICAgICBzZWN1cml0eUdyb3VwLFxuICAgICAgaW5zdGFuY2VUeXBlLFxuICAgICAgbWFjaGluZUltYWdlLFxuICAgICAgcm9sZSxcbiAgICAgIGluaXQsXG4gICAgfSk7XG5cbiAgICBsZXQgZWlwLCBlSVBBc3NvY2lhdGlvbjtcbiAgICBpZiAocHJvcHMudXNlRUlQKSB7XG4gICAgICBlaXAgPSBuZXcgZWMyLkNmbkVJUCh0aGlzLCBcIkVJUFwiKTtcbiAgICAgIGVJUEFzc29jaWF0aW9uID0gbmV3IGVjMi5DZm5FSVBBc3NvY2lhdGlvbih0aGlzLCBcIkVJUEFzc29jaWF0aW9uXCIsIHtcbiAgICAgICAgZWlwOiBlaXAucmVmLFxuICAgICAgICBpbnN0YW5jZUlkOiBpbnN0YW5jZS5pbnN0YW5jZUlkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2dzQnVja2V0ID0gbG9nc0J1Y2tldDtcbiAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gIH1cbn1cbiJdfQ==
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFDekMsc0RBQXNEO0FBQ3RELDJDQUF1QztBQUN2Qyw2QkFBNkI7QUFFN0IsdUNBQXdDO0FBd0J4QyxNQUFhLFdBQVksU0FBUSxzQkFBUztJQUl4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQTBCLEVBQUU7UUFDcEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxNQUFNLFVBQVUsR0FDZCxLQUFLLENBQUMsVUFBVTtZQUNoQixJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtnQkFDaEMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsT0FBTztnQkFDeEMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGNBQWM7YUFDeEMsQ0FBQyxDQUFDO1FBRUwsTUFBTSxHQUFHLEdBQ1AsS0FBSyxDQUFDLEdBQUc7WUFDVCxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7Z0JBQy9CLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVU7YUFDdEMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxhQUFpQyxDQUFDO1FBQ3RDLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLGFBQWEsR0FBRyxLQUFL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LENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUF6S0Qsa0NBeUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCAqIGFzIHMzYXNzZXRzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBMSUJfVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBSc3luY0JhY2t1cE1vZHVsZSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc3NoS2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNpemU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSc3luY0JhY2t1cFByb3BzIHtcbiAgcmVhZG9ubHkgbW9kdWxlcz86IFJzeW5jQmFja3VwTW9kdWxlW107XG4gIHJlYWRvbmx5IG1heFNuYXBzaG90cz86IG51bWJlcjtcblxuICByZWFkb25seSBpbnN0YW5jZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkga2V5TmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBlYzIuSVNlY3VyaXR5R3JvdXA7XG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZT86IGVjMi5JbnN0YW5jZVR5cGU7XG4gIHJlYWRvbmx5IHVzZUVJUD86IGJvb2xlYW47XG5cbiAgcmVhZG9ubHkgbG9nc0J1Y2tldD86IHMzLklCdWNrZXQ7XG4gIHJlYWRvbmx5IGF1dG9EZWxldGVMb2dzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFJzeW5jQmFja3VwIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGxvZ3NCdWNrZXQ6IHMzLklCdWNrZXQ7XG4gIHB1YmxpYyByZWFkb25seSBpbnN0YW5jZTogZWMyLklJbnN0YW5jZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUnN5bmNCYWNrdXBQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IG1heFNuYXBzaG90cyA9IHByb3BzLm1heFNuYXBzaG90cyB8fCAxNTtcbiAgICBpZiAobWF4U25hcHNob3RzIDwgMCB8fCAhTnVtYmVyLmlzSW50ZWdlcihtYXhTbmFwc2hvdHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtYXhTbmFwc2hvdHMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJcIik7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nc0J1Y2tldCA9XG4gICAgICBwcm9wcy5sb2dzQnVja2V0IHx8XG4gICAgICBuZXcgczMuQnVja2V0KHRoaXMsIFwiTG9nc0J1Y2tldFwiLCB7XG4gICAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgIGF1dG9EZWxldGVPYmplY3RzOiBwcm9wcy5hdXRvRGVsZXRlTG9ncyxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgdnBjID1cbiAgICAgIHByb3BzLnZwYyB8fFxuICAgICAgbmV3IGNkay5hd3NfZWMyLlZwYyh0aGlzLCBcIlZwY1wiLCB7XG4gICAgICAgIGlwUHJvdG9jb2w6IGVjMi5JcFByb3RvY29sLkRVQUxfU1RBQ0ssXG4gICAgICB9KTtcblxuICAgIGxldCBzZWN1cml0eUdyb3VwOiBlYzIuSVNlY3VyaXR5R3JvdXA7XG4gICAgaWYgKHByb3BzLnNlY3VyaXR5R3JvdXApIHtcbiAgICAgIHNlY3VyaXR5R3JvdXAgPSBwcm9wcy5zZWN1cml0eUdyb3VwO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsIFwiU2VjdXJpdHlHcm91cFwiLCB7XG4gICAgICAgIHZwYyxcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBzZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgICBlYzIuUGVlci5hbnlJcHY0KCksXG4gICAgICAgIGVjMi5Qb3J0LnRjcCgyMiksXG4gICAgICAgIFwiQWxsb3cgU1NIIEFjY2Vzc1wiLFxuICAgICAgKTtcbiAgICAgIHNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICAgIGVjMi5QZWVyLmFueUlwdjYoKSxcbiAgICAgICAgZWMyLlBvcnQudGNwKDIyKSxcbiAgICAgICAgXCJBbGxvdyBTU0ggQWNjZXNzXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9XG4gICAgICBwcm9wcy5pbnN0YW5jZVR5cGUgfHxcbiAgICAgIGVjMi5JbnN0YW5jZVR5cGUub2YoZWMyLkluc3RhbmNlQ2xhc3MuVDRHLCBlYzIuSW5zdGFuY2VTaXplLk5BTk8pO1xuXG4gICAgY29uc3QgYXJjaCA9XG4gICAgICBpbnN0YW5jZVR5cGUuYXJjaGl0ZWN0dXJlID09IGVjMi5JbnN0YW5jZUFyY2hpdGVjdHVyZS5BUk1fNjRcbiAgICAgICAgPyBcImFybTY0XCJcbiAgICAgICAgOiBcImFtZDY0XCI7XG4gICAgY29uc3QgbWFjaGluZUltYWdlID0gZWMyLk1hY2hpbmVJbWFnZS5sb29rdXAoe1xuICAgICAgbmFtZTogYHVidW50dS9pbWFnZXMvaHZtLXNzZC1ncDMvdWJ1bnR1LW5vYmxlLTI0LjA0LSR7YXJjaH0tc2VydmVyLSpgLFxuICAgICAgb3duZXJzOiBbXCIwOTk3MjAxMDk0NzdcIl0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb2xpY3kgPSBuZXcgaWFtLlBvbGljeURvY3VtZW50KHtcbiAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiZWMyOkRlc2NyaWJlSW5zdGFuY2VzXCIsXG4gICAgICAgICAgICBcImVjMjpEZXNjcmliZVNuYXBzaG90c1wiLFxuICAgICAgICAgICAgXCJlYzI6RGVzY3JpYmVWb2x1bWVzXCIsXG4gICAgICAgICAgICBcImVjMjpEZXNjcmliZVZvbHVtZVN0YXR1c1wiLFxuICAgICAgICAgICAgXCJlYzI6QXR0YWNoVm9sdW1lXCIsXG4gICAgICAgICAgICBcImVjMjpEZXRhY2hWb2x1bWVcIixcbiAgICAgICAgICAgIFwiZWMyOkNyZWF0ZVZvbHVtZVwiLFxuICAgICAgICAgICAgXCJlYzI6RGVsZXRlVm9sdW1lXCIsXG4gICAgICAgICAgICBcImVjMjpDcmVhdGVTbmFwc2hvdFwiLFxuICAgICAgICAgICAgXCJlYzI6RGVsZXRlU25hcHNob3RcIixcbiAgICAgICAgICAgIFwiZWMyOkNyZWF0ZVRhZ3NcIixcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJzMzpQdXRPYmplY3RcIiwgXCJzMzpQdXRPYmplY3RBY2xcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbbG9nc0J1Y2tldC5idWNrZXRBcm4sIGxvZ3NCdWNrZXQuYnVja2V0QXJuICsgXCIvKlwiXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkluc3RhbmNlUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImVjMi5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgcnN5bmNCYWNrdXA6IHBvbGljeSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBrZXlQYWlyID0gbmV3IGVjMi5LZXlQYWlyKHRoaXMsIFwiS2V5UGFpclwiLCB7XG4gICAgICBrZXlQYWlyTmFtZTogXCJyc3luYy1iYWNrdXBcIixcbiAgICB9KTtcbiAgICBrZXlQYWlyLmFwcGx5UmVtb3ZhbFBvbGljeShjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcblxuICAgIGxldCBpbnN0YW5jZUlkID0gYEluc3RhbmNlLSR7TElCX1ZFUlNJT04ucmVwbGFjZSgvXFwuXFxkKyQvLCBcIlwiKX1gO1xuICAgIGlmIChwcm9wcy5pbnN0YW5jZVZlcnNpb24pIHtcbiAgICAgIGluc3RhbmNlSWQgKz0gYC0ke3Byb3BzLmluc3RhbmNlVmVyc2lvbn1gO1xuICAgIH1cbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBlYzIuSW5zdGFuY2UodGhpcywgaW5zdGFuY2VJZCwge1xuICAgICAga2V5UGFpcixcbiAgICAgIHZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHtcbiAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDLFxuICAgICAgfSxcbiAgICAgIHNlY3VyaXR5R3JvdXAsXG4gICAgICBpbnN0YW5jZVR5cGUsXG4gICAgICBtYWNoaW5lSW1hZ2UsXG4gICAgICByb2xlLFxuICAgICAgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaW5zdGFuY2UudXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBcImFwdC1nZXQgdXBkYXRlXCIsXG4gICAgICBcImFwdC1nZXQgaW5zdGFsbCAteSB1bnppcFwiLFxuICAgICAgXCJzbmFwIGluc3RhbGwgYXdzLWNsaSAtLWNsYXNzaWNcIixcbiAgICApO1xuXG4gICAgY29uc3QgcnN5bmNfYmFja3VwX3NoID0gbmV3IHMzYXNzZXRzLkFzc2V0KHRoaXMsIFwiUnN5bmNCYWNrdXBTaFwiLCB7XG4gICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL2Fzc2V0c1wiKSxcbiAgICB9KTtcbiAgICByc3luY19iYWNrdXBfc2guZ3JhbnRSZWFkKGluc3RhbmNlKTtcbiAgICBjb25zdCBhc3NldF9wYXRoID0gaW5zdGFuY2UudXNlckRhdGEuYWRkUzNEb3dubG9hZENvbW1hbmQoe1xuICAgICAgYnVja2V0OiByc3luY19iYWNrdXBfc2guYnVja2V0LFxuICAgICAgYnVja2V0S2V5OiByc3luY19iYWNrdXBfc2guczNPYmplY3RLZXksXG4gICAgfSk7XG5cbiAgICBpbnN0YW5jZS51c2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIGB1bnppcCAke2Fzc2V0X3BhdGh9IC1kIC9zcnYvcnN5bmMtYmFja3VwYCxcbiAgICAgIGBybSAke2Fzc2V0X3BhdGh9YCxcbiAgICAgIFwibXYgL3Nydi9yc3luYy1iYWNrdXAvcnN5bmMtYmFja3VwLnNoIC91c3IvbG9jYWwvYmluL3JzeW5jLWJhY2t1cFwiLFxuICAgICAgYGVjaG8gTUFYX1NOQVBTSE9UUz0ke21heFNuYXBzaG90c30gPj4gL2V0Yy9lbnZpcm9ubWVudGAsXG4gICAgICBgZWNobyBTM19MT0dTX0JVQ0tFVD0ke2xvZ3NCdWNrZXQuYnVja2V0TmFtZX0gPj4gL2V0Yy9lbnZpcm9ubWVudGAsXG4gICAgKTtcblxuICAgIGlmIChwcm9wcy5tb2R1bGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtpLCBtXSBvZiBwcm9wcy5tb2R1bGVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAobS5zaXplIDwgMCB8fCAhTnVtYmVyLmlzSW50ZWdlcihtLnNpemUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibW9kdWxlIHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGV2aWNlID0gU3RyaW5nLmZyb21DaGFyQ29kZShcImZcIi5jaGFyQ29kZUF0KDApICsgaSk7XG4gICAgICAgIGluc3RhbmNlLnVzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgICAgIGBjcCAvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuY29uZiAvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuJHttLm5hbWV9LmNvbmZgLFxuICAgICAgICAgIGBzZWQgLWkgJ3MvQGhvc3RALyR7bS5uYW1lfS9nJyAvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuJHttLm5hbWV9LmNvbmZgLFxuICAgICAgICAgIGBlY2hvICduby1wb3J0LWZvcndhcmRpbmcsbm8tYWdlbnQtZm9yd2FyZGluZyxuby1YMTEtZm9yd2FyZGluZyxjb21tYW5kPVwicnN5bmMtYmFja3VwICR7bS5uYW1lfSAke20uc2l6ZX0gL2Rldi9zZCR7ZGV2aWNlfVwiICR7bS5zc2hLZXl9JyA+PiAvcm9vdC8uc3NoL2F1dGhvcml6ZWRfa2V5c2AsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlLnVzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgICBcImNwIC9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC5jb25mIC9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC5iYWNrdXAuY29uZlwiLFxuICAgICAgICBcInNlZCAtaSAncy9AaG9zdEAvYmFja3VwL2cnIC9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC5iYWNrdXAuY29uZlwiLFxuICAgICAgICBgc2VkIC1pICdzfGNvbW1hbmQ9XCIuKlwiIHxjb21tYW5kPVwicnN5bmMtYmFja3VwIGJhY2t1cCAxMDAgL2Rldi9zZGZcIiB8JyAvcm9vdC8uc3NoL2F1dGhvcml6ZWRfa2V5c2AsXG4gICAgICApO1xuICAgIH1cbiAgICBpbnN0YW5jZS51c2VyRGF0YS5hZGRDb21tYW5kcyhcInJtIC9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC5jb25mXCIpO1xuXG4gICAgbGV0IGVpcCwgZUlQQXNzb2NpYXRpb247XG4gICAgaWYgKHByb3BzLnVzZUVJUCkge1xuICAgICAgZWlwID0gbmV3IGVjMi5DZm5FSVAodGhpcywgXCJFSVBcIik7XG4gICAgICBlSVBBc3NvY2lhdGlvbiA9IG5ldyBlYzIuQ2ZuRUlQQXNzb2NpYXRpb24odGhpcywgXCJFSVBBc3NvY2lhdGlvblwiLCB7XG4gICAgICAgIGVpcDogZWlwLnJlZixcbiAgICAgICAgaW5zdGFuY2VJZDogaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMubG9nc0J1Y2tldCA9IGxvZ3NCdWNrZXQ7XG4gICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICB9XG59XG4iXX0=
package/lib/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const LIB_VERSION = "0.4.1";
1
+ export declare const LIB_VERSION = "0.5.0";
package/lib/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LIB_VERSION = void 0;
4
- exports.LIB_VERSION = "0.4.1";
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxXQUFXLEdBQUcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IExJQl9WRVJTSU9OID0gXCIwLjQuMVwiO1xuIl19
4
+ exports.LIB_VERSION = "0.5.0";
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxXQUFXLEdBQUcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IExJQl9WRVJTSU9OID0gXCIwLjUuMFwiO1xuIl19
package/package.json CHANGED
@@ -1,40 +1,39 @@
1
1
  {
2
2
  "name": "@anyakichi/cdk-rsync-backup",
3
+ "version": "0.5.0",
3
4
  "description": "AWS CDK L3 construct for cloud backup system with rsync",
4
- "version": "0.4.1",
5
+ "keywords": [
6
+ "backup",
7
+ "cdk",
8
+ "rsync"
9
+ ],
10
+ "homepage": "https://github.com/anyakichi/cdk-rsync-backup",
11
+ "repository": "https://github.com/anyakichi/cdk-rsync-backup",
12
+ "license": "MIT",
5
13
  "author": "INAJIMA Daisuke <inajima@gmail.com>",
14
+ "main": "lib/index.js",
15
+ "types": "lib/index.d.ts",
6
16
  "scripts": {
7
- "build": "tsc",
8
- "format": "prettier --ignore-path .gitignore -w package.json lib",
9
17
  "prebuild": "node -p \"'export const LIB_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > lib/version.ts",
18
+ "build": "tsc",
19
+ "format": "sort-package-json && prettier --ignore-path .gitignore -w package.json lib",
10
20
  "test": "jest",
11
21
  "watch": "tsc -w"
12
22
  },
13
- "types": "lib/index.d.ts",
14
- "main": "lib/index.js",
15
- "peerDependencies": {
16
- "aws-cdk-lib": "^2.0.0",
17
- "constructs": "^10.0.0"
18
- },
19
23
  "devDependencies": {
20
- "@trivago/prettier-plugin-sort-imports": "^4.1.1",
21
- "@types/jest": "^29.5.1",
22
- "@types/node": "20.2.0",
23
- "@types/prettier": "2.7.2",
24
+ "@trivago/prettier-plugin-sort-imports": "^5.0.0",
25
+ "@types/jest": "^30.0.0",
26
+ "@types/node": "24.0.0",
24
27
  "aws-cdk-lib": "^2.0.0",
25
28
  "constructs": "^10.0.0",
26
- "jest": "^29.5.0",
27
- "prettier": "^2.8.8",
28
- "prettier-plugin-fixpack": "^0.1.0",
29
+ "jest": "^30.0.0",
30
+ "prettier": "^3.0.0",
31
+ "sort-package-json": "^3.4.0",
29
32
  "ts-jest": "^29.1.0",
30
- "typescript": "~5.0.4"
33
+ "typescript": "~5.9.3"
31
34
  },
32
- "homepage": "https://github.com/anyakichi/cdk-rsync-backup",
33
- "repository": "https://github.com/anyakichi/cdk-rsync-backup",
34
- "license": "MIT",
35
- "keywords": [
36
- "backup",
37
- "cdk",
38
- "rsync"
39
- ]
35
+ "peerDependencies": {
36
+ "aws-cdk-lib": "^2.0.0",
37
+ "constructs": "^10.0.0"
38
+ }
40
39
  }