Showing
7 changed files
with
386 additions
and
6 deletions
.vscode/launch.json
0 → 100644
1 | +{ | ||
2 | + // IntelliSense를 사용하여 가능한 특성에 대해 알아보세요. | ||
3 | + // 기존 특성에 대한 설명을 보려면 가리킵니다. | ||
4 | + // 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요. | ||
5 | + "version": "0.2.0", | ||
6 | + "configurations": [ | ||
7 | + { | ||
8 | + "type": "pwa-node", | ||
9 | + "request": "launch", | ||
10 | + "name": "Launch Program", | ||
11 | + "skipFiles": [ | ||
12 | + "<node_internals>/**" | ||
13 | + ], | ||
14 | + "program": "${workspaceFolder}/index.js" | ||
15 | + } | ||
16 | + ] | ||
17 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
Youtube API/.vscode/launch.json
0 → 100644
1 | +{ | ||
2 | + // IntelliSense를 사용하여 가능한 특성에 대해 알아보세요. | ||
3 | + // 기존 특성에 대한 설명을 보려면 가리킵니다. | ||
4 | + // 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요. | ||
5 | + "version": "0.2.0", | ||
6 | + "configurations": [ | ||
7 | + { | ||
8 | + "type": "pwa-node", | ||
9 | + "request": "launch", | ||
10 | + "name": "Launch Program", | ||
11 | + "skipFiles": [ | ||
12 | + "<node_internals>/**" | ||
13 | + ], | ||
14 | + "program": "${workspaceFolder}/playlistbyid.js" | ||
15 | + } | ||
16 | + ] | ||
17 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
... | @@ -16,6 +16,6 @@ service.videos.list({ | ... | @@ -16,6 +16,6 @@ service.videos.list({ |
16 | if(video.length ==0){ | 16 | if(video.length ==0){ |
17 | console.log('검색된 동영상이 없습니다.'); | 17 | console.log('검색된 동영상이 없습니다.'); |
18 | } else { | 18 | } else { |
19 | - console.log(JSON.stringify(response.data.items[0],null,4)); | 19 | + console.log(JSON.stringify(response.data.items[0],null,4)); // 콘솔에 출력 |
20 | } | 20 | } |
21 | }) | 21 | }) |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -13,6 +13,11 @@ const sslport = 23023; | ... | @@ -13,6 +13,11 @@ const sslport = 23023; |
13 | const bodyParser = require('body-parser'); | 13 | const bodyParser = require('body-parser'); |
14 | var app = express(); | 14 | var app = express(); |
15 | app.use(bodyParser.json()); | 15 | app.use(bodyParser.json()); |
16 | + | ||
17 | +/// ---- | ||
18 | +var { google } = require('googleapis'); | ||
19 | +/// ---- | ||
20 | + | ||
16 | app.post('/hook', function (req, res) { | 21 | app.post('/hook', function (req, res) { |
17 | 22 | ||
18 | var eventObj = req.body.events[0]; | 23 | var eventObj = req.body.events[0]; |
... | @@ -53,18 +58,60 @@ function trans(replyToken, message) { | ... | @@ -53,18 +58,60 @@ function trans(replyToken, message) { |
53 | // 위에 PAPAGO API부분은 추후 API를 연동시킬 때 맞춰서 작성하기 쉽도록 템플릿을 남겨놓았습니다. 자세한 정보는 교수님 학습 자료의 experiment의 trans 폴더를 참고하세요. | 58 | // 위에 PAPAGO API부분은 추후 API를 연동시킬 때 맞춰서 작성하기 쉽도록 템플릿을 남겨놓았습니다. 자세한 정보는 교수님 학습 자료의 experiment의 trans 폴더를 참고하세요. |
54 | // (현재 코드에선 PAPAGO API의 작동 결과는 반영되지 않습니다.) | 59 | // (현재 코드에선 PAPAGO API의 작동 결과는 반영되지 않습니다.) |
55 | //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ | 60 | //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ |
61 | + // var sendMessage; | ||
62 | + | ||
63 | + // -------- | ||
56 | if (message=="노래 추천해줘") | 64 | if (message=="노래 추천해줘") |
57 | { | 65 | { |
58 | var sendMessage = "아이유의 노래를 추천드립니다."; | 66 | var sendMessage = "아이유의 노래를 추천드립니다."; |
67 | + console.log(typeof(sendMessage)); | ||
68 | + console.log(sendMessage); | ||
69 | + | ||
59 | } | 70 | } |
60 | else | 71 | else |
61 | { | 72 | { |
62 | - var sendMessage = "무슨 말인지 못알아먹겠습니다"; | 73 | + // var sendMessage = "무슨 말인지 못알아먹겠습니다"; |
74 | + | ||
75 | + // -------- | ||
76 | + var service = google.youtube('v3'); | ||
77 | + service.videos.list({ | ||
78 | + key: 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518', | ||
79 | + part: 'snippet,statistics', | ||
80 | + id: 'p5iu1V30myk', // 동영상 Id | ||
81 | + fields: 'items(snippet(title))' | ||
82 | + }, function(err, response) { | ||
83 | + if (err) { | ||
84 | + console.log('The API returned an error: ',err); | ||
85 | + return; | ||
86 | + } | ||
87 | + | ||
88 | + var video = response.data.items; | ||
89 | + if(video.length ==0){ | ||
90 | + console.log('검색된 동영상이 없습니다.'); | ||
91 | + } else { | ||
92 | + // var sendMessage ="123"; | ||
93 | + // console.log(JSON.stringify(response.data.items[0].snippet.title));// 콘솔에 출력 | ||
94 | + // console.log(JSON.stringify(response.data.items[0].snippet));// 콘솔에 출력 | ||
95 | + // console.log(JSON.stringify(response.data.items[0]));// 콘솔에 출력 | ||
96 | + // console.log(JSON.stringify(response.data));// 콘솔에 출력 | ||
97 | + | ||
98 | + | ||
99 | + var sendMessage = JSON.stringify(response.data.items[0].snippet.title); | ||
100 | + // sendMessage = response.data.items[0].snippet.title; | ||
101 | + console.log(sendMessage); | ||
102 | + console.log(typeof (sendMessage)); | ||
103 | + } | ||
104 | + }) | ||
105 | + // // -------- | ||
63 | } | 106 | } |
64 | //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ | 107 | //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |
108 | + | ||
65 | 109 | ||
110 | + console.log("11111"); | ||
66 | console.log(body.message); | 111 | console.log(body.message); |
67 | - | 112 | + console.log("11111"); |
113 | + // console.log(typeof(response.data.items[0].snippet.title)); | ||
114 | + | ||
68 | request.post( | 115 | request.post( |
69 | { | 116 | { |
70 | url: TARGET_URL, | 117 | url: TARGET_URL, |
... | @@ -85,7 +132,6 @@ function trans(replyToken, message) { | ... | @@ -85,7 +132,6 @@ function trans(replyToken, message) { |
85 | }); | 132 | }); |
86 | } | 133 | } |
87 | }); | 134 | }); |
88 | - | ||
89 | } | 135 | } |
90 | 136 | ||
91 | try { | 137 | try { | ... | ... |
... | @@ -4,6 +4,14 @@ | ... | @@ -4,6 +4,14 @@ |
4 | "lockfileVersion": 1, | 4 | "lockfileVersion": 1, |
5 | "requires": true, | 5 | "requires": true, |
6 | "dependencies": { | 6 | "dependencies": { |
7 | + "abort-controller": { | ||
8 | + "version": "3.0.0", | ||
9 | + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", | ||
10 | + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", | ||
11 | + "requires": { | ||
12 | + "event-target-shim": "^5.0.0" | ||
13 | + } | ||
14 | + }, | ||
7 | "accepts": { | 15 | "accepts": { |
8 | "version": "1.3.7", | 16 | "version": "1.3.7", |
9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", | 17 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", |
... | @@ -13,6 +21,29 @@ | ... | @@ -13,6 +21,29 @@ |
13 | "negotiator": "0.6.2" | 21 | "negotiator": "0.6.2" |
14 | } | 22 | } |
15 | }, | 23 | }, |
24 | + "agent-base": { | ||
25 | + "version": "6.0.2", | ||
26 | + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", | ||
27 | + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", | ||
28 | + "requires": { | ||
29 | + "debug": "4" | ||
30 | + }, | ||
31 | + "dependencies": { | ||
32 | + "debug": { | ||
33 | + "version": "4.3.1", | ||
34 | + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", | ||
35 | + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", | ||
36 | + "requires": { | ||
37 | + "ms": "2.1.2" | ||
38 | + } | ||
39 | + }, | ||
40 | + "ms": { | ||
41 | + "version": "2.1.2", | ||
42 | + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", | ||
43 | + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" | ||
44 | + } | ||
45 | + } | ||
46 | + }, | ||
16 | "ajv": { | 47 | "ajv": { |
17 | "version": "6.12.2", | 48 | "version": "6.12.2", |
18 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", | 49 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", |
... | @@ -29,6 +60,11 @@ | ... | @@ -29,6 +60,11 @@ |
29 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", | 60 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", |
30 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" | 61 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" |
31 | }, | 62 | }, |
63 | + "arrify": { | ||
64 | + "version": "2.0.1", | ||
65 | + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", | ||
66 | + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" | ||
67 | + }, | ||
32 | "asn1": { | 68 | "asn1": { |
33 | "version": "0.2.4", | 69 | "version": "0.2.4", |
34 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", | 70 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", |
... | @@ -57,6 +93,11 @@ | ... | @@ -57,6 +93,11 @@ |
57 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", | 93 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", |
58 | "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" | 94 | "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" |
59 | }, | 95 | }, |
96 | + "base64-js": { | ||
97 | + "version": "1.5.1", | ||
98 | + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", | ||
99 | + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" | ||
100 | + }, | ||
60 | "bcrypt-pbkdf": { | 101 | "bcrypt-pbkdf": { |
61 | "version": "1.0.2", | 102 | "version": "1.0.2", |
62 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", | 103 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", |
... | @@ -65,6 +106,11 @@ | ... | @@ -65,6 +106,11 @@ |
65 | "tweetnacl": "^0.14.3" | 106 | "tweetnacl": "^0.14.3" |
66 | } | 107 | } |
67 | }, | 108 | }, |
109 | + "bignumber.js": { | ||
110 | + "version": "9.0.1", | ||
111 | + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", | ||
112 | + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" | ||
113 | + }, | ||
68 | "body-parser": { | 114 | "body-parser": { |
69 | "version": "1.19.0", | 115 | "version": "1.19.0", |
70 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", | 116 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", |
... | @@ -82,6 +128,11 @@ | ... | @@ -82,6 +128,11 @@ |
82 | "type-is": "~1.6.17" | 128 | "type-is": "~1.6.17" |
83 | } | 129 | } |
84 | }, | 130 | }, |
131 | + "buffer-equal-constant-time": { | ||
132 | + "version": "1.0.1", | ||
133 | + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", | ||
134 | + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" | ||
135 | + }, | ||
85 | "bytes": { | 136 | "bytes": { |
86 | "version": "3.1.0", | 137 | "version": "3.1.0", |
87 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", | 138 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", |
... | @@ -159,6 +210,11 @@ | ... | @@ -159,6 +210,11 @@ |
159 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", | 210 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", |
160 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" | 211 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" |
161 | }, | 212 | }, |
213 | + "destroyer": { | ||
214 | + "version": "0.0.0", | ||
215 | + "resolved": "https://registry.npmjs.org/destroyer/-/destroyer-0.0.0.tgz", | ||
216 | + "integrity": "sha1-rwTVlXIN5PTg/gm7JzgjitekfqA=" | ||
217 | + }, | ||
162 | "ecc-jsbn": { | 218 | "ecc-jsbn": { |
163 | "version": "0.1.2", | 219 | "version": "0.1.2", |
164 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", | 220 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", |
... | @@ -168,6 +224,14 @@ | ... | @@ -168,6 +224,14 @@ |
168 | "safer-buffer": "^2.1.0" | 224 | "safer-buffer": "^2.1.0" |
169 | } | 225 | } |
170 | }, | 226 | }, |
227 | + "ecdsa-sig-formatter": { | ||
228 | + "version": "1.0.11", | ||
229 | + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", | ||
230 | + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", | ||
231 | + "requires": { | ||
232 | + "safe-buffer": "^5.0.1" | ||
233 | + } | ||
234 | + }, | ||
171 | "ee-first": { | 235 | "ee-first": { |
172 | "version": "1.1.1", | 236 | "version": "1.1.1", |
173 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", | 237 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", |
... | @@ -188,6 +252,11 @@ | ... | @@ -188,6 +252,11 @@ |
188 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", | 252 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", |
189 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" | 253 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" |
190 | }, | 254 | }, |
255 | + "event-target-shim": { | ||
256 | + "version": "5.0.1", | ||
257 | + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", | ||
258 | + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" | ||
259 | + }, | ||
191 | "express": { | 260 | "express": { |
192 | "version": "4.17.1", | 261 | "version": "4.17.1", |
193 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", | 262 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", |
... | @@ -245,6 +314,11 @@ | ... | @@ -245,6 +314,11 @@ |
245 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", | 314 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", |
246 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" | 315 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" |
247 | }, | 316 | }, |
317 | + "fast-text-encoding": { | ||
318 | + "version": "1.0.3", | ||
319 | + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", | ||
320 | + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" | ||
321 | + }, | ||
248 | "finalhandler": { | 322 | "finalhandler": { |
249 | "version": "1.1.2", | 323 | "version": "1.1.2", |
250 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", | 324 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", |
... | @@ -284,6 +358,27 @@ | ... | @@ -284,6 +358,27 @@ |
284 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", | 358 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", |
285 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" | 359 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" |
286 | }, | 360 | }, |
361 | + "gaxios": { | ||
362 | + "version": "4.3.0", | ||
363 | + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.0.tgz", | ||
364 | + "integrity": "sha512-pHplNbslpwCLMyII/lHPWFQbJWOX0B3R1hwBEOvzYi1GmdKZruuEHK4N9V6f7tf1EaPYyF80mui1+344p6SmLg==", | ||
365 | + "requires": { | ||
366 | + "abort-controller": "^3.0.0", | ||
367 | + "extend": "^3.0.2", | ||
368 | + "https-proxy-agent": "^5.0.0", | ||
369 | + "is-stream": "^2.0.0", | ||
370 | + "node-fetch": "^2.3.0" | ||
371 | + } | ||
372 | + }, | ||
373 | + "gcp-metadata": { | ||
374 | + "version": "4.2.1", | ||
375 | + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.2.1.tgz", | ||
376 | + "integrity": "sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw==", | ||
377 | + "requires": { | ||
378 | + "gaxios": "^4.0.0", | ||
379 | + "json-bigint": "^1.0.0" | ||
380 | + } | ||
381 | + }, | ||
287 | "getpass": { | 382 | "getpass": { |
288 | "version": "0.1.7", | 383 | "version": "0.1.7", |
289 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", | 384 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", |
... | @@ -292,6 +387,69 @@ | ... | @@ -292,6 +387,69 @@ |
292 | "assert-plus": "^1.0.0" | 387 | "assert-plus": "^1.0.0" |
293 | } | 388 | } |
294 | }, | 389 | }, |
390 | + "google-auth-library": { | ||
391 | + "version": "7.1.0", | ||
392 | + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.1.0.tgz", | ||
393 | + "integrity": "sha512-X+gbkGjnLN3HUZP2W3KBREuA603BXd80ITvL0PeS0QpyDNYz/u0pIZ7aRuGnrSuUc0grk/qxEgtVTFt1ogbP+A==", | ||
394 | + "requires": { | ||
395 | + "arrify": "^2.0.0", | ||
396 | + "base64-js": "^1.3.0", | ||
397 | + "ecdsa-sig-formatter": "^1.0.11", | ||
398 | + "fast-text-encoding": "^1.0.0", | ||
399 | + "gaxios": "^4.0.0", | ||
400 | + "gcp-metadata": "^4.2.0", | ||
401 | + "gtoken": "^5.0.4", | ||
402 | + "jws": "^4.0.0", | ||
403 | + "lru-cache": "^6.0.0" | ||
404 | + } | ||
405 | + }, | ||
406 | + "google-p12-pem": { | ||
407 | + "version": "3.0.3", | ||
408 | + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.3.tgz", | ||
409 | + "integrity": "sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA==", | ||
410 | + "requires": { | ||
411 | + "node-forge": "^0.10.0" | ||
412 | + } | ||
413 | + }, | ||
414 | + "googleapis": { | ||
415 | + "version": "74.2.0", | ||
416 | + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-74.2.0.tgz", | ||
417 | + "integrity": "sha512-AF8RwmTbz8GGIza9LViokOUAsrEkB6gKwvIGXbgWEWzZO1+DRsbKSstHotDgUA4zdXhVtGkOW7uqNs/wz4rYNA==", | ||
418 | + "requires": { | ||
419 | + "google-auth-library": "^7.0.2", | ||
420 | + "googleapis-common": "^5.0.2" | ||
421 | + } | ||
422 | + }, | ||
423 | + "googleapis-common": { | ||
424 | + "version": "5.0.2", | ||
425 | + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.0.2.tgz", | ||
426 | + "integrity": "sha512-TL7qronKNZwE/XBvqshwzCPmZGq2gz/beXzANF7EVoO7FsQjOd7dk40DYrXkoCpvbnJHCQKWESq6NansiIPFqA==", | ||
427 | + "requires": { | ||
428 | + "extend": "^3.0.2", | ||
429 | + "gaxios": "^4.0.0", | ||
430 | + "google-auth-library": "^7.0.2", | ||
431 | + "qs": "^6.7.0", | ||
432 | + "url-template": "^2.0.8", | ||
433 | + "uuid": "^8.0.0" | ||
434 | + }, | ||
435 | + "dependencies": { | ||
436 | + "uuid": { | ||
437 | + "version": "8.3.2", | ||
438 | + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", | ||
439 | + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" | ||
440 | + } | ||
441 | + } | ||
442 | + }, | ||
443 | + "gtoken": { | ||
444 | + "version": "5.2.1", | ||
445 | + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.2.1.tgz", | ||
446 | + "integrity": "sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw==", | ||
447 | + "requires": { | ||
448 | + "gaxios": "^4.0.0", | ||
449 | + "google-p12-pem": "^3.0.3", | ||
450 | + "jws": "^4.0.0" | ||
451 | + } | ||
452 | + }, | ||
295 | "har-schema": { | 453 | "har-schema": { |
296 | "version": "2.0.0", | 454 | "version": "2.0.0", |
297 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", | 455 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", |
... | @@ -306,6 +464,11 @@ | ... | @@ -306,6 +464,11 @@ |
306 | "har-schema": "^2.0.0" | 464 | "har-schema": "^2.0.0" |
307 | } | 465 | } |
308 | }, | 466 | }, |
467 | + "http": { | ||
468 | + "version": "0.0.1-security", | ||
469 | + "resolved": "https://registry.npmjs.org/http/-/http-0.0.1-security.tgz", | ||
470 | + "integrity": "sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g==" | ||
471 | + }, | ||
309 | "http-errors": { | 472 | "http-errors": { |
310 | "version": "1.7.2", | 473 | "version": "1.7.2", |
311 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", | 474 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", |
... | @@ -328,6 +491,30 @@ | ... | @@ -328,6 +491,30 @@ |
328 | "sshpk": "^1.7.0" | 491 | "sshpk": "^1.7.0" |
329 | } | 492 | } |
330 | }, | 493 | }, |
494 | + "https-proxy-agent": { | ||
495 | + "version": "5.0.0", | ||
496 | + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", | ||
497 | + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", | ||
498 | + "requires": { | ||
499 | + "agent-base": "6", | ||
500 | + "debug": "4" | ||
501 | + }, | ||
502 | + "dependencies": { | ||
503 | + "debug": { | ||
504 | + "version": "4.3.1", | ||
505 | + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", | ||
506 | + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", | ||
507 | + "requires": { | ||
508 | + "ms": "2.1.2" | ||
509 | + } | ||
510 | + }, | ||
511 | + "ms": { | ||
512 | + "version": "2.1.2", | ||
513 | + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", | ||
514 | + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" | ||
515 | + } | ||
516 | + } | ||
517 | + }, | ||
331 | "iconv-lite": { | 518 | "iconv-lite": { |
332 | "version": "0.4.24", | 519 | "version": "0.4.24", |
333 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", | 520 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", |
... | @@ -346,11 +533,21 @@ | ... | @@ -346,11 +533,21 @@ |
346 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", | 533 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", |
347 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" | 534 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" |
348 | }, | 535 | }, |
536 | + "is-stream": { | ||
537 | + "version": "2.0.0", | ||
538 | + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", | ||
539 | + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" | ||
540 | + }, | ||
349 | "is-typedarray": { | 541 | "is-typedarray": { |
350 | "version": "1.0.0", | 542 | "version": "1.0.0", |
351 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", | 543 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", |
352 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" | 544 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" |
353 | }, | 545 | }, |
546 | + "is-wsl": { | ||
547 | + "version": "1.1.0", | ||
548 | + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", | ||
549 | + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" | ||
550 | + }, | ||
354 | "isstream": { | 551 | "isstream": { |
355 | "version": "0.1.2", | 552 | "version": "0.1.2", |
356 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", | 553 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", |
... | @@ -361,6 +558,14 @@ | ... | @@ -361,6 +558,14 @@ |
361 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", | 558 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", |
362 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" | 559 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" |
363 | }, | 560 | }, |
561 | + "json-bigint": { | ||
562 | + "version": "1.0.0", | ||
563 | + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", | ||
564 | + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", | ||
565 | + "requires": { | ||
566 | + "bignumber.js": "^9.0.0" | ||
567 | + } | ||
568 | + }, | ||
364 | "json-schema": { | 569 | "json-schema": { |
365 | "version": "0.2.3", | 570 | "version": "0.2.3", |
366 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", | 571 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", |
... | @@ -387,6 +592,33 @@ | ... | @@ -387,6 +592,33 @@ |
387 | "verror": "1.10.0" | 592 | "verror": "1.10.0" |
388 | } | 593 | } |
389 | }, | 594 | }, |
595 | + "jwa": { | ||
596 | + "version": "2.0.0", | ||
597 | + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", | ||
598 | + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", | ||
599 | + "requires": { | ||
600 | + "buffer-equal-constant-time": "1.0.1", | ||
601 | + "ecdsa-sig-formatter": "1.0.11", | ||
602 | + "safe-buffer": "^5.0.1" | ||
603 | + } | ||
604 | + }, | ||
605 | + "jws": { | ||
606 | + "version": "4.0.0", | ||
607 | + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", | ||
608 | + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", | ||
609 | + "requires": { | ||
610 | + "jwa": "^2.0.0", | ||
611 | + "safe-buffer": "^5.0.1" | ||
612 | + } | ||
613 | + }, | ||
614 | + "lru-cache": { | ||
615 | + "version": "6.0.0", | ||
616 | + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", | ||
617 | + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", | ||
618 | + "requires": { | ||
619 | + "yallist": "^4.0.0" | ||
620 | + } | ||
621 | + }, | ||
390 | "media-typer": { | 622 | "media-typer": { |
391 | "version": "0.3.0", | 623 | "version": "0.3.0", |
392 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", | 624 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", |
... | @@ -430,11 +662,26 @@ | ... | @@ -430,11 +662,26 @@ |
430 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", | 662 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", |
431 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" | 663 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" |
432 | }, | 664 | }, |
665 | + "node-fetch": { | ||
666 | + "version": "2.6.1", | ||
667 | + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", | ||
668 | + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" | ||
669 | + }, | ||
670 | + "node-forge": { | ||
671 | + "version": "0.10.0", | ||
672 | + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", | ||
673 | + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" | ||
674 | + }, | ||
433 | "oauth-sign": { | 675 | "oauth-sign": { |
434 | "version": "0.9.0", | 676 | "version": "0.9.0", |
435 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", | 677 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", |
436 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" | 678 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" |
437 | }, | 679 | }, |
680 | + "oauth2": { | ||
681 | + "version": "0.0.1", | ||
682 | + "resolved": "https://registry.npmjs.org/oauth2/-/oauth2-0.0.1.tgz", | ||
683 | + "integrity": "sha1-fOkerI4vEuyS4KxwjftI74jU0t0=" | ||
684 | + }, | ||
438 | "on-finished": { | 685 | "on-finished": { |
439 | "version": "2.3.0", | 686 | "version": "2.3.0", |
440 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", | 687 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", |
... | @@ -443,6 +690,14 @@ | ... | @@ -443,6 +690,14 @@ |
443 | "ee-first": "1.1.1" | 690 | "ee-first": "1.1.1" |
444 | } | 691 | } |
445 | }, | 692 | }, |
693 | + "opn": { | ||
694 | + "version": "6.0.0", | ||
695 | + "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", | ||
696 | + "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", | ||
697 | + "requires": { | ||
698 | + "is-wsl": "^1.1.0" | ||
699 | + } | ||
700 | + }, | ||
446 | "parseurl": { | 701 | "parseurl": { |
447 | "version": "1.3.3", | 702 | "version": "1.3.3", |
448 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", | 703 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", |
... | @@ -482,6 +737,11 @@ | ... | @@ -482,6 +737,11 @@ |
482 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", | 737 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", |
483 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" | 738 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" |
484 | }, | 739 | }, |
740 | + "querystring": { | ||
741 | + "version": "0.2.0", | ||
742 | + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", | ||
743 | + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" | ||
744 | + }, | ||
485 | "range-parser": { | 745 | "range-parser": { |
486 | "version": "1.2.1", | 746 | "version": "1.2.1", |
487 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", | 747 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", |
... | @@ -580,6 +840,11 @@ | ... | @@ -580,6 +840,11 @@ |
580 | "send": "0.17.1" | 840 | "send": "0.17.1" |
581 | } | 841 | } |
582 | }, | 842 | }, |
843 | + "server-destroy": { | ||
844 | + "version": "1.0.1", | ||
845 | + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", | ||
846 | + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=" | ||
847 | + }, | ||
583 | "setprototypeof": { | 848 | "setprototypeof": { |
584 | "version": "1.1.1", | 849 | "version": "1.1.1", |
585 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", | 850 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", |
... | @@ -655,6 +920,27 @@ | ... | @@ -655,6 +920,27 @@ |
655 | "punycode": "^2.1.0" | 920 | "punycode": "^2.1.0" |
656 | } | 921 | } |
657 | }, | 922 | }, |
923 | + "url": { | ||
924 | + "version": "0.11.0", | ||
925 | + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", | ||
926 | + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", | ||
927 | + "requires": { | ||
928 | + "punycode": "1.3.2", | ||
929 | + "querystring": "0.2.0" | ||
930 | + }, | ||
931 | + "dependencies": { | ||
932 | + "punycode": { | ||
933 | + "version": "1.3.2", | ||
934 | + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", | ||
935 | + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" | ||
936 | + } | ||
937 | + } | ||
938 | + }, | ||
939 | + "url-template": { | ||
940 | + "version": "2.0.8", | ||
941 | + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", | ||
942 | + "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" | ||
943 | + }, | ||
658 | "utils-merge": { | 944 | "utils-merge": { |
659 | "version": "1.0.1", | 945 | "version": "1.0.1", |
660 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", | 946 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", |
... | @@ -679,6 +965,11 @@ | ... | @@ -679,6 +965,11 @@ |
679 | "core-util-is": "1.0.2", | 965 | "core-util-is": "1.0.2", |
680 | "extsprintf": "^1.2.0" | 966 | "extsprintf": "^1.2.0" |
681 | } | 967 | } |
968 | + }, | ||
969 | + "yallist": { | ||
970 | + "version": "4.0.0", | ||
971 | + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", | ||
972 | + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" | ||
682 | } | 973 | } |
683 | } | 974 | } |
684 | } | 975 | } | ... | ... |
... | @@ -9,7 +9,14 @@ | ... | @@ -9,7 +9,14 @@ |
9 | "author": "", | 9 | "author": "", |
10 | "license": "ISC", | 10 | "license": "ISC", |
11 | "dependencies": { | 11 | "dependencies": { |
12 | + "destroyer": "0.0.0", | ||
12 | "express": "^4.17.1", | 13 | "express": "^4.17.1", |
13 | - "request": "^2.88.2" | 14 | + "googleapis": "^74.2.0", |
15 | + "http": "0.0.1-security", | ||
16 | + "oauth2": "0.0.1", | ||
17 | + "opn": "^6.0.0", | ||
18 | + "request": "^2.88.2", | ||
19 | + "server-destroy": "^1.0.1", | ||
20 | + "url": "^0.11.0" | ||
14 | } | 21 | } |
15 | } | 22 | } | ... | ... |
-
Please register or login to post a comment