@aws-sdk/cloudfront-signer 3.90.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/LICENSE +201 -0
- package/README.md +49 -0
- package/dist-cjs/index.js +4 -0
- package/dist-cjs/sign.js +248 -0
- package/dist-es/index.js +1 -0
- package/dist-es/sign.js +251 -0
- package/dist-types/index.d.ts +1 -0
- package/dist-types/sign.d.ts +59 -0
- package/dist-types/ts3.4/index.d.ts +1 -0
- package/dist-types/ts3.4/sign.d.ts +47 -0
- package/jest.config.js +6 -0
- package/package.json +48 -0
- package/src/index.ts +1 -0
- package/src/sign.spec.ts +577 -0
- package/src/sign.ts +385 -0
- package/tsconfig.cjs.json +9 -0
- package/tsconfig.cjs.tsbuildinfo +1 -0
- package/tsconfig.es.json +9 -0
- package/tsconfig.es.tsbuildinfo +1 -0
- package/tsconfig.types.json +9 -0
- package/tsconfig.types.tsbuildinfo +1 -0
package/dist-es/sign.js
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { parseUrl } from "@aws-sdk/url-parser";
|
|
2
|
+
import { createSign } from "crypto";
|
|
3
|
+
export function getSignedUrl(_a) {
|
|
4
|
+
var dateLessThan = _a.dateLessThan, dateGreaterThan = _a.dateGreaterThan, url = _a.url, keyPairId = _a.keyPairId, privateKey = _a.privateKey, ipAddress = _a.ipAddress, policy = _a.policy;
|
|
5
|
+
var parsedUrl = parseUrl(url);
|
|
6
|
+
var queryParams = [];
|
|
7
|
+
for (var key in parsedUrl.query) {
|
|
8
|
+
queryParams.push("".concat(key, "=").concat(parsedUrl.query[key]));
|
|
9
|
+
}
|
|
10
|
+
var cloudfrontSignBuilder = new CloudfrontSignBuilder({
|
|
11
|
+
keyPairId: keyPairId,
|
|
12
|
+
privateKey: privateKey,
|
|
13
|
+
});
|
|
14
|
+
if (policy) {
|
|
15
|
+
cloudfrontSignBuilder.setCustomPolicy(policy);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
cloudfrontSignBuilder.setPolicyParameters({
|
|
19
|
+
url: url,
|
|
20
|
+
dateLessThan: dateLessThan,
|
|
21
|
+
dateGreaterThan: dateGreaterThan,
|
|
22
|
+
ipAddress: ipAddress,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
var cloudfrontQueryParams = cloudfrontSignBuilder.createCloudfrontAttribute();
|
|
26
|
+
if (cloudfrontQueryParams["Expires"]) {
|
|
27
|
+
queryParams.push("Expires=".concat(cloudfrontQueryParams["Expires"]));
|
|
28
|
+
}
|
|
29
|
+
if (cloudfrontQueryParams["Policy"]) {
|
|
30
|
+
queryParams.push("Policy=".concat(cloudfrontQueryParams["Policy"]));
|
|
31
|
+
}
|
|
32
|
+
queryParams.push("Key-Pair-Id=".concat(keyPairId));
|
|
33
|
+
queryParams.push("Signature=".concat(cloudfrontQueryParams["Signature"]));
|
|
34
|
+
var urlWithNewQueryParams = "".concat(url.split("?")[0], "?").concat(queryParams.join("&"));
|
|
35
|
+
var urlParser = new CloudfrontURLParser();
|
|
36
|
+
if (urlParser.determineScheme(url) === "rtmp") {
|
|
37
|
+
return urlParser.getRtmpUrl(urlWithNewQueryParams);
|
|
38
|
+
}
|
|
39
|
+
return urlWithNewQueryParams;
|
|
40
|
+
}
|
|
41
|
+
export function getSignedCookies(_a) {
|
|
42
|
+
var ipAddress = _a.ipAddress, url = _a.url, privateKey = _a.privateKey, keyPairId = _a.keyPairId, dateLessThan = _a.dateLessThan, dateGreaterThan = _a.dateGreaterThan, policy = _a.policy;
|
|
43
|
+
var cloudfrontSignBuilder = new CloudfrontSignBuilder({
|
|
44
|
+
keyPairId: keyPairId,
|
|
45
|
+
privateKey: privateKey,
|
|
46
|
+
});
|
|
47
|
+
if (policy) {
|
|
48
|
+
cloudfrontSignBuilder.setCustomPolicy(policy);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
cloudfrontSignBuilder.setPolicyParameters({
|
|
52
|
+
url: url,
|
|
53
|
+
dateLessThan: dateLessThan,
|
|
54
|
+
dateGreaterThan: dateGreaterThan,
|
|
55
|
+
ipAddress: ipAddress,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
var cloudfrontCookieAttributes = cloudfrontSignBuilder.createCloudfrontAttribute();
|
|
59
|
+
var cookies = {
|
|
60
|
+
"CloudFront-Key-Pair-Id": cloudfrontCookieAttributes["Key-Pair-Id"],
|
|
61
|
+
"CloudFront-Signature": cloudfrontCookieAttributes["Signature"],
|
|
62
|
+
};
|
|
63
|
+
if (cloudfrontCookieAttributes["Expires"]) {
|
|
64
|
+
cookies["CloudFront-Expires"] = cloudfrontCookieAttributes["Expires"];
|
|
65
|
+
}
|
|
66
|
+
if (cloudfrontCookieAttributes["Policy"]) {
|
|
67
|
+
cookies["CloudFront-Policy"] = cloudfrontCookieAttributes["Policy"];
|
|
68
|
+
}
|
|
69
|
+
return cookies;
|
|
70
|
+
}
|
|
71
|
+
var CloudfrontURLParser = (function () {
|
|
72
|
+
function CloudfrontURLParser() {
|
|
73
|
+
}
|
|
74
|
+
CloudfrontURLParser.prototype.determineScheme = function (url) {
|
|
75
|
+
var parts = url.split("://");
|
|
76
|
+
if (parts.length < 2) {
|
|
77
|
+
throw new Error("Invalid URL.");
|
|
78
|
+
}
|
|
79
|
+
return parts[0].replace("*", "");
|
|
80
|
+
};
|
|
81
|
+
CloudfrontURLParser.prototype.getRtmpUrl = function (rtmpUrl) {
|
|
82
|
+
var parsed = new URL(rtmpUrl);
|
|
83
|
+
return parsed.pathname.replace(/^\//, "") + parsed.search + parsed.hash;
|
|
84
|
+
};
|
|
85
|
+
CloudfrontURLParser.prototype.getResource = function (url) {
|
|
86
|
+
switch (this.determineScheme(url)) {
|
|
87
|
+
case "http":
|
|
88
|
+
case "https":
|
|
89
|
+
return url;
|
|
90
|
+
case "rtmp":
|
|
91
|
+
return this.getRtmpUrl(url);
|
|
92
|
+
default:
|
|
93
|
+
throw new Error("Invalid URI scheme. Scheme must be one of http, https, or rtmp");
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
return CloudfrontURLParser;
|
|
97
|
+
}());
|
|
98
|
+
var CloudfrontSignBuilder = (function () {
|
|
99
|
+
function CloudfrontSignBuilder(_a) {
|
|
100
|
+
var privateKey = _a.privateKey, keyPairId = _a.keyPairId;
|
|
101
|
+
this.customPolicy = false;
|
|
102
|
+
this.urlParser = new CloudfrontURLParser();
|
|
103
|
+
this.keyPairId = keyPairId;
|
|
104
|
+
this.privateKey = privateKey;
|
|
105
|
+
this.policy = "";
|
|
106
|
+
}
|
|
107
|
+
CloudfrontSignBuilder.prototype.buildPolicy = function (args) {
|
|
108
|
+
var policy = {
|
|
109
|
+
Statement: [
|
|
110
|
+
{
|
|
111
|
+
Resource: args.resource,
|
|
112
|
+
Condition: {
|
|
113
|
+
DateLessThan: {
|
|
114
|
+
"AWS:EpochTime": args.dateLessThan,
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
};
|
|
120
|
+
if (args.dateGreaterThan) {
|
|
121
|
+
policy.Statement[0].Condition["DateGreaterThan"] = {
|
|
122
|
+
"AWS:EpochTime": args.dateGreaterThan,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
if (args.ipAddress) {
|
|
126
|
+
var cidr = this.parseCIDR(args.ipAddress);
|
|
127
|
+
policy.Statement[0].Condition["IpAddress"] = {
|
|
128
|
+
"AWS:SourceIp": cidr,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
return policy;
|
|
132
|
+
};
|
|
133
|
+
CloudfrontSignBuilder.prototype.normalizeBase64 = function (str) {
|
|
134
|
+
var replacements = {
|
|
135
|
+
"+": "-",
|
|
136
|
+
"=": "_",
|
|
137
|
+
"/": "~",
|
|
138
|
+
};
|
|
139
|
+
return str.replace(/[+=/]/g, function (match) {
|
|
140
|
+
return replacements[match];
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
CloudfrontSignBuilder.prototype.encodeToBase64 = function (str) {
|
|
144
|
+
return this.normalizeBase64(Buffer.from(str).toString("base64"));
|
|
145
|
+
};
|
|
146
|
+
CloudfrontSignBuilder.prototype.validateIP = function (ipStr) {
|
|
147
|
+
var octets = ipStr.split(".");
|
|
148
|
+
if (octets.length !== 4) {
|
|
149
|
+
throw new Error("IP does not contain four octets.");
|
|
150
|
+
}
|
|
151
|
+
var isValid = octets.every(function (octet) {
|
|
152
|
+
var num = Number(octet);
|
|
153
|
+
return Number.isInteger(num) && num >= 0 && num <= 255;
|
|
154
|
+
});
|
|
155
|
+
if (!isValid) {
|
|
156
|
+
throw new Error("invalid IP octets");
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
CloudfrontSignBuilder.prototype.validateMask = function (maskStr) {
|
|
160
|
+
var mask = Number(maskStr);
|
|
161
|
+
var isValid = Number.isInteger(mask) && mask >= 0 && mask <= 32;
|
|
162
|
+
if (!isValid) {
|
|
163
|
+
throw new Error("invalid mask");
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
CloudfrontSignBuilder.prototype.parseCIDR = function (cidrStr) {
|
|
167
|
+
try {
|
|
168
|
+
var cidrParts = cidrStr.split("/");
|
|
169
|
+
if (cidrParts.some(function (part) { return part.length === 0; })) {
|
|
170
|
+
throw new Error("missing ip or mask part of CIDR");
|
|
171
|
+
}
|
|
172
|
+
this.validateIP(cidrParts[0]);
|
|
173
|
+
var mask = "32";
|
|
174
|
+
if (cidrParts.length === 2) {
|
|
175
|
+
this.validateMask(cidrParts[1]);
|
|
176
|
+
mask = cidrParts[1];
|
|
177
|
+
}
|
|
178
|
+
return "".concat(cidrParts[0], "/").concat(mask);
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
var errMessage = "IP address \"".concat(cidrStr, "\" is invalid");
|
|
182
|
+
if (error instanceof Error) {
|
|
183
|
+
throw new Error("".concat(errMessage, " due to ").concat(error.message, "."));
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
throw new Error("".concat(errMessage, "."));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
CloudfrontSignBuilder.prototype.epochTime = function (date) {
|
|
191
|
+
return Math.round(date.getTime() / 1000);
|
|
192
|
+
};
|
|
193
|
+
CloudfrontSignBuilder.prototype.parseDate = function (date) {
|
|
194
|
+
if (!date) {
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
var parsedDate = Date.parse(date);
|
|
198
|
+
return isNaN(parsedDate) ? undefined : this.epochTime(new Date(parsedDate));
|
|
199
|
+
};
|
|
200
|
+
CloudfrontSignBuilder.prototype.parseDateWindow = function (expiration, start) {
|
|
201
|
+
var dateLessThan = this.parseDate(expiration);
|
|
202
|
+
if (!dateLessThan) {
|
|
203
|
+
throw new Error("dateLessThan is invalid. Ensure the date string is compatible with the Date constructor.");
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
dateLessThan: dateLessThan,
|
|
207
|
+
dateGreaterThan: this.parseDate(start),
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
CloudfrontSignBuilder.prototype.signData = function (data, privateKey) {
|
|
211
|
+
var sign = createSign("RSA-SHA1");
|
|
212
|
+
sign.update(data);
|
|
213
|
+
return sign.sign(privateKey, "base64");
|
|
214
|
+
};
|
|
215
|
+
CloudfrontSignBuilder.prototype.signPolicy = function (policy, privateKey) {
|
|
216
|
+
return this.normalizeBase64(this.signData(policy, privateKey));
|
|
217
|
+
};
|
|
218
|
+
CloudfrontSignBuilder.prototype.setCustomPolicy = function (policy) {
|
|
219
|
+
this.customPolicy = true;
|
|
220
|
+
this.policy = policy;
|
|
221
|
+
};
|
|
222
|
+
CloudfrontSignBuilder.prototype.setPolicyParameters = function (_a) {
|
|
223
|
+
var url = _a.url, dateLessThan = _a.dateLessThan, dateGreaterThan = _a.dateGreaterThan, ipAddress = _a.ipAddress;
|
|
224
|
+
if (!url || !dateLessThan) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
var resource = this.urlParser.getResource(url);
|
|
228
|
+
var parsedDates = this.parseDateWindow(dateLessThan, dateGreaterThan);
|
|
229
|
+
this.dateLessThan = parsedDates.dateLessThan;
|
|
230
|
+
this.customPolicy = Boolean(parsedDates.dateGreaterThan) || Boolean(ipAddress);
|
|
231
|
+
this.policy = JSON.stringify(this.buildPolicy({
|
|
232
|
+
resource: resource,
|
|
233
|
+
ipAddress: ipAddress,
|
|
234
|
+
dateLessThan: parsedDates.dateLessThan,
|
|
235
|
+
dateGreaterThan: parsedDates.dateGreaterThan,
|
|
236
|
+
}));
|
|
237
|
+
};
|
|
238
|
+
CloudfrontSignBuilder.prototype.createCloudfrontAttribute = function () {
|
|
239
|
+
if (!Boolean(this.policy)) {
|
|
240
|
+
throw new Error("Invalid policy");
|
|
241
|
+
}
|
|
242
|
+
var signature = this.signPolicy(this.policy, this.privateKey);
|
|
243
|
+
return {
|
|
244
|
+
Expires: this.customPolicy ? undefined : this.dateLessThan,
|
|
245
|
+
Policy: this.customPolicy ? this.encodeToBase64(this.policy) : undefined,
|
|
246
|
+
"Key-Pair-Id": this.keyPairId,
|
|
247
|
+
Signature: signature,
|
|
248
|
+
};
|
|
249
|
+
};
|
|
250
|
+
return CloudfrontSignBuilder;
|
|
251
|
+
}());
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./sign";
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/** Input type to getSignedUrl and getSignedCookies. */
|
|
3
|
+
export declare type CloudfrontSignInput = CloudfrontSignInputWithParameters | CloudfrontSignInputWithPolicy;
|
|
4
|
+
export interface CloudfrontSignInputBase {
|
|
5
|
+
/** The URL string to sign. */
|
|
6
|
+
url: string;
|
|
7
|
+
/** The ID of the Cloudfront key pair. */
|
|
8
|
+
keyPairId: string;
|
|
9
|
+
/** The content of the Cloudfront private key. */
|
|
10
|
+
privateKey: string | Buffer;
|
|
11
|
+
/** The date string for when the signed URL or cookie can no longer be accessed. */
|
|
12
|
+
dateLessThan?: string;
|
|
13
|
+
/** The IP address string to restrict signed URL access to. */
|
|
14
|
+
ipAddress?: string;
|
|
15
|
+
/** The date string for when the signed URL or cookie can start to be accessed. */
|
|
16
|
+
dateGreaterThan?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare type CloudfrontSignInputWithParameters = CloudfrontSignInputBase & {
|
|
19
|
+
/** The date string for when the signed URL or cookie can no longer be accessed */
|
|
20
|
+
dateLessThan: string;
|
|
21
|
+
/** For this type policy should not be provided. */
|
|
22
|
+
policy?: never;
|
|
23
|
+
};
|
|
24
|
+
export declare type CloudfrontSignInputWithPolicy = CloudfrontSignInputBase & {
|
|
25
|
+
/** The JSON-encoded policy string */
|
|
26
|
+
policy: string;
|
|
27
|
+
/**
|
|
28
|
+
* For this type dateLessThan should not be provided.
|
|
29
|
+
*/
|
|
30
|
+
dateLessThan?: never;
|
|
31
|
+
/**
|
|
32
|
+
* For this type ipAddress should not be provided.
|
|
33
|
+
*/
|
|
34
|
+
ipAddress?: string;
|
|
35
|
+
/**
|
|
36
|
+
* For this type dateGreaterThan should not be provided.
|
|
37
|
+
*/
|
|
38
|
+
dateGreaterThan?: never;
|
|
39
|
+
};
|
|
40
|
+
export interface CloudfrontSignedCookiesOutput {
|
|
41
|
+
/** ID of the Cloudfront key pair. */
|
|
42
|
+
"CloudFront-Key-Pair-Id": string;
|
|
43
|
+
/** Hashed, signed, and base64-encoded version of the JSON policy. */
|
|
44
|
+
"CloudFront-Signature": string;
|
|
45
|
+
/** The unix date time for when the signed URL or cookie can no longer be accessed. */
|
|
46
|
+
"CloudFront-Expires"?: number;
|
|
47
|
+
/** Base64-encoded version of the JSON policy. */
|
|
48
|
+
"CloudFront-Policy"?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Creates a signed URL string using a canned or custom policy.
|
|
52
|
+
* @returns the input URL with signature attached as query parameters.
|
|
53
|
+
*/
|
|
54
|
+
export declare function getSignedUrl({ dateLessThan, dateGreaterThan, url, keyPairId, privateKey, ipAddress, policy, }: CloudfrontSignInput): string;
|
|
55
|
+
/**
|
|
56
|
+
* Creates signed cookies using a canned or custom policy.
|
|
57
|
+
* @returns an object with keys/values that can be added to cookies.
|
|
58
|
+
*/
|
|
59
|
+
export declare function getSignedCookies({ ipAddress, url, privateKey, keyPairId, dateLessThan, dateGreaterThan, policy, }: CloudfrontSignInput): CloudfrontSignedCookiesOutput;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./sign";
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
export declare type CloudfrontSignInput = CloudfrontSignInputWithParameters | CloudfrontSignInputWithPolicy;
|
|
4
|
+
export interface CloudfrontSignInputBase {
|
|
5
|
+
|
|
6
|
+
url: string;
|
|
7
|
+
|
|
8
|
+
keyPairId: string;
|
|
9
|
+
|
|
10
|
+
privateKey: string | Buffer;
|
|
11
|
+
|
|
12
|
+
dateLessThan?: string;
|
|
13
|
+
|
|
14
|
+
ipAddress?: string;
|
|
15
|
+
|
|
16
|
+
dateGreaterThan?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare type CloudfrontSignInputWithParameters = CloudfrontSignInputBase & {
|
|
19
|
+
|
|
20
|
+
dateLessThan: string;
|
|
21
|
+
|
|
22
|
+
policy?: never;
|
|
23
|
+
};
|
|
24
|
+
export declare type CloudfrontSignInputWithPolicy = CloudfrontSignInputBase & {
|
|
25
|
+
|
|
26
|
+
policy: string;
|
|
27
|
+
|
|
28
|
+
dateLessThan?: never;
|
|
29
|
+
|
|
30
|
+
ipAddress?: string;
|
|
31
|
+
|
|
32
|
+
dateGreaterThan?: never;
|
|
33
|
+
};
|
|
34
|
+
export interface CloudfrontSignedCookiesOutput {
|
|
35
|
+
|
|
36
|
+
"CloudFront-Key-Pair-Id": string;
|
|
37
|
+
|
|
38
|
+
"CloudFront-Signature": string;
|
|
39
|
+
|
|
40
|
+
"CloudFront-Expires"?: number;
|
|
41
|
+
|
|
42
|
+
"CloudFront-Policy"?: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export declare function getSignedUrl({ dateLessThan, dateGreaterThan, url, keyPairId, privateKey, ipAddress, policy, }: CloudfrontSignInput): string;
|
|
46
|
+
|
|
47
|
+
export declare function getSignedCookies({ ipAddress, url, privateKey, keyPairId, dateLessThan, dateGreaterThan, policy, }: CloudfrontSignInput): CloudfrontSignedCookiesOutput;
|
package/jest.config.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aws-sdk/cloudfront-signer",
|
|
3
|
+
"version": "3.90.0",
|
|
4
|
+
"scripts": {
|
|
5
|
+
"build": "concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'",
|
|
6
|
+
"build:cjs": "tsc -p tsconfig.cjs.json",
|
|
7
|
+
"build:es": "tsc -p tsconfig.es.json",
|
|
8
|
+
"build:types": "tsc -p tsconfig.types.json",
|
|
9
|
+
"build:types:downlevel": "downlevel-dts dist-types dist-types/ts3.4",
|
|
10
|
+
"clean": "rimraf ./dist-* && rimraf *.tsbuildinfo",
|
|
11
|
+
"test": "jest"
|
|
12
|
+
},
|
|
13
|
+
"main": "./dist-cjs/index.js",
|
|
14
|
+
"module": "./dist-es/index.js",
|
|
15
|
+
"types": "./dist-types/index.d.ts",
|
|
16
|
+
"author": {
|
|
17
|
+
"name": "AWS SDK for JavaScript Team",
|
|
18
|
+
"url": "https://aws.amazon.com/javascript/"
|
|
19
|
+
},
|
|
20
|
+
"license": "Apache-2.0",
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@aws-sdk/url-parser": "3.78.0"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@tsconfig/recommended": "1.0.1",
|
|
26
|
+
"concurrently": "7.0.0",
|
|
27
|
+
"downlevel-dts": "0.7.0",
|
|
28
|
+
"rimraf": "3.0.2",
|
|
29
|
+
"typedoc": "0.19.2",
|
|
30
|
+
"typescript": "~4.6.2"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">= 12.0.0"
|
|
34
|
+
},
|
|
35
|
+
"typesVersions": {
|
|
36
|
+
"<4.0": {
|
|
37
|
+
"dist-types/*": [
|
|
38
|
+
"dist-types/ts3.4/*"
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"homepage": "https://github.com/aws/aws-sdk-js-v3/tree/master/packages/cloudfront-signer",
|
|
43
|
+
"repository": {
|
|
44
|
+
"type": "git",
|
|
45
|
+
"url": "https://github.com/aws/aws-sdk-js-v3.git",
|
|
46
|
+
"directory": "packages/cloudfront-signer"
|
|
47
|
+
}
|
|
48
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./sign";
|