@anyakichi/cdk-rsync-backup 0.4.2 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/publish.yml +4 -4
- package/assets/rsync-backup.sh +12 -6
- package/lib/index.d.ts +0 -1
- package/lib/index.js +55 -69
- package/lib/version.d.ts +1 -1
- package/lib/version.js +2 -2
- package/package.json +24 -25
|
@@ -6,13 +6,13 @@ jobs:
|
|
|
6
6
|
build:
|
|
7
7
|
runs-on: ubuntu-latest
|
|
8
8
|
steps:
|
|
9
|
-
- uses: actions/checkout@
|
|
10
|
-
- uses: actions/setup-node@
|
|
9
|
+
- uses: actions/checkout@v5
|
|
10
|
+
- uses: actions/setup-node@v6
|
|
11
11
|
with:
|
|
12
|
-
node-version: "
|
|
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
|
|
16
|
+
- run: npm publish
|
|
17
17
|
env:
|
|
18
18
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/assets/rsync-backup.sh
CHANGED
|
@@ -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 $
|
|
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 "$
|
|
78
|
+
mkfs.ext4 -q "$dev"
|
|
73
79
|
fi
|
|
74
|
-
mount "$
|
|
80
|
+
mount "$dev" "$mnt"
|
|
75
81
|
fi
|
|
76
82
|
|
|
77
83
|
mkdir -p "$mnt/$host"
|
|
78
84
|
|
|
79
|
-
df -h "$
|
|
85
|
+
df -h "$dev" >>"$logfile"
|
|
80
86
|
|
|
81
87
|
rsync --server --daemon --config="/srv/rsync-backup/rsyncd.$host.conf" .
|
|
82
88
|
|
|
83
|
-
df -h "$
|
|
89
|
+
df -h "$dev" >>"$logfile"
|
|
84
90
|
|
|
85
91
|
umount "$mnt"
|
|
86
92
|
|
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,17 @@ class RsyncBackup extends constructs_1.Construct {
|
|
|
20
21
|
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
21
22
|
autoDeleteObjects: props.autoDeleteLogs,
|
|
22
23
|
});
|
|
23
|
-
const vpc = props.vpc ||
|
|
24
|
+
const vpc = props.vpc ||
|
|
25
|
+
new cdk.aws_ec2.Vpc(this, "Vpc", {
|
|
26
|
+
ipProtocol: ec2.IpProtocol.DUAL_STACK,
|
|
27
|
+
natGateways: 0,
|
|
28
|
+
subnetConfiguration: [
|
|
29
|
+
{
|
|
30
|
+
name: "Public",
|
|
31
|
+
subnetType: ec2.SubnetType.PUBLIC,
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
});
|
|
24
35
|
let securityGroup;
|
|
25
36
|
if (props.securityGroup) {
|
|
26
37
|
securityGroup = props.securityGroup;
|
|
@@ -31,13 +42,16 @@ class RsyncBackup extends constructs_1.Construct {
|
|
|
31
42
|
allowAllOutbound: true,
|
|
32
43
|
});
|
|
33
44
|
securityGroup.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(22), "Allow SSH Access");
|
|
45
|
+
securityGroup.addIngressRule(ec2.Peer.anyIpv6(), ec2.Port.tcp(22), "Allow SSH Access");
|
|
34
46
|
}
|
|
35
47
|
const instanceType = props.instanceType ||
|
|
36
48
|
ec2.InstanceType.of(ec2.InstanceClass.T4G, ec2.InstanceSize.NANO);
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
49
|
+
const arch = instanceType.architecture == ec2.InstanceArchitecture.ARM_64
|
|
50
|
+
? "arm64"
|
|
51
|
+
: "amd64";
|
|
52
|
+
const machineImage = ec2.MachineImage.lookup({
|
|
53
|
+
name: `ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-${arch}-server-*`,
|
|
54
|
+
owners: ["099720109477"],
|
|
41
55
|
});
|
|
42
56
|
const policy = new iam.PolicyDocument({
|
|
43
57
|
statements: [
|
|
@@ -69,84 +83,56 @@ class RsyncBackup extends constructs_1.Construct {
|
|
|
69
83
|
rsyncBackup: policy,
|
|
70
84
|
},
|
|
71
85
|
});
|
|
72
|
-
const keyPair = new ec2.
|
|
73
|
-
|
|
86
|
+
const keyPair = new ec2.KeyPair(this, "KeyPair", {
|
|
87
|
+
keyPairName: "rsync-backup",
|
|
74
88
|
});
|
|
75
89
|
keyPair.applyRemovalPolicy(cdk.RemovalPolicy.DESTROY);
|
|
76
|
-
const initConfig = new ec2.InitConfig([
|
|
77
|
-
ec2.InitCommand.argvCommand([
|
|
78
|
-
"/usr/sbin/grubby",
|
|
79
|
-
"--update-kernel",
|
|
80
|
-
"ALL",
|
|
81
|
-
"--args",
|
|
82
|
-
"selinux=0",
|
|
83
|
-
]),
|
|
84
|
-
ec2.InitFile.fromString("/etc/environment", `MAX_SNAPSHOTS=${maxSnapshots}
|
|
85
|
-
S3_LOGS_BUCKET=${logsBucket.bucketName}`.replace(/^\s+/gm, "")),
|
|
86
|
-
ec2.InitFile.fromAsset("/usr/local/bin/rsync-backup", path.join(__dirname, "../assets/rsync-backup.sh"), {
|
|
87
|
-
mode: "000755",
|
|
88
|
-
}),
|
|
89
|
-
ec2.InitFile.fromAsset("/srv/rsync-backup/rsyncd.inc", path.join(__dirname, "../assets/rsyncd.inc")),
|
|
90
|
-
]);
|
|
91
|
-
if (props.modules) {
|
|
92
|
-
for (const [i, m] of props.modules.entries()) {
|
|
93
|
-
if (m.size < 0 || !Number.isInteger(m.size)) {
|
|
94
|
-
throw new Error("module size must be a positive integer");
|
|
95
|
-
}
|
|
96
|
-
const device = String.fromCharCode("b".charCodeAt(0) + i);
|
|
97
|
-
initConfig.add(ec2.InitFile.fromAsset(`/srv/rsync-backup/rsyncd.${m.name}.conf`, path.join(__dirname, "../assets/rsyncd.conf")));
|
|
98
|
-
initConfig.add(ec2.InitCommand.argvCommand([
|
|
99
|
-
"/usr/bin/sed",
|
|
100
|
-
"-i",
|
|
101
|
-
`s/@host@/${m.name}/g`,
|
|
102
|
-
`/srv/rsync-backup/rsyncd.${m.name}.conf`,
|
|
103
|
-
]));
|
|
104
|
-
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`));
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
initConfig.add(ec2.InitFile.fromAsset("/srv/rsync-backup/rsyncd.backup.conf", path.join(__dirname, "../assets/rsyncd.conf")));
|
|
109
|
-
initConfig.add(ec2.InitCommand.argvCommand([
|
|
110
|
-
"/usr/bin/sed",
|
|
111
|
-
"-i",
|
|
112
|
-
`s/@host@/backup/g`,
|
|
113
|
-
`/srv/rsync-backup/rsyncd.backup.conf`,
|
|
114
|
-
]));
|
|
115
|
-
initConfig.add(ec2.InitCommand.argvCommand([
|
|
116
|
-
"/usr/bin/sed",
|
|
117
|
-
"-i",
|
|
118
|
-
's|command=".*" |command="rsync-backup backup 100 /dev/sdb" |',
|
|
119
|
-
"/root/.ssh/authorized_keys",
|
|
120
|
-
]));
|
|
121
|
-
}
|
|
122
|
-
const init = (() => {
|
|
123
|
-
if (props.init) {
|
|
124
|
-
props.init.addConfig("rsyncBackup", initConfig);
|
|
125
|
-
return props.init;
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
return ec2.CloudFormationInit.fromConfig(initConfig);
|
|
129
|
-
}
|
|
130
|
-
})();
|
|
131
90
|
let instanceId = `Instance-${version_1.LIB_VERSION.replace(/\.\d+$/, "")}`;
|
|
132
91
|
if (props.instanceVersion) {
|
|
133
92
|
instanceId += `-${props.instanceVersion}`;
|
|
134
93
|
}
|
|
135
94
|
const instance = new ec2.Instance(this, instanceId, {
|
|
136
|
-
|
|
95
|
+
keyPair,
|
|
137
96
|
vpc,
|
|
97
|
+
vpcSubnets: {
|
|
98
|
+
subnetType: ec2.SubnetType.PUBLIC,
|
|
99
|
+
},
|
|
138
100
|
securityGroup,
|
|
139
101
|
instanceType,
|
|
140
102
|
machineImage,
|
|
141
103
|
role,
|
|
142
|
-
init,
|
|
143
104
|
});
|
|
144
|
-
instance.
|
|
145
|
-
|
|
105
|
+
instance.userData.addCommands("apt-get update", "apt-get install -y unzip", "snap install aws-cli --classic");
|
|
106
|
+
const rsync_backup_sh = new s3assets.Asset(this, "RsyncBackupSh", {
|
|
107
|
+
path: path.join(__dirname, "../assets"),
|
|
108
|
+
});
|
|
109
|
+
rsync_backup_sh.grantRead(instance);
|
|
110
|
+
const asset_path = instance.userData.addS3DownloadCommand({
|
|
111
|
+
bucket: rsync_backup_sh.bucket,
|
|
112
|
+
bucketKey: rsync_backup_sh.s3ObjectKey,
|
|
113
|
+
});
|
|
114
|
+
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`);
|
|
115
|
+
if (props.modules) {
|
|
116
|
+
for (const [i, m] of props.modules.entries()) {
|
|
117
|
+
if (m.size < 0 || !Number.isInteger(m.size)) {
|
|
118
|
+
throw new Error("module size must be a positive integer");
|
|
119
|
+
}
|
|
120
|
+
const device = String.fromCharCode("f".charCodeAt(0) + i);
|
|
121
|
+
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`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
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`);
|
|
126
|
+
}
|
|
127
|
+
instance.userData.addCommands("rm /srv/rsync-backup/rsyncd.conf");
|
|
128
|
+
let eip;
|
|
129
|
+
let eIPAssociation;
|
|
146
130
|
if (props.useEIP) {
|
|
147
|
-
eip = new ec2.CfnEIP(this, "EIP"
|
|
131
|
+
eip = new ec2.CfnEIP(this, "EIP", {
|
|
132
|
+
domain: "vpc",
|
|
133
|
+
});
|
|
148
134
|
eIPAssociation = new ec2.CfnEIPAssociation(this, "EIPAssociation", {
|
|
149
|
-
|
|
135
|
+
allocationId: eip.attrAllocationId,
|
|
150
136
|
instanceId: instance.instanceId,
|
|
151
137
|
});
|
|
152
138
|
}
|
|
@@ -155,4 +141,4 @@ class RsyncBackup extends constructs_1.Construct {
|
|
|
155
141
|
}
|
|
156
142
|
}
|
|
157
143
|
exports.RsyncBackup = RsyncBackup;
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFDekMsMkNBQXVDO0FBQ3ZDLDZCQUE2QjtBQUU3Qix1Q0FBd0M7QUF5QnhDLE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBSXhDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBMEIsRUFBRTtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQzlDLElBQUksWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzVEO1FBRUQsTUFBTSxVQUFVLEdBQ2QsS0FBSyxDQUFDLFVBQVU7WUFDaEIsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQ2hDLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLE9BQU87Z0JBQ3hDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxjQUFjO2FBQ3hDLENBQUMsQ0FBQztRQUVMLE1BQU0sR0FBRyxHQUNQLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU1RSxJQUFJLGFBQWlDLENBQUM7UUFDdEMsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1NBQ3JDO2FBQU07WUFDTCxhQUFhLEdBQUcsSUFB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LFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ2xELE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ3hDLEdBQUc7WUFDSCxhQUFhO1lBQ2IsWUFBWTtZQUNaLFlBQVk7WUFDWixJQUFJO1lBQ0osSUFBSTtTQUNMLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFL0IsSUFBSSxHQUFHLEVBQUUsY0FBYyxDQUFDO1FBQ3hCLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNoQixHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsQyxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUNqRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7Z0JBQ1osVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO2FBQ2hDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBMU1ELGtDQTBNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBMSUJfVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBSc3luY0JhY2t1cE1vZHVsZSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc3NoS2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNpemU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSc3luY0JhY2t1cFByb3BzIHtcbiAgcmVhZG9ubHkgbW9kdWxlcz86IFJzeW5jQmFja3VwTW9kdWxlW107XG4gIHJlYWRvbmx5IG1heFNuYXBzaG90cz86IG51bWJlcjtcblxuICByZWFkb25seSBpbnN0YW5jZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkga2V5TmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBlYzIuSVNlY3VyaXR5R3JvdXA7XG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZT86IGVjMi5JbnN0YW5jZVR5cGU7XG4gIHJlYWRvbmx5IGluaXQ/OiBlYzIuQ2xvdWRGb3JtYXRpb25Jbml0O1xuICByZWFkb25seSB1c2VFSVA/OiBib29sZWFuO1xuXG4gIHJlYWRvbmx5IGxvZ3NCdWNrZXQ/OiBzMy5JQnVja2V0O1xuICByZWFkb25seSBhdXRvRGVsZXRlTG9ncz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBSc3luY0JhY2t1cCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBsb2dzQnVja2V0OiBzMy5JQnVja2V0O1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2U6IGVjMi5JSW5zdGFuY2U7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJzeW5jQmFja3VwUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBtYXhTbmFwc2hvdHMgPSBwcm9wcy5tYXhTbmFwc2hvdHMgfHwgMTU7XG4gICAgaWYgKG1heFNuYXBzaG90cyA8IDAgfHwgIU51bWJlci5pc0ludGVnZXIobWF4U25hcHNob3RzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibWF4U25hcHNob3RzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ3NCdWNrZXQgPVxuICAgICAgcHJvcHMubG9nc0J1Y2tldCB8fFxuICAgICAgbmV3IHMzLkJ1Y2tldCh0aGlzLCBcIkxvZ3NCdWNrZXRcIiwge1xuICAgICAgICByZW1vdmFsUG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICBhdXRvRGVsZXRlT2JqZWN0czogcHJvcHMuYXV0b0RlbGV0ZUxvZ3MsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IHZwYyA9XG4gICAgICBwcm9wcy52cGMgfHwgY2RrLmF3c19lYzIuVnBjLmZyb21Mb29rdXAodGhpcywgXCJWUENcIiwgeyBpc0RlZmF1bHQ6IHRydWUgfSk7XG5cbiAgICBsZXQgc2VjdXJpdHlHcm91cDogZWMyLklTZWN1cml0eUdyb3VwO1xuICAgIGlmIChwcm9wcy5zZWN1cml0eUdyb3VwKSB7XG4gICAgICBzZWN1cml0eUdyb3VwID0gcHJvcHMuc2VjdXJpdHlHcm91cDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCBcIlNlY3VyaXR5R3JvdXBcIiwge1xuICAgICAgICB2cGMsXG4gICAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgc2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgICAgZWMyLlBlZXIuYW55SXB2NCgpLFxuICAgICAgICBlYzIuUG9ydC50Y3AoMjIpLFxuICAgICAgICBcIkFsbG93IFNTSCBBY2Nlc3NcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZVR5cGUgPVxuICAgICAgcHJvcHMuaW5zdGFuY2VUeXBlIHx8XG4gICAgICBlYzIuSW5zdGFuY2VUeXBlLm9mKGVjMi5JbnN0YW5jZUNsYXNzLlQ0RywgZWMyLkluc3RhbmNlU2l6ZS5OQU5PKTtcblxuICAgIGNvbnN0IG1hY2hpbmVJbWFnZSA9IGVjMi5NYWNoaW5lSW1hZ2UubGF0ZXN0QW1hem9uTGludXgyMDIzKHtcbiAgICAgIGNwdVR5cGU6XG4gICAgICAgIGluc3RhbmNlVHlwZS5hcmNoaXRlY3R1cmUgPT0gZWMyLkluc3RhbmNlQXJjaGl0ZWN0dXJlLlg4Nl82NFxuICAgICAgICAgID8gZWMyLkFtYXpvbkxpbnV4Q3B1VHlwZS5YODZfNjRcbiAgICAgICAgICA6IGVjMi5BbWF6b25MaW51eENwdVR5cGUuQVJNXzY0LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcG9saWN5ID0gbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICBcImVjMjpEZXNjcmliZUluc3RhbmNlc1wiLFxuICAgICAgICAgICAgXCJlYzI6RGVzY3JpYmVTbmFwc2hvdHNcIixcbiAgICAgICAgICAgIFwiZWMyOkRlc2NyaWJlVm9sdW1lc1wiLFxuICAgICAgICAgICAgXCJlYzI6RGVzY3JpYmVWb2x1bWVTdGF0dXNcIixcbiAgICAgICAgICAgIFwiZWMyOkF0dGFjaFZvbHVtZVwiLFxuICAgICAgICAgICAgXCJlYzI6RGV0YWNoVm9sdW1lXCIsXG4gICAgICAgICAgICBcImVjMjpDcmVhdGVWb2x1bWVcIixcbiAgICAgICAgICAgIFwiZWMyOkRlbGV0ZVZvbHVtZVwiLFxuICAgICAgICAgICAgXCJlYzI6Q3JlYXRlU25hcHNob3RcIixcbiAgICAgICAgICAgIFwiZWMyOkRlbGV0ZVNuYXBzaG90XCIsXG4gICAgICAgICAgICBcImVjMjpDcmVhdGVUYWdzXCIsXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1wiczM6UHV0T2JqZWN0XCIsIFwiczM6UHV0T2JqZWN0QWNsXCJdLFxuICAgICAgICAgIHJlc291cmNlczogW2xvZ3NCdWNrZXQuYnVja2V0QXJuLCBsb2dzQnVja2V0LmJ1Y2tldEFybiArIFwiLypcIl0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJJbnN0YW5jZVJvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJlYzIuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIHJzeW5jQmFja3VwOiBwb2xpY3ksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3Qga2V5UGFpciA9IG5ldyBlYzIuQ2ZuS2V5UGFpcih0aGlzLCBcIktleVBhaXJcIiwge1xuICAgICAga2V5TmFtZTogXCJyc3luYy1iYWNrdXBcIixcbiAgICB9KTtcbiAgICBrZXlQYWlyLmFwcGx5UmVtb3ZhbFBvbGljeShjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcblxuICAgIGNvbnN0IGluaXRDb25maWcgPSBuZXcgZWMyLkluaXRDb25maWcoW1xuICAgICAgZWMyLkluaXRDb21tYW5kLmFyZ3ZDb21tYW5kKFtcbiAgICAgICAgXCIvdXNyL3NiaW4vZ3J1YmJ5XCIsXG4gICAgICAgIFwiLS11cGRhdGUta2VybmVsXCIsXG4gICAgICAgIFwiQUxMXCIsXG4gICAgICAgIFwiLS1hcmdzXCIsXG4gICAgICAgIFwic2VsaW51eD0wXCIsXG4gICAgICBdKSxcbiAgICAgIGVjMi5Jbml0RmlsZS5mcm9tU3RyaW5nKFxuICAgICAgICBcIi9ldGMvZW52aXJvbm1lbnRcIixcbiAgICAgICAgYE1BWF9TTkFQU0hPVFM9JHttYXhTbmFwc2hvdHN9XG4gICAgICAgICBTM19MT0dTX0JVQ0tFVD0ke2xvZ3NCdWNrZXQuYnVja2V0TmFtZX1gLnJlcGxhY2UoL15cXHMrL2dtLCBcIlwiKVxuICAgICAgKSxcbiAgICAgIGVjMi5Jbml0RmlsZS5mcm9tQXNzZXQoXG4gICAgICAgIFwiL3Vzci9sb2NhbC9iaW4vcnN5bmMtYmFja3VwXCIsXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vYXNzZXRzL3JzeW5jLWJhY2t1cC5zaFwiKSxcbiAgICAgICAge1xuICAgICAgICAgIG1vZGU6IFwiMDAwNzU1XCIsXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBlYzIuSW5pdEZpbGUuZnJvbUFzc2V0KFxuICAgICAgICBcIi9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC5pbmNcIixcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9hc3NldHMvcnN5bmNkLmluY1wiKVxuICAgICAgKSxcbiAgICBdKTtcblxuICAgIGlmIChwcm9wcy5tb2R1bGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtpLCBtXSBvZiBwcm9wcy5tb2R1bGVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAobS5zaXplIDwgMCB8fCAhTnVtYmVyLmlzSW50ZWdlcihtLnNpemUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibW9kdWxlIHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZXZpY2UgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFwiYlwiLmNoYXJDb2RlQXQoMCkgKyBpKTtcblxuICAgICAgICBpbml0Q29uZmlnLmFkZChcbiAgICAgICAgICBlYzIuSW5pdEZpbGUuZnJvbUFzc2V0KFxuICAgICAgICAgICAgYC9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC4ke20ubmFtZX0uY29uZmAsXG4gICAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL2Fzc2V0cy9yc3luY2QuY29uZlwiKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgaW5pdENvbmZpZy5hZGQoXG4gICAgICAgICAgZWMyLkluaXRDb21tYW5kLmFyZ3ZDb21tYW5kKFtcbiAgICAgICAgICAgIFwiL3Vzci9iaW4vc2VkXCIsXG4gICAgICAgICAgICBcIi1pXCIsXG4gICAgICAgICAgICBgcy9AaG9zdEAvJHttLm5hbWV9L2dgLFxuICAgICAgICAgICAgYC9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC4ke20ubmFtZX0uY29uZmAsXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgICAgaW5pdENvbmZpZy5hZGQoXG4gICAgICAgICAgZWMyLkluaXRDb21tYW5kLnNoZWxsQ29tbWFuZChcbiAgICAgICAgICAgIGBlY2hvICduby1wb3J0LWZvcndhcmRpbmcsbm8tYWdlbnQtZm9yd2FyZGluZyxuby1YMTEtZm9yd2FyZGluZyxjb21tYW5kPVwicnN5bmMtYmFja3VwICR7bS5uYW1lfSAke20uc2l6ZX0gL2Rldi9zZCR7ZGV2aWNlfVwiICR7bS5zc2hLZXl9JyA+PiAvcm9vdC8uc3NoL2F1dGhvcml6ZWRfa2V5c2BcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluaXRDb25maWcuYWRkKFxuICAgICAgICBlYzIuSW5pdEZpbGUuZnJvbUFzc2V0KFxuICAgICAgICAgIFwiL3Nydi9yc3luYy1iYWNrdXAvcnN5bmNkLmJhY2t1cC5jb25mXCIsXG4gICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9hc3NldHMvcnN5bmNkLmNvbmZcIilcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGluaXRDb25maWcuYWRkKFxuICAgICAgICBlYzIuSW5pdENvbW1hbmQuYXJndkNvbW1hbmQoW1xuICAgICAgICAgIFwiL3Vzci9iaW4vc2VkXCIsXG4gICAgICAgICAgXCItaVwiLFxuICAgICAgICAgIGBzL0Bob3N0QC9iYWNrdXAvZ2AsXG4gICAgICAgICAgYC9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC5iYWNrdXAuY29uZmAsXG4gICAgICAgIF0pXG4gICAgICApO1xuICAgICAgaW5pdENvbmZpZy5hZGQoXG4gICAgICAgIGVjMi5Jbml0Q29tbWFuZC5hcmd2Q29tbWFuZChbXG4gICAgICAgICAgXCIvdXNyL2Jpbi9zZWRcIixcbiAgICAgICAgICBcIi1pXCIsXG4gICAgICAgICAgJ3N8Y29tbWFuZD1cIi4qXCIgfGNvbW1hbmQ9XCJyc3luYy1iYWNrdXAgYmFja3VwIDEwMCAvZGV2L3NkYlwiIHwnLFxuICAgICAgICAgIFwiL3Jvb3QvLnNzaC9hdXRob3JpemVkX2tleXNcIixcbiAgICAgICAgXSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5pdCA9ICgoKSA9PiB7XG4gICAgICBpZiAocHJvcHMuaW5pdCkge1xuICAgICAgICBwcm9wcy5pbml0LmFkZENvbmZpZyhcInJzeW5jQmFja3VwXCIsIGluaXRDb25maWcpO1xuICAgICAgICByZXR1cm4gcHJvcHMuaW5pdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlYzIuQ2xvdWRGb3JtYXRpb25Jbml0LmZyb21Db25maWcoaW5pdENvbmZpZyk7XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIGxldCBpbnN0YW5jZUlkID0gYEluc3RhbmNlLSR7TElCX1ZFUlNJT04ucmVwbGFjZSgvXFwuXFxkKyQvLCBcIlwiKX1gO1xuICAgIGlmIChwcm9wcy5pbnN0YW5jZVZlcnNpb24pIHtcbiAgICAgIGluc3RhbmNlSWQgKz0gYC0ke3Byb3BzLmluc3RhbmNlVmVyc2lvbn1gO1xuICAgIH1cbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBlYzIuSW5zdGFuY2UodGhpcywgaW5zdGFuY2VJZCwge1xuICAgICAga2V5TmFtZTogY2RrLlRva2VuLmFzU3RyaW5nKGtleVBhaXIucmVmKSxcbiAgICAgIHZwYyxcbiAgICAgIHNlY3VyaXR5R3JvdXAsXG4gICAgICBpbnN0YW5jZVR5cGUsXG4gICAgICBtYWNoaW5lSW1hZ2UsXG4gICAgICByb2xlLFxuICAgICAgaW5pdCxcbiAgICB9KTtcblxuICAgIGluc3RhbmNlLmFkZFVzZXJEYXRhKFwicmVib290XCIpO1xuXG4gICAgbGV0IGVpcCwgZUlQQXNzb2NpYXRpb247XG4gICAgaWYgKHByb3BzLnVzZUVJUCkge1xuICAgICAgZWlwID0gbmV3IGVjMi5DZm5FSVAodGhpcywgXCJFSVBcIik7XG4gICAgICBlSVBBc3NvY2lhdGlvbiA9IG5ldyBlYzIuQ2ZuRUlQQXNzb2NpYXRpb24odGhpcywgXCJFSVBBc3NvY2lhdGlvblwiLCB7XG4gICAgICAgIGVpcDogZWlwLnJlZixcbiAgICAgICAgaW5zdGFuY2VJZDogaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMubG9nc0J1Y2tldCA9IGxvZ3NCdWNrZXQ7XG4gICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICB9XG59XG4iXX0=
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFDekMsc0RBQXNEO0FBQ3RELDJDQUF1QztBQUN2Qyw2QkFBNkI7QUFFN0IsdUNBQXdDO0FBd0J4QyxNQUFhLFdBQVksU0FBUSxzQkFBUztJQUl4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQTBCLEVBQUU7UUFDcEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxNQUFNLFVBQVUsR0FDZCxLQUFLLENBQUMsVUFBVTtZQUNoQixJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtnQkFDaEMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsT0FBTztnQkFDeEMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGNBQWM7YUFDeEMsQ0FBQyxDQUFDO1FBRUwsTUFBTSxHQUFHLEdBQ1AsS0FBSyxDQUFDLEdBQUc7WUFDVCxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7Z0JBQy9CLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVU7Z0JBQ3JDLFdBQVcsRUFBRSxDQUFDO2dCQUNkLG1CQUFtQixFQUFFO29CQUNuQjt3QkFDRSxJQUFJLEVBQUUsUUFBUTt3QkFDZCxVQUFVLEVBQUUsR0FBRyxDQUFD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Y0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDakUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxnQkFBZ0I7Z0JBQ2xDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTthQUNoQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBbExELGtDQWtMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgKiBhcyBzM2Fzc2V0cyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0c1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgTElCX1ZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnN5bmNCYWNrdXBNb2R1bGUge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNzaEtleTogc3RyaW5nO1xuICByZWFkb25seSBzaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnN5bmNCYWNrdXBQcm9wcyB7XG4gIHJlYWRvbmx5IG1vZHVsZXM/OiBSc3luY0JhY2t1cE1vZHVsZVtdO1xuICByZWFkb25seSBtYXhTbmFwc2hvdHM/OiBudW1iZXI7XG5cbiAgcmVhZG9ubHkgaW5zdGFuY2VWZXJzaW9uPzogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IGtleU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwPzogZWMyLklTZWN1cml0eUdyb3VwO1xuICByZWFkb25seSBpbnN0YW5jZVR5cGU/OiBlYzIuSW5zdGFuY2VUeXBlO1xuICByZWFkb25seSB1c2VFSVA/OiBib29sZWFuO1xuXG4gIHJlYWRvbmx5IGxvZ3NCdWNrZXQ/OiBzMy5JQnVja2V0O1xuICByZWFkb25seSBhdXRvRGVsZXRlTG9ncz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBSc3luY0JhY2t1cCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBsb2dzQnVja2V0OiBzMy5JQnVja2V0O1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2U6IGVjMi5JSW5zdGFuY2U7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJzeW5jQmFja3VwUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBtYXhTbmFwc2hvdHMgPSBwcm9wcy5tYXhTbmFwc2hvdHMgfHwgMTU7XG4gICAgaWYgKG1heFNuYXBzaG90cyA8IDAgfHwgIU51bWJlci5pc0ludGVnZXIobWF4U25hcHNob3RzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibWF4U25hcHNob3RzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ3NCdWNrZXQgPVxuICAgICAgcHJvcHMubG9nc0J1Y2tldCB8fFxuICAgICAgbmV3IHMzLkJ1Y2tldCh0aGlzLCBcIkxvZ3NCdWNrZXRcIiwge1xuICAgICAgICByZW1vdmFsUG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICBhdXRvRGVsZXRlT2JqZWN0czogcHJvcHMuYXV0b0RlbGV0ZUxvZ3MsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IHZwYyA9XG4gICAgICBwcm9wcy52cGMgfHxcbiAgICAgIG5ldyBjZGsuYXdzX2VjMi5WcGModGhpcywgXCJWcGNcIiwge1xuICAgICAgICBpcFByb3RvY29sOiBlYzIuSXBQcm90b2NvbC5EVUFMX1NUQUNLLFxuICAgICAgICBuYXRHYXRld2F5czogMCxcbiAgICAgICAgc3VibmV0Q29uZmlndXJhdGlvbjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiUHVibGljXCIsXG4gICAgICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgbGV0IHNlY3VyaXR5R3JvdXA6IGVjMi5JU2VjdXJpdHlHcm91cDtcbiAgICBpZiAocHJvcHMuc2VjdXJpdHlHcm91cCkge1xuICAgICAgc2VjdXJpdHlHcm91cCA9IHByb3BzLnNlY3VyaXR5R3JvdXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgXCJTZWN1cml0eUdyb3VwXCIsIHtcbiAgICAgICAgdnBjLFxuICAgICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIHNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICAgIGVjMi5QZWVyLmFueUlwdjQoKSxcbiAgICAgICAgZWMyLlBvcnQudGNwKDIyKSxcbiAgICAgICAgXCJBbGxvdyBTU0ggQWNjZXNzXCIsXG4gICAgICApO1xuICAgICAgc2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgICAgZWMyLlBlZXIuYW55SXB2NigpLFxuICAgICAgICBlYzIuUG9ydC50Y3AoMjIpLFxuICAgICAgICBcIkFsbG93IFNTSCBBY2Nlc3NcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2VUeXBlID1cbiAgICAgIHByb3BzLmluc3RhbmNlVHlwZSB8fFxuICAgICAgZWMyLkluc3RhbmNlVHlwZS5vZihlYzIuSW5zdGFuY2VDbGFzcy5UNEcsIGVjMi5JbnN0YW5jZVNpemUuTkFOTyk7XG5cbiAgICBjb25zdCBhcmNoID1cbiAgICAgIGluc3RhbmNlVHlwZS5hcmNoaXRlY3R1cmUgPT0gZWMyLkluc3RhbmNlQXJjaGl0ZWN0dXJlLkFSTV82NFxuICAgICAgICA/IFwiYXJtNjRcIlxuICAgICAgICA6IFwiYW1kNjRcIjtcbiAgICBjb25zdCBtYWNoaW5lSW1hZ2UgPSBlYzIuTWFjaGluZUltYWdlLmxvb2t1cCh7XG4gICAgICBuYW1lOiBgdWJ1bnR1L2ltYWdlcy9odm0tc3NkLWdwMy91YnVudHUtbm9ibGUtMjQuMDQtJHthcmNofS1zZXJ2ZXItKmAsXG4gICAgICBvd25lcnM6IFtcIjA5OTcyMDEwOTQ3N1wiXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvbGljeSA9IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgXCJlYzI6RGVzY3JpYmVJbnN0YW5jZXNcIixcbiAgICAgICAgICAgIFwiZWMyOkRlc2NyaWJlU25hcHNob3RzXCIsXG4gICAgICAgICAgICBcImVjMjpEZXNjcmliZVZvbHVtZXNcIixcbiAgICAgICAgICAgIFwiZWMyOkRlc2NyaWJlVm9sdW1lU3RhdHVzXCIsXG4gICAgICAgICAgICBcImVjMjpBdHRhY2hWb2x1bWVcIixcbiAgICAgICAgICAgIFwiZWMyOkRldGFjaFZvbHVtZVwiLFxuICAgICAgICAgICAgXCJlYzI6Q3JlYXRlVm9sdW1lXCIsXG4gICAgICAgICAgICBcImVjMjpEZWxldGVWb2x1bWVcIixcbiAgICAgICAgICAgIFwiZWMyOkNyZWF0ZVNuYXBzaG90XCIsXG4gICAgICAgICAgICBcImVjMjpEZWxldGVTbmFwc2hvdFwiLFxuICAgICAgICAgICAgXCJlYzI6Q3JlYXRlVGFnc1wiLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcInMzOlB1dE9iamVjdFwiLCBcInMzOlB1dE9iamVjdEFjbFwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtsb2dzQnVja2V0LmJ1Y2tldEFybiwgbG9nc0J1Y2tldC5idWNrZXRBcm4gKyBcIi8qXCJdLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiSW5zdGFuY2VSb2xlXCIsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiZWMyLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICByc3luY0JhY2t1cDogcG9saWN5LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgZWMyLktleVBhaXIodGhpcywgXCJLZXlQYWlyXCIsIHtcbiAgICAgIGtleVBhaXJOYW1lOiBcInJzeW5jLWJhY2t1cFwiLFxuICAgIH0pO1xuICAgIGtleVBhaXIuYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuXG4gICAgbGV0IGluc3RhbmNlSWQgPSBgSW5zdGFuY2UtJHtMSUJfVkVSU0lPTi5yZXBsYWNlKC9cXC5cXGQrJC8sIFwiXCIpfWA7XG4gICAgaWYgKHByb3BzLmluc3RhbmNlVmVyc2lvbikge1xuICAgICAgaW5zdGFuY2VJZCArPSBgLSR7cHJvcHMuaW5zdGFuY2VWZXJzaW9ufWA7XG4gICAgfVxuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZSh0aGlzLCBpbnN0YW5jZUlkLCB7XG4gICAgICBrZXlQYWlyLFxuICAgICAgdnBjLFxuICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICB9LFxuICAgICAgc2VjdXJpdHlHcm91cCxcbiAgICAgIGluc3RhbmNlVHlwZSxcbiAgICAgIG1hY2hpbmVJbWFnZSxcbiAgICAgIHJvbGUsXG4gICAgfSk7XG5cbiAgICBpbnN0YW5jZS51c2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIFwiYXB0LWdldCB1cGRhdGVcIixcbiAgICAgIFwiYXB0LWdldCBpbnN0YWxsIC15IHVuemlwXCIsXG4gICAgICBcInNuYXAgaW5zdGFsbCBhd3MtY2xpIC0tY2xhc3NpY1wiLFxuICAgICk7XG5cbiAgICBjb25zdCByc3luY19iYWNrdXBfc2ggPSBuZXcgczNhc3NldHMuQXNzZXQodGhpcywgXCJSc3luY0JhY2t1cFNoXCIsIHtcbiAgICAgIHBhdGg6IHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vYXNzZXRzXCIpLFxuICAgIH0pO1xuICAgIHJzeW5jX2JhY2t1cF9zaC5ncmFudFJlYWQoaW5zdGFuY2UpO1xuICAgIGNvbnN0IGFzc2V0X3BhdGggPSBpbnN0YW5jZS51c2VyRGF0YS5hZGRTM0Rvd25sb2FkQ29tbWFuZCh7XG4gICAgICBidWNrZXQ6IHJzeW5jX2JhY2t1cF9zaC5idWNrZXQsXG4gICAgICBidWNrZXRLZXk6IHJzeW5jX2JhY2t1cF9zaC5zM09iamVjdEtleSxcbiAgICB9KTtcblxuICAgIGluc3RhbmNlLnVzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgYHVuemlwICR7YXNzZXRfcGF0aH0gLWQgL3Nydi9yc3luYy1iYWNrdXBgLFxuICAgICAgYHJtICR7YXNzZXRfcGF0aH1gLFxuICAgICAgXCJtdiAvc3J2L3JzeW5jLWJhY2t1cC9yc3luYy1iYWNrdXAuc2ggL3Vzci9sb2NhbC9iaW4vcnN5bmMtYmFja3VwXCIsXG4gICAgICBgZWNobyBNQVhfU05BUFNIT1RTPSR7bWF4U25hcHNob3RzfSA+PiAvZXRjL2Vudmlyb25tZW50YCxcbiAgICAgIGBlY2hvIFMzX0xPR1NfQlVDS0VUPSR7bG9nc0J1Y2tldC5idWNrZXROYW1lfSA+PiAvZXRjL2Vudmlyb25tZW50YCxcbiAgICApO1xuXG4gICAgaWYgKHByb3BzLm1vZHVsZXMpIHtcbiAgICAgIGZvciAoY29uc3QgW2ksIG1dIG9mIHByb3BzLm1vZHVsZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChtLnNpemUgPCAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG0uc2l6ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtb2R1bGUgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZXZpY2UgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFwiZlwiLmNoYXJDb2RlQXQoMCkgKyBpKTtcbiAgICAgICAgaW5zdGFuY2UudXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICAgICAgYGNwIC9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC5jb25mIC9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC4ke20ubmFtZX0uY29uZmAsXG4gICAgICAgICAgYHNlZCAtaSAncy9AaG9zdEAvJHttLm5hbWV9L2cnIC9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC4ke20ubmFtZX0uY29uZmAsXG4gICAgICAgICAgYGVjaG8gJ25vLXBvcnQtZm9yd2FyZGluZyxuby1hZ2VudC1mb3J3YXJkaW5nLG5vLVgxMS1mb3J3YXJkaW5nLGNvbW1hbmQ9XCJyc3luYy1iYWNrdXAgJHttLm5hbWV9ICR7bS5zaXplfSAvZGV2L3NkJHtkZXZpY2V9XCIgJHttLnNzaEtleX0nID4+IC9yb290Ly5zc2gvYXV0aG9yaXplZF9rZXlzYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2UudXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICAgIFwiY3AgL3Nydi9yc3luYy1iYWNrdXAvcnN5bmNkLmNvbmYgL3Nydi9yc3luYy1iYWNrdXAvcnN5bmNkLmJhY2t1cC5jb25mXCIsXG4gICAgICAgIFwic2VkIC1pICdzL0Bob3N0QC9iYWNrdXAvZycgL3Nydi9yc3luYy1iYWNrdXAvcnN5bmNkLmJhY2t1cC5jb25mXCIsXG4gICAgICAgIGBzZWQgLWkgJ3N8Y29tbWFuZD1cIi4qXCIgfGNvbW1hbmQ9XCJyc3luYy1iYWNrdXAgYmFja3VwIDEwMCAvZGV2L3NkZlwiIHwnIC9yb290Ly5zc2gvYXV0aG9yaXplZF9rZXlzYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGluc3RhbmNlLnVzZXJEYXRhLmFkZENvbW1hbmRzKFwicm0gL3Nydi9yc3luYy1iYWNrdXAvcnN5bmNkLmNvbmZcIik7XG5cbiAgICBsZXQgZWlwOiBlYzIuQ2ZuRUlQIHwgdW5kZWZpbmVkO1xuICAgIGxldCBlSVBBc3NvY2lhdGlvbjogZWMyLkNmbkVJUEFzc29jaWF0aW9uIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy51c2VFSVApIHtcbiAgICAgIGVpcCA9IG5ldyBlYzIuQ2ZuRUlQKHRoaXMsIFwiRUlQXCIsIHtcbiAgICAgICAgZG9tYWluOiBcInZwY1wiLFxuICAgICAgfSk7XG4gICAgICBlSVBBc3NvY2lhdGlvbiA9IG5ldyBlYzIuQ2ZuRUlQQXNzb2NpYXRpb24odGhpcywgXCJFSVBBc3NvY2lhdGlvblwiLCB7XG4gICAgICAgIGFsbG9jYXRpb25JZDogZWlwLmF0dHJBbGxvY2F0aW9uSWQsXG4gICAgICAgIGluc3RhbmNlSWQ6IGluc3RhbmNlLmluc3RhbmNlSWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZ3NCdWNrZXQgPSBsb2dzQnVja2V0O1xuICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgfVxufVxuIl19
|
package/lib/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "0.
|
|
1
|
+
export declare const LIB_VERSION = "0.5.1";
|
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.
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
exports.LIB_VERSION = "0.5.1";
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxXQUFXLEdBQUcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IExJQl9WRVJTSU9OID0gXCIwLjUuMVwiO1xuIl19
|
package/package.json
CHANGED
|
@@ -1,40 +1,39 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anyakichi/cdk-rsync-backup",
|
|
3
|
+
"version": "0.5.1",
|
|
3
4
|
"description": "AWS CDK L3 construct for cloud backup system with rsync",
|
|
4
|
-
"
|
|
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": "^
|
|
21
|
-
"@types/jest": "^
|
|
22
|
-
"@types/node": "
|
|
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": "^
|
|
27
|
-
"prettier": "^
|
|
28
|
-
"
|
|
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.
|
|
33
|
+
"typescript": "~5.9.3"
|
|
31
34
|
},
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"backup",
|
|
37
|
-
"cdk",
|
|
38
|
-
"rsync"
|
|
39
|
-
]
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"aws-cdk-lib": "^2.0.0",
|
|
37
|
+
"constructs": "^10.0.0"
|
|
38
|
+
}
|
|
40
39
|
}
|