deployed to 7thsaga.tmont.com

This commit is contained in:
tmont 2021-08-26 11:31:53 -07:00
parent 17dcaf311e
commit 4a1d91fd0d
13 changed files with 1061 additions and 1312 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
.idea
node_modules
scraped

754
package-lock.json generated
View File

@ -4,6 +4,724 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@aws-crypto/ie11-detection": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-1.0.0.tgz",
"integrity": "sha512-kCKVhCF1oDxFYgQrxXmIrS5oaWulkvRcPz+QBDMsUr2crbF4VGgGT6+uQhSwJFdUAQ2A//Vq+uT83eJrkzFgXA==",
"dev": true,
"requires": {
"tslib": "^1.11.1"
},
"dependencies": {
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
}
}
},
"@aws-crypto/sha256-browser": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-1.1.1.tgz",
"integrity": "sha512-nS4vdan97It6HcweV58WXtjPbPSc0JXd3sAwlw3Ou5Mc3WllSycAS32Tv2LRn8butNQoU9AE3jEQAOgiMdNC1Q==",
"dev": true,
"requires": {
"@aws-crypto/ie11-detection": "^1.0.0",
"@aws-crypto/sha256-js": "^1.1.0",
"@aws-crypto/supports-web-crypto": "^1.0.0",
"@aws-sdk/types": "^3.1.0",
"@aws-sdk/util-locate-window": "^3.0.0",
"@aws-sdk/util-utf8-browser": "^3.0.0",
"tslib": "^1.11.1"
},
"dependencies": {
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
}
}
},
"@aws-crypto/sha256-js": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.1.0.tgz",
"integrity": "sha512-VIhuqbPgXDVr8sZe2yhgQcDRRmzf4CI8fmC1A3bHiRfE6wlz1d8KpeemqbuoEHotz/Dch9yOxlshyQDNjNFeHA==",
"dev": true,
"requires": {
"@aws-sdk/types": "^3.1.0",
"@aws-sdk/util-utf8-browser": "^3.0.0",
"tslib": "^1.11.1"
},
"dependencies": {
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
}
}
},
"@aws-crypto/supports-web-crypto": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-1.0.0.tgz",
"integrity": "sha512-IHLfv+WmVH89EW4n6a5eE8/hUlz6qkWGMn/v4r5ZgzcXdTC5nolii2z3k46y01hWRiC2PPhOdeSLzMUCUMco7g==",
"dev": true,
"requires": {
"tslib": "^1.11.1"
},
"dependencies": {
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
}
}
},
"@aws-sdk/abort-controller": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.25.0.tgz",
"integrity": "sha512-uEVKqKkPVz6atbCxCNJY5O7V+ieSK8crUswXo8/WePyEbGEgxJ4t9x/WG4lV8kBjelmvQHDR4GqfJmb5Sh9xSg==",
"dev": true,
"requires": {
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/client-cloudformation": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.27.0.tgz",
"integrity": "sha512-UiDdRkYRQ/wEWBEZce85s1Gz0xWxSDvy4tHgmWAuqVaUyUmlCdOek+wAvMqj8KjXW5i1zAGR8D2eZdJ8BoApRw==",
"dev": true,
"requires": {
"@aws-crypto/sha256-browser": "^1.0.0",
"@aws-crypto/sha256-js": "^1.0.0",
"@aws-sdk/client-sts": "3.27.0",
"@aws-sdk/config-resolver": "3.27.0",
"@aws-sdk/credential-provider-node": "3.27.0",
"@aws-sdk/fetch-http-handler": "3.25.0",
"@aws-sdk/hash-node": "3.25.0",
"@aws-sdk/invalid-dependency": "3.25.0",
"@aws-sdk/middleware-content-length": "3.25.0",
"@aws-sdk/middleware-host-header": "3.25.0",
"@aws-sdk/middleware-logger": "3.25.0",
"@aws-sdk/middleware-retry": "3.27.0",
"@aws-sdk/middleware-serde": "3.25.0",
"@aws-sdk/middleware-signing": "3.27.0",
"@aws-sdk/middleware-stack": "3.25.0",
"@aws-sdk/middleware-user-agent": "3.25.0",
"@aws-sdk/node-config-provider": "3.27.0",
"@aws-sdk/node-http-handler": "3.25.0",
"@aws-sdk/protocol-http": "3.25.0",
"@aws-sdk/smithy-client": "3.27.0",
"@aws-sdk/types": "3.25.0",
"@aws-sdk/url-parser": "3.25.0",
"@aws-sdk/util-base64-browser": "3.23.0",
"@aws-sdk/util-base64-node": "3.23.0",
"@aws-sdk/util-body-length-browser": "3.23.0",
"@aws-sdk/util-body-length-node": "3.23.0",
"@aws-sdk/util-user-agent-browser": "3.25.0",
"@aws-sdk/util-user-agent-node": "3.27.0",
"@aws-sdk/util-utf8-browser": "3.23.0",
"@aws-sdk/util-utf8-node": "3.23.0",
"@aws-sdk/util-waiter": "3.25.0",
"entities": "2.2.0",
"fast-xml-parser": "3.19.0",
"tslib": "^2.3.0",
"uuid": "^8.3.2"
}
},
"@aws-sdk/client-sso": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.27.0.tgz",
"integrity": "sha512-/Op+OaQgcAG/FyyqJc2NVfIJWEd1cTWIl8gBWSTUugrhhd5rMnAtg3u5ds/tYUimVQJv03z4bDjbI0Rnv/t6XQ==",
"dev": true,
"requires": {
"@aws-crypto/sha256-browser": "^1.0.0",
"@aws-crypto/sha256-js": "^1.0.0",
"@aws-sdk/config-resolver": "3.27.0",
"@aws-sdk/fetch-http-handler": "3.25.0",
"@aws-sdk/hash-node": "3.25.0",
"@aws-sdk/invalid-dependency": "3.25.0",
"@aws-sdk/middleware-content-length": "3.25.0",
"@aws-sdk/middleware-host-header": "3.25.0",
"@aws-sdk/middleware-logger": "3.25.0",
"@aws-sdk/middleware-retry": "3.27.0",
"@aws-sdk/middleware-serde": "3.25.0",
"@aws-sdk/middleware-stack": "3.25.0",
"@aws-sdk/middleware-user-agent": "3.25.0",
"@aws-sdk/node-config-provider": "3.27.0",
"@aws-sdk/node-http-handler": "3.25.0",
"@aws-sdk/protocol-http": "3.25.0",
"@aws-sdk/smithy-client": "3.27.0",
"@aws-sdk/types": "3.25.0",
"@aws-sdk/url-parser": "3.25.0",
"@aws-sdk/util-base64-browser": "3.23.0",
"@aws-sdk/util-base64-node": "3.23.0",
"@aws-sdk/util-body-length-browser": "3.23.0",
"@aws-sdk/util-body-length-node": "3.23.0",
"@aws-sdk/util-user-agent-browser": "3.25.0",
"@aws-sdk/util-user-agent-node": "3.27.0",
"@aws-sdk/util-utf8-browser": "3.23.0",
"@aws-sdk/util-utf8-node": "3.23.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/client-sts": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.27.0.tgz",
"integrity": "sha512-QagsjULn6eacR/IL9d/nky17jUcqnbeShrHGrAyOhAXtehG3g2kkFcGbFy30iNw8gl1LteZL9dslpPFdWIEI1A==",
"dev": true,
"requires": {
"@aws-crypto/sha256-browser": "^1.0.0",
"@aws-crypto/sha256-js": "^1.0.0",
"@aws-sdk/config-resolver": "3.27.0",
"@aws-sdk/credential-provider-node": "3.27.0",
"@aws-sdk/fetch-http-handler": "3.25.0",
"@aws-sdk/hash-node": "3.25.0",
"@aws-sdk/invalid-dependency": "3.25.0",
"@aws-sdk/middleware-content-length": "3.25.0",
"@aws-sdk/middleware-host-header": "3.25.0",
"@aws-sdk/middleware-logger": "3.25.0",
"@aws-sdk/middleware-retry": "3.27.0",
"@aws-sdk/middleware-sdk-sts": "3.27.0",
"@aws-sdk/middleware-serde": "3.25.0",
"@aws-sdk/middleware-signing": "3.27.0",
"@aws-sdk/middleware-stack": "3.25.0",
"@aws-sdk/middleware-user-agent": "3.25.0",
"@aws-sdk/node-config-provider": "3.27.0",
"@aws-sdk/node-http-handler": "3.25.0",
"@aws-sdk/protocol-http": "3.25.0",
"@aws-sdk/smithy-client": "3.27.0",
"@aws-sdk/types": "3.25.0",
"@aws-sdk/url-parser": "3.25.0",
"@aws-sdk/util-base64-browser": "3.23.0",
"@aws-sdk/util-base64-node": "3.23.0",
"@aws-sdk/util-body-length-browser": "3.23.0",
"@aws-sdk/util-body-length-node": "3.23.0",
"@aws-sdk/util-user-agent-browser": "3.25.0",
"@aws-sdk/util-user-agent-node": "3.27.0",
"@aws-sdk/util-utf8-browser": "3.23.0",
"@aws-sdk/util-utf8-node": "3.23.0",
"entities": "2.2.0",
"fast-xml-parser": "3.19.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/config-resolver": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.27.0.tgz",
"integrity": "sha512-gc7dfBzdmUHJamMjOc0bzAkIm3VUIK9kbLQSy0+nfjT641+AYvXO3qpjR6ywvutsbKhBg5kyGn/4QhyRxg61OQ==",
"dev": true,
"requires": {
"@aws-sdk/signature-v4": "3.25.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/credential-provider-env": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.27.0.tgz",
"integrity": "sha512-IbPdlYl0A5GcpuT394cJceexxo0tzUzC7jIUxqL8gNbB/MIXC5ZlkeX9Z7bYloNb8SXk7GumXyQTsK1CchUvQA==",
"dev": true,
"requires": {
"@aws-sdk/property-provider": "3.27.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/credential-provider-imds": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.27.0.tgz",
"integrity": "sha512-rhzlEvxiB7ecpVDl3NkjP1vPmqs+HHmqNXrK4efOYshwIbu+/h3xPePQMBOQ0AGezYn3k/iumoXXysVhVqtwUA==",
"dev": true,
"requires": {
"@aws-sdk/node-config-provider": "3.27.0",
"@aws-sdk/property-provider": "3.27.0",
"@aws-sdk/types": "3.25.0",
"@aws-sdk/url-parser": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/credential-provider-ini": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.27.0.tgz",
"integrity": "sha512-jvWUDz6nFqUvjmPRebwf1mWsOZ+inmZNQxz20DC/ROCRfGF1y8Yqf7KgCJy8MQOlDdTA4lPS+w6OJ0J/OOGbPg==",
"dev": true,
"requires": {
"@aws-sdk/credential-provider-env": "3.27.0",
"@aws-sdk/credential-provider-imds": "3.27.0",
"@aws-sdk/credential-provider-sso": "3.27.0",
"@aws-sdk/credential-provider-web-identity": "3.27.0",
"@aws-sdk/property-provider": "3.27.0",
"@aws-sdk/shared-ini-file-loader": "3.23.0",
"@aws-sdk/types": "3.25.0",
"@aws-sdk/util-credentials": "3.23.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/credential-provider-node": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.27.0.tgz",
"integrity": "sha512-GfCDX/AA7EJKyVGmNnh3wngWfEWFkuNJyend6FLN+81s3kUpXTkILuZCwQrD9AyjBYR2ksv0t929nW2fBUGT9Q==",
"dev": true,
"requires": {
"@aws-sdk/credential-provider-env": "3.27.0",
"@aws-sdk/credential-provider-imds": "3.27.0",
"@aws-sdk/credential-provider-ini": "3.27.0",
"@aws-sdk/credential-provider-process": "3.27.0",
"@aws-sdk/credential-provider-sso": "3.27.0",
"@aws-sdk/credential-provider-web-identity": "3.27.0",
"@aws-sdk/property-provider": "3.27.0",
"@aws-sdk/shared-ini-file-loader": "3.23.0",
"@aws-sdk/types": "3.25.0",
"@aws-sdk/util-credentials": "3.23.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/credential-provider-process": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.27.0.tgz",
"integrity": "sha512-F9pqKKnd5+fwoldVQJX9uLbDyPyIDnCpZGbiTw6BZANZM1qhjoEn7rNE5g2h0tkeq4dWMA9bANKMR4j3YhTpXw==",
"dev": true,
"requires": {
"@aws-sdk/property-provider": "3.27.0",
"@aws-sdk/shared-ini-file-loader": "3.23.0",
"@aws-sdk/types": "3.25.0",
"@aws-sdk/util-credentials": "3.23.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/credential-provider-sso": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.27.0.tgz",
"integrity": "sha512-yXyy+/FYFtpnRmPBiw5rxwSQBj1pcI0R+z77EA8a8+tozZPjsIri+xBsU62DtIlv/2yVb/goPgw+w2vg0L4NFw==",
"dev": true,
"requires": {
"@aws-sdk/client-sso": "3.27.0",
"@aws-sdk/property-provider": "3.27.0",
"@aws-sdk/shared-ini-file-loader": "3.23.0",
"@aws-sdk/types": "3.25.0",
"@aws-sdk/util-credentials": "3.23.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/credential-provider-web-identity": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.27.0.tgz",
"integrity": "sha512-FYvDzB4UqmJjY+ZZoIAPM1EFK9/RdNn1VT5xvDcebQe7xKOVUG1tZbOA4rVZ3MUcxfyRqp7Ou/AhIWu/9RSt2Q==",
"dev": true,
"requires": {
"@aws-sdk/property-provider": "3.27.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/fetch-http-handler": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.25.0.tgz",
"integrity": "sha512-792kkbfSRBdiFb7Q2cDJts9MKxzAwuQSwUIwRKAOMazU8HkKbKnXXAFSsK3T7VasOFOh7O7YEGN0q9UgEw1q+g==",
"dev": true,
"requires": {
"@aws-sdk/protocol-http": "3.25.0",
"@aws-sdk/querystring-builder": "3.25.0",
"@aws-sdk/types": "3.25.0",
"@aws-sdk/util-base64-browser": "3.23.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/hash-node": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.25.0.tgz",
"integrity": "sha512-qRn6iqG9VLt8D29SBABcbauDLn92ssMjtpyVApiOhDYyFm2VA2avomOHD6y2PRBMwM5FMQAygZbpA2HIN2F96w==",
"dev": true,
"requires": {
"@aws-sdk/types": "3.25.0",
"@aws-sdk/util-buffer-from": "3.23.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/invalid-dependency": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.25.0.tgz",
"integrity": "sha512-ZBXjBAF2JSiO/wGBa1oaXsd1q5YG3diS8TfIUMXeQoe9O66R5LGoGOQeAbB/JjlwFot6DZfAcfocvl6CtWwqkw==",
"dev": true,
"requires": {
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/is-array-buffer": {
"version": "3.23.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.23.0.tgz",
"integrity": "sha512-XN20/scFthok0lCbjtinW77CoIBoar8cbOzmu+HkYTnBBpJrF6Ai5g9sgglO8r+X+OLn4PrDrTP+BxdpNuIh9g==",
"dev": true,
"requires": {
"tslib": "^2.3.0"
}
},
"@aws-sdk/middleware-content-length": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.25.0.tgz",
"integrity": "sha512-uOXus0MmZi/mucRIr5yfwM1vDhYG66CujNfnhyEaq5f4kcDA1Q5qPWSn9dkQPV9JWTZK3WTuYiOPSgtmlAYTAg==",
"dev": true,
"requires": {
"@aws-sdk/protocol-http": "3.25.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/middleware-host-header": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.25.0.tgz",
"integrity": "sha512-xKD/CfsUS3ul2VaQ3IgIUXgA7jU2/Guo/DUhYKrLZTOxm0nuvsIFw0RqSCtRBCLptE5Qi+unkc1LcFDbfqrRbg==",
"dev": true,
"requires": {
"@aws-sdk/protocol-http": "3.25.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/middleware-logger": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.25.0.tgz",
"integrity": "sha512-M1F7BlAsDKoEM8hBaU2pHlLSM40rzzgtZ6jFNhfmTwGcjxe1N7JXCH5QPa7aI8wnJq2RoIRHVfVsUH4GwvOZnA==",
"dev": true,
"requires": {
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/middleware-retry": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.27.0.tgz",
"integrity": "sha512-H57NP27qOxgbPRwCFkBYtAJylhAOWKSv3/TsCpDNnrb3Z0pqKUQH9mLC8hRGTRplkA7SDGfiuf9bsoNhZ3HFwQ==",
"dev": true,
"requires": {
"@aws-sdk/protocol-http": "3.25.0",
"@aws-sdk/service-error-classification": "3.25.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0",
"uuid": "^8.3.2"
}
},
"@aws-sdk/middleware-sdk-sts": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.27.0.tgz",
"integrity": "sha512-4geCMczCujTz4GWSrwKhxEW9rYikp5NrLcIpHI0NjthQQfa8T4/D1WSsSnW3JNmQcMgQXeC9h8jTn0dOE4EhUw==",
"dev": true,
"requires": {
"@aws-sdk/middleware-signing": "3.27.0",
"@aws-sdk/property-provider": "3.27.0",
"@aws-sdk/protocol-http": "3.25.0",
"@aws-sdk/signature-v4": "3.25.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/middleware-serde": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.25.0.tgz",
"integrity": "sha512-065Kugo8yXzBkcVAxctxFCHKlHcINnaQRsJ8ifvgc+UOEgvTG9+LfGWDwfdgarW9CkF7RkCoZOyaqFsO+HJWsg==",
"dev": true,
"requires": {
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/middleware-signing": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.27.0.tgz",
"integrity": "sha512-eOXwKOFuCIGAW3wZO9Cyh+z7swZYTq8BiBDjwWu6u0UBb5B/zMiq1z1LDa88iZY200O3Zip8+6RZV7LLd3XH+Q==",
"dev": true,
"requires": {
"@aws-sdk/property-provider": "3.27.0",
"@aws-sdk/protocol-http": "3.25.0",
"@aws-sdk/signature-v4": "3.25.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/middleware-stack": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.25.0.tgz",
"integrity": "sha512-s2VgdsasOVKHY3/SIGsw9AeZMMsdcIbBGWim9n5IO3j8C8y54EdRLVCEja8ePvMDZKIzuummwatYPHaUrnqPtQ==",
"dev": true,
"requires": {
"tslib": "^2.3.0"
}
},
"@aws-sdk/middleware-user-agent": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.25.0.tgz",
"integrity": "sha512-HXd/Qknq8Cp7fzJYU7jDDpN7ReJ3arUrnt+dAPNaDDrhmrBbCZp+24UXN6X6DAj0JICRoRuF/l7KxjwdF5FShw==",
"dev": true,
"requires": {
"@aws-sdk/protocol-http": "3.25.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/node-config-provider": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.27.0.tgz",
"integrity": "sha512-5jeCLV7NI/ouQCMGDnGbxpCBhGirksXY55uvAaeysMxzjJLmPDwOZUD1gMhfYe8lxvktwhAndOdPQofWwTFUoQ==",
"dev": true,
"requires": {
"@aws-sdk/property-provider": "3.27.0",
"@aws-sdk/shared-ini-file-loader": "3.23.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/node-http-handler": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.25.0.tgz",
"integrity": "sha512-zVeAM/bXewZiuMtcUZI/xGDID6knkzOv73ueVkzUbP0Ki8bfao7diR3hMbIt5Fy/r8cAVjJce9v6zFqo4sr1WA==",
"dev": true,
"requires": {
"@aws-sdk/abort-controller": "3.25.0",
"@aws-sdk/protocol-http": "3.25.0",
"@aws-sdk/querystring-builder": "3.25.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/property-provider": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.27.0.tgz",
"integrity": "sha512-8vovVNldgJwCpUfehdwUPwvzfUPB7TEW/tcTgrkLQW/cpEULbRrymtiZrzSkBLspNw2iU5d3FpQxE61s1ou0UA==",
"dev": true,
"requires": {
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/protocol-http": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.25.0.tgz",
"integrity": "sha512-4Jebt5G8uIFa+HZO7KOgOtA66E/CXysQekiV5dfAsU8ca+rX5PB6qhpWZ2unX/l6He+oDQ0zMoW70JkNiP4/4w==",
"dev": true,
"requires": {
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/querystring-builder": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.25.0.tgz",
"integrity": "sha512-o/R3/viOxjWckI+kepkxJSL7fIdg1hHYOW/rOpo9HbXS0CJrHVnB8vlBb+Xwl1IFyY2gg+5YZTjiufcgpgRBkw==",
"dev": true,
"requires": {
"@aws-sdk/types": "3.25.0",
"@aws-sdk/util-uri-escape": "3.23.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/querystring-parser": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.25.0.tgz",
"integrity": "sha512-FCNyaOLFLVS5j43MhVA7/VJUDX0t/9RyNTNulHgzFjj6ffsgqcY0uwUq1RO3QCL4asl56zOrLVJgK+Z7wMbvFg==",
"dev": true,
"requires": {
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/service-error-classification": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.25.0.tgz",
"integrity": "sha512-66FfIab87LnnHtOLrGrVOht9Pw6lE8appyOpBdtoeoU5DP7ARSWuDdsYmKdGdRCWvn/RaVFbSYua9k0M1WsGqg==",
"dev": true
},
"@aws-sdk/shared-ini-file-loader": {
"version": "3.23.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.23.0.tgz",
"integrity": "sha512-YUp46l6E3dLKHp1cKMkZI4slTjsVc/Lm7nPCTVc3oQvZ1MvC99N/jMCmZ7X5YYofuAUSdc9eJ8sYiF2BnUww9g==",
"dev": true,
"requires": {
"tslib": "^2.3.0"
}
},
"@aws-sdk/signature-v4": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.25.0.tgz",
"integrity": "sha512-6KDRRz9XVrj9RxrBLC6dzfnb2TDl3CjIzcNpLdRuKFgzEEdwV+5D+EZuAQU3MuHG5pWTIwG72k/dmCbJ2MDPUQ==",
"dev": true,
"requires": {
"@aws-sdk/is-array-buffer": "3.23.0",
"@aws-sdk/types": "3.25.0",
"@aws-sdk/util-hex-encoding": "3.23.0",
"@aws-sdk/util-uri-escape": "3.23.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/smithy-client": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.27.0.tgz",
"integrity": "sha512-PpsSDUsRqw8HGuXv+AR2UzhVUJz4APM7K6Br8TTDPKvDwQtXkT5GROXRyAwU+htPcOHq006lS5EiF343y0HRvg==",
"dev": true,
"requires": {
"@aws-sdk/middleware-stack": "3.25.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/types": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.25.0.tgz",
"integrity": "sha512-vS0+cTKwj6CujlR07HmeEBxzWPWSrdmZMYnxn/QC9KW9dFu0lsyCGSCqWsFluI6GI0flsnYYWNkP5y4bfD9tqg==",
"dev": true
},
"@aws-sdk/url-parser": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.25.0.tgz",
"integrity": "sha512-qZ3Vq0NjHsE7Qq6R5NVRswIAsiyYjCDnAV+/Vt4jU/K0V3mGumiasiJyRyblW4Da8R6kfcJk0mHSMFRJfoHh8Q==",
"dev": true,
"requires": {
"@aws-sdk/querystring-parser": "3.25.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/util-base64-browser": {
"version": "3.23.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.23.0.tgz",
"integrity": "sha512-xlI/qw+uhLJWa3k0mRtRHQ42v5QzsMFEUXScredQMfJ/34qzXyocsG6OHPOTV1I8WSANrxnHR5m1Ae3iU6JuVw==",
"dev": true,
"requires": {
"tslib": "^2.3.0"
}
},
"@aws-sdk/util-base64-node": {
"version": "3.23.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.23.0.tgz",
"integrity": "sha512-Kf8JIAUtjrPcD5CJzrig2B5CtegWswUNpW4zBarww/UJhHlp8WzKlCxxA+yNS1ghT0ZMjrRvxPabKDGpkyUfmQ==",
"dev": true,
"requires": {
"@aws-sdk/util-buffer-from": "3.23.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/util-body-length-browser": {
"version": "3.23.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.23.0.tgz",
"integrity": "sha512-Bi6u/5omQbOBSB5BxqVvaPgVplLRjhhSuqK3XAukbeBPh7lcibIBdy7YvbhQyl4i8Hb2QjFnqqfzA0lNBe5eiw==",
"dev": true,
"requires": {
"tslib": "^2.3.0"
}
},
"@aws-sdk/util-body-length-node": {
"version": "3.23.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.23.0.tgz",
"integrity": "sha512-8kSczloA78mikPaJ742SU9Wpwfcz3HOruoXiP/pOy69UZEsMe4P7zTZI1bo8BAp7j6IFUPCXth9E3UAtkbz+CQ==",
"dev": true,
"requires": {
"tslib": "^2.3.0"
}
},
"@aws-sdk/util-buffer-from": {
"version": "3.23.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.23.0.tgz",
"integrity": "sha512-axXy1FvEOM1uECgMPmyHF1S3Hd7JI+BerhhcAlGig0bbqUsZVQUNL9yhOsWreA+nf1v08Ucj8P2SHPCT9Hvpgg==",
"dev": true,
"requires": {
"@aws-sdk/is-array-buffer": "3.23.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/util-credentials": {
"version": "3.23.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-credentials/-/util-credentials-3.23.0.tgz",
"integrity": "sha512-6TDGZnFa0kZr+vSsWXXMfWt347jbMGKtzGnBxbrmiQgZMijz9s/wLYxsjglZ+CyqI/QrSMOTtqy6mEgJxdnGWQ==",
"dev": true,
"requires": {
"@aws-sdk/shared-ini-file-loader": "3.23.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/util-hex-encoding": {
"version": "3.23.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.23.0.tgz",
"integrity": "sha512-RFDCwNrJMmmPSMVRadxRNePqTXGwtL9s4844x44D0bbGg1TdC42rrg0PRKYkxFL7wd1FbibVQOzciZAvzF+Z+w==",
"dev": true,
"requires": {
"tslib": "^2.3.0"
}
},
"@aws-sdk/util-locate-window": {
"version": "3.23.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.23.0.tgz",
"integrity": "sha512-mM8kWW7SWIxCshkNllpYqCQi5SzwJ+sv5nURhtquOB5/H3qGqZm0V5lUE3qpE1AYmqKwk6qbGUy1woFn1T5nrw==",
"dev": true,
"requires": {
"tslib": "^2.3.0"
}
},
"@aws-sdk/util-uri-escape": {
"version": "3.23.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.23.0.tgz",
"integrity": "sha512-SvQx2E/FDlI5vLT67wwn/k1j2R/G58tYj4Te6GNgEwPGL43X2+7c0+d/WTgndMaRvxSBHZMUTxBYh1HOeU7loA==",
"dev": true,
"requires": {
"tslib": "^2.3.0"
}
},
"@aws-sdk/util-user-agent-browser": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.25.0.tgz",
"integrity": "sha512-qGqiWfs49NRmQVXPsBXgMRVkjDZocicU0V2wak98e0t7TOI+KmP8hnwsTkE6c4KwhsFOOUhAzjn5zk3kOwi6tQ==",
"dev": true,
"requires": {
"@aws-sdk/types": "3.25.0",
"bowser": "^2.11.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/util-user-agent-node": {
"version": "3.27.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.27.0.tgz",
"integrity": "sha512-jigZzAuhEnaLFeYEDGKQq8tas8OsT6qI7WAm/UnCXqtLhdnIu7u1yPhXk+TjI7SSn4Z6zP6Oh1qtFxzhpPmdoQ==",
"dev": true,
"requires": {
"@aws-sdk/node-config-provider": "3.27.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/util-utf8-browser": {
"version": "3.23.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.23.0.tgz",
"integrity": "sha512-fSB95AKnvCnAbCd7o0xLbErfAgD9wnLCaEu23AgfGAiaG3nFF8Z2+wtjebU/9Z4RI9d/x83Ho/yguRnJdkMsPA==",
"dev": true,
"requires": {
"tslib": "^2.3.0"
}
},
"@aws-sdk/util-utf8-node": {
"version": "3.23.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.23.0.tgz",
"integrity": "sha512-yao8+8okyfCxRvxZe3GBdO7lJnQEBf3P6rDgleOQD/0DZmMjOQGXCvDd42oagE2TegXhkUnJfVOZU2GqdoR0hg==",
"dev": true,
"requires": {
"@aws-sdk/util-buffer-from": "3.23.0",
"tslib": "^2.3.0"
}
},
"@aws-sdk/util-waiter": {
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.25.0.tgz",
"integrity": "sha512-rhJ7Q2fcPD8y4H0qNEpaspkSUya0OaNcVrca9wCZKs7jWnropPzrQ+e2MH7fWJ/8jgcBV890+Txr4fWkD4J01g==",
"dev": true,
"requires": {
"@aws-sdk/abort-controller": "3.25.0",
"@aws-sdk/types": "3.25.0",
"tslib": "^2.3.0"
}
},
"@babel/helper-validator-identifier": {
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
@ -108,6 +826,12 @@
"integrity": "sha512-w6zQ93p626zmPDqDtET7VdB9EkoDtfmCBV53hunjntoCke6X5LafXf6TxPAP+ImjRAhhxAyA/sjzQnHBY0uoiQ==",
"dev": true
},
"bowser": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
"integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
"dev": true
},
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@ -215,6 +939,12 @@
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
"dev": true
},
"entities": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
"dev": true
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@ -288,6 +1018,12 @@
}
}
},
"fast-xml-parser": {
"version": "3.19.0",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz",
"integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==",
"dev": true
},
"filewatcher": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/filewatcher/-/filewatcher-3.0.1.tgz",
@ -885,6 +1621,12 @@
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
"dev": true
},
"tail-stack-events": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tail-stack-events/-/tail-stack-events-2.1.0.tgz",
"integrity": "sha512-c/GTzZqW7dM/jOyswiLW8VD6iSMXuoyoyFn2cF5kyesAqmtAbuKwtm0Gr+7MYacJ3BsVg0RHkAulnIQnUYgbJw==",
"dev": true
},
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@ -903,6 +1645,12 @@
"integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=",
"dev": true
},
"tslib": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
"dev": true
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@ -925,6 +1673,12 @@
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
"dev": true
},
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"dev": true
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",

View File

@ -7,6 +7,7 @@
"client-deps": "scripts/client-deps.sh"
},
"devDependencies": {
"@aws-sdk/client-cloudformation": "3.27.0",
"bootstrap": "4.6.0",
"bootstrap-icons": "1.3.0",
"express": "4.17.1",
@ -14,6 +15,7 @@
"jquery": "3.5.1",
"node-dev": "6.2.0",
"popper.js": "1.16.1",
"pug": "3.0.0"
"pug": "3.0.0",
"tail-stack-events": "2.1.0"
}
}

View File

@ -0,0 +1,86 @@
AWSTemplateFormatVersion: "2010-09-09"
Description: "The 7th Saga static site"
Resources:
7thSagaSiteBucket:
Type: "AWS::S3::Bucket"
Properties:
BucketName: "7thsaga.tmont.com"
PublicAccessBlockConfiguration:
BlockPublicAcls: false
BlockPublicPolicy: false
IgnorePublicAcls: false
RestrictPublicBuckets: false
DeletionPolicy: Retain
7thSagaSiteCachePolicy:
Type: "AWS::CloudFront::CachePolicy"
Properties:
CachePolicyConfig:
Comment: "Cache policy for 7thsaga.tmont.com distribution"
DefaultTTL: 300 # five minutes
MaxTTL: 31536000
MinTTL: 60
Name: "7thsaga-cache-policy"
ParametersInCacheKeyAndForwardedToOrigin:
CookiesConfig:
CookieBehavior: none
EnableAcceptEncodingBrotli: true
EnableAcceptEncodingGzip: true
HeadersConfig:
HeaderBehavior: none
QueryStringsConfig:
QueryStringBehavior: none
#
7thSagaSiteDistribution:
Type: "AWS::CloudFront::Distribution"
Properties:
DistributionConfig:
Aliases:
- 7thsaga.tmont.com
Comment: "Frontend proxy for 7thsaga.tmont.com"
DefaultCacheBehavior:
AllowedMethods:
- GET
- HEAD
CachedMethods:
- GET
- HEAD
CachePolicyId: !Ref 7thSagaSiteCachePolicy
Compress: true
TargetOriginId: s3-7thsaga-bucket
ViewerProtocolPolicy: "redirect-to-https"
DefaultRootObject: "index.html"
Enabled: true
HttpVersion: http2
IPV6Enabled: true
Origins:
- DomainName: !GetAtt 7thSagaSiteBucket.RegionalDomainName
Id: s3-7thsaga-bucket
S3OriginConfig:
OriginAccessIdentity: ""
ViewerCertificate:
AcmCertificateArn: "arn:aws:acm:us-east-1:592283802202:certificate/047c0748-04a5-49bd-ab5e-208935428a02"
MinimumProtocolVersion: "TLSv1"
SslSupportMethod: "sni-only"
Tags:
- Key: app
Value: 7thsaga
7thSagaSiteDNS:
Type: "AWS::Route53::RecordSetGroup"
Properties:
Comment: "DNS for 7thsaga.tmont.com CloudFront proxy"
HostedZoneName: "tmont.com."
RecordSets:
- Name: 7thsaga.tmont.com
Type: "A"
AliasTarget:
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html#cfn-route53-aliastarget-hostedzoneid
HostedZoneId: "Z2FDTNDATAQYW2"
DNSName: !GetAtt 7thSagaSiteDistribution.DomainName
- Name: 7thsaga.tmont.com
Type: "AAAA"
AliasTarget:
HostedZoneId: "Z2FDTNDATAQYW2"
DNSName: !GetAtt 7thSagaSiteDistribution.DomainName

36
scripts/deploy.sh Executable file
View File

@ -0,0 +1,36 @@
#!/usr/bin/env bash
set -euo pipefail
readonly thisDir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly rootDir="$(dirname "${thisDir}")"
main() {
SECONDS=0
echo "copying files to S3..."
aws s3 cp --recursive --acl public-read "${rootDir}/scraped/" s3://7thsaga.tmont.com/
local distId
echo "querying for CloudFront distribution..."
distId=$(
aws cloudfront list-distributions \
--query "DistributionList.Items[?contains(Aliases.Items, '7thsaga.tmont.com')].Id | [0]" \
--output text
)
if [[ -z "${distId}" ]]; then
echo "failed to find cloudfront distribution"
exit 1
fi
echo "found distribution \"${distId}\", invalidating CloudFront cache..."
aws cloudfront create-invalidation \
--distribution-id "${distId}" \
--paths '/*'
echo "all done in ${SECONDS}s"
}
main "$@"

28
scripts/scrape.sh Executable file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env bash
readonly thisDir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly rootDir="$(dirname "${thisDir}")"
main() {
local baseUrl=http://localhost:18000
local urls=("index.html" "spells.html" "items.html" "weapons.html" "armor.html" "accessories.html" "exp.html" "levels.html")
local scrapedDir="${rootDir}/scraped"
rm -rf "${scrapedDir}"
mkdir -p "${scrapedDir}"
cp -R "${rootDir}/web/static" "${scrapedDir}"
SECONDS=0
for url in "${urls[@]}"; do
wget -O "${scrapedDir}/${url}" "${baseUrl}/${url}" &
done
wait
echo "done in ${SECONDS}s"
}
main "$@"

123
scripts/update-stack.sh Executable file
View File

@ -0,0 +1,123 @@
#!/bin/bash
set -euo pipefail
getStackAction() {
local stackName=$1
local region=$2
local command="create"
aws cloudformation describe-stacks \
--stack-name "${stackName}" \
--output text \
--region "${region}" &> /dev/null
# shellcheck disable=SC2181
if [[ $? -eq 0 ]]; then
command="update"
fi
echo "${command}"
}
checkError() {
# shellcheck disable=SC2181
if [[ $? -ne 0 ]]; then
echo "$1"
exit 1
fi
}
usage() {
cat << USAGE
Updates or creates a CloudFormation stack
Usage: $0 [--region region] template.yaml
Options:
--region region The region to create/update the stack in (us-west-2)
-h|--help Show this message
Example:
$0 path/to/template.yaml
USAGE
}
main() {
local cfnFile=
local region=us-west-2
parseArgs() {
while [[ $# -gt 0 ]]; do
local key="$1"
shift
case "${key}" in
-h | --help)
usage
exit 0
;;
--region)
region=$1
shift
;;
*)
if [[ -n "${cfnFile}" ]]; then
echo "only one template file allowed"
exit 1
fi
cfnFile="${key}"
;;
esac
done
}
parseArgs "$@"
if [[ ! -f "${cfnFile}" ]]; then
echo "template \"${cfnFile}\" does not exist"
exit 1
fi
local stackName
stackName=$(basename "${cfnFile%.*}")
local action
action=$(getStackAction "${stackName}" "${region}")
local command=
local extraOpts=
if [ "${action}" = "create" ]; then
command="create-stack"
extraOpts="--on-failure DO_NOTHING"
else
command="update-stack"
fi
local shouldContinue
read -r -p "${action} stack ${stackName} in ${region} (profile: ${AWS_PROFILE}), continue? [y/n] " shouldContinue
if [ "${shouldContinue}" != "y" ]; then
echo "ok bye"
exit
fi
aws cloudformation ${command} \
--stack-name "${stackName}" \
${extraOpts} \
--template-body "file://${cfnFile}" \
--region "${region}" \
> /dev/null
checkError "${command} failed"
echo
local -r tailStackEvents="node_modules/.bin/tail-stack-events"
if [ -x "${tailStackEvents}" ]; then
"${tailStackEvents}" --region "${region}" --stack-name "${stackName}" --die --outputs
fi
echo
echo "finished in ${SECONDS}s"
}
main "$@"

View File

@ -52,28 +52,28 @@ const render = (res, view, params) => {
});
}
app.get([ '/', '/enemies' ], (req, res) => {
app.get([ '/', '/index.html' ], (req, res) => {
render(res, 'enemies', {
context: 'enemies',
enemies,
});
});
app.get('/spells', (req, res) => {
app.get('/spells.html', (req, res) => {
render(res, 'spells', {
context: 'spells',
spells: spells.spells.sort((a, b) => a.name.localeCompare(b.name)),
});
});
app.get('/exp', (req, res) => {
app.get('/exp.html', (req, res) => {
render(res, 'exp', {
context: 'exp',
exp: exp.exp,
});
});
app.get('/weapons', (req, res) => {
app.get('/weapons.html', (req, res) => {
render(res, 'weapons', {
context: 'weapons',
weapons: items.weapons.sort((a, b) => {
@ -85,7 +85,7 @@ app.get('/weapons', (req, res) => {
});
});
app.get('/armor', (req, res) => {
app.get('/armor.html', (req, res) => {
render(res, 'armor', {
context: 'armor',
armor: items.armor.sort((a, b) => {
@ -97,21 +97,21 @@ app.get('/armor', (req, res) => {
});
});
app.get('/accessories', (req, res) => {
app.get('/accessories.html', (req, res) => {
render(res, 'accessories', {
context: 'accessories',
accessories: items.accessories,
});
});
app.get('/items', (req, res) => {
app.get('/items.html', (req, res) => {
render(res, 'items', {
context: 'items',
items: items.items,
});
});
app.get('/levels', (req, res) => {
app.get('/levels.html', (req, res) => {
render(res, 'levels', {
context: 'levels',
});

View File

@ -186,6 +186,11 @@ table.row-clickable tbody.data td {
width: 31px;
height: 57px;
}
.S_Brain {
background-position: -1372px -6px;
width: 31px;
height: 57px;
}
.Titan {
background-position: -1429px -4px;
width: 63px;

File diff suppressed because it is too large Load Diff

View File

@ -3,9 +3,8 @@ html
head
meta(charset="UTF-8")
title 7th Saga Data
link(rel="stylesheet" href="/static/bootstrap.css")
link(rel="stylesheet" href="/static/bootstrap-icons.css")
link(rel="stylesheet" href="/static/7th-saga.css")
link(rel="stylesheet" href="./static/bootstrap.css")
link(rel="stylesheet" href="./static/7th-saga.css")
body
mixin sortHeader(label, col)
th(data-col=col): div.sortable
@ -39,14 +38,14 @@ html
div.container-fluid
div.bg-light.position-sticky.pt-2.d-flex.justify-content-between(style="top: 0; background-color: white; z-index: 1")
ul.nav.mr-auto.nav-tabs
li.nav-item: a.nav-link(href="/enemies" class=(context === 'enemies' ? 'active' : '')) Enemies
li.nav-item: a.nav-link(href="/spells" class=(context === 'spells' ? 'active' : '')) Spells
li.nav-item: a.nav-link(href="/items" class=(context === 'items' ? 'active' : '')) Items
li.nav-item: a.nav-link(href="/weapons" class=(context === 'weapons' ? 'active' : '')) Weapons
li.nav-item: a.nav-link(href="/armor" class=(context === 'armor' ? 'active' : '')) Armor
li.nav-item: a.nav-link(href="/accessories" class=(context === 'accessories' ? 'active' : '')) Accessories
li.nav-item: a.nav-link(href="/exp" class=(context === 'exp' ? 'active' : '')) Experience
li.nav-item: a.nav-link(href="/levels" class=(context === 'levels' ? 'active' : '')) Levels
li.nav-item: a.nav-link(href="/index.html" class=(context === 'enemies' ? 'active' : '')) Enemies
li.nav-item: a.nav-link(href="/spells.html" class=(context === 'spells' ? 'active' : '')) Spells
li.nav-item: a.nav-link(href="/items.html" class=(context === 'items' ? 'active' : '')) Items
li.nav-item: a.nav-link(href="/weapons.html" class=(context === 'weapons' ? 'active' : '')) Weapons
li.nav-item: a.nav-link(href="/armor.html" class=(context === 'armor' ? 'active' : '')) Armor
li.nav-item: a.nav-link(href="/accessories.html" class=(context === 'accessories' ? 'active' : '')) Accessories
li.nav-item: a.nav-link(href="/exp.html" class=(context === 'exp' ? 'active' : '')) Experience
li.nav-item: a.nav-link(href="/levels.html" class=(context === 'levels' ? 'active' : '')) Levels
div: button.btn.btn-secondary.btn-sm(data-toggle="modal" data-target="#char-stats-modal")
| Set character stats
small.ml-1: tt.char-stats-display
@ -116,10 +115,10 @@ html
div.modal-footer
button.btn.btn-primary(data-dismiss="modal") Close
script(src="/static/jquery.js")
script(src="/static/popper.js")
script(src="/static/bootstrap.js")
script(src="/static/js.cookie.js")
script(src="/static/saga.js")
script(src="/static/calc.js")
script(src="/static/spells.js")
script(src="./static/jquery.js")
script(src="./static/popper.js")
script(src="./static/bootstrap.js")
script(src="./static/js.cookie.js")
script(src="./static/saga.js")
script(src="./static/calc.js")
script(src="./static/spells.js")