cloudstructs 0.4.31 → 0.5.2
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/.gitattributes +1 -0
- package/.jsii +33 -15
- package/API.md +2 -0
- package/assets/slack-app/provider.lambda/index.js +24 -3
- package/assets/slack-textract/detect.lambda/index.js +29 -8
- package/assets/url-shortener/redirect.edge-lambda/index.js +66 -0
- package/assets/url-shortener/shortener.lambda/index.js +15 -3
- package/changelog.md +1 -6
- package/lib/codecommit-mirror/index.d.ts +1 -0
- package/lib/codecommit-mirror/index.d.ts.map +1 -0
- package/lib/codecommit-mirror/index.js +2 -2
- package/lib/ecs-service-roller/index.d.ts +1 -0
- package/lib/ecs-service-roller/index.d.ts.map +1 -0
- package/lib/ecs-service-roller/index.js +2 -2
- package/lib/email-receiver/index.d.ts +1 -0
- package/lib/email-receiver/index.d.ts.map +1 -0
- package/lib/email-receiver/receiver.d.ts +1 -0
- package/lib/email-receiver/receiver.d.ts.map +1 -0
- package/lib/email-receiver/receiver.js +1 -1
- package/lib/email-receiver/s3-function.d.ts +1 -0
- package/lib/email-receiver/s3-function.d.ts.map +1 -0
- package/lib/email-receiver/s3.lambda.d.ts +1 -0
- package/lib/email-receiver/s3.lambda.d.ts.map +1 -0
- package/lib/email-receiver/whitelist-function.d.ts +1 -0
- package/lib/email-receiver/whitelist-function.d.ts.map +1 -0
- package/lib/email-receiver/whitelist.lambda.d.ts +1 -0
- package/lib/email-receiver/whitelist.lambda.d.ts.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/saml-identity-provider/index.d.ts +1 -0
- package/lib/saml-identity-provider/index.d.ts.map +1 -0
- package/lib/saml-identity-provider/index.js +2 -2
- package/lib/slack-app/index.d.ts +1 -0
- package/lib/slack-app/index.d.ts.map +1 -0
- package/lib/slack-app/manifest.d.ts +1 -0
- package/lib/slack-app/manifest.d.ts.map +1 -0
- package/lib/slack-app/manifest.js +1 -1
- package/lib/slack-app/provider-function.d.ts +1 -0
- package/lib/slack-app/provider-function.d.ts.map +1 -0
- package/lib/slack-app/provider.d.ts +1 -0
- package/lib/slack-app/provider.d.ts.map +1 -0
- package/lib/slack-app/provider.lambda.d.ts +1 -0
- package/lib/slack-app/provider.lambda.d.ts.map +1 -0
- package/lib/slack-app/slack-app.d.ts +1 -0
- package/lib/slack-app/slack-app.d.ts.map +1 -0
- package/lib/slack-app/slack-app.js +2 -2
- package/lib/slack-events/events-function.d.ts +1 -0
- package/lib/slack-events/events-function.d.ts.map +1 -0
- package/lib/slack-events/events.lambda.d.ts +1 -0
- package/lib/slack-events/events.lambda.d.ts.map +1 -0
- package/lib/slack-events/index.d.ts +1 -0
- package/lib/slack-events/index.d.ts.map +1 -0
- package/lib/slack-events/index.js +1 -1
- package/lib/slack-events/signature.d.ts +1 -0
- package/lib/slack-events/signature.d.ts.map +1 -0
- package/lib/slack-textract/detect-function.d.ts +1 -0
- package/lib/slack-textract/detect-function.d.ts.map +1 -0
- package/lib/slack-textract/detect.lambda.d.ts +1 -0
- package/lib/slack-textract/detect.lambda.d.ts.map +1 -0
- package/lib/slack-textract/index.d.ts +1 -0
- package/lib/slack-textract/index.d.ts.map +1 -0
- package/lib/slack-textract/index.js +1 -1
- package/lib/state-machine-cr-provider/index.d.ts +1 -0
- package/lib/state-machine-cr-provider/index.d.ts.map +1 -0
- package/lib/state-machine-cr-provider/index.js +1 -1
- package/lib/state-machine-cr-provider/runtime/http.d.ts +1 -0
- package/lib/state-machine-cr-provider/runtime/http.d.ts.map +1 -0
- package/lib/state-machine-cr-provider/runtime/index.d.ts +1 -0
- package/lib/state-machine-cr-provider/runtime/index.d.ts.map +1 -0
- package/lib/static-website/index.d.ts +1 -0
- package/lib/static-website/index.d.ts.map +1 -0
- package/lib/static-website/index.js +1 -1
- package/lib/static-website/origin-request-function.d.ts +1 -0
- package/lib/static-website/origin-request-function.d.ts.map +1 -0
- package/lib/static-website/origin-request.edge-lambda.d.ts +1 -0
- package/lib/static-website/origin-request.edge-lambda.d.ts.map +1 -0
- package/lib/toolkit-cleaner/clean-images-function.d.ts +1 -0
- package/lib/toolkit-cleaner/clean-images-function.d.ts.map +1 -0
- package/lib/toolkit-cleaner/clean-images.lambda.d.ts +1 -0
- package/lib/toolkit-cleaner/clean-images.lambda.d.ts.map +1 -0
- package/lib/toolkit-cleaner/clean-objects-function.d.ts +1 -0
- package/lib/toolkit-cleaner/clean-objects-function.d.ts.map +1 -0
- package/lib/toolkit-cleaner/clean-objects.lambda.d.ts +1 -0
- package/lib/toolkit-cleaner/clean-objects.lambda.d.ts.map +1 -0
- package/lib/toolkit-cleaner/extract-template-hashes-function.d.ts +1 -0
- package/lib/toolkit-cleaner/extract-template-hashes-function.d.ts.map +1 -0
- package/lib/toolkit-cleaner/extract-template-hashes.lambda.d.ts +1 -0
- package/lib/toolkit-cleaner/extract-template-hashes.lambda.d.ts.map +1 -0
- package/lib/toolkit-cleaner/get-stack-names-function.d.ts +1 -0
- package/lib/toolkit-cleaner/get-stack-names-function.d.ts.map +1 -0
- package/lib/toolkit-cleaner/get-stack-names.lambda.d.ts +1 -0
- package/lib/toolkit-cleaner/get-stack-names.lambda.d.ts.map +1 -0
- package/lib/toolkit-cleaner/index.d.ts +1 -0
- package/lib/toolkit-cleaner/index.d.ts.map +1 -0
- package/lib/toolkit-cleaner/index.js +1 -1
- package/lib/url-shortener/index.d.ts +7 -0
- package/lib/url-shortener/index.d.ts.map +1 -0
- package/lib/url-shortener/index.js +21 -11
- package/lib/url-shortener/redirect-function.d.ts +14 -0
- package/lib/url-shortener/redirect-function.d.ts.map +1 -0
- package/lib/url-shortener/redirect-function.js +23 -0
- package/lib/url-shortener/redirect.edge-lambda.d.ts +2 -0
- package/lib/url-shortener/redirect.edge-lambda.d.ts.map +1 -0
- package/lib/url-shortener/redirect.edge-lambda.js +44 -0
- package/lib/url-shortener/shortener-function.d.ts +1 -0
- package/lib/url-shortener/shortener-function.d.ts.map +1 -0
- package/lib/url-shortener/shortener.lambda.d.ts +1 -0
- package/lib/url-shortener/shortener.lambda.d.ts.map +1 -0
- package/lib/url-shortener/shortener.lambda.js +17 -4
- package/node_modules/@slack/logger/node_modules/@types/node/README.md +2 -2
- package/node_modules/@slack/logger/node_modules/@types/node/index.d.ts +1 -0
- package/node_modules/@slack/logger/node_modules/@types/node/net.d.ts +5 -0
- package/node_modules/@slack/logger/node_modules/@types/node/package.json +7 -2
- package/node_modules/@slack/logger/node_modules/@types/node/stream.d.ts +13 -0
- package/node_modules/@slack/logger/node_modules/@types/node/timers.d.ts +3 -3
- package/node_modules/@slack/web-api/node_modules/@types/node/README.md +2 -2
- package/node_modules/@slack/web-api/node_modules/@types/node/index.d.ts +1 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/net.d.ts +5 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/package.json +7 -2
- package/node_modules/@slack/web-api/node_modules/@types/node/stream.d.ts +13 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/timers.d.ts +3 -3
- package/node_modules/@types/cacheable-request/node_modules/@types/node/README.md +2 -2
- package/node_modules/@types/cacheable-request/node_modules/@types/node/index.d.ts +1 -0
- package/node_modules/@types/cacheable-request/node_modules/@types/node/net.d.ts +5 -0
- package/node_modules/@types/cacheable-request/node_modules/@types/node/package.json +7 -2
- package/node_modules/@types/cacheable-request/node_modules/@types/node/stream.d.ts +13 -0
- package/node_modules/@types/cacheable-request/node_modules/@types/node/timers.d.ts +3 -3
- package/node_modules/@types/is-stream/node_modules/@types/node/README.md +2 -2
- package/node_modules/@types/is-stream/node_modules/@types/node/index.d.ts +1 -0
- package/node_modules/@types/is-stream/node_modules/@types/node/net.d.ts +5 -0
- package/node_modules/@types/is-stream/node_modules/@types/node/package.json +7 -2
- package/node_modules/@types/is-stream/node_modules/@types/node/stream.d.ts +13 -0
- package/node_modules/@types/is-stream/node_modules/@types/node/timers.d.ts +3 -3
- package/node_modules/@types/keyv/node_modules/@types/node/README.md +2 -2
- package/node_modules/@types/keyv/node_modules/@types/node/index.d.ts +1 -0
- package/node_modules/@types/keyv/node_modules/@types/node/net.d.ts +5 -0
- package/node_modules/@types/keyv/node_modules/@types/node/package.json +7 -2
- package/node_modules/@types/keyv/node_modules/@types/node/stream.d.ts +13 -0
- package/node_modules/@types/keyv/node_modules/@types/node/timers.d.ts +3 -3
- package/node_modules/@types/responselike/node_modules/@types/node/README.md +2 -2
- package/node_modules/@types/responselike/node_modules/@types/node/index.d.ts +1 -0
- package/node_modules/@types/responselike/node_modules/@types/node/net.d.ts +5 -0
- package/node_modules/@types/responselike/node_modules/@types/node/package.json +7 -2
- package/node_modules/@types/responselike/node_modules/@types/node/stream.d.ts +13 -0
- package/node_modules/@types/responselike/node_modules/@types/node/timers.d.ts +3 -3
- package/node_modules/follow-redirects/index.js +14 -9
- package/node_modules/follow-redirects/package.json +1 -1
- package/node_modules/got/dist/source/as-promise/index.js +1 -1
- package/node_modules/got/dist/source/core/index.js +8 -0
- package/node_modules/got/dist/source/types.d.ts +8 -8
- package/node_modules/got/package.json +1 -1
- package/node_modules/keyv/package.json +4 -1
- package/node_modules/keyv/src/index.d.ts +7 -1
- package/node_modules/keyv/src/index.js +3 -2
- package/package.json +14 -9
- package/releasetag.txt +1 -1
- package/version.txt +1 -1
|
@@ -15,14 +15,16 @@ const route53 = require("aws-cdk-lib/aws-route53");
|
|
|
15
15
|
const targets = require("aws-cdk-lib/aws-route53-targets");
|
|
16
16
|
const s3 = require("aws-cdk-lib/aws-s3");
|
|
17
17
|
const constructs_1 = require("constructs");
|
|
18
|
+
const redirect_function_1 = require("./redirect-function");
|
|
18
19
|
const shortener_function_1 = require("./shortener-function");
|
|
19
20
|
/**
|
|
20
21
|
* URL shortener
|
|
21
22
|
*/
|
|
22
23
|
class UrlShortener extends constructs_1.Construct {
|
|
23
24
|
constructor(scope, id, props) {
|
|
24
|
-
var _b;
|
|
25
|
+
var _b, _c;
|
|
25
26
|
super(scope, id);
|
|
27
|
+
const domainName = props.recordName ? `${props.recordName}.${props.hostedZone.zoneName}` : props.hostedZone.zoneName;
|
|
26
28
|
// Table to save a counter
|
|
27
29
|
const table = new dynamodb.Table(this, 'Table', {
|
|
28
30
|
partitionKey: {
|
|
@@ -37,9 +39,12 @@ class UrlShortener extends constructs_1.Construct {
|
|
|
37
39
|
expiration: (_b = props.expiration) !== null && _b !== void 0 ? _b : aws_cdk_lib_1.Duration.days(365),
|
|
38
40
|
}],
|
|
39
41
|
blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
|
|
42
|
+
bucketName: (_c = props.bucketName) !== null && _c !== void 0 ? _c : `cloudstructs-url-shortener-${domainName}`,
|
|
40
43
|
});
|
|
44
|
+
// Redirect function
|
|
45
|
+
const redirectFunction = new redirect_function_1.RedirectFunction(this, 'Redirect');
|
|
46
|
+
bucket.grantRead(redirectFunction);
|
|
41
47
|
// CloudFront distribution
|
|
42
|
-
const domainName = props.recordName ? `${props.recordName}.${props.hostedZone.zoneName}` : props.hostedZone.zoneName;
|
|
43
48
|
const certificate = new acm.DnsValidatedCertificate(this, 'Certificate', {
|
|
44
49
|
domainName,
|
|
45
50
|
hostedZone: props.hostedZone,
|
|
@@ -48,6 +53,12 @@ class UrlShortener extends constructs_1.Construct {
|
|
|
48
53
|
const distribution = new cloudfront.Distribution(this, 'Distribution', {
|
|
49
54
|
defaultBehavior: {
|
|
50
55
|
origin: new origins.S3Origin(bucket),
|
|
56
|
+
edgeLambdas: [
|
|
57
|
+
{
|
|
58
|
+
eventType: cloudfront.LambdaEdgeEventType.ORIGIN_REQUEST,
|
|
59
|
+
functionVersion: redirectFunction,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
51
62
|
},
|
|
52
63
|
certificate,
|
|
53
64
|
domainNames: [domainName],
|
|
@@ -64,7 +75,7 @@ class UrlShortener extends constructs_1.Construct {
|
|
|
64
75
|
recordName: props.recordName,
|
|
65
76
|
});
|
|
66
77
|
// Lambda function to increment counter and write redirect in bucket
|
|
67
|
-
const
|
|
78
|
+
const shortenerFunction = new shortener_function_1.ShortenerFunction(this, 'Shortener', {
|
|
68
79
|
logRetention: logs.RetentionDays.ONE_MONTH,
|
|
69
80
|
environment: {
|
|
70
81
|
DOMAIN_NAME: domainName,
|
|
@@ -73,11 +84,10 @@ class UrlShortener extends constructs_1.Construct {
|
|
|
73
84
|
},
|
|
74
85
|
});
|
|
75
86
|
if (props.corsAllowOrigins) {
|
|
76
|
-
|
|
87
|
+
shortenerFunction.addEnvironment('CORS_ALLOW_ORIGINS', props.corsAllowOrigins.join(' '));
|
|
77
88
|
}
|
|
78
|
-
bucket.grantPut(
|
|
79
|
-
|
|
80
|
-
table.grant(handler, 'dynamodb:UpdateItem');
|
|
89
|
+
bucket.grantPut(shortenerFunction);
|
|
90
|
+
table.grant(shortenerFunction, 'dynamodb:UpdateItem');
|
|
81
91
|
// API
|
|
82
92
|
this.api = new apigateway.RestApi(this, `UrlShortener${props.hostedZone.zoneName}`, {
|
|
83
93
|
endpointTypes: props.apiGatewayEndpoint ? [apigateway.EndpointType.PRIVATE] : undefined,
|
|
@@ -100,12 +110,12 @@ class UrlShortener extends constructs_1.Construct {
|
|
|
100
110
|
? { allowOrigins: props.corsAllowOrigins }
|
|
101
111
|
: undefined,
|
|
102
112
|
});
|
|
103
|
-
this.api.root.addMethod('ANY', new apigateway.LambdaIntegration(
|
|
113
|
+
this.api.root.addMethod('ANY', new apigateway.LambdaIntegration(shortenerFunction), {
|
|
104
114
|
authorizer: props.apiGatewayAuthorizer,
|
|
105
115
|
});
|
|
106
116
|
this.api.root
|
|
107
117
|
.addResource('{proxy+}')
|
|
108
|
-
.addMethod('ANY', new apigateway.LambdaIntegration(
|
|
118
|
+
.addMethod('ANY', new apigateway.LambdaIntegration(shortenerFunction), {
|
|
109
119
|
authorizer: props.apiGatewayAuthorizer,
|
|
110
120
|
});
|
|
111
121
|
this.apiEndpoint = this.api.url;
|
|
@@ -113,5 +123,5 @@ class UrlShortener extends constructs_1.Construct {
|
|
|
113
123
|
}
|
|
114
124
|
exports.UrlShortener = UrlShortener;
|
|
115
125
|
_a = JSII_RTTI_SYMBOL_1;
|
|
116
|
-
UrlShortener[_a] = { fqn: "cloudstructs.UrlShortener", version: "0.
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXJsLXNob3J0ZW5lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUEwRDtBQUMxRCx5REFBeUQ7QUFDekQsMERBQTBEO0FBQzFELHlEQUF5RDtBQUN6RCw4REFBOEQ7QUFDOUQscURBQXFEO0FBRXJELDJDQUEyQztBQUMzQyw2Q0FBNkM7QUFDN0MsbURBQW1EO0FBQ25ELDJEQUEyRDtBQUMzRCx5Q0FBeUM7QUFDekMsMkNBQXVDO0FBQ3ZDLDZEQUF5RDtBQWtEekQ7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQVd6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCOztRQUNoRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLDBCQUEwQjtRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRTtZQUM5QyxZQUFZLEVBQUU7Z0JBQ1osSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsSUFBSSxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTTthQUNwQztZQUNELGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87U0FDckMsQ0FBQyxDQUFDO1FBRUgsMkJBQTJCO1FBQzNCLE1BQU0sTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQzNDLGNBQWMsRUFBRSxDQUFDO29CQUNmLFVBQVUsUUFBRSxLQUFLLENBQUMsVUFBVSxtQ0FBSSxzQkFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7aUJBQ25ELENBQUM7WUFDRixpQkFBaUIsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsU0FBUztTQUNsRCxDQUFDLENBQUM7UUFFSCwwQkFBMEI7UUFDMUIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFD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QyxvQkFBb0IsQ0FBQzs0QkFDL0IsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7NEJBQ3BDLFNBQVMsRUFBRSxDQUFDLGdCQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUNoRCxVQUFVLEVBQUU7Z0NBQ1YsWUFBWSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRTs2QkFDM0U7eUJBQ0YsQ0FBQztxQkFDSDtpQkFDRixDQUFDO2dCQUNGLENBQUMsQ0FBQyxTQUFTO1lBQ2IsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtnQkFDakQsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDMUMsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3hFLFVBQVUsRUFBRSxLQUFLLENBQUMsb0JBQW9CO1NBQ3ZDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSTthQUNWLFdBQVcsQ0FBQyxVQUFVLENBQUM7YUFDdkIsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzRCxVQUFVLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjtTQUN2QyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ2xDLENBQUM7O0FBM0dILG9DQTRHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBGbiwgUmVtb3ZhbFBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGFwaWdhdGV3YXkgZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXknO1xuaW1wb3J0ICogYXMgYWNtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgKiBhcyBvcmlnaW5zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnMnO1xuaW1wb3J0ICogYXMgZHluYW1vZGIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgcm91dGU1MyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgU2hvcnRlbmVyRnVuY3Rpb24gfSBmcm9tICcuL3Nob3J0ZW5lci1mdW5jdGlvbic7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBVcmxTaG9ydGVuZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcmxTaG9ydGVuZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgaG9zdGVkIHpvbmUgZm9yIHRoZSBzaG9ydCBVUkxzIGRvbWFpblxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZTogcm91dGU1My5JSG9zdGVkWm9uZTtcblxuICAvKipcbiAgICogVGhlIHJlY29yZCBuYW1lIHRvIHVzZSBpbiB0aGUgaG9zdGVkIHpvbmVcbiAgICpcbiAgICogQGRlZmF1bHQgLSB6b25lIHJvb3RcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4cGlyYXRpb24gZm9yIHNob3J0IHVybHNcbiAgICpcbiAgICogQGRlZmF1bHQgY2RrLkR1cmF0aW9uLmRheXMoMzY1KVxuICAgKi9cbiAgcmVhZG9ubHkgZXhwaXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBbiBpbnRlcmZhY2UgVlBDIGVuZHBvaW50IGZvciBBUEkgZ2F0ZXdheS4gU3BlY2lmeWluZyB0aGlzIHByb3BlcnR5IHdpbGxcbiAgICogbWFrZSB0aGUgQVBJIHByaXZhdGUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaWdhdGV3YXktcHJpdmF0ZS1hcGlzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBUEkgaXMgcHVibGljXG4gICAqL1xuICByZWFkb25seSBhcGlHYXRld2F5RW5kcG9pbnQ/OiBlYzIuSUludGVyZmFjZVZwY0VuZHBvaW50O1xuXG4gIC8qKlxuICAgKiBBdXRob3JpemVyIGZvciBBUEkgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkbyBub3QgdXNlIGFuIGF1dGhvcml6ZXIgZm9yIHRoZSBBUElcbiAgICovXG4gIHJlYWRvbmx5IGFwaUdhdGV3YXlBdXRob3JpemVyPzogYXBpZ2F0ZXdheS5JQXV0aG9yaXplcjtcblxuICAvKipcbiAgICogQWxsb3dlZCBvcmlnaW5zIGZvciBDT1JTXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ09SUyBpcyBub3QgZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29yc0FsbG93T3JpZ2lucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFVSTCBzaG9ydGVuZXJcbiAqL1xuZXhwb3J0IGNsYXNzIFVybFNob3J0ZW5lciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgZW5kcG9pbnQgb2YgdGhlIFVSTCBzaG9ydGVuZXIgQVBJXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpRW5kcG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuZGVybHlpbmcgQVBJIEdhdGV3YXkgUkVTVCBBUElcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGk6IGFwaWdhdGV3YXkuTGFtYmRhUmVzdEFwaTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVXJsU2hvcnRlbmVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gVGFibGUgdG8gc2F2ZSBhIGNvdW50ZXJcbiAgICBjb25zdCB0YWJsZSA9IG5ldyBkeW5hbW9kYi5UYWJsZSh0aGlzLCAnVGFibGUnLCB7XG4gICAgICBwYXJ0aXRpb25LZXk6IHtcbiAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HLFxuICAgICAgfSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcblxuICAgIC8vIEJ1Y2tldCB0byBzYXZlIHJlZGlyZWN0c1xuICAgIGNvbnN0IGJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgJ0J1Y2tldCcsIHtcbiAgICAgIGxpZmVjeWNsZVJ1bGVzOiBbe1xuICAgICAgICBleHBpcmF0aW9uOiBwcm9wcy5leHBpcmF0aW9uID8/IER1cmF0aW9uLmRheXMoMzY1KSxcbiAgICAgIH1dLFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IHMzLkJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICB9KTtcblxuICAgIC8vIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uXG4gICAgY29uc3QgZG9tYWluTmFtZSA9IHByb3BzLnJlY29yZE5hbWUgPyBgJHtwcm9wcy5yZWNvcmROYW1lfS4ke3Byb3BzLmhvc3RlZFpvbmUuem9uZU5hbWV9YCA6IHByb3BzLmhvc3RlZFpvbmUuem9uZU5hbWU7XG4gICAgY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgYWNtLkRuc1ZhbGlkYXRlZENlcnRpZmljYXRlKHRoaXMsICdDZXJ0aWZpY2F0ZScsIHtcbiAgICAgIGRvbWFpbk5hbWUsXG4gICAgICBob3N0ZWRab25lOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICB9KTtcbiAgICBjb25zdCBkaXN0cmlidXRpb24gPSBuZXcgY2xvdWRmcm9udC5EaXN0cmlidXRpb24odGhpcywgJ0Rpc3RyaWJ1dGlvbicsIHtcbiAgICAgIGRlZmF1bHRCZWhhdmlvcjoge1xuICAgICAgICBvcmlnaW46IG5ldyBvcmlnaW5zLlMzT3JpZ2luKGJ1Y2tldCksXG4gICAgICB9LFxuICAgICAgY2VydGlmaWNhdGUsXG4gICAgICBkb21haW5OYW1lczogW2RvbWFpbk5hbWVdLFxuICAgIH0pO1xuXG4gICAgLy8gUm91dGU1MyByZWNvcmRzXG4gICAgbmV3IHJvdXRlNTMuQVJlY29yZCh0aGlzLCAnQVJlY29yZCcsIHtcbiAgICAgIHpvbmU6IHByb3BzLmhvc3RlZFpvbmUsXG4gICAgICB0YXJnZXQ6IHJvdXRlNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhuZXcgdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0KGRpc3RyaWJ1dGlvbikpLFxuICAgICAgcmVjb3JkTmFtZTogcHJvcHMucmVjb3JkTmFtZSxcbiAgICB9KTtcbiAgICBuZXcgcm91dGU1My5BYWFhUmVjb3JkKHRoaXMsICdBYWFhUmVjb3JkJywge1xuICAgICAgem9uZTogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKG5ldyB0YXJnZXRzLkNsb3VkRnJvbnRUYXJnZXQoZGlzdHJpYnV0aW9uKSksXG4gICAgICByZWNvcmROYW1lOiBwcm9wcy5yZWNvcmROYW1lLFxuICAgIH0pO1xuXG4gICAgLy8gTGFtYmRhIGZ1bmN0aW9uIHRvIGluY3JlbWVudCBjb3VudGVyIGFuZCB3cml0ZSByZWRpcmVjdCBpbiBidWNrZXRcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IFNob3J0ZW5lckZ1bmN0aW9uKHRoaXMsICdoYW5kbGVyJywge1xuICAgICAgbG9nUmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX01PTlRILFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgRE9NQUlOX05BTUU6IGRvbWFpbk5hbWUsXG4gICAgICAgIEJVQ0tFVF9OQU1FOiBidWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgVEFCTEVfTkFNRTogdGFibGUudGFibGVOYW1lLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBpZiAocHJvcHMuY29yc0FsbG93T3JpZ2lucykge1xuICAgICAgaGFuZGxlci5hZGRFbnZpcm9ubWVudCgnQ09SU19BTExPV19PUklHSU5TJywgcHJvcHMuY29yc0FsbG93T3JpZ2lucy5qb2luKCcgJykpO1xuICAgIH1cbiAgICBidWNrZXQuZ3JhbnRQdXQoaGFuZGxlcik7XG4gICAgYnVja2V0LmdyYW50UHV0QWNsKGhhbmRsZXIpO1xuICAgIHRhYmxlLmdyYW50KGhhbmRsZXIsICdkeW5hbW9kYjpVcGRhdGVJdGVtJyk7XG5cbiAgICAvLyBBUElcbiAgICB0aGlzLmFwaSA9IG5ldyBhcGlnYXRld2F5LlJlc3RBcGkodGhpcywgYFVybFNob3J0ZW5lciR7cHJvcHMuaG9zdGVkWm9uZS56b25lTmFtZX1gLCB7XG4gICAgICBlbmRwb2ludFR5cGVzOiBwcm9wcy5hcGlHYXRld2F5RW5kcG9pbnQgPyBbYXBpZ2F0ZXdheS5FbmRwb2ludFR5cGUuUFJJVkFURV0gOiB1bmRlZmluZWQsXG4gICAgICBwb2xpY3k6IHByb3BzLmFwaUdhdGV3YXlFbmRwb2ludFxuICAgICAgICA/IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbJ2V4ZWN1dGUtYXBpOkludm9rZSddLFxuICAgICAgICAgICAgICBwcmluY2lwYWxzOiBbbmV3IGlhbS5BbnlQcmluY2lwYWwoKV0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW0ZuLmpvaW4oJycsIFsnZXhlY3V0ZS1hcGk6LycsICcqJ10pXSxcbiAgICAgICAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgIFN0cmluZ0VxdWFsczogeyAnYXdzOlNvdXJjZVZwY2UnOiBwcm9wcy5hcGlHYXRld2F5RW5kcG9pbnQudnBjRW5kcG9pbnRJZCB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBkZWZhdWx0Q29yc1ByZWZsaWdodE9wdGlvbnM6IHByb3BzLmNvcnNBbGxvd09yaWdpbnNcbiAgICAgICAgPyB7IGFsbG93T3JpZ2luczogcHJvcHMuY29yc0FsbG93T3JpZ2lucyB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hcGkucm9vdC5hZGRNZXRob2QoJ0FOWScsIG5ldyBhcGlnYXRld2F5LkxhbWJkYUludGVncmF0aW9uKGhhbmRsZXIpLCB7XG4gICAgICBhdXRob3JpemVyOiBwcm9wcy5hcGlHYXRld2F5QXV0aG9yaXplcixcbiAgICB9KTtcbiAgICB0aGlzLmFwaS5yb290XG4gICAgICAuYWRkUmVzb3VyY2UoJ3twcm94eSt9JylcbiAgICAgIC5hZGRNZXRob2QoJ0FOWScsIG5ldyBhcGlnYXRld2F5LkxhbWJkYUludGVncmF0aW9uKGhhbmRsZXIpLCB7XG4gICAgICAgIGF1dGhvcml6ZXI6IHByb3BzLmFwaUdhdGV3YXlBdXRob3JpemVyLFxuICAgICAgfSk7XG5cbiAgICB0aGlzLmFwaUVuZHBvaW50ID0gdGhpcy5hcGkudXJsO1xuICB9XG59XG4iXX0=
|
|
126
|
+
UrlShortener[_a] = { fqn: "cloudstructs.UrlShortener", version: "0.5.2" };
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXJsLXNob3J0ZW5lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUEwRDtBQUMxRCx5REFBeUQ7QUFDekQsMERBQTBEO0FBQzFELHlEQUF5RDtBQUN6RCw4REFBOEQ7QUFDOUQscURBQXFEO0FBRXJELDJDQUEyQztBQUMzQyw2Q0FBNkM7QUFDN0MsbURBQW1EO0FBQ25ELDJEQUEyRDtBQUMzRCx5Q0FBeUM7QUFDekMsMkNBQXVDO0FBQ3ZDLDJEQUF1RDtBQUN2RCw2REFBeUQ7QUF5RHpEOztHQUVHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsc0JBQVM7SUFXekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3Qjs7UUFDaEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFFckgsMEJBQTBCO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQzlDLFlBQVksRUFBRTtnQkFDWixJQUFJLEVBQUUsS0FBSztnQkFDWCxJQUFJLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNO2FBQ3BDO1lBQ0QsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztTQUNyQyxDQUFDLENBQUM7UUFFSCwyQkFBMkI7UUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDM0MsY0FBYyxFQUFFLENBQUM7b0JBQ2YsVUFBVSxRQUFFLEtB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QUUsSUFBSSxVQUFVLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUNyRSxVQUFVLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjtTQUN2QyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ2xDLENBQUM7O0FBdEhILG9DQXVIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBGbiwgUmVtb3ZhbFBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGFwaWdhdGV3YXkgZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXknO1xuaW1wb3J0ICogYXMgYWNtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udCc7XG5pbXBvcnQgKiBhcyBvcmlnaW5zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnMnO1xuaW1wb3J0ICogYXMgZHluYW1vZGIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgcm91dGU1MyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUmVkaXJlY3RGdW5jdGlvbiB9IGZyb20gJy4vcmVkaXJlY3QtZnVuY3Rpb24nO1xuaW1wb3J0IHsgU2hvcnRlbmVyRnVuY3Rpb24gfSBmcm9tICcuL3Nob3J0ZW5lci1mdW5jdGlvbic7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBVcmxTaG9ydGVuZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcmxTaG9ydGVuZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgaG9zdGVkIHpvbmUgZm9yIHRoZSBzaG9ydCBVUkxzIGRvbWFpblxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZTogcm91dGU1My5JSG9zdGVkWm9uZTtcblxuICAvKipcbiAgICogVGhlIHJlY29yZCBuYW1lIHRvIHVzZSBpbiB0aGUgaG9zdGVkIHpvbmVcbiAgICpcbiAgICogQGRlZmF1bHQgLSB6b25lIHJvb3RcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4cGlyYXRpb24gZm9yIHNob3J0IHVybHNcbiAgICpcbiAgICogQGRlZmF1bHQgY2RrLkR1cmF0aW9uLmRheXMoMzY1KVxuICAgKi9cbiAgcmVhZG9ubHkgZXhwaXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBbiBpbnRlcmZhY2UgVlBDIGVuZHBvaW50IGZvciBBUEkgZ2F0ZXdheS4gU3BlY2lmeWluZyB0aGlzIHByb3BlcnR5IHdpbGxcbiAgICogbWFrZSB0aGUgQVBJIHByaXZhdGUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaWdhdGV3YXktcHJpdmF0ZS1hcGlzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBUEkgaXMgcHVibGljXG4gICAqL1xuICByZWFkb25seSBhcGlHYXRld2F5RW5kcG9pbnQ/OiBlYzIuSUludGVyZmFjZVZwY0VuZHBvaW50O1xuXG4gIC8qKlxuICAgKiBBdXRob3JpemVyIGZvciBBUEkgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkbyBub3QgdXNlIGFuIGF1dGhvcml6ZXIgZm9yIHRoZSBBUElcbiAgICovXG4gIHJlYWRvbmx5IGFwaUdhdGV3YXlBdXRob3JpemVyPzogYXBpZ2F0ZXdheS5JQXV0aG9yaXplcjtcblxuICAvKipcbiAgICogQWxsb3dlZCBvcmlnaW5zIGZvciBDT1JTXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ09SUyBpcyBub3QgZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29yc0FsbG93T3JpZ2lucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIG5hbWUgZm9yIHRoZSBidWNrZXQgc2F2aW5nIHRoZSByZWRpcmVjdHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXJpdmVkIGZyb20gc2hvcnQgbGluayBkb21haW4gbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBVUkwgc2hvcnRlbmVyXG4gKi9cbmV4cG9ydCBjbGFzcyBVcmxTaG9ydGVuZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIGVuZHBvaW50IG9mIHRoZSBVUkwgc2hvcnRlbmVyIEFQSVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaUVuZHBvaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmRlcmx5aW5nIEFQSSBHYXRld2F5IFJFU1QgQVBJXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpOiBhcGlnYXRld2F5LkxhbWJkYVJlc3RBcGk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFVybFNob3J0ZW5lclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGRvbWFpbk5hbWUgPSBwcm9wcy5yZWNvcmROYW1lID8gYCR7cHJvcHMucmVjb3JkTmFtZX0uJHtwcm9wcy5ob3N0ZWRab25lLnpvbmVOYW1lfWAgOiBwcm9wcy5ob3N0ZWRab25lLnpvbmVOYW1lO1xuXG4gICAgLy8gVGFibGUgdG8gc2F2ZSBhIGNvdW50ZXJcbiAgICBjb25zdCB0YWJsZSA9IG5ldyBkeW5hbW9kYi5UYWJsZSh0aGlzLCAnVGFibGUnLCB7XG4gICAgICBwYXJ0aXRpb25LZXk6IHtcbiAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HLFxuICAgICAgfSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcblxuICAgIC8vIEJ1Y2tldCB0byBzYXZlIHJlZGlyZWN0c1xuICAgIGNvbnN0IGJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgJ0J1Y2tldCcsIHtcbiAgICAgIGxpZmVjeWNsZVJ1bGVzOiBbe1xuICAgICAgICBleHBpcmF0aW9uOiBwcm9wcy5leHBpcmF0aW9uID8/IER1cmF0aW9uLmRheXMoMzY1KSxcbiAgICAgIH1dLFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IHMzLkJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIGJ1Y2tldE5hbWU6IHByb3BzLmJ1Y2tldE5hbWUgPz8gYGNsb3Vkc3RydWN0cy11cmwtc2hvcnRlbmVyLSR7ZG9tYWluTmFtZX1gLFxuICAgIH0pO1xuXG4gICAgLy8gUmVkaXJlY3QgZnVuY3Rpb25cbiAgICBjb25zdCByZWRpcmVjdEZ1bmN0aW9uID0gbmV3IFJlZGlyZWN0RnVuY3Rpb24odGhpcywgJ1JlZGlyZWN0Jyk7XG4gICAgYnVja2V0LmdyYW50UmVhZChyZWRpcmVjdEZ1bmN0aW9uKTtcblxuICAgIC8vIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uXG4gICAgY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgYWNtLkRuc1ZhbGlkYXRlZENlcnRpZmljYXRlKHRoaXMsICdDZXJ0aWZpY2F0ZScsIHtcbiAgICAgIGRvbWFpbk5hbWUsXG4gICAgICBob3N0ZWRab25lOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICB9KTtcbiAgICBjb25zdCBkaXN0cmlidXRpb24gPSBuZXcgY2xvdWRmcm9udC5EaXN0cmlidXRpb24odGhpcywgJ0Rpc3RyaWJ1dGlvbicsIHtcbiAgICAgIGRlZmF1bHRCZWhhdmlvcjoge1xuICAgICAgICBvcmlnaW46IG5ldyBvcmlnaW5zLlMzT3JpZ2luKGJ1Y2tldCksXG4gICAgICAgIGVkZ2VMYW1iZGFzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXZlbnRUeXBlOiBjbG91ZGZyb250LkxhbWJkYUVkZ2VFdmVudFR5cGUuT1JJR0lOX1JFUVVFU1QsXG4gICAgICAgICAgICBmdW5jdGlvblZlcnNpb246IHJlZGlyZWN0RnVuY3Rpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgIGRvbWFpbk5hbWVzOiBbZG9tYWluTmFtZV0sXG4gICAgfSk7XG5cbiAgICAvLyBSb3V0ZTUzIHJlY29yZHNcbiAgICBuZXcgcm91dGU1My5BUmVjb3JkKHRoaXMsICdBUmVjb3JkJywge1xuICAgICAgem9uZTogcHJvcHMuaG9zdGVkWm9uZSxcbiAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKG5ldyB0YXJnZXRzLkNsb3VkRnJvbnRUYXJnZXQoZGlzdHJpYnV0aW9uKSksXG4gICAgICByZWNvcmROYW1lOiBwcm9wcy5yZWNvcmROYW1lLFxuICAgIH0pO1xuICAgIG5ldyByb3V0ZTUzLkFhYWFSZWNvcmQodGhpcywgJ0FhYWFSZWNvcmQnLCB7XG4gICAgICB6b25lOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMobmV3IHRhcmdldHMuQ2xvdWRGcm9udFRhcmdldChkaXN0cmlidXRpb24pKSxcbiAgICAgIHJlY29yZE5hbWU6IHByb3BzLnJlY29yZE5hbWUsXG4gICAgfSk7XG5cbiAgICAvLyBMYW1iZGEgZnVuY3Rpb24gdG8gaW5jcmVtZW50IGNvdW50ZXIgYW5kIHdyaXRlIHJlZGlyZWN0IGluIGJ1Y2tldFxuICAgIGNvbnN0IHNob3J0ZW5lckZ1bmN0aW9uID0gbmV3IFNob3J0ZW5lckZ1bmN0aW9uKHRoaXMsICdTaG9ydGVuZXInLCB7XG4gICAgICBsb2dSZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfTU9OVEgsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBET01BSU5fTkFNRTogZG9tYWluTmFtZSxcbiAgICAgICAgQlVDS0VUX05BTUU6IGJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICBUQUJMRV9OQU1FOiB0YWJsZS50YWJsZU5hbWUsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGlmIChwcm9wcy5jb3JzQWxsb3dPcmlnaW5zKSB7XG4gICAgICBzaG9ydGVuZXJGdW5jdGlvbi5hZGRFbnZpcm9ubWVudCgnQ09SU19BTExPV19PUklHSU5TJywgcHJvcHMuY29yc0FsbG93T3JpZ2lucy5qb2luKCcgJykpO1xuICAgIH1cbiAgICBidWNrZXQuZ3JhbnRQdXQoc2hvcnRlbmVyRnVuY3Rpb24pO1xuICAgIHRhYmxlLmdyYW50KHNob3J0ZW5lckZ1bmN0aW9uLCAnZHluYW1vZGI6VXBkYXRlSXRlbScpO1xuXG4gICAgLy8gQVBJXG4gICAgdGhpcy5hcGkgPSBuZXcgYXBpZ2F0ZXdheS5SZXN0QXBpKHRoaXMsIGBVcmxTaG9ydGVuZXIke3Byb3BzLmhvc3RlZFpvbmUuem9uZU5hbWV9YCwge1xuICAgICAgZW5kcG9pbnRUeXBlczogcHJvcHMuYXBpR2F0ZXdheUVuZHBvaW50ID8gW2FwaWdhdGV3YXkuRW5kcG9pbnRUeXBlLlBSSVZBVEVdIDogdW5kZWZpbmVkLFxuICAgICAgcG9saWN5OiBwcm9wcy5hcGlHYXRld2F5RW5kcG9pbnRcbiAgICAgICAgPyBuZXcgaWFtLlBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgYWN0aW9uczogWydleGVjdXRlLWFwaTpJbnZva2UnXSxcbiAgICAgICAgICAgICAgcHJpbmNpcGFsczogW25ldyBpYW0uQW55UHJpbmNpcGFsKCldLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtGbi5qb2luKCcnLCBbJ2V4ZWN1dGUtYXBpOi8nLCAnKiddKV0sXG4gICAgICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHsgJ2F3czpTb3VyY2VWcGNlJzogcHJvcHMuYXBpR2F0ZXdheUVuZHBvaW50LnZwY0VuZHBvaW50SWQgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgZGVmYXVsdENvcnNQcmVmbGlnaHRPcHRpb25zOiBwcm9wcy5jb3JzQWxsb3dPcmlnaW5zXG4gICAgICAgID8geyBhbGxvd09yaWdpbnM6IHByb3BzLmNvcnNBbGxvd09yaWdpbnMgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIHRoaXMuYXBpLnJvb3QuYWRkTWV0aG9kKCdBTlknLCBuZXcgYXBpZ2F0ZXdheS5MYW1iZGFJbnRlZ3JhdGlvbihzaG9ydGVuZXJGdW5jdGlvbiksIHtcbiAgICAgIGF1dGhvcml6ZXI6IHByb3BzLmFwaUdhdGV3YXlBdXRob3JpemVyLFxuICAgIH0pO1xuICAgIHRoaXMuYXBpLnJvb3RcbiAgICAgIC5hZGRSZXNvdXJjZSgne3Byb3h5K30nKVxuICAgICAgLmFkZE1ldGhvZCgnQU5ZJywgbmV3IGFwaWdhdGV3YXkuTGFtYmRhSW50ZWdyYXRpb24oc2hvcnRlbmVyRnVuY3Rpb24pLCB7XG4gICAgICAgIGF1dGhvcml6ZXI6IHByb3BzLmFwaUdhdGV3YXlBdXRob3JpemVyLFxuICAgICAgfSk7XG5cbiAgICB0aGlzLmFwaUVuZHBvaW50ID0gdGhpcy5hcGkudXJsO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
/**
|
|
4
|
+
* Props for RedirectFunction
|
|
5
|
+
*/
|
|
6
|
+
export interface RedirectFunctionProps extends cloudfront.experimental.EdgeFunctionProps {
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* An AWS Lambda function which executes src/url-shortener/redirect.
|
|
10
|
+
*/
|
|
11
|
+
export declare class RedirectFunction extends cloudfront.experimental.EdgeFunction {
|
|
12
|
+
constructor(scope: Construct, id: string, props?: RedirectFunctionProps);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=redirect-function.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirect-function.d.ts","sourceRoot":"","sources":["../../src/url-shortener/redirect-function.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,UAAU,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,UAAU,CAAC,YAAY,CAAC,iBAAiB;CACvF;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,UAAU,CAAC,YAAY,CAAC,YAAY;gBAC5D,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,qBAAqB;CASxE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RedirectFunction = void 0;
|
|
4
|
+
// ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const cloudfront = require("aws-cdk-lib/aws-cloudfront");
|
|
7
|
+
const lambda = require("aws-cdk-lib/aws-lambda");
|
|
8
|
+
/**
|
|
9
|
+
* An AWS Lambda function which executes src/url-shortener/redirect.
|
|
10
|
+
*/
|
|
11
|
+
class RedirectFunction extends cloudfront.experimental.EdgeFunction {
|
|
12
|
+
constructor(scope, id, props) {
|
|
13
|
+
super(scope, id, {
|
|
14
|
+
description: 'src/url-shortener/redirect.edge-lambda.ts',
|
|
15
|
+
...props,
|
|
16
|
+
runtime: lambda.Runtime.NODEJS_14_X,
|
|
17
|
+
handler: 'index.handler',
|
|
18
|
+
code: lambda.Code.fromAsset(path.join(__dirname, '../../assets/url-shortener/redirect.edge-lambda')),
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.RedirectFunction = RedirectFunction;
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXJlY3QtZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXJsLXNob3J0ZW5lci9yZWRpcmVjdC1mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2RUFBNkU7QUFDN0UsNkJBQTZCO0FBQzdCLHlEQUF5RDtBQUN6RCxpREFBaUQ7QUFTakQ7O0dBRUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLFVBQVUsQ0FBQyxZQUFZLENBQUMsWUFBWTtJQUN4RSxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLDJDQUEyQztZQUN4RCxHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBQ25DLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxpREFBaUQsQ0FBQyxDQUFDO1NBQ3JHLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELDRDQVVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy5qcyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGNsb3VkZnJvbnQgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogUHJvcHMgZm9yIFJlZGlyZWN0RnVuY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWRpcmVjdEZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb25Qcm9wcyB7XG59XG5cbi8qKlxuICogQW4gQVdTIExhbWJkYSBmdW5jdGlvbiB3aGljaCBleGVjdXRlcyBzcmMvdXJsLXNob3J0ZW5lci9yZWRpcmVjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlZGlyZWN0RnVuY3Rpb24gZXh0ZW5kcyBjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFJlZGlyZWN0RnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgZGVzY3JpcHRpb246ICdzcmMvdXJsLXNob3J0ZW5lci9yZWRpcmVjdC5lZGdlLWxhbWJkYS50cycsXG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9hc3NldHMvdXJsLXNob3J0ZW5lci9yZWRpcmVjdC5lZGdlLWxhbWJkYScpKSxcbiAgICB9KTtcbiAgfVxufSJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redirect.edge-lambda.d.ts","sourceRoot":"","sources":["../../src/url-shortener/redirect.edge-lambda.ts"],"names":[],"mappings":"AAIA,wBAAsB,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC,uBAAuB,CAAC,CA0CjH"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handler = void 0;
|
|
4
|
+
const aws_sdk_1 = require("aws-sdk"); // eslint-disable-line import/no-extraneous-dependencies
|
|
5
|
+
const s3 = new aws_sdk_1.S3({ apiVersion: '2006-03-01' });
|
|
6
|
+
async function handler(event) {
|
|
7
|
+
var _a;
|
|
8
|
+
const request = event.Records[0].cf.request;
|
|
9
|
+
try {
|
|
10
|
+
const s3Origin = (_a = request.origin) === null || _a === void 0 ? void 0 : _a.s3;
|
|
11
|
+
if (!s3Origin) {
|
|
12
|
+
throw new Error('No S3 origin');
|
|
13
|
+
}
|
|
14
|
+
const bucket = s3Origin.domainName.replace(new RegExp(`.s3.${s3Origin.region}.amazonaws.com$`), '');
|
|
15
|
+
const key = request.uri.substring(1); // remove first slash
|
|
16
|
+
const data = await s3.getObject({
|
|
17
|
+
Bucket: bucket,
|
|
18
|
+
Key: key,
|
|
19
|
+
}).promise();
|
|
20
|
+
if (!data.Body) {
|
|
21
|
+
throw new Error('No body');
|
|
22
|
+
}
|
|
23
|
+
const redirect = JSON.parse(data.Body.toString());
|
|
24
|
+
return {
|
|
25
|
+
status: '301',
|
|
26
|
+
statusDescription: 'Moved Permanently',
|
|
27
|
+
headers: {
|
|
28
|
+
location: [{
|
|
29
|
+
key: 'Location',
|
|
30
|
+
value: redirect.url,
|
|
31
|
+
}],
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
console.log(err);
|
|
37
|
+
return {
|
|
38
|
+
status: '404',
|
|
39
|
+
statusDescription: 'Not Found',
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.handler = handler;
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXJlY3QuZWRnZS1sYW1iZGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXJsLXNob3J0ZW5lci9yZWRpcmVjdC5lZGdlLWxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBNkIsQ0FBQyx3REFBd0Q7QUFFdEYsTUFBTSxFQUFFLEdBQUcsSUFBSSxZQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUV6QyxLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQXVDOztJQUNuRSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUM7SUFFNUMsSUFBSTtRQUNGLE1BQU0sUUFBUSxTQUFHLE9BQU8sQ0FBQyxNQUFNLDBDQUFFLEVBQUUsQ0FBQztRQUVwQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNqQztRQUVELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sUUFBUSxDQUFDLE1BQU0saUJBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtRQUUzRCxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDOUIsTUFBTSxFQUFFLE1BQU07WUFDZCxHQUFHLEVBQUUsR0FBRztTQUNULENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM1QjtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRWxELE9BQU87WUFDTCxNQUFNLEVBQUUsS0FBSztZQUNiLGlCQUFpQixFQUFFLG1CQUFtQjtZQUN0QyxPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLENBQUM7d0JBQ1QsR0FBRyxFQUFFLFVBQVU7d0JBQ2YsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHO3FCQUNwQixDQUFDO2FBQ0g7U0FDRixDQUFDO0tBQ0g7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFakIsT0FBTztZQUNMLE1BQU0sRUFBRSxLQUFLO1lBQ2IsaUJBQWlCLEVBQUUsV0FBVztTQUMvQixDQUFDO0tBQ0g7QUFDSCxDQUFDO0FBMUNELDBCQTBDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFMzIH0gZnJvbSAnYXdzLXNkayc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5cbmNvbnN0IHMzID0gbmV3IFMzKHsgYXBpVmVyc2lvbjogJzIwMDYtMDMtMDEnIH0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogQVdTTGFtYmRhLkNsb3VkRnJvbnRSZXF1ZXN0RXZlbnQpOiBQcm9taXNlPEFXU0xhbWJkYS5DbG91ZEZyb250UmVxdWVzdFJlc3VsdD4ge1xuICBjb25zdCByZXF1ZXN0ID0gZXZlbnQuUmVjb3Jkc1swXS5jZi5yZXF1ZXN0O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgczNPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpbj8uczM7XG5cbiAgICBpZiAoIXMzT3JpZ2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFMzIG9yaWdpbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1Y2tldCA9IHMzT3JpZ2luLmRvbWFpbk5hbWUucmVwbGFjZShuZXcgUmVnRXhwKGAuczMuJHtzM09yaWdpbi5yZWdpb259LmFtYXpvbmF3cy5jb20kYCksICcnKTtcbiAgICBjb25zdCBrZXkgPSByZXF1ZXN0LnVyaS5zdWJzdHJpbmcoMSk7IC8vIHJlbW92ZSBmaXJzdCBzbGFzaFxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHMzLmdldE9iamVjdCh7XG4gICAgICBCdWNrZXQ6IGJ1Y2tldCxcbiAgICAgIEtleToga2V5LFxuICAgIH0pLnByb21pc2UoKTtcblxuICAgIGlmICghZGF0YS5Cb2R5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGJvZHknKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWRpcmVjdCA9IEpTT04ucGFyc2UoZGF0YS5Cb2R5LnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogJzMwMScsXG4gICAgICBzdGF0dXNEZXNjcmlwdGlvbjogJ01vdmVkIFBlcm1hbmVudGx5JyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgbG9jYXRpb246IFt7XG4gICAgICAgICAga2V5OiAnTG9jYXRpb24nLFxuICAgICAgICAgIHZhbHVlOiByZWRpcmVjdC51cmwsXG4gICAgICAgIH1dLFxuICAgICAgfSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmxvZyhlcnIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogJzQwNCcsXG4gICAgICBzdGF0dXNEZXNjcmlwdGlvbjogJ05vdCBGb3VuZCcsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -11,3 +11,4 @@ export interface ShortenerFunctionProps extends lambda.FunctionOptions {
|
|
|
11
11
|
export declare class ShortenerFunction extends lambda.Function {
|
|
12
12
|
constructor(scope: Construct, id: string, props?: ShortenerFunctionProps);
|
|
13
13
|
}
|
|
14
|
+
//# sourceMappingURL=shortener-function.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shortener-function.d.ts","sourceRoot":"","sources":["../../src/url-shortener/shortener-function.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,MAAM,CAAC,eAAe;CACrE;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,MAAM,CAAC,QAAQ;gBACxC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,sBAAsB;CAUzE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shortener.lambda.d.ts","sourceRoot":"","sources":["../../src/url-shortener/shortener.lambda.ts"],"names":[],"mappings":"AAyCA,wBAAsB,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAgE7G"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.handler = void 0;
|
|
4
4
|
/* eslint-disable no-console */
|
|
5
|
+
const url_1 = require("url");
|
|
5
6
|
const aws_sdk_1 = require("aws-sdk"); // eslint-disable-line import/no-extraneous-dependencies
|
|
6
7
|
function base62Encode(int) {
|
|
7
8
|
const characterSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
@@ -22,6 +23,18 @@ function getEnv(name) {
|
|
|
22
23
|
}
|
|
23
24
|
return value;
|
|
24
25
|
}
|
|
26
|
+
function isUrlValid(url) {
|
|
27
|
+
if (!url) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
new url_1.URL(url);
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
25
38
|
const documentClient = new aws_sdk_1.DynamoDB.DocumentClient({ apiVersion: '2012-08-10' });
|
|
26
39
|
const s3 = new aws_sdk_1.S3({ apiVersion: '2006-03-01' });
|
|
27
40
|
async function handler(event) {
|
|
@@ -36,7 +49,7 @@ async function handler(event) {
|
|
|
36
49
|
};
|
|
37
50
|
try {
|
|
38
51
|
const body = JSON.parse((_a = event.body) !== null && _a !== void 0 ? _a : '{}');
|
|
39
|
-
if (!body.url) {
|
|
52
|
+
if (!isUrlValid(body.url)) {
|
|
40
53
|
return {
|
|
41
54
|
...response,
|
|
42
55
|
statusCode: 400,
|
|
@@ -60,8 +73,8 @@ async function handler(event) {
|
|
|
60
73
|
const putObject = await s3.putObject({
|
|
61
74
|
Bucket: getEnv('BUCKET_NAME'),
|
|
62
75
|
Key: key,
|
|
63
|
-
ContentType: '
|
|
64
|
-
Body:
|
|
76
|
+
ContentType: 'application/json',
|
|
77
|
+
Body: JSON.stringify({ url: body.url }),
|
|
65
78
|
}).promise();
|
|
66
79
|
console.log('Put object: %j', putObject);
|
|
67
80
|
// Return short url
|
|
@@ -82,4 +95,4 @@ async function handler(event) {
|
|
|
82
95
|
}
|
|
83
96
|
}
|
|
84
97
|
exports.handler = handler;
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnRlbmVyLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cmwtc2hvcnRlbmVyL3Nob3J0ZW5lci5sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLDZCQUEwQjtBQUMxQixxQ0FBdUMsQ0FBQyx3REFBd0Q7QUFFaEcsU0FBUyxZQUFZLENBQUMsR0FBVztJQUMvQixNQUFNLFlBQVksR0FBRyxnRUFBZ0UsQ0FBQztJQUN0RixJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDMUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1gsT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFO1FBQ2QsQ0FBQyxHQUFHLFlBQVksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztLQUM1QjtJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUFBLENBQUM7QUFFRixTQUFTLE1BQU0sQ0FBQyxJQUFZO0lBQzFCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFaEMsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLElBQUksaUJBQWlCLENBQUMsQ0FBQztLQUNwRTtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQVk7SUFDOUIsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxJQUFJO1FBQ0YsSUFBSSxTQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDYixPQUFPLElBQUksQ0FBQztLQUNiO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixPQUFPLEtB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b3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgRHluYW1vREIsIFMzIH0gZnJvbSAnYXdzLXNkayc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5cbmZ1bmN0aW9uIGJhc2U2MkVuY29kZShpbnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGNoYXJhY3RlclNldCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XG4gIGlmIChpbnQgPT09IDApIHJldHVybiAnMCc7XG4gIGxldCBzID0gJyc7XG4gIHdoaWxlIChpbnQgPiAwKSB7XG4gICAgcyA9IGNoYXJhY3RlclNldFtpbnQgJSA2Ml0gKyBzO1xuICAgIGludCA9IE1hdGguZmxvb3IoaW50IC8gNjIpO1xuICB9XG4gIHJldHVybiBzO1xufTtcblxuZnVuY3Rpb24gZ2V0RW52KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnZbbmFtZV07XG5cbiAgaWYgKCF2YWx1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlICR7bmFtZX0gaXMgbm90IGRlZmluZWRgKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gaXNVcmxWYWxpZCh1cmw/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICBuZXcgVVJMKHVybCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5jb25zdCBkb2N1bWVudENsaWVudCA9IG5ldyBEeW5hbW9EQi5Eb2N1bWVudENsaWVudCh7IGFwaVZlcnNpb246ICcyMDEyLTA4LTEwJyB9KTtcblxuY29uc3QgczMgPSBuZXcgUzMoeyBhcGlWZXJzaW9uOiAnMjAwNi0wMy0wMScgfSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5RXZlbnQpOiBQcm9taXNlPEFXU0xhbWJkYS5BUElHYXRld2F5UHJveHlSZXN1bHQ+IHtcbiAgY29uc29sZS5sb2coJ0V2ZW50OiAlaicsIGV2ZW50KTtcblxuICBjb25zdCByZXNwb25zZTogQVdTTGFtYmRhLkFQSUdhdGV3YXlQcm94eVJlc3VsdCA9IHtcbiAgICBzdGF0dXNDb2RlOiAyMDEsXG4gICAgYm9keTogJycsXG4gICAgaGVhZGVyczogcHJvY2Vzcy5lbnYuQ09SU19BTExPV19PUklHSU5TXG4gICAgICA/IHsgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6IHByb2Nlc3MuZW52LkNPUlNfQUxMT1dfT1JJR0lOUyB9XG4gICAgICA6IHVuZGVmaW5lZCxcbiAgfTtcblxuICB0cnkge1xuICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGV2ZW50LmJvZHkgPz8gJ3t9Jyk7XG5cbiAgICBpZiAoIWlzVXJsVmFsaWQoYm9keS51cmwpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5yZXNwb25zZSxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBHZXQgbmV4dCBjb3VudGVyIHZhbHVlXG4gICAgY29uc3QgdXBkYXRlID0gYXdhaXQgZG9jdW1lbnRDbGllbnQudXBkYXRlKHtcbiAgICAgIFRhYmxlTmFtZTogZ2V0RW52KCdUQUJMRV9OQU1FJyksXG4gICAgICBLZXk6IHsga2V5OiAnY291bnRlcicgfSxcbiAgICAgIFVwZGF0ZUV4cHJlc3Npb246ICdBREQgI3ZhbHVlIDppbmNyJyxcbiAgICAgIEV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lczogeyAnI3ZhbHVlJzogJ3ZhbHVlJyB9LFxuICAgICAgRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczogeyAnOmluY3InOiAxIH0sXG4gICAgICBSZXR1cm5WYWx1ZXM6ICdVUERBVEVEX05FVycsXG4gICAgfSkucHJvbWlzZSgpO1xuXG4gICAgY29uc3QgdmFsdWUgPSB1cGRhdGUuQXR0cmlidXRlcz8udmFsdWU7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgbmV4dCBjb3VudGVyIHZhbHVlJyk7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gYmFzZTYyRW5jb2RlKHZhbHVlKTtcbiAgICBjb25zb2xlLmxvZygnS2V5OiAlaicsIGtleSk7XG5cbiAgICBjb25zdCBwdXRPYmplY3QgPSBhd2FpdCBzMy5wdXRPYmplY3Qoe1xuICAgICAgQnVja2V0OiBnZXRFbnYoJ0JVQ0tFVF9OQU1FJyksXG4gICAgICBLZXk6IGtleSxcbiAgICAgIENvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBCb2R5OiBKU09OLnN0cmluZ2lmeSh7IHVybDogYm9keS51cmwgfSksXG4gICAgfSkucHJvbWlzZSgpO1xuICAgIGNvbnNvbGUubG9nKCdQdXQgb2JqZWN0OiAlaicsIHB1dE9iamVjdCk7XG5cbiAgICAvLyBSZXR1cm4gc2hvcnQgdXJsXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1cmw6IGJvZHkudXJsLFxuICAgICAgICBzaG9ydFVybDogYGh0dHBzOi8vJHtnZXRFbnYoJ0RPTUFJTl9OQU1FJyl9LyR7a2V5fWAsXG4gICAgICB9KSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmxvZyhlcnIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgc3RhdHVzQ29kZTogNTAwLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -8,9 +8,9 @@ This package contains type definitions for Node.js (https://nodejs.org/).
|
|
|
8
8
|
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
|
|
9
9
|
|
|
10
10
|
### Additional Details
|
|
11
|
-
* Last updated:
|
|
11
|
+
* Last updated: Thu, 19 May 2022 14:01:40 GMT
|
|
12
12
|
* Dependencies: none
|
|
13
13
|
* Global values: `AbortController`, `AbortSignal`, `__dirname`, `__filename`, `console`, `exports`, `gc`, `global`, `module`, `process`, `require`, `structuredClone`
|
|
14
14
|
|
|
15
15
|
# Credits
|
|
16
|
-
These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nicolas Even](https://github.com/n-e), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Simon Schick](https://github.com/SimonSchick), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [Yongsheng Zhang](https://github.com/ZYSzys), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU),
|
|
16
|
+
These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nicolas Even](https://github.com/n-e), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Simon Schick](https://github.com/SimonSchick), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [Yongsheng Zhang](https://github.com/ZYSzys), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), [wafuwafu13](https://github.com/wafuwafu13), and [Matteo Collina](https://github.com/mcollina).
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
// NodeJS Contributors <https://github.com/NodeJS>
|
|
41
41
|
// Linus Unnebäck <https://github.com/LinusU>
|
|
42
42
|
// wafuwafu13 <https://github.com/wafuwafu13>
|
|
43
|
+
// Matteo Collina <https://github.com/mcollina>
|
|
43
44
|
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
|
44
45
|
|
|
45
46
|
/**
|
|
@@ -285,6 +285,11 @@ declare module 'net' {
|
|
|
285
285
|
* @since v0.5.10
|
|
286
286
|
*/
|
|
287
287
|
readonly remotePort?: number | undefined;
|
|
288
|
+
/**
|
|
289
|
+
* The socket timeout in milliseconds as set by socket.setTimeout(). It is undefined if a timeout has not been set.
|
|
290
|
+
* @since v10.7.0
|
|
291
|
+
*/
|
|
292
|
+
readonly timeout?: number | undefined;
|
|
288
293
|
/**
|
|
289
294
|
* Half-closes the socket. i.e., it sends a FIN packet. It is possible the
|
|
290
295
|
* server will still send some data.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@types/node",
|
|
3
|
-
"version": "17.0.
|
|
3
|
+
"version": "17.0.35",
|
|
4
4
|
"description": "TypeScript definitions for Node.js",
|
|
5
5
|
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node",
|
|
6
6
|
"license": "MIT",
|
|
@@ -204,6 +204,11 @@
|
|
|
204
204
|
"name": "wafuwafu13",
|
|
205
205
|
"url": "https://github.com/wafuwafu13",
|
|
206
206
|
"githubUsername": "wafuwafu13"
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"name": "Matteo Collina",
|
|
210
|
+
"url": "https://github.com/mcollina",
|
|
211
|
+
"githubUsername": "mcollina"
|
|
207
212
|
}
|
|
208
213
|
],
|
|
209
214
|
"main": "",
|
|
@@ -215,6 +220,6 @@
|
|
|
215
220
|
},
|
|
216
221
|
"scripts": {},
|
|
217
222
|
"dependencies": {},
|
|
218
|
-
"typesPublisherContentHash": "
|
|
223
|
+
"typesPublisherContentHash": "6238ccaa7b50cbe1d37bc66eabdea21a4bfb4a7fd6bd780350e84241e2810a00",
|
|
219
224
|
"typeScriptVersion": "3.9"
|
|
220
225
|
}
|
|
@@ -1238,6 +1238,19 @@ declare module 'stream' {
|
|
|
1238
1238
|
ref(): void;
|
|
1239
1239
|
unref(): void;
|
|
1240
1240
|
}
|
|
1241
|
+
|
|
1242
|
+
/**
|
|
1243
|
+
* Returns whether the stream has encountered an error.
|
|
1244
|
+
* @since v17.3.0
|
|
1245
|
+
*/
|
|
1246
|
+
function isErrored(stream: Readable | Writable | NodeJS.ReadableStream | NodeJS.WritableStream): boolean;
|
|
1247
|
+
|
|
1248
|
+
/**
|
|
1249
|
+
* Returns whether the stream is readable.
|
|
1250
|
+
* @since v17.4.0
|
|
1251
|
+
*/
|
|
1252
|
+
function isReadable(stream: Readable | NodeJS.ReadableStream): boolean;
|
|
1253
|
+
|
|
1241
1254
|
const promises: typeof streamPromises;
|
|
1242
1255
|
const consumers: typeof streamConsumers;
|
|
1243
1256
|
}
|
|
@@ -69,7 +69,7 @@ declare module 'timers' {
|
|
|
69
69
|
namespace setTimeout {
|
|
70
70
|
const __promisify__: typeof setTimeoutPromise;
|
|
71
71
|
}
|
|
72
|
-
function clearTimeout(timeoutId: NodeJS.Timeout): void;
|
|
72
|
+
function clearTimeout(timeoutId: NodeJS.Timeout | undefined): void;
|
|
73
73
|
function setInterval<TArgs extends any[]>(callback: (...args: TArgs) => void, ms?: number, ...args: TArgs): NodeJS.Timer;
|
|
74
74
|
// util.promisify no rest args compability
|
|
75
75
|
// tslint:disable-next-line void-return
|
|
@@ -77,7 +77,7 @@ declare module 'timers' {
|
|
|
77
77
|
namespace setInterval {
|
|
78
78
|
const __promisify__: typeof setIntervalPromise;
|
|
79
79
|
}
|
|
80
|
-
function clearInterval(intervalId: NodeJS.Timeout): void;
|
|
80
|
+
function clearInterval(intervalId: NodeJS.Timeout | undefined): void;
|
|
81
81
|
function setImmediate<TArgs extends any[]>(callback: (...args: TArgs) => void, ...args: TArgs): NodeJS.Immediate;
|
|
82
82
|
// util.promisify no rest args compability
|
|
83
83
|
// tslint:disable-next-line void-return
|
|
@@ -85,7 +85,7 @@ declare module 'timers' {
|
|
|
85
85
|
namespace setImmediate {
|
|
86
86
|
const __promisify__: typeof setImmediatePromise;
|
|
87
87
|
}
|
|
88
|
-
function clearImmediate(immediateId: NodeJS.Immediate): void;
|
|
88
|
+
function clearImmediate(immediateId: NodeJS.Immediate | undefined): void;
|
|
89
89
|
function queueMicrotask(callback: () => void): void;
|
|
90
90
|
}
|
|
91
91
|
}
|
|
@@ -8,9 +8,9 @@ This package contains type definitions for Node.js (https://nodejs.org/).
|
|
|
8
8
|
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
|
|
9
9
|
|
|
10
10
|
### Additional Details
|
|
11
|
-
* Last updated:
|
|
11
|
+
* Last updated: Thu, 19 May 2022 14:01:40 GMT
|
|
12
12
|
* Dependencies: none
|
|
13
13
|
* Global values: `AbortController`, `AbortSignal`, `__dirname`, `__filename`, `console`, `exports`, `gc`, `global`, `module`, `process`, `require`, `structuredClone`
|
|
14
14
|
|
|
15
15
|
# Credits
|
|
16
|
-
These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nicolas Even](https://github.com/n-e), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Simon Schick](https://github.com/SimonSchick), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [Yongsheng Zhang](https://github.com/ZYSzys), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU),
|
|
16
|
+
These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nicolas Even](https://github.com/n-e), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Simon Schick](https://github.com/SimonSchick), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [Yongsheng Zhang](https://github.com/ZYSzys), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), [wafuwafu13](https://github.com/wafuwafu13), and [Matteo Collina](https://github.com/mcollina).
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
// NodeJS Contributors <https://github.com/NodeJS>
|
|
41
41
|
// Linus Unnebäck <https://github.com/LinusU>
|
|
42
42
|
// wafuwafu13 <https://github.com/wafuwafu13>
|
|
43
|
+
// Matteo Collina <https://github.com/mcollina>
|
|
43
44
|
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
|
44
45
|
|
|
45
46
|
/**
|
|
@@ -285,6 +285,11 @@ declare module 'net' {
|
|
|
285
285
|
* @since v0.5.10
|
|
286
286
|
*/
|
|
287
287
|
readonly remotePort?: number | undefined;
|
|
288
|
+
/**
|
|
289
|
+
* The socket timeout in milliseconds as set by socket.setTimeout(). It is undefined if a timeout has not been set.
|
|
290
|
+
* @since v10.7.0
|
|
291
|
+
*/
|
|
292
|
+
readonly timeout?: number | undefined;
|
|
288
293
|
/**
|
|
289
294
|
* Half-closes the socket. i.e., it sends a FIN packet. It is possible the
|
|
290
295
|
* server will still send some data.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@types/node",
|
|
3
|
-
"version": "17.0.
|
|
3
|
+
"version": "17.0.35",
|
|
4
4
|
"description": "TypeScript definitions for Node.js",
|
|
5
5
|
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node",
|
|
6
6
|
"license": "MIT",
|
|
@@ -204,6 +204,11 @@
|
|
|
204
204
|
"name": "wafuwafu13",
|
|
205
205
|
"url": "https://github.com/wafuwafu13",
|
|
206
206
|
"githubUsername": "wafuwafu13"
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"name": "Matteo Collina",
|
|
210
|
+
"url": "https://github.com/mcollina",
|
|
211
|
+
"githubUsername": "mcollina"
|
|
207
212
|
}
|
|
208
213
|
],
|
|
209
214
|
"main": "",
|
|
@@ -215,6 +220,6 @@
|
|
|
215
220
|
},
|
|
216
221
|
"scripts": {},
|
|
217
222
|
"dependencies": {},
|
|
218
|
-
"typesPublisherContentHash": "
|
|
223
|
+
"typesPublisherContentHash": "6238ccaa7b50cbe1d37bc66eabdea21a4bfb4a7fd6bd780350e84241e2810a00",
|
|
219
224
|
"typeScriptVersion": "3.9"
|
|
220
225
|
}
|
|
@@ -1238,6 +1238,19 @@ declare module 'stream' {
|
|
|
1238
1238
|
ref(): void;
|
|
1239
1239
|
unref(): void;
|
|
1240
1240
|
}
|
|
1241
|
+
|
|
1242
|
+
/**
|
|
1243
|
+
* Returns whether the stream has encountered an error.
|
|
1244
|
+
* @since v17.3.0
|
|
1245
|
+
*/
|
|
1246
|
+
function isErrored(stream: Readable | Writable | NodeJS.ReadableStream | NodeJS.WritableStream): boolean;
|
|
1247
|
+
|
|
1248
|
+
/**
|
|
1249
|
+
* Returns whether the stream is readable.
|
|
1250
|
+
* @since v17.4.0
|
|
1251
|
+
*/
|
|
1252
|
+
function isReadable(stream: Readable | NodeJS.ReadableStream): boolean;
|
|
1253
|
+
|
|
1241
1254
|
const promises: typeof streamPromises;
|
|
1242
1255
|
const consumers: typeof streamConsumers;
|
|
1243
1256
|
}
|
|
@@ -69,7 +69,7 @@ declare module 'timers' {
|
|
|
69
69
|
namespace setTimeout {
|
|
70
70
|
const __promisify__: typeof setTimeoutPromise;
|
|
71
71
|
}
|
|
72
|
-
function clearTimeout(timeoutId: NodeJS.Timeout): void;
|
|
72
|
+
function clearTimeout(timeoutId: NodeJS.Timeout | undefined): void;
|
|
73
73
|
function setInterval<TArgs extends any[]>(callback: (...args: TArgs) => void, ms?: number, ...args: TArgs): NodeJS.Timer;
|
|
74
74
|
// util.promisify no rest args compability
|
|
75
75
|
// tslint:disable-next-line void-return
|
|
@@ -77,7 +77,7 @@ declare module 'timers' {
|
|
|
77
77
|
namespace setInterval {
|
|
78
78
|
const __promisify__: typeof setIntervalPromise;
|
|
79
79
|
}
|
|
80
|
-
function clearInterval(intervalId: NodeJS.Timeout): void;
|
|
80
|
+
function clearInterval(intervalId: NodeJS.Timeout | undefined): void;
|
|
81
81
|
function setImmediate<TArgs extends any[]>(callback: (...args: TArgs) => void, ...args: TArgs): NodeJS.Immediate;
|
|
82
82
|
// util.promisify no rest args compability
|
|
83
83
|
// tslint:disable-next-line void-return
|
|
@@ -85,7 +85,7 @@ declare module 'timers' {
|
|
|
85
85
|
namespace setImmediate {
|
|
86
86
|
const __promisify__: typeof setImmediatePromise;
|
|
87
87
|
}
|
|
88
|
-
function clearImmediate(immediateId: NodeJS.Immediate): void;
|
|
88
|
+
function clearImmediate(immediateId: NodeJS.Immediate | undefined): void;
|
|
89
89
|
function queueMicrotask(callback: () => void): void;
|
|
90
90
|
}
|
|
91
91
|
}
|
|
@@ -8,9 +8,9 @@ This package contains type definitions for Node.js (https://nodejs.org/).
|
|
|
8
8
|
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
|
|
9
9
|
|
|
10
10
|
### Additional Details
|
|
11
|
-
* Last updated:
|
|
11
|
+
* Last updated: Thu, 19 May 2022 14:01:40 GMT
|
|
12
12
|
* Dependencies: none
|
|
13
13
|
* Global values: `AbortController`, `AbortSignal`, `__dirname`, `__filename`, `console`, `exports`, `gc`, `global`, `module`, `process`, `require`, `structuredClone`
|
|
14
14
|
|
|
15
15
|
# Credits
|
|
16
|
-
These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nicolas Even](https://github.com/n-e), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Simon Schick](https://github.com/SimonSchick), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [Yongsheng Zhang](https://github.com/ZYSzys), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU),
|
|
16
|
+
These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nicolas Even](https://github.com/n-e), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Simon Schick](https://github.com/SimonSchick), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [Yongsheng Zhang](https://github.com/ZYSzys), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), [wafuwafu13](https://github.com/wafuwafu13), and [Matteo Collina](https://github.com/mcollina).
|