Commit a8dde2dd6b23a88e956700a8e55b6dd2b5d0f4f0

Authored by Surasit Yerpui
0 parents
Exists in master

firstcommit

.eslintrc.json 0 → 100644
  1 +++ a/.eslintrc.json
@@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
  1 +{
  2 + "extends": "standard",
  3 + "rules": {
  4 + "semi": [1, "always"],
  5 + "comma-dangle": [2, "always-multiline"],
  6 + "space-before-function-paren": [0, "always"],
  7 + "jsx-quotes": ["error", "prefer-double"]
  8 + }
  9 +}
0 \ No newline at end of file 10 \ No newline at end of file
.gitignore 0 → 100644
  1 +++ a/.gitignore
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +/node_modules
0 \ No newline at end of file 2 \ No newline at end of file
README.md 0 → 100644
  1 +++ a/README.md
@@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
  1 +# line-bot-nodejs-starter
  2 +starter point to create new line bot project
  3 +
  4 +## How it work
  5 +Start express server to handle webhook from LINE
  6 +
  7 +# Install
  8 +Clone and run
  9 +```
  10 +npm install
  11 +```
  12 +Modify `config.json`
  13 +```json
  14 +{
  15 + "port" : "3000",
  16 + "channelAccessToken": "YOUR_CHANNEL_ACCESS_TOKEN",
  17 + "channelSecret": "YOUR_CHANNEL_SECRET"
  18 +}
  19 +```
  20 +Run
  21 +```
  22 +npm start
  23 +```
  24 +then you can access [http://localhost:3000](http://localhost:3000)
  25 +
  26 +Use [ngrok](https://ngrok.com/) to expose your local url
  27 +```
  28 +path/to/ngrok http 3000
  29 +```
  30 +config webhook url in developer console then enjoy your bot!
  31 +
  32 +## Author
  33 +Sitthi Thiammekha
config.json 0 → 100644
  1 +++ a/config.json
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +{
  2 + "port" : "3000",
  3 + "channelAccessToken": "be/XHjQ+gMoypZE78Us7hk0h6PA04TyfpQciMOq+B/OVPmumozdhGzYUwopDgsOMCM7RymTK8m++q20GSj3c6B7gZkgEmuGYEYPvc6j+4as6X5bu7tEg+KAZKMfBVDnk+ekpAorC7FMwVPyt2frGRQdB04t89/1O/w1cDnyilFU=",
  4 + "channelSecret": "df6ab26f85f5130ebf5b546f3a5a4b7f"
  5 +}
0 \ No newline at end of file 6 \ No newline at end of file
flexMsg.js 0 → 100644
  1 +++ a/flexMsg.js
@@ -0,0 +1,749 @@ @@ -0,0 +1,749 @@
  1 +const GenContentFlex = (content, text = "0") => {
  2 + return {
  3 + type: "flex",
  4 + altText: "GenContentFlex!" + text,
  5 + contents: content,
  6 + };
  7 +};
  8 +
  9 +const flexs = {
  10 + flex0: {
  11 + type: "flex",
  12 + altText: "this is a flex message",
  13 + contents: {
  14 + type: "bubble",
  15 + body: {
  16 + type: "box",
  17 + layout: "vertical",
  18 + contents: [
  19 + {
  20 + type: "text",
  21 + text: "hello",
  22 + },
  23 + {
  24 + type: "text",
  25 + text: "world",
  26 + },
  27 + ],
  28 + },
  29 + },
  30 + },
  31 + flex1: GenContentFlex({
  32 + type: "bubble",
  33 + body: {
  34 + type: "box",
  35 + layout: "vertical",
  36 + contents: [
  37 + {
  38 + type: "text",
  39 + text: "hello",
  40 + },
  41 + {
  42 + type: "text",
  43 + text: "world",
  44 + },
  45 + ],
  46 + },
  47 + }),
  48 +
  49 + bub1: GenContentFlex({
  50 + type: "bubble",
  51 + direction: "ltr",
  52 + header: {
  53 + type: "box",
  54 + layout: "vertical",
  55 + contents: [
  56 + {
  57 + type: "text",
  58 + text: "Header",
  59 + align: "center",
  60 + contents: [],
  61 + },
  62 + ],
  63 + },
  64 + hero: {
  65 + type: "image",
  66 + url: "https://vos.line-scdn.net/bot-designer-template-images/bot-designer-icon.png",
  67 + size: "full",
  68 + aspectRatio: "1.51:1",
  69 + aspectMode: "fit",
  70 + },
  71 + body: {
  72 + type: "box",
  73 + layout: "vertical",
  74 + contents: [
  75 + {
  76 + type: "text",
  77 + text: "Body",
  78 + align: "center",
  79 + contents: [],
  80 + },
  81 + ],
  82 + },
  83 + footer: {
  84 + type: "box",
  85 + layout: "horizontal",
  86 + contents: [
  87 + {
  88 + type: "button",
  89 + action: {
  90 + type: "uri",
  91 + label: "Button",
  92 + uri: "https://linecorp.com",
  93 + },
  94 + },
  95 + ],
  96 + },
  97 + }),
  98 +
  99 + bub2: GenContentFlex({
  100 + type: "bubble",
  101 + hero: {
  102 + type: "image",
  103 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/01_1_cafe.png",
  104 + size: "full",
  105 + aspectRatio: "20:13",
  106 + aspectMode: "cover",
  107 + action: {
  108 + type: "uri",
  109 + label: "Line",
  110 + uri: "https://linecorp.com/",
  111 + },
  112 + },
  113 + body: {
  114 + type: "box",
  115 + layout: "vertical",
  116 + contents: [
  117 + {
  118 + type: "text",
  119 + text: "Brown Cafe",
  120 + weight: "bold",
  121 + size: "xl",
  122 + contents: [],
  123 + },
  124 + {
  125 + type: "box",
  126 + layout: "baseline",
  127 + margin: "md",
  128 + contents: [
  129 + {
  130 + type: "icon",
  131 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
  132 + size: "sm",
  133 + },
  134 + {
  135 + type: "icon",
  136 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
  137 + size: "sm",
  138 + },
  139 + {
  140 + type: "icon",
  141 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
  142 + size: "sm",
  143 + },
  144 + {
  145 + type: "icon",
  146 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
  147 + size: "sm",
  148 + },
  149 + {
  150 + type: "icon",
  151 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gray_star_28.png",
  152 + size: "sm",
  153 + },
  154 + {
  155 + type: "text",
  156 + text: "4.0",
  157 + size: "sm",
  158 + color: "#999999",
  159 + flex: 0,
  160 + margin: "md",
  161 + contents: [],
  162 + },
  163 + ],
  164 + },
  165 + {
  166 + type: "box",
  167 + layout: "vertical",
  168 + spacing: "sm",
  169 + margin: "lg",
  170 + contents: [
  171 + {
  172 + type: "box",
  173 + layout: "baseline",
  174 + spacing: "sm",
  175 + contents: [
  176 + {
  177 + type: "text",
  178 + text: "Place",
  179 + size: "sm",
  180 + color: "#AAAAAA",
  181 + flex: 1,
  182 + contents: [],
  183 + },
  184 + {
  185 + type: "text",
  186 + text: "Miraina Tower, 4-1-6 Shinjuku, Tokyo",
  187 + size: "sm",
  188 + color: "#666666",
  189 + flex: 5,
  190 + wrap: true,
  191 + contents: [],
  192 + },
  193 + ],
  194 + },
  195 + {
  196 + type: "box",
  197 + layout: "baseline",
  198 + spacing: "sm",
  199 + contents: [
  200 + {
  201 + type: "text",
  202 + text: "Time",
  203 + size: "sm",
  204 + color: "#AAAAAA",
  205 + flex: 1,
  206 + contents: [],
  207 + },
  208 + {
  209 + type: "text",
  210 + text: "10:00 - 23:00",
  211 + size: "sm",
  212 + color: "#666666",
  213 + flex: 5,
  214 + wrap: true,
  215 + contents: [],
  216 + },
  217 + ],
  218 + },
  219 + ],
  220 + },
  221 + ],
  222 + },
  223 + footer: {
  224 + type: "box",
  225 + layout: "vertical",
  226 + flex: 0,
  227 + spacing: "sm",
  228 + contents: [
  229 + {
  230 + type: "button",
  231 + action: {
  232 + type: "uri",
  233 + label: "CALL",
  234 + uri: "https://linecorp.com",
  235 + },
  236 + height: "sm",
  237 + style: "link",
  238 + },
  239 + {
  240 + type: "button",
  241 + action: {
  242 + type: "uri",
  243 + label: "WEBSITE",
  244 + uri: "https://linecorp.com",
  245 + },
  246 + height: "sm",
  247 + style: "link",
  248 + },
  249 + {
  250 + type: "spacer",
  251 + size: "sm",
  252 + },
  253 + ],
  254 + },
  255 + }),
  256 + bub3: GenContentFlex({
  257 + type: "bubble",
  258 + header: {
  259 + type: "box",
  260 + layout: "horizontal",
  261 + contents: [
  262 + {
  263 + type: "text",
  264 + text: "NEWS DIGEST",
  265 + weight: "bold",
  266 + size: "sm",
  267 + color: "#AAAAAA",
  268 + contents: [],
  269 + },
  270 + ],
  271 + },
  272 + hero: {
  273 + type: "image",
  274 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/01_4_news.png",
  275 + size: "full",
  276 + aspectRatio: "20:13",
  277 + aspectMode: "cover",
  278 + action: {
  279 + type: "uri",
  280 + label: "Action",
  281 + uri: "https://linecorp.com/",
  282 + },
  283 + },
  284 + body: {
  285 + type: "box",
  286 + layout: "horizontal",
  287 + spacing: "md",
  288 + contents: [
  289 + {
  290 + type: "box",
  291 + layout: "vertical",
  292 + flex: 1,
  293 + contents: [
  294 + {
  295 + type: "image",
  296 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/02_1_news_thumbnail_1.png",
  297 + gravity: "bottom",
  298 + size: "sm",
  299 + aspectRatio: "4:3",
  300 + aspectMode: "cover",
  301 + },
  302 + {
  303 + type: "image",
  304 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/02_1_news_thumbnail_2.png",
  305 + margin: "md",
  306 + size: "sm",
  307 + aspectRatio: "4:3",
  308 + aspectMode: "cover",
  309 + },
  310 + ],
  311 + },
  312 + {
  313 + type: "box",
  314 + layout: "vertical",
  315 + flex: 2,
  316 + contents: [
  317 + {
  318 + type: "text",
  319 + text: "7 Things to Know for Today",
  320 + size: "xs",
  321 + flex: 1,
  322 + gravity: "top",
  323 + contents: [],
  324 + },
  325 + {
  326 + type: "separator",
  327 + },
  328 + {
  329 + type: "text",
  330 + text: "Hay fever goes wild",
  331 + size: "xs",
  332 + flex: 2,
  333 + gravity: "center",
  334 + contents: [],
  335 + },
  336 + {
  337 + type: "separator",
  338 + },
  339 + {
  340 + type: "text",
  341 + text: "LINE Pay Begins Barcode Payment Service",
  342 + size: "xs",
  343 + flex: 2,
  344 + gravity: "center",
  345 + contents: [],
  346 + },
  347 + {
  348 + type: "separator",
  349 + },
  350 + {
  351 + type: "text",
  352 + text: "LINE Adds LINE Wallet",
  353 + size: "xs",
  354 + flex: 1,
  355 + gravity: "bottom",
  356 + contents: [],
  357 + },
  358 + ],
  359 + },
  360 + ],
  361 + },
  362 + footer: {
  363 + type: "box",
  364 + layout: "horizontal",
  365 + contents: [
  366 + {
  367 + type: "button",
  368 + action: {
  369 + type: "uri",
  370 + label: "More",
  371 + uri: "https://linecorp.com",
  372 + },
  373 + },
  374 + ],
  375 + },
  376 + }),
  377 + bub4: GenContentFlex({
  378 + type: "bubble",
  379 + hero: {
  380 + type: "image",
  381 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/01_2_restaurant.png",
  382 + size: "full",
  383 + aspectRatio: "20:13",
  384 + aspectMode: "cover",
  385 + action: {
  386 + type: "uri",
  387 + label: "Action",
  388 + uri: "https://linecorp.com",
  389 + },
  390 + },
  391 + body: {
  392 + type: "box",
  393 + layout: "vertical",
  394 + spacing: "md",
  395 + action: {
  396 + type: "uri",
  397 + label: "Action",
  398 + uri: "https://linecorp.com",
  399 + },
  400 + contents: [
  401 + {
  402 + type: "text",
  403 + text: "Brown's Burger",
  404 + weight: "bold",
  405 + size: "xl",
  406 + contents: [],
  407 + },
  408 + {
  409 + type: "box",
  410 + layout: "vertical",
  411 + spacing: "sm",
  412 + contents: [
  413 + {
  414 + type: "box",
  415 + layout: "baseline",
  416 + contents: [
  417 + {
  418 + type: "icon",
  419 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/restaurant_regular_32.png",
  420 + },
  421 + {
  422 + type: "text",
  423 + text: "$10.5",
  424 + weight: "bold",
  425 + margin: "sm",
  426 + contents: [],
  427 + },
  428 + {
  429 + type: "text",
  430 + text: "400kcl",
  431 + size: "sm",
  432 + color: "#AAAAAA",
  433 + align: "end",
  434 + contents: [],
  435 + },
  436 + ],
  437 + },
  438 + {
  439 + type: "box",
  440 + layout: "baseline",
  441 + contents: [
  442 + {
  443 + type: "icon",
  444 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/restaurant_large_32.png",
  445 + },
  446 + {
  447 + type: "text",
  448 + text: "$15.5",
  449 + weight: "bold",
  450 + flex: 0,
  451 + margin: "sm",
  452 + contents: [],
  453 + },
  454 + {
  455 + type: "text",
  456 + text: "550kcl",
  457 + size: "sm",
  458 + color: "#AAAAAA",
  459 + align: "end",
  460 + contents: [],
  461 + },
  462 + ],
  463 + },
  464 + ],
  465 + },
  466 + {
  467 + type: "text",
  468 + text: "Sauce, Onions, Pickles, Lettuce & Cheese",
  469 + size: "xxs",
  470 + color: "#AAAAAA",
  471 + wrap: true,
  472 + contents: [],
  473 + },
  474 + ],
  475 + },
  476 + footer: {
  477 + type: "box",
  478 + layout: "vertical",
  479 + contents: [
  480 + {
  481 + type: "spacer",
  482 + size: "xxl",
  483 + },
  484 + {
  485 + type: "button",
  486 + action: {
  487 + type: "uri",
  488 + label: "Add to Cart",
  489 + uri: "https://linecorp.com",
  490 + },
  491 + color: "#905C44",
  492 + style: "primary",
  493 + },
  494 + ],
  495 + },
  496 + }),
  497 + bub5: GenContentFlex({
  498 + type: "bubble",
  499 + hero: {
  500 + type: "image",
  501 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/01_3_movie.png",
  502 + size: "full",
  503 + aspectRatio: "20:13",
  504 + aspectMode: "cover",
  505 + action: {
  506 + type: "uri",
  507 + label: "Action",
  508 + uri: "https://linecorp.com/",
  509 + },
  510 + },
  511 + body: {
  512 + type: "box",
  513 + layout: "vertical",
  514 + spacing: "md",
  515 + contents: [
  516 + {
  517 + type: "text",
  518 + text: "BROWN'S ADVENTURE\nIN MOVIE",
  519 + weight: "bold",
  520 + size: "xl",
  521 + gravity: "center",
  522 + wrap: true,
  523 + contents: [],
  524 + },
  525 + {
  526 + type: "box",
  527 + layout: "baseline",
  528 + margin: "md",
  529 + contents: [
  530 + {
  531 + type: "icon",
  532 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
  533 + size: "sm",
  534 + },
  535 + {
  536 + type: "icon",
  537 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
  538 + size: "sm",
  539 + },
  540 + {
  541 + type: "icon",
  542 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
  543 + size: "sm",
  544 + },
  545 + {
  546 + type: "icon",
  547 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
  548 + size: "sm",
  549 + },
  550 + {
  551 + type: "icon",
  552 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gray_star_28.png",
  553 + size: "sm",
  554 + },
  555 + {
  556 + type: "text",
  557 + text: "4.0",
  558 + size: "sm",
  559 + color: "#999999",
  560 + flex: 0,
  561 + margin: "md",
  562 + contents: [],
  563 + },
  564 + ],
  565 + },
  566 + {
  567 + type: "box",
  568 + layout: "vertical",
  569 + spacing: "sm",
  570 + margin: "lg",
  571 + contents: [
  572 + {
  573 + type: "box",
  574 + layout: "baseline",
  575 + spacing: "sm",
  576 + contents: [
  577 + {
  578 + type: "text",
  579 + text: "Date",
  580 + size: "sm",
  581 + color: "#AAAAAA",
  582 + flex: 1,
  583 + contents: [],
  584 + },
  585 + {
  586 + type: "text",
  587 + text: "Monday 25, 9:00PM",
  588 + size: "sm",
  589 + color: "#666666",
  590 + flex: 4,
  591 + wrap: true,
  592 + contents: [],
  593 + },
  594 + ],
  595 + },
  596 + {
  597 + type: "box",
  598 + layout: "baseline",
  599 + spacing: "sm",
  600 + contents: [
  601 + {
  602 + type: "text",
  603 + text: "Place",
  604 + size: "sm",
  605 + color: "#AAAAAA",
  606 + flex: 1,
  607 + contents: [],
  608 + },
  609 + {
  610 + type: "text",
  611 + text: "7 Floor, No.3",
  612 + size: "sm",
  613 + color: "#666666",
  614 + flex: 4,
  615 + wrap: true,
  616 + contents: [],
  617 + },
  618 + ],
  619 + },
  620 + {
  621 + type: "box",
  622 + layout: "baseline",
  623 + spacing: "sm",
  624 + contents: [
  625 + {
  626 + type: "text",
  627 + text: "Seats",
  628 + size: "sm",
  629 + color: "#AAAAAA",
  630 + flex: 1,
  631 + contents: [],
  632 + },
  633 + {
  634 + type: "text",
  635 + text: "C Row, 18 Seat",
  636 + size: "sm",
  637 + color: "#666666",
  638 + flex: 4,
  639 + wrap: true,
  640 + contents: [],
  641 + },
  642 + ],
  643 + },
  644 + ],
  645 + },
  646 + {
  647 + type: "box",
  648 + layout: "vertical",
  649 + margin: "xxl",
  650 + contents: [
  651 + {
  652 + type: "spacer",
  653 + },
  654 + {
  655 + type: "image",
  656 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/linecorp_code_withborder.png",
  657 + size: "xl",
  658 + aspectMode: "cover",
  659 + },
  660 + {
  661 + type: "text",
  662 + text: "You can enter the theater by using this code instead of a ticket",
  663 + size: "xs",
  664 + color: "#AAAAAA",
  665 + margin: "xxl",
  666 + wrap: true,
  667 + contents: [],
  668 + },
  669 + ],
  670 + },
  671 + ],
  672 + },
  673 + }),
  674 + bub6: GenContentFlex({
  675 + type: "bubble",
  676 + hero: {
  677 + type: "image",
  678 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/01_5_carousel.png",
  679 + size: "full",
  680 + aspectRatio: "20:13",
  681 + aspectMode: "cover",
  682 + },
  683 + body: {
  684 + type: "box",
  685 + layout: "vertical",
  686 + spacing: "sm",
  687 + contents: [
  688 + {
  689 + type: "text",
  690 + text: "Arm Chair, White",
  691 + weight: "bold",
  692 + size: "xl",
  693 + wrap: true,
  694 + contents: [],
  695 + },
  696 + {
  697 + type: "box",
  698 + layout: "baseline",
  699 + contents: [
  700 + {
  701 + type: "text",
  702 + text: "$49",
  703 + weight: "bold",
  704 + size: "xl",
  705 + flex: 0,
  706 + wrap: true,
  707 + contents: [],
  708 + },
  709 + {
  710 + type: "text",
  711 + text: ".99",
  712 + weight: "bold",
  713 + size: "sm",
  714 + flex: 0,
  715 + wrap: true,
  716 + contents: [],
  717 + },
  718 + ],
  719 + },
  720 + ],
  721 + },
  722 + footer: {
  723 + type: "box",
  724 + layout: "vertical",
  725 + spacing: "sm",
  726 + contents: [
  727 + {
  728 + type: "button",
  729 + action: {
  730 + type: "uri",
  731 + label: "Add to Cart",
  732 + uri: "https://linecorp.com",
  733 + },
  734 + style: "primary",
  735 + },
  736 + {
  737 + type: "button",
  738 + action: {
  739 + type: "uri",
  740 + label: "Add to wishlist",
  741 + uri: "https://linecorp.com",
  742 + },
  743 + },
  744 + ],
  745 + },
  746 + }),
  747 +};
  748 +
  749 +module.exports = { GenContentFlex, flexs };
index.js 0 → 100644
  1 +++ a/index.js
@@ -0,0 +1,317 @@ @@ -0,0 +1,317 @@
  1 +"use strict";
  2 +
  3 +const line = require("@line/bot-sdk");
  4 +const express = require("express");
  5 +const config = require("./config.json");
  6 +const bodyParser = require("body-parser");
  7 +const axios = require("axios");
  8 +const fs = require("fs");
  9 +const request = require("request");
  10 +const moment = require("moment");
  11 +const flexMsg = require("./flexMsg");
  12 +
  13 +// create LINE SDK client
  14 +const client = new line.Client(config);
  15 +
  16 +const app = express();
  17 +
  18 +// webhook callback
  19 +app.use("/webhook", line.middleware(config));
  20 +app.post("/webhook", (req, res) => {
  21 + // req.body.events should be an array of events
  22 + if (!Array.isArray(req.body.events)) {
  23 + return res.status(500).end();
  24 + }
  25 + // handle events separately
  26 + Promise.all(
  27 + req.body.events.map((event) => {
  28 + console.log("event", event);
  29 + // check verify webhook event
  30 + if (
  31 + event.replyToken === "00000000000000000000000000000000" ||
  32 + event.replyToken === "ffffffffffffffffffffffffffffffff"
  33 + ) {
  34 + return;
  35 + }
  36 + return handleEvent(event);
  37 + })
  38 + )
  39 + .then(() => res.end())
  40 + .catch((err) => {
  41 + console.error(err);
  42 + res.status(500).end();
  43 + });
  44 +});
  45 +
  46 +// simple reply function
  47 +const replyText = (token, texts) => {
  48 + texts = Array.isArray(texts) ? texts : [texts];
  49 + return client.replyMessage(
  50 + token,
  51 + texts.map((text) => ({ type: "text", text }))
  52 + );
  53 +};
  54 +
  55 +const tolow = (str) => {
  56 + return str.toLowerCase();
  57 +};
  58 +const handleEvent = (event) => {
  59 + let payload = {
  60 + type: "text",
  61 + text: "Hello From PUI",
  62 + };
  63 +
  64 + if (event.message.type == "text") {
  65 + let selecttext = tolow(event.message.text);
  66 + let get_text = mockText()[selecttext];
  67 + if (get_text) {
  68 + payload = get_text;
  69 + }
  70 + } else {
  71 + payload.text = "Other Message =>>>" + JSON.stringify(event);
  72 + }
  73 +
  74 + return client.replyMessage(event.replyToken, payload);
  75 +};
  76 +app.use(bodyParser.json());
  77 +
  78 +app.get("/", (req, res) => {
  79 + res.json({ line: "ok" });
  80 +});
  81 +
  82 +app.get("/push", bodyParser.json(), (req, res) => {
  83 + let message = {
  84 + type: "text",
  85 + text: `use Push Message! to `,
  86 + };
  87 + client.pushMessage("Uaac2ca5a02feab67a18d5521b572b5aa", message);
  88 + res.json(message);
  89 +});
  90 +
  91 +app.post("/save", bodyParser.json(), async (req, res) => {
  92 + console.log("saveFile!");
  93 + try {
  94 + const downloadFile = function (uri, filename, callback) {
  95 + request.head(uri, function (err, res, body) {
  96 + console.log("content-type:", res.headers["content-type"]);
  97 + console.log("content-length:", res.headers["content-length"]);
  98 + console.log("Content-Type:", res.headers["Content-Type"]);
  99 + console.log("res.headers ::", res.headers);
  100 +
  101 + request(uri, {
  102 + headers: {
  103 + Authorization:
  104 + "Bearer be/XHjQ+gMoypZE78Us7hk0h6PA04TyfpQciMOq+B/OVPmumozdhGzYUwopDgsOMCM7RymTK8m++q20GSj3c6B7gZkgEmuGYEYPvc6j+4as6X5bu7tEg+KAZKMfBVDnk+ekpAorC7FMwVPyt2frGRQdB04t89/1O/w1cDnyilFU=",
  105 + },
  106 + })
  107 + .pipe(fs.createWriteStream(filename))
  108 + .on("close", callback);
  109 + });
  110 + };
  111 +
  112 + let unquie_file = moment().format("YYYY-MM-DD_HHmmssss");
  113 + let file_name = `filesave_${unquie_file}`;
  114 + let message_id = req.body.message_id;
  115 + let URI = `https://api-data.line.me/v2/bot/message/${message_id}/content`;
  116 + console.log("message_id ::", message_id);
  117 + console.log("file_name ::", file_name);
  118 +
  119 + axios
  120 + .get(URI, {
  121 + headers: {
  122 + Authorization:
  123 + "Bearer be/XHjQ+gMoypZE78Us7hk0h6PA04TyfpQciMOq+B/OVPmumozdhGzYUwopDgsOMCM7RymTK8m++q20GSj3c6B7gZkgEmuGYEYPvc6j+4as6X5bu7tEg+KAZKMfBVDnk+ekpAorC7FMwVPyt2frGRQdB04t89/1O/w1cDnyilFU=",
  124 + },
  125 + })
  126 + .then(function (response) {
  127 + // handle success
  128 + console.log("axios =>>", response.headers["content-type"]);
  129 + let sp = response.headers["content-type"].split("/");
  130 + let type = sp[sp.length - 1];
  131 + let full_file_name = file_name + "." + type;
  132 + console.log("full_file_name =", full_file_name);
  133 + downloadFile(URI, full_file_name, function () {
  134 + console.log("done!");
  135 + res.json({ LoadFlieName: "Success" });
  136 + });
  137 + })
  138 + .catch(function (error) {
  139 + // handle error
  140 + console.log(error);
  141 + console.error("errorxx ::", error);
  142 + res.json({ error: "error" });
  143 + });
  144 + } catch (error) {
  145 + console.error("errorxx ::", error);
  146 + }
  147 +});
  148 +
  149 +app.post("/saveNew", bodyParser.json(), async (req, res) => {
  150 + console.log("saveFile!");
  151 + try {
  152 + let stream = await client.getMessageContent("14955535936627");
  153 + console.log("stream!", stream);
  154 + } catch (error) {
  155 + console.error(error);
  156 + }
  157 + res.json({ OK: "OK" });
  158 +});
  159 +
  160 +app.post("/push", (req, res) => {
  161 + let body = req.body;
  162 + let { user_id } = body;
  163 + console.log("body ::", body);
  164 + let message = {
  165 + type: "text",
  166 + text: `use Push Message! to ${user_id}`,
  167 + };
  168 + client.pushMessage(user_id, message);
  169 + res.json(message);
  170 +});
  171 +
  172 +app.post("/multicast", (req, res) => {
  173 + let body = req.body;
  174 + let { user_ids } = body;
  175 + console.log("body ::", body);
  176 + let message = [
  177 + {
  178 + type: "text",
  179 + text: `use multicast Message1! to ${JSON.stringify(user_ids)}`,
  180 + },
  181 + {
  182 + type: "text",
  183 + text: `use multicast Message2! to ${JSON.stringify(user_ids)}`,
  184 + },
  185 + ];
  186 + client.multicast(user_ids, message);
  187 + res.json(message);
  188 +});
  189 +
  190 +const port = config.port;
  191 +app.listen(port, () => {
  192 + console.log(`listening on ${port}`);
  193 +});
  194 +
  195 +const GenContentFlex = (content) => {
  196 + return {
  197 + flex1: {
  198 + type: "flex",
  199 + altText: "GenContentFlex!",
  200 + contents: content,
  201 + },
  202 + };
  203 +};
  204 +
  205 +const genMsgContent = flexMsg.GenContentFlex;
  206 +const flexs = flexMsg.flexs;
  207 +// console.log(genMsgContent());
  208 +
  209 +const mockText = () => {
  210 + return {
  211 + flex0: flexs.flex0,
  212 + flex1: flexs.flex1,
  213 +
  214 + bub1: flexs.bub1,
  215 + bub2: flexs.bub2,
  216 + bub3: flexs.bub3,
  217 + bub4: flexs.bub4,
  218 + bub5: flexs.bub5,
  219 + bub6: flexs.bub6,
  220 +
  221 + confirm:{
  222 + "type": "template",
  223 + "altText": "this is a confirm template",
  224 + "template": {
  225 + "type": "confirm",
  226 + "text": "Are you sure?",
  227 + "actions": [
  228 + {
  229 + "type": "message",
  230 + "label": "Yes",
  231 + "text": "yes"
  232 + },
  233 + {
  234 + "type": "message",
  235 + "label": "No",
  236 + "text": "no"
  237 + }
  238 + ]
  239 + }
  240 + },
  241 +
  242 +
  243 + location: {
  244 + type: "text", // ①
  245 + text: "Select your favorite food category or send me your location!",
  246 + quickReply: {
  247 + // ②
  248 + items: [
  249 + {
  250 + type: "action", // ③
  251 + imageUrl: "https://example.com/sushi.png",
  252 + action: {
  253 + type: "message",
  254 + label: "Sushi",
  255 + text: "Sushi",
  256 + },
  257 + },
  258 + {
  259 + type: "action",
  260 + imageUrl: "https://example.com/tempura.png",
  261 + action: {
  262 + type: "message",
  263 + label: "Tempura",
  264 + text: "Tempura",
  265 + },
  266 + },
  267 + {
  268 + type: "action", // ④
  269 + action: {
  270 + type: "location",
  271 + label: "Send location",
  272 + },
  273 + },
  274 + ],
  275 + },
  276 + },
  277 +
  278 +
  279 +
  280 +
  281 + //
  282 + image_carousel: {
  283 + "type": "template",
  284 + "altText": "this is a image carousel template",
  285 + "template": {
  286 + "type": "image_carousel",
  287 + "columns": [
  288 + {
  289 + "imageUrl": "https://example.com/bot/images/item1.jpg",
  290 + "action": {
  291 + "type": "postback",
  292 + "label": "Buy",
  293 + "data": "action=buy&itemid=111"
  294 + }
  295 + },
  296 + {
  297 + "imageUrl": "https://example.com/bot/images/item2.jpg",
  298 + "action": {
  299 + "type": "message",
  300 + "label": "Yes",
  301 + "text": "yes"
  302 + }
  303 + },
  304 + {
  305 + "imageUrl": "https://example.com/bot/images/item3.jpg",
  306 + "action": {
  307 + "type": "uri",
  308 + "label": "View detail",
  309 + "uri": "http://example.com/page/222"
  310 + }
  311 + }
  312 + ]
  313 + }
  314 + }
  315 +
  316 + };
  317 +};
indexbk.js 0 → 100644
  1 +++ a/indexbk.js
@@ -0,0 +1,166 @@ @@ -0,0 +1,166 @@
  1 +"use strict";
  2 +
  3 +const line = require("@line/bot-sdk");
  4 +const express = require("express");
  5 +const config = require("./config.json");
  6 +
  7 +// create LINE SDK client
  8 +const client = new line.Client(config);
  9 +
  10 +const app = express();
  11 +
  12 +// webhook callback
  13 +app.post("/webhook", line.middleware(config), (req, res) => {
  14 + // req.body.events should be an array of events
  15 + if (!Array.isArray(req.body.events)) {
  16 + return res.status(500).end();
  17 + }
  18 + // handle events separately
  19 + Promise.all(
  20 + req.body.events.map((event) => {
  21 + console.log("event", event);
  22 + // check verify webhook event
  23 + if (
  24 + event.replyToken === "00000000000000000000000000000000" ||
  25 + event.replyToken === "ffffffffffffffffffffffffffffffff"
  26 + ) {
  27 + return;
  28 + }
  29 + return handleEvent2(event);
  30 + })
  31 + )
  32 + .then(() => res.end())
  33 + .catch((err) => {
  34 + console.error(err);
  35 + res.status(500).end();
  36 + });
  37 +});
  38 +
  39 +// simple reply function
  40 +const replyText = (token, texts) => {
  41 + texts = Array.isArray(texts) ? texts : [texts];
  42 + return client.replyMessage(
  43 + token,
  44 + texts.map((text) => ({ type: "text", text }))
  45 + );
  46 +};
  47 +
  48 +const handleEvent = (event) => {
  49 + // const payload = {
  50 + // type: "text",
  51 + // text: "Hello From PUI",
  52 + // };
  53 +
  54 +
  55 + const payload = {
  56 + "type": "text", // ①
  57 + "text": "Select your favorite food category or send me your location!",
  58 + "quickReply": { // ②
  59 + "items": [
  60 + {
  61 + "type": "action", // ③
  62 + "imageUrl": "https://example.com/sushi.png",
  63 + "action": {
  64 + "type": "message",
  65 + "label": "Sushi",
  66 + "text": "Sushi"
  67 + }
  68 + },
  69 + {
  70 + "type": "action",
  71 + "imageUrl": "https://example.com/tempura.png",
  72 + "action": {
  73 + "type": "message",
  74 + "label": "Tempura",
  75 + "text": "Tempura"
  76 + }
  77 + },
  78 + {
  79 + "type": "action", // ④
  80 + "action": {
  81 + "type": "location",
  82 + "label": "Send location"
  83 + }
  84 + }
  85 + ]
  86 + }
  87 + }
  88 +
  89 + return client.replyMessage(event.replyToken, payload);
  90 +};
  91 +
  92 +// callback function to handle a single event
  93 +function handleEvent2(event) {
  94 + switch (event.type) {
  95 + case 'message':
  96 + const message = event.message;
  97 + switch (message.type) {
  98 + case 'text':
  99 + return handleText(message, event.replyToken);
  100 + case 'image':
  101 + return handleImage(message, event.replyToken);
  102 + case 'video':
  103 + return handleVideo(message, event.replyToken);
  104 + case 'audio':
  105 + return handleAudio(message, event.replyToken);
  106 + case 'location':
  107 + return handleLocation(message, event.replyToken);
  108 + case 'sticker':
  109 + return handleSticker(message, event.replyToken);
  110 + default:
  111 + throw new Error(`Unknown message: ${JSON.stringify(message)}`);
  112 + }
  113 +
  114 + case 'follow':
  115 + return replyText(event.replyToken, 'Got followed event');
  116 +
  117 + case 'unfollow':
  118 + return console.log(`Unfollowed this bot: ${JSON.stringify(event)}`);
  119 +
  120 + case 'join':
  121 + return replyText(event.replyToken, `Joined ${event.source.type}`);
  122 +
  123 + case 'leave':
  124 + return console.log(`Left: ${JSON.stringify(event)}`);
  125 +
  126 + case 'postback':
  127 + let data = event.postback.data;
  128 + return replyText(event.replyToken, `Got postback: ${data}`);
  129 +
  130 + case 'beacon':
  131 + const dm = `${Buffer.from(event.beacon.dm || '', 'hex').toString('utf8')}`;
  132 + return replyText(event.replyToken, `${event.beacon.type} beacon hwid : ${event.beacon.hwid} with device message = ${dm}`);
  133 +
  134 + default:
  135 + throw new Error(`Unknown event: ${JSON.stringify(event)}`);
  136 + }
  137 +}
  138 +
  139 +function handleText(message, replyToken) {
  140 + return replyText(replyToken, message.text);
  141 +}
  142 +
  143 +function handleImage(message, replyToken) {
  144 + return replyText(replyToken, "Got Image");
  145 +}
  146 +
  147 +function handleVideo(message, replyToken) {
  148 + return replyText(replyToken, "Got Video");
  149 +}
  150 +
  151 +function handleAudio(message, replyToken) {
  152 + return replyText(replyToken, "Got Audio");
  153 +}
  154 +
  155 +function handleLocation(message, replyToken) {
  156 + return replyText(replyToken, "Got Location");
  157 +}
  158 +
  159 +function handleSticker(message, replyToken) {
  160 + return replyText(replyToken, "Got Sticker");
  161 +}
  162 +
  163 +const port = config.port;
  164 +app.listen(port, () => {
  165 + console.log(`listening on ${port}`);
  166 +});
indexv1.js 0 → 100644
  1 +++ a/indexv1.js
@@ -0,0 +1,553 @@ @@ -0,0 +1,553 @@
  1 +"use strict";
  2 +
  3 +const line = require("@line/bot-sdk");
  4 +const express = require("express");
  5 +const config = require("./config.json");
  6 +const bodyParser = require("body-parser");
  7 +const axios = require("axios");
  8 +const fs = require("fs");
  9 +const request = require("request");
  10 +const moment = require("moment");
  11 +const { type } = require("os");
  12 +
  13 +// create LINE SDK client
  14 +const client = new line.Client(config);
  15 +
  16 +const app = express();
  17 +
  18 +// webhook callback
  19 +app.use("/webhook", line.middleware(config));
  20 +app.post("/webhook", (req, res) => {
  21 + // req.body.events should be an array of events
  22 + if (!Array.isArray(req.body.events)) {
  23 + return res.status(500).end();
  24 + }
  25 + // handle events separately
  26 + Promise.all(
  27 + req.body.events.map((event) => {
  28 + console.log("event", event);
  29 + // check verify webhook event
  30 + if (
  31 + event.replyToken === "00000000000000000000000000000000" ||
  32 + event.replyToken === "ffffffffffffffffffffffffffffffff"
  33 + ) {
  34 + return;
  35 + }
  36 + return handleEvent(event);
  37 + })
  38 + )
  39 + .then(() => res.end())
  40 + .catch((err) => {
  41 + console.error(err);
  42 + res.status(500).end();
  43 + });
  44 +});
  45 +
  46 +// simple reply function
  47 +const replyText = (token, texts) => {
  48 + texts = Array.isArray(texts) ? texts : [texts];
  49 + return client.replyMessage(
  50 + token,
  51 + texts.map((text) => ({ type: "text", text }))
  52 + );
  53 +};
  54 +
  55 +const tolow = (str) => {
  56 + return str.toLowerCase();
  57 +};
  58 +const handleEvent = (event) => {
  59 + let payload = {
  60 + type: "text",
  61 + text: "Hello From PUI",
  62 + };
  63 +
  64 + if (event.message.type == "text") {
  65 + let selecttext = tolow(event.message.text);
  66 + let get_text = mockText()[selecttext];
  67 + if (get_text) {
  68 + payload = get_text;
  69 + }
  70 + } else {
  71 + payload.text = "Other Message =>>>" + JSON.stringify(event);
  72 + }
  73 +
  74 + return client.replyMessage(event.replyToken, payload);
  75 +};
  76 +app.use(bodyParser.json());
  77 +
  78 +app.get("/", (req, res) => {
  79 + res.json({ line: "ok" });
  80 +});
  81 +
  82 +app.get("/push", bodyParser.json(), (req, res) => {
  83 + let message = {
  84 + type: "text",
  85 + text: `use Push Message! to `,
  86 + };
  87 + client.pushMessage("Uaac2ca5a02feab67a18d5521b572b5aa", message);
  88 + res.json(message);
  89 +});
  90 +
  91 +app.post("/save", bodyParser.json(), async (req, res) => {
  92 + console.log("saveFile!");
  93 + try {
  94 + const downloadFile = function (uri, filename, callback) {
  95 + request.head(uri, function (err, res, body) {
  96 + console.log("content-type:", res.headers["content-type"]);
  97 + console.log("content-length:", res.headers["content-length"]);
  98 + console.log("Content-Type:", res.headers["Content-Type"]);
  99 + console.log("res.headers ::", res.headers);
  100 +
  101 + request(uri, {
  102 + headers: {
  103 + Authorization:
  104 + "Bearer be/XHjQ+gMoypZE78Us7hk0h6PA04TyfpQciMOq+B/OVPmumozdhGzYUwopDgsOMCM7RymTK8m++q20GSj3c6B7gZkgEmuGYEYPvc6j+4as6X5bu7tEg+KAZKMfBVDnk+ekpAorC7FMwVPyt2frGRQdB04t89/1O/w1cDnyilFU=",
  105 + },
  106 + })
  107 + .pipe(fs.createWriteStream(filename))
  108 + .on("close", callback);
  109 + });
  110 + };
  111 +
  112 + let unquie_file = moment().format("YYYY-MM-DD_HHmmssss");
  113 + let file_name = `filesave_${unquie_file}`;
  114 + let message_id = req.body.message_id;
  115 + let URI = `https://api-data.line.me/v2/bot/message/${message_id}/content`;
  116 + console.log("message_id ::", message_id);
  117 + console.log("file_name ::", file_name);
  118 +
  119 + axios
  120 + .get(URI, {
  121 + headers: {
  122 + Authorization:
  123 + "Bearer be/XHjQ+gMoypZE78Us7hk0h6PA04TyfpQciMOq+B/OVPmumozdhGzYUwopDgsOMCM7RymTK8m++q20GSj3c6B7gZkgEmuGYEYPvc6j+4as6X5bu7tEg+KAZKMfBVDnk+ekpAorC7FMwVPyt2frGRQdB04t89/1O/w1cDnyilFU=",
  124 + },
  125 + })
  126 + .then(function (response) {
  127 + // handle success
  128 + console.log("axios =>>", response.headers["content-type"]);
  129 + let sp = response.headers["content-type"].split("/");
  130 + let type = sp[sp.length - 1];
  131 + let full_file_name = file_name + "." + type;
  132 + console.log("full_file_name =", full_file_name);
  133 + downloadFile(URI, full_file_name, function () {
  134 + console.log("done!");
  135 + res.json({ LoadFlieName: "Success" });
  136 + });
  137 + })
  138 + .catch(function (error) {
  139 + // handle error
  140 + console.log(error);
  141 + console.error("errorxx ::", error);
  142 + res.json({ error: "error" });
  143 + });
  144 + } catch (error) {
  145 + console.error("errorxx ::", error);
  146 + }
  147 +});
  148 +
  149 +app.post("/saveNew", bodyParser.json(), async (req, res) => {
  150 + console.log("saveFile!");
  151 + try {
  152 + let stream = await client.getMessageContent("14955535936627");
  153 + console.log("stream!", stream);
  154 + } catch (error) {
  155 + console.error(error);
  156 + }
  157 + res.json({ OK: "OK" });
  158 +});
  159 +
  160 +app.post("/push", (req, res) => {
  161 + let body = req.body;
  162 + let { user_id } = body;
  163 + console.log("body ::", body);
  164 + let message = {
  165 + type: "text",
  166 + text: `use Push Message! to ${user_id}`,
  167 + };
  168 + client.pushMessage(user_id, message);
  169 + res.json(message);
  170 +});
  171 +
  172 +app.post("/multicast", (req, res) => {
  173 + let body = req.body;
  174 + let { user_ids } = body;
  175 + console.log("body ::", body);
  176 + let message = [
  177 + {
  178 + type: "text",
  179 + text: `use multicast Message1! to ${JSON.stringify(user_ids)}`,
  180 + },
  181 + {
  182 + type: "text",
  183 + text: `use multicast Message2! to ${JSON.stringify(user_ids)}`,
  184 + },
  185 + ];
  186 + client.multicast(user_ids, message);
  187 + res.json(message);
  188 +});
  189 +
  190 +const port = config.port;
  191 +app.listen(port, () => {
  192 + console.log(`listening on ${port}`);
  193 +});
  194 +
  195 +const GenContentFlex = (content) => {
  196 + return {
  197 + flex1: {
  198 + type: "flex",
  199 + altText: "GenContentFlex!",
  200 + contents: content,
  201 + },
  202 + };
  203 +};
  204 +
  205 +const mockText = () => {
  206 + return {
  207 + flex1: {
  208 + type: "flex",
  209 + altText: "this is a flex message",
  210 + contents: {
  211 + type: "bubble",
  212 + body: {
  213 + type: "box",
  214 + layout: "vertical",
  215 + contents: [
  216 + {
  217 + type: "text",
  218 + text: "hello",
  219 + },
  220 + {
  221 + type: "text",
  222 + text: "world",
  223 + },
  224 + ],
  225 + },
  226 + },
  227 + },
  228 +
  229 + flex2: {
  230 + type: "flex",
  231 + altText: "this is a flex message",
  232 + contents: {
  233 + type: "bubble",
  234 + direction: "ltr",
  235 + header: {
  236 + type: "box",
  237 + layout: "vertical",
  238 + contents: [
  239 + {
  240 + type: "text",
  241 + text: "แมว",
  242 + align: "center",
  243 + contents: [],
  244 + },
  245 + ],
  246 + },
  247 + hero: {
  248 + type: "image",
  249 + url: "https://static.trueplookpanya.com/tppy/member/m_545000_547500/545994/cms/images/2019-Q3/แมว9ชีวิต.jpg",
  250 + size: "full",
  251 + aspectRatio: "1.51:1",
  252 + aspectMode: "fit",
  253 + },
  254 + body: {
  255 + type: "box",
  256 + layout: "vertical",
  257 + contents: [
  258 + {
  259 + type: "text",
  260 + text: "คำอธิบาย",
  261 + align: "center",
  262 + contents: [],
  263 + },
  264 + ],
  265 + },
  266 + footer: {
  267 + type: "box",
  268 + layout: "horizontal",
  269 + contents: [
  270 + {
  271 + type: "button",
  272 + action: {
  273 + type: "uri",
  274 + label: "ดูรูปแมวชัดๆ",
  275 + uri: "https://static.trueplookpanya.com/tppy/member/m_545000_547500/545994/cms/images/2019-Q3/แมว9ชีวิต.jpg",
  276 + },
  277 + },
  278 + ],
  279 + },
  280 + },
  281 + },
  282 +
  283 + flex3: {
  284 + type: "flex",
  285 + altText: "this is a flex message",
  286 + contents: {
  287 + type: "bubble",
  288 + direction: "ltr",
  289 + hero: {
  290 + type: "image",
  291 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/01_3_movie.png",
  292 + size: "full",
  293 + aspectRatio: "20:13",
  294 + aspectMode: "cover",
  295 + action: {
  296 + type: "uri",
  297 + label: "Action",
  298 + uri: "https://linecorp.com/",
  299 + },
  300 + },
  301 + body: {
  302 + type: "box",
  303 + layout: "vertical",
  304 + spacing: "md",
  305 + contents: [
  306 + {
  307 + type: "text",
  308 + text: "BROWN'S ADVENTURE\nIN MOVIE",
  309 + weight: "bold",
  310 + size: "xl",
  311 + gravity: "center",
  312 + wrap: true,
  313 + contents: [],
  314 + },
  315 + {
  316 + type: "box",
  317 + layout: "baseline",
  318 + margin: "md",
  319 + contents: [
  320 + {
  321 + type: "icon",
  322 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
  323 + size: "sm",
  324 + },
  325 + {
  326 + type: "icon",
  327 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
  328 + size: "sm",
  329 + },
  330 + {
  331 + type: "icon",
  332 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
  333 + size: "sm",
  334 + },
  335 + {
  336 + type: "icon",
  337 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
  338 + size: "sm",
  339 + },
  340 + {
  341 + type: "icon",
  342 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gray_star_28.png",
  343 + size: "sm",
  344 + },
  345 + {
  346 + type: "text",
  347 + text: "4.0",
  348 + size: "sm",
  349 + color: "#999999",
  350 + flex: 0,
  351 + margin: "md",
  352 + contents: [],
  353 + },
  354 + ],
  355 + },
  356 + {
  357 + type: "box",
  358 + layout: "vertical",
  359 + spacing: "sm",
  360 + margin: "lg",
  361 + contents: [
  362 + {
  363 + type: "box",
  364 + layout: "baseline",
  365 + spacing: "sm",
  366 + contents: [
  367 + {
  368 + type: "text",
  369 + text: "Date",
  370 + size: "sm",
  371 + color: "#AAAAAA",
  372 + flex: 1,
  373 + contents: [],
  374 + },
  375 + {
  376 + type: "text",
  377 + text: "Monday 25, 9:00PM",
  378 + size: "sm",
  379 + color: "#666666",
  380 + flex: 4,
  381 + wrap: true,
  382 + contents: [],
  383 + },
  384 + ],
  385 + },
  386 + {
  387 + type: "box",
  388 + layout: "baseline",
  389 + spacing: "sm",
  390 + contents: [
  391 + {
  392 + type: "text",
  393 + text: "Place",
  394 + size: "sm",
  395 + color: "#AAAAAA",
  396 + flex: 1,
  397 + contents: [],
  398 + },
  399 + {
  400 + type: "text",
  401 + text: "7 Floor, No.3",
  402 + size: "sm",
  403 + color: "#666666",
  404 + flex: 4,
  405 + wrap: true,
  406 + contents: [],
  407 + },
  408 + ],
  409 + },
  410 + {
  411 + type: "box",
  412 + layout: "baseline",
  413 + spacing: "sm",
  414 + contents: [
  415 + {
  416 + type: "text",
  417 + text: "Seats",
  418 + size: "sm",
  419 + color: "#AAAAAA",
  420 + flex: 1,
  421 + contents: [],
  422 + },
  423 + {
  424 + type: "text",
  425 + text: "C Row, 18 Seat",
  426 + size: "sm",
  427 + color: "#666666",
  428 + flex: 4,
  429 + wrap: true,
  430 + contents: [],
  431 + },
  432 + ],
  433 + },
  434 + ],
  435 + },
  436 + {
  437 + type: "box",
  438 + layout: "vertical",
  439 + margin: "xxl",
  440 + contents: [
  441 + {
  442 + type: "spacer",
  443 + },
  444 + {
  445 + type: "image",
  446 + url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/linecorp_code_withborder.png",
  447 + size: "xl",
  448 + aspectMode: "cover",
  449 + },
  450 + {
  451 + type: "text",
  452 + text: "You can enter the theater by using this code instead of a ticket",
  453 + size: "xs",
  454 + color: "#AAAAAA",
  455 + margin: "xxl",
  456 + wrap: true,
  457 + contents: [],
  458 + },
  459 + ],
  460 + },
  461 + ],
  462 + },
  463 + },
  464 + },
  465 +
  466 +
  467 +
  468 + cat: {
  469 + type: "bubble",
  470 + direction: "ltr",
  471 + header: {
  472 + type: "box",
  473 + layout: "vertical",
  474 + contents: [
  475 + {
  476 + type: "text",
  477 + text: "แมว",
  478 + align: "center",
  479 + contents: [],
  480 + },
  481 + ],
  482 + },
  483 + hero: {
  484 + type: "image",
  485 + url: "https://static.trueplookpanya.com/tppy/member/m_545000_547500/545994/cms/images/2019-Q3/แมว9ชีวิต.jpg",
  486 + size: "full",
  487 + aspectRatio: "1.51:1",
  488 + aspectMode: "fit",
  489 + },
  490 + body: {
  491 + type: "box",
  492 + layout: "vertical",
  493 + contents: [
  494 + {
  495 + type: "text",
  496 + text: "คำอธิบาย",
  497 + align: "center",
  498 + contents: [],
  499 + },
  500 + ],
  501 + },
  502 + footer: {
  503 + type: "box",
  504 + layout: "horizontal",
  505 + contents: [
  506 + {
  507 + type: "button",
  508 + action: {
  509 + type: "uri",
  510 + label: "ดูรูปแมวชัดๆ",
  511 + uri: "https://static.trueplookpanya.com/tppy/member/m_545000_547500/545994/cms/images/2019-Q3/แมว9ชีวิต.jpg",
  512 + },
  513 + },
  514 + ],
  515 + },
  516 + },
  517 +
  518 + location: {
  519 + type: "text", // ①
  520 + text: "Select your favorite food category or send me your location!",
  521 + quickReply: {
  522 + // ②
  523 + items: [
  524 + {
  525 + type: "action", // ③
  526 + imageUrl: "https://example.com/sushi.png",
  527 + action: {
  528 + type: "message",
  529 + label: "Sushi",
  530 + text: "Sushi",
  531 + },
  532 + },
  533 + {
  534 + type: "action",
  535 + imageUrl: "https://example.com/tempura.png",
  536 + action: {
  537 + type: "message",
  538 + label: "Tempura",
  539 + text: "Tempura",
  540 + },
  541 + },
  542 + {
  543 + type: "action", // ④
  544 + action: {
  545 + type: "location",
  546 + label: "Send location",
  547 + },
  548 + },
  549 + ],
  550 + },
  551 + },
  552 + };
  553 +};
package-lock.json 0 → 100644
  1 +++ a/package-lock.json
@@ -0,0 +1,2374 @@ @@ -0,0 +1,2374 @@
  1 +{
  2 + "name": "line-bot-nodejs-starter",
  3 + "version": "1.0.0",
  4 + "lockfileVersion": 1,
  5 + "requires": true,
  6 + "dependencies": {
  7 + "@babel/code-frame": {
  8 + "version": "7.0.0",
  9 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
  10 + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
  11 + "dev": true,
  12 + "requires": {
  13 + "@babel/highlight": "^7.0.0"
  14 + }
  15 + },
  16 + "@babel/highlight": {
  17 + "version": "7.0.0",
  18 + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
  19 + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
  20 + "dev": true,
  21 + "requires": {
  22 + "chalk": "^2.0.0",
  23 + "esutils": "^2.0.2",
  24 + "js-tokens": "^4.0.0"
  25 + }
  26 + },
  27 + "@line/bot-sdk": {
  28 + "version": "6.2.1",
  29 + "resolved": "https://registry.npmjs.org/@line/bot-sdk/-/bot-sdk-6.2.1.tgz",
  30 + "integrity": "sha512-+x8fPv2DanpIR24/H4WAnMYCTYsm/yOxuumTGjlmddfv4IOKt6G5K9L9CXWrM/yOvsqpJe+kq/YsYQ+o8f7L6A==",
  31 + "requires": {
  32 + "@types/body-parser": "^1.16.8",
  33 + "@types/file-type": "^5.2.1",
  34 + "@types/node": "^7.0.31",
  35 + "axios": "^0.16.2",
  36 + "body-parser": "^1.18.2",
  37 + "file-type": "^7.2.0"
  38 + },
  39 + "dependencies": {
  40 + "axios": {
  41 + "version": "0.16.2",
  42 + "resolved": "https://registry.npmjs.org/axios/-/axios-0.16.2.tgz",
  43 + "integrity": "sha1-uk+S8XFn37q0CYN4VFS5rBScPG0=",
  44 + "requires": {
  45 + "follow-redirects": "^1.2.3",
  46 + "is-buffer": "^1.1.5"
  47 + }
  48 + }
  49 + }
  50 + },
  51 + "@types/body-parser": {
  52 + "version": "1.17.0",
  53 + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz",
  54 + "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==",
  55 + "requires": {
  56 + "@types/connect": "*",
  57 + "@types/node": "*"
  58 + }
  59 + },
  60 + "@types/connect": {
  61 + "version": "3.4.32",
  62 + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz",
  63 + "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==",
  64 + "requires": {
  65 + "@types/node": "*"
  66 + }
  67 + },
  68 + "@types/file-type": {
  69 + "version": "5.2.1",
  70 + "resolved": "https://registry.npmjs.org/@types/file-type/-/file-type-5.2.1.tgz",
  71 + "integrity": "sha512-Im0cJaIPJbbpuW91OrjXnqWPZCJK/tcFy2cFX+1qjG1gubgVZPPO9OVsTVAjotN4I1E6FAV0eIqt+rR8Y1c3iA==",
  72 + "requires": {
  73 + "@types/node": "*"
  74 + }
  75 + },
  76 + "@types/node": {
  77 + "version": "7.0.70",
  78 + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.70.tgz",
  79 + "integrity": "sha512-bAcW/1aM8/s5iFKhRpu/YJiQf/b1ZwnMRqqsWRCmAqEDQF2zY8Ez3Iu9AcZKFKc3vCJc8KJVpJ6Pn54sJ1BvXQ=="
  80 + },
  81 + "accepts": {
  82 + "version": "1.3.5",
  83 + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
  84 + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
  85 + "requires": {
  86 + "mime-types": "~2.1.18",
  87 + "negotiator": "0.6.1"
  88 + }
  89 + },
  90 + "acorn": {
  91 + "version": "5.7.2",
  92 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.2.tgz",
  93 + "integrity": "sha512-cJrKCNcr2kv8dlDnbw+JPUGjHZzo4myaxOLmpOX8a+rgX94YeTcTMv/LFJUSByRpc+i4GgVnnhLxvMu/2Y+rqw==",
  94 + "dev": true
  95 + },
  96 + "acorn-jsx": {
  97 + "version": "4.1.1",
  98 + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz",
  99 + "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==",
  100 + "dev": true,
  101 + "requires": {
  102 + "acorn": "^5.0.3"
  103 + }
  104 + },
  105 + "ajv": {
  106 + "version": "6.5.3",
  107 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz",
  108 + "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==",
  109 + "dev": true,
  110 + "requires": {
  111 + "fast-deep-equal": "^2.0.1",
  112 + "fast-json-stable-stringify": "^2.0.0",
  113 + "json-schema-traverse": "^0.4.1",
  114 + "uri-js": "^4.2.2"
  115 + }
  116 + },
  117 + "ajv-keywords": {
  118 + "version": "3.2.0",
  119 + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
  120 + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
  121 + "dev": true
  122 + },
  123 + "ansi-escapes": {
  124 + "version": "3.1.0",
  125 + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
  126 + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
  127 + "dev": true
  128 + },
  129 + "ansi-regex": {
  130 + "version": "3.0.0",
  131 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
  132 + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
  133 + "dev": true
  134 + },
  135 + "ansi-styles": {
  136 + "version": "3.2.1",
  137 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
  138 + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
  139 + "dev": true,
  140 + "requires": {
  141 + "color-convert": "^1.9.0"
  142 + }
  143 + },
  144 + "argparse": {
  145 + "version": "1.0.10",
  146 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
  147 + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
  148 + "dev": true,
  149 + "requires": {
  150 + "sprintf-js": "~1.0.2"
  151 + }
  152 + },
  153 + "array-flatten": {
  154 + "version": "1.1.1",
  155 + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
  156 + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
  157 + },
  158 + "array-union": {
  159 + "version": "1.0.2",
  160 + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
  161 + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
  162 + "dev": true,
  163 + "requires": {
  164 + "array-uniq": "^1.0.1"
  165 + }
  166 + },
  167 + "array-uniq": {
  168 + "version": "1.0.3",
  169 + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
  170 + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
  171 + "dev": true
  172 + },
  173 + "arrify": {
  174 + "version": "1.0.1",
  175 + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
  176 + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
  177 + "dev": true
  178 + },
  179 + "asn1": {
  180 + "version": "0.2.4",
  181 + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
  182 + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
  183 + "requires": {
  184 + "safer-buffer": "~2.1.0"
  185 + }
  186 + },
  187 + "assert-plus": {
  188 + "version": "1.0.0",
  189 + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
  190 + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
  191 + },
  192 + "assertion-error": {
  193 + "version": "1.1.0",
  194 + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
  195 + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw=="
  196 + },
  197 + "asynckit": {
  198 + "version": "0.4.0",
  199 + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
  200 + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
  201 + },
  202 + "aws-sign2": {
  203 + "version": "0.7.0",
  204 + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
  205 + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
  206 + },
  207 + "aws4": {
  208 + "version": "1.11.0",
  209 + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
  210 + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
  211 + },
  212 + "axios": {
  213 + "version": "0.23.0",
  214 + "resolved": "https://registry.npmjs.org/axios/-/axios-0.23.0.tgz",
  215 + "integrity": "sha512-NmvAE4i0YAv5cKq8zlDoPd1VLKAqX5oLuZKs8xkJa4qi6RGn0uhCYFjWtHHC9EM/MwOwYWOs53W+V0aqEXq1sg==",
  216 + "requires": {
  217 + "follow-redirects": "^1.14.4"
  218 + }
  219 + },
  220 + "balanced-match": {
  221 + "version": "1.0.0",
  222 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
  223 + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
  224 + "dev": true
  225 + },
  226 + "bcrypt-pbkdf": {
  227 + "version": "1.0.2",
  228 + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
  229 + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
  230 + "requires": {
  231 + "tweetnacl": "^0.14.3"
  232 + }
  233 + },
  234 + "blob": {
  235 + "version": "0.1.0",
  236 + "resolved": "https://registry.npmjs.org/blob/-/blob-0.1.0.tgz",
  237 + "integrity": "sha512-k+GwK+4Rj+MPNT4qu+y6+kHp+mPmmNd+28zdrIo69QM9UvypK5Vhcw7jnRiY4KaOMAiOdn0NtPQGTb+Ox1Dtng==",
  238 + "requires": {
  239 + "esm": "^3.2.25"
  240 + }
  241 + },
  242 + "body-parser": {
  243 + "version": "1.19.0",
  244 + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
  245 + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
  246 + "requires": {
  247 + "bytes": "3.1.0",
  248 + "content-type": "~1.0.4",
  249 + "debug": "2.6.9",
  250 + "depd": "~1.1.2",
  251 + "http-errors": "1.7.2",
  252 + "iconv-lite": "0.4.24",
  253 + "on-finished": "~2.3.0",
  254 + "qs": "6.7.0",
  255 + "raw-body": "2.4.0",
  256 + "type-is": "~1.6.17"
  257 + },
  258 + "dependencies": {
  259 + "bytes": {
  260 + "version": "3.1.0",
  261 + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
  262 + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
  263 + },
  264 + "debug": {
  265 + "version": "2.6.9",
  266 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  267 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  268 + "requires": {
  269 + "ms": "2.0.0"
  270 + }
  271 + },
  272 + "http-errors": {
  273 + "version": "1.7.2",
  274 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
  275 + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
  276 + "requires": {
  277 + "depd": "~1.1.2",
  278 + "inherits": "2.0.3",
  279 + "setprototypeof": "1.1.1",
  280 + "statuses": ">= 1.5.0 < 2",
  281 + "toidentifier": "1.0.0"
  282 + }
  283 + },
  284 + "mime-db": {
  285 + "version": "1.50.0",
  286 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz",
  287 + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A=="
  288 + },
  289 + "mime-types": {
  290 + "version": "2.1.33",
  291 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz",
  292 + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==",
  293 + "requires": {
  294 + "mime-db": "1.50.0"
  295 + }
  296 + },
  297 + "setprototypeof": {
  298 + "version": "1.1.1",
  299 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
  300 + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
  301 + },
  302 + "type-is": {
  303 + "version": "1.6.18",
  304 + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
  305 + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
  306 + "requires": {
  307 + "media-typer": "0.3.0",
  308 + "mime-types": "~2.1.24"
  309 + }
  310 + }
  311 + }
  312 + },
  313 + "brace-expansion": {
  314 + "version": "1.1.11",
  315 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
  316 + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
  317 + "dev": true,
  318 + "requires": {
  319 + "balanced-match": "^1.0.0",
  320 + "concat-map": "0.0.1"
  321 + }
  322 + },
  323 + "builtin-modules": {
  324 + "version": "1.1.1",
  325 + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
  326 + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
  327 + "dev": true
  328 + },
  329 + "bytes": {
  330 + "version": "3.0.0",
  331 + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
  332 + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
  333 + },
  334 + "caller-path": {
  335 + "version": "0.1.0",
  336 + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
  337 + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
  338 + "dev": true,
  339 + "requires": {
  340 + "callsites": "^0.2.0"
  341 + }
  342 + },
  343 + "callsites": {
  344 + "version": "0.2.0",
  345 + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
  346 + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
  347 + "dev": true
  348 + },
  349 + "caseless": {
  350 + "version": "0.12.0",
  351 + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
  352 + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
  353 + },
  354 + "chai": {
  355 + "version": "4.3.4",
  356 + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
  357 + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
  358 + "requires": {
  359 + "assertion-error": "^1.1.0",
  360 + "check-error": "^1.0.2",
  361 + "deep-eql": "^3.0.1",
  362 + "get-func-name": "^2.0.0",
  363 + "pathval": "^1.1.1",
  364 + "type-detect": "^4.0.5"
  365 + }
  366 + },
  367 + "chalk": {
  368 + "version": "2.4.1",
  369 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
  370 + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
  371 + "dev": true,
  372 + "requires": {
  373 + "ansi-styles": "^3.2.1",
  374 + "escape-string-regexp": "^1.0.5",
  375 + "supports-color": "^5.3.0"
  376 + }
  377 + },
  378 + "chardet": {
  379 + "version": "0.7.0",
  380 + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
  381 + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
  382 + "dev": true
  383 + },
  384 + "check-error": {
  385 + "version": "1.0.2",
  386 + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
  387 + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII="
  388 + },
  389 + "circular-json": {
  390 + "version": "0.3.3",
  391 + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
  392 + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
  393 + "dev": true
  394 + },
  395 + "cli-cursor": {
  396 + "version": "2.1.0",
  397 + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
  398 + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
  399 + "dev": true,
  400 + "requires": {
  401 + "restore-cursor": "^2.0.0"
  402 + }
  403 + },
  404 + "cli-width": {
  405 + "version": "2.2.0",
  406 + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
  407 + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
  408 + "dev": true
  409 + },
  410 + "color-convert": {
  411 + "version": "1.9.3",
  412 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
  413 + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
  414 + "dev": true,
  415 + "requires": {
  416 + "color-name": "1.1.3"
  417 + }
  418 + },
  419 + "color-name": {
  420 + "version": "1.1.3",
  421 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
  422 + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
  423 + "dev": true
  424 + },
  425 + "combined-stream": {
  426 + "version": "1.0.8",
  427 + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
  428 + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
  429 + "requires": {
  430 + "delayed-stream": "~1.0.0"
  431 + }
  432 + },
  433 + "concat-map": {
  434 + "version": "0.0.1",
  435 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
  436 + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
  437 + "dev": true
  438 + },
  439 + "contains-path": {
  440 + "version": "0.1.0",
  441 + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
  442 + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
  443 + "dev": true
  444 + },
  445 + "content-disposition": {
  446 + "version": "0.5.2",
  447 + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
  448 + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
  449 + },
  450 + "content-type": {
  451 + "version": "1.0.4",
  452 + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
  453 + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
  454 + },
  455 + "cookie": {
  456 + "version": "0.3.1",
  457 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
  458 + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
  459 + },
  460 + "cookie-signature": {
  461 + "version": "1.0.6",
  462 + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
  463 + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
  464 + },
  465 + "core-util-is": {
  466 + "version": "1.0.2",
  467 + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
  468 + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
  469 + },
  470 + "cross-spawn": {
  471 + "version": "6.0.5",
  472 + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
  473 + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
  474 + "dev": true,
  475 + "requires": {
  476 + "nice-try": "^1.0.4",
  477 + "path-key": "^2.0.1",
  478 + "semver": "^5.5.0",
  479 + "shebang-command": "^1.2.0",
  480 + "which": "^1.2.9"
  481 + }
  482 + },
  483 + "dashdash": {
  484 + "version": "1.14.1",
  485 + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
  486 + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
  487 + "requires": {
  488 + "assert-plus": "^1.0.0"
  489 + }
  490 + },
  491 + "debug": {
  492 + "version": "3.1.0",
  493 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
  494 + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
  495 + "dev": true,
  496 + "requires": {
  497 + "ms": "2.0.0"
  498 + }
  499 + },
  500 + "deep-eql": {
  501 + "version": "3.0.1",
  502 + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
  503 + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
  504 + "requires": {
  505 + "type-detect": "^4.0.0"
  506 + }
  507 + },
  508 + "deep-is": {
  509 + "version": "0.1.3",
  510 + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
  511 + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
  512 + "dev": true
  513 + },
  514 + "del": {
  515 + "version": "2.2.2",
  516 + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
  517 + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
  518 + "dev": true,
  519 + "requires": {
  520 + "globby": "^5.0.0",
  521 + "is-path-cwd": "^1.0.0",
  522 + "is-path-in-cwd": "^1.0.0",
  523 + "object-assign": "^4.0.1",
  524 + "pify": "^2.0.0",
  525 + "pinkie-promise": "^2.0.0",
  526 + "rimraf": "^2.2.8"
  527 + }
  528 + },
  529 + "delayed-stream": {
  530 + "version": "1.0.0",
  531 + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
  532 + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
  533 + },
  534 + "depd": {
  535 + "version": "1.1.2",
  536 + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
  537 + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
  538 + },
  539 + "destroy": {
  540 + "version": "1.0.4",
  541 + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
  542 + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
  543 + },
  544 + "doctrine": {
  545 + "version": "2.1.0",
  546 + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
  547 + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
  548 + "dev": true,
  549 + "requires": {
  550 + "esutils": "^2.0.2"
  551 + }
  552 + },
  553 + "ecc-jsbn": {
  554 + "version": "0.1.2",
  555 + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
  556 + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
  557 + "requires": {
  558 + "jsbn": "~0.1.0",
  559 + "safer-buffer": "^2.1.0"
  560 + }
  561 + },
  562 + "ee-first": {
  563 + "version": "1.1.1",
  564 + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
  565 + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
  566 + },
  567 + "encodeurl": {
  568 + "version": "1.0.2",
  569 + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
  570 + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
  571 + },
  572 + "error-ex": {
  573 + "version": "1.3.2",
  574 + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
  575 + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
  576 + "dev": true,
  577 + "requires": {
  578 + "is-arrayish": "^0.2.1"
  579 + }
  580 + },
  581 + "escape-html": {
  582 + "version": "1.0.3",
  583 + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
  584 + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
  585 + },
  586 + "escape-string-regexp": {
  587 + "version": "1.0.5",
  588 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
  589 + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
  590 + "dev": true
  591 + },
  592 + "eslint": {
  593 + "version": "5.5.0",
  594 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.5.0.tgz",
  595 + "integrity": "sha512-m+az4vYehIJgl1Z0gb25KnFXeqQRdNreYsei1jdvkd9bB+UNQD3fsuiC2AWSQ56P+/t++kFSINZXFbfai+krOw==",
  596 + "dev": true,
  597 + "requires": {
  598 + "@babel/code-frame": "^7.0.0",
  599 + "ajv": "^6.5.3",
  600 + "chalk": "^2.1.0",
  601 + "cross-spawn": "^6.0.5",
  602 + "debug": "^3.1.0",
  603 + "doctrine": "^2.1.0",
  604 + "eslint-scope": "^4.0.0",
  605 + "eslint-utils": "^1.3.1",
  606 + "eslint-visitor-keys": "^1.0.0",
  607 + "espree": "^4.0.0",
  608 + "esquery": "^1.0.1",
  609 + "esutils": "^2.0.2",
  610 + "file-entry-cache": "^2.0.0",
  611 + "functional-red-black-tree": "^1.0.1",
  612 + "glob": "^7.1.2",
  613 + "globals": "^11.7.0",
  614 + "ignore": "^4.0.6",
  615 + "imurmurhash": "^0.1.4",
  616 + "inquirer": "^6.1.0",
  617 + "is-resolvable": "^1.1.0",
  618 + "js-yaml": "^3.12.0",
  619 + "json-stable-stringify-without-jsonify": "^1.0.1",
  620 + "levn": "^0.3.0",
  621 + "lodash": "^4.17.5",
  622 + "minimatch": "^3.0.4",
  623 + "mkdirp": "^0.5.1",
  624 + "natural-compare": "^1.4.0",
  625 + "optionator": "^0.8.2",
  626 + "path-is-inside": "^1.0.2",
  627 + "pluralize": "^7.0.0",
  628 + "progress": "^2.0.0",
  629 + "regexpp": "^2.0.0",
  630 + "require-uncached": "^1.0.3",
  631 + "semver": "^5.5.1",
  632 + "strip-ansi": "^4.0.0",
  633 + "strip-json-comments": "^2.0.1",
  634 + "table": "^4.0.3",
  635 + "text-table": "^0.2.0"
  636 + }
  637 + },
  638 + "eslint-config-standard": {
  639 + "version": "12.0.0",
  640 + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz",
  641 + "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==",
  642 + "dev": true
  643 + },
  644 + "eslint-import-resolver-node": {
  645 + "version": "0.3.2",
  646 + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
  647 + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
  648 + "dev": true,
  649 + "requires": {
  650 + "debug": "^2.6.9",
  651 + "resolve": "^1.5.0"
  652 + },
  653 + "dependencies": {
  654 + "debug": {
  655 + "version": "2.6.9",
  656 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  657 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  658 + "dev": true,
  659 + "requires": {
  660 + "ms": "2.0.0"
  661 + }
  662 + }
  663 + }
  664 + },
  665 + "eslint-module-utils": {
  666 + "version": "2.2.0",
  667 + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz",
  668 + "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=",
  669 + "dev": true,
  670 + "requires": {
  671 + "debug": "^2.6.8",
  672 + "pkg-dir": "^1.0.0"
  673 + },
  674 + "dependencies": {
  675 + "debug": {
  676 + "version": "2.6.9",
  677 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  678 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  679 + "dev": true,
  680 + "requires": {
  681 + "ms": "2.0.0"
  682 + }
  683 + }
  684 + }
  685 + },
  686 + "eslint-plugin-es": {
  687 + "version": "1.3.1",
  688 + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.3.1.tgz",
  689 + "integrity": "sha512-9XcVyZiQRVeFjqHw8qHNDAZcQLqaHlOGGpeYqzYh8S4JYCWTCO3yzyen8yVmA5PratfzTRWDwCOFphtDEG+w/w==",
  690 + "dev": true,
  691 + "requires": {
  692 + "eslint-utils": "^1.3.0",
  693 + "regexpp": "^2.0.0"
  694 + }
  695 + },
  696 + "eslint-plugin-import": {
  697 + "version": "2.14.0",
  698 + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz",
  699 + "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==",
  700 + "dev": true,
  701 + "requires": {
  702 + "contains-path": "^0.1.0",
  703 + "debug": "^2.6.8",
  704 + "doctrine": "1.5.0",
  705 + "eslint-import-resolver-node": "^0.3.1",
  706 + "eslint-module-utils": "^2.2.0",
  707 + "has": "^1.0.1",
  708 + "lodash": "^4.17.4",
  709 + "minimatch": "^3.0.3",
  710 + "read-pkg-up": "^2.0.0",
  711 + "resolve": "^1.6.0"
  712 + },
  713 + "dependencies": {
  714 + "debug": {
  715 + "version": "2.6.9",
  716 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  717 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  718 + "dev": true,
  719 + "requires": {
  720 + "ms": "2.0.0"
  721 + }
  722 + },
  723 + "doctrine": {
  724 + "version": "1.5.0",
  725 + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
  726 + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
  727 + "dev": true,
  728 + "requires": {
  729 + "esutils": "^2.0.2",
  730 + "isarray": "^1.0.0"
  731 + }
  732 + }
  733 + }
  734 + },
  735 + "eslint-plugin-node": {
  736 + "version": "7.0.1",
  737 + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz",
  738 + "integrity": "sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==",
  739 + "dev": true,
  740 + "requires": {
  741 + "eslint-plugin-es": "^1.3.1",
  742 + "eslint-utils": "^1.3.1",
  743 + "ignore": "^4.0.2",
  744 + "minimatch": "^3.0.4",
  745 + "resolve": "^1.8.1",
  746 + "semver": "^5.5.0"
  747 + }
  748 + },
  749 + "eslint-plugin-promise": {
  750 + "version": "4.0.1",
  751 + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz",
  752 + "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==",
  753 + "dev": true
  754 + },
  755 + "eslint-plugin-standard": {
  756 + "version": "4.0.0",
  757 + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz",
  758 + "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==",
  759 + "dev": true
  760 + },
  761 + "eslint-scope": {
  762 + "version": "4.0.0",
  763 + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
  764 + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==",
  765 + "dev": true,
  766 + "requires": {
  767 + "esrecurse": "^4.1.0",
  768 + "estraverse": "^4.1.1"
  769 + }
  770 + },
  771 + "eslint-utils": {
  772 + "version": "1.3.1",
  773 + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz",
  774 + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==",
  775 + "dev": true
  776 + },
  777 + "eslint-visitor-keys": {
  778 + "version": "1.0.0",
  779 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
  780 + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
  781 + "dev": true
  782 + },
  783 + "esm": {
  784 + "version": "3.2.25",
  785 + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
  786 + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA=="
  787 + },
  788 + "espree": {
  789 + "version": "4.0.0",
  790 + "resolved": "https://registry.npmjs.org/espree/-/espree-4.0.0.tgz",
  791 + "integrity": "sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg==",
  792 + "dev": true,
  793 + "requires": {
  794 + "acorn": "^5.6.0",
  795 + "acorn-jsx": "^4.1.1"
  796 + }
  797 + },
  798 + "esprima": {
  799 + "version": "4.0.1",
  800 + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
  801 + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
  802 + "dev": true
  803 + },
  804 + "esquery": {
  805 + "version": "1.0.1",
  806 + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
  807 + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
  808 + "dev": true,
  809 + "requires": {
  810 + "estraverse": "^4.0.0"
  811 + }
  812 + },
  813 + "esrecurse": {
  814 + "version": "4.2.1",
  815 + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
  816 + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
  817 + "dev": true,
  818 + "requires": {
  819 + "estraverse": "^4.1.0"
  820 + }
  821 + },
  822 + "estraverse": {
  823 + "version": "4.2.0",
  824 + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
  825 + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
  826 + "dev": true
  827 + },
  828 + "esutils": {
  829 + "version": "2.0.2",
  830 + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
  831 + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
  832 + "dev": true
  833 + },
  834 + "etag": {
  835 + "version": "1.8.1",
  836 + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
  837 + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
  838 + },
  839 + "express": {
  840 + "version": "4.16.3",
  841 + "resolved": "http://registry.npmjs.org/express/-/express-4.16.3.tgz",
  842 + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",
  843 + "requires": {
  844 + "accepts": "~1.3.5",
  845 + "array-flatten": "1.1.1",
  846 + "body-parser": "1.18.2",
  847 + "content-disposition": "0.5.2",
  848 + "content-type": "~1.0.4",
  849 + "cookie": "0.3.1",
  850 + "cookie-signature": "1.0.6",
  851 + "debug": "2.6.9",
  852 + "depd": "~1.1.2",
  853 + "encodeurl": "~1.0.2",
  854 + "escape-html": "~1.0.3",
  855 + "etag": "~1.8.1",
  856 + "finalhandler": "1.1.1",
  857 + "fresh": "0.5.2",
  858 + "merge-descriptors": "1.0.1",
  859 + "methods": "~1.1.2",
  860 + "on-finished": "~2.3.0",
  861 + "parseurl": "~1.3.2",
  862 + "path-to-regexp": "0.1.7",
  863 + "proxy-addr": "~2.0.3",
  864 + "qs": "6.5.1",
  865 + "range-parser": "~1.2.0",
  866 + "safe-buffer": "5.1.1",
  867 + "send": "0.16.2",
  868 + "serve-static": "1.13.2",
  869 + "setprototypeof": "1.1.0",
  870 + "statuses": "~1.4.0",
  871 + "type-is": "~1.6.16",
  872 + "utils-merge": "1.0.1",
  873 + "vary": "~1.1.2"
  874 + },
  875 + "dependencies": {
  876 + "body-parser": {
  877 + "version": "1.18.2",
  878 + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
  879 + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
  880 + "requires": {
  881 + "bytes": "3.0.0",
  882 + "content-type": "~1.0.4",
  883 + "debug": "2.6.9",
  884 + "depd": "~1.1.1",
  885 + "http-errors": "~1.6.2",
  886 + "iconv-lite": "0.4.19",
  887 + "on-finished": "~2.3.0",
  888 + "qs": "6.5.1",
  889 + "raw-body": "2.3.2",
  890 + "type-is": "~1.6.15"
  891 + }
  892 + },
  893 + "debug": {
  894 + "version": "2.6.9",
  895 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  896 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  897 + "requires": {
  898 + "ms": "2.0.0"
  899 + }
  900 + },
  901 + "iconv-lite": {
  902 + "version": "0.4.19",
  903 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
  904 + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
  905 + },
  906 + "qs": {
  907 + "version": "6.5.1",
  908 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
  909 + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
  910 + },
  911 + "raw-body": {
  912 + "version": "2.3.2",
  913 + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
  914 + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
  915 + "requires": {
  916 + "bytes": "3.0.0",
  917 + "http-errors": "1.6.2",
  918 + "iconv-lite": "0.4.19",
  919 + "unpipe": "1.0.0"
  920 + },
  921 + "dependencies": {
  922 + "depd": {
  923 + "version": "1.1.1",
  924 + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
  925 + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
  926 + },
  927 + "http-errors": {
  928 + "version": "1.6.2",
  929 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
  930 + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
  931 + "requires": {
  932 + "depd": "1.1.1",
  933 + "inherits": "2.0.3",
  934 + "setprototypeof": "1.0.3",
  935 + "statuses": ">= 1.3.1 < 2"
  936 + }
  937 + },
  938 + "setprototypeof": {
  939 + "version": "1.0.3",
  940 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
  941 + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
  942 + }
  943 + }
  944 + },
  945 + "statuses": {
  946 + "version": "1.4.0",
  947 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
  948 + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
  949 + }
  950 + }
  951 + },
  952 + "extend": {
  953 + "version": "3.0.2",
  954 + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
  955 + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
  956 + },
  957 + "external-editor": {
  958 + "version": "3.0.3",
  959 + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
  960 + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
  961 + "dev": true,
  962 + "requires": {
  963 + "chardet": "^0.7.0",
  964 + "iconv-lite": "^0.4.24",
  965 + "tmp": "^0.0.33"
  966 + }
  967 + },
  968 + "extsprintf": {
  969 + "version": "1.3.0",
  970 + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
  971 + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
  972 + },
  973 + "fast-deep-equal": {
  974 + "version": "2.0.1",
  975 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
  976 + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
  977 + "dev": true
  978 + },
  979 + "fast-json-stable-stringify": {
  980 + "version": "2.0.0",
  981 + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
  982 + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
  983 + },
  984 + "fast-levenshtein": {
  985 + "version": "2.0.6",
  986 + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
  987 + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
  988 + "dev": true
  989 + },
  990 + "figures": {
  991 + "version": "2.0.0",
  992 + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
  993 + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
  994 + "dev": true,
  995 + "requires": {
  996 + "escape-string-regexp": "^1.0.5"
  997 + }
  998 + },
  999 + "file-entry-cache": {
  1000 + "version": "2.0.0",
  1001 + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
  1002 + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
  1003 + "dev": true,
  1004 + "requires": {
  1005 + "flat-cache": "^1.2.1",
  1006 + "object-assign": "^4.0.1"
  1007 + }
  1008 + },
  1009 + "file-saver": {
  1010 + "version": "2.0.5",
  1011 + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
  1012 + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
  1013 + },
  1014 + "file-type": {
  1015 + "version": "7.7.1",
  1016 + "resolved": "https://registry.npmjs.org/file-type/-/file-type-7.7.1.tgz",
  1017 + "integrity": "sha512-bTrKkzzZI6wH+NXhyD3SOXtb2zXTw2SbwI2RxUlRcXVsnN7jNL5hJzVQLYv7FOQhxFkK4XWdAflEaWFpaLLWpQ=="
  1018 + },
  1019 + "finalhandler": {
  1020 + "version": "1.1.1",
  1021 + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
  1022 + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
  1023 + "requires": {
  1024 + "debug": "2.6.9",
  1025 + "encodeurl": "~1.0.2",
  1026 + "escape-html": "~1.0.3",
  1027 + "on-finished": "~2.3.0",
  1028 + "parseurl": "~1.3.2",
  1029 + "statuses": "~1.4.0",
  1030 + "unpipe": "~1.0.0"
  1031 + },
  1032 + "dependencies": {
  1033 + "debug": {
  1034 + "version": "2.6.9",
  1035 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  1036 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  1037 + "requires": {
  1038 + "ms": "2.0.0"
  1039 + }
  1040 + },
  1041 + "statuses": {
  1042 + "version": "1.4.0",
  1043 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
  1044 + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
  1045 + }
  1046 + }
  1047 + },
  1048 + "find-up": {
  1049 + "version": "1.1.2",
  1050 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
  1051 + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
  1052 + "dev": true,
  1053 + "requires": {
  1054 + "path-exists": "^2.0.0",
  1055 + "pinkie-promise": "^2.0.0"
  1056 + }
  1057 + },
  1058 + "flat-cache": {
  1059 + "version": "1.3.0",
  1060 + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
  1061 + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
  1062 + "dev": true,
  1063 + "requires": {
  1064 + "circular-json": "^0.3.1",
  1065 + "del": "^2.0.2",
  1066 + "graceful-fs": "^4.1.2",
  1067 + "write": "^0.2.1"
  1068 + }
  1069 + },
  1070 + "follow-redirects": {
  1071 + "version": "1.14.4",
  1072 + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz",
  1073 + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g=="
  1074 + },
  1075 + "forever-agent": {
  1076 + "version": "0.6.1",
  1077 + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
  1078 + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
  1079 + },
  1080 + "form-data": {
  1081 + "version": "2.3.3",
  1082 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
  1083 + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
  1084 + "requires": {
  1085 + "asynckit": "^0.4.0",
  1086 + "combined-stream": "^1.0.6",
  1087 + "mime-types": "^2.1.12"
  1088 + }
  1089 + },
  1090 + "forwarded": {
  1091 + "version": "0.1.2",
  1092 + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
  1093 + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
  1094 + },
  1095 + "fresh": {
  1096 + "version": "0.5.2",
  1097 + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
  1098 + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
  1099 + },
  1100 + "fs.realpath": {
  1101 + "version": "1.0.0",
  1102 + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
  1103 + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
  1104 + "dev": true
  1105 + },
  1106 + "function-bind": {
  1107 + "version": "1.1.1",
  1108 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
  1109 + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
  1110 + "dev": true
  1111 + },
  1112 + "functional-red-black-tree": {
  1113 + "version": "1.0.1",
  1114 + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
  1115 + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
  1116 + "dev": true
  1117 + },
  1118 + "get-func-name": {
  1119 + "version": "2.0.0",
  1120 + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
  1121 + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE="
  1122 + },
  1123 + "getpass": {
  1124 + "version": "0.1.7",
  1125 + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
  1126 + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
  1127 + "requires": {
  1128 + "assert-plus": "^1.0.0"
  1129 + }
  1130 + },
  1131 + "glob": {
  1132 + "version": "7.1.3",
  1133 + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
  1134 + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
  1135 + "dev": true,
  1136 + "requires": {
  1137 + "fs.realpath": "^1.0.0",
  1138 + "inflight": "^1.0.4",
  1139 + "inherits": "2",
  1140 + "minimatch": "^3.0.4",
  1141 + "once": "^1.3.0",
  1142 + "path-is-absolute": "^1.0.0"
  1143 + }
  1144 + },
  1145 + "globals": {
  1146 + "version": "11.7.0",
  1147 + "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz",
  1148 + "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==",
  1149 + "dev": true
  1150 + },
  1151 + "globby": {
  1152 + "version": "5.0.0",
  1153 + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
  1154 + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
  1155 + "dev": true,
  1156 + "requires": {
  1157 + "array-union": "^1.0.1",
  1158 + "arrify": "^1.0.0",
  1159 + "glob": "^7.0.3",
  1160 + "object-assign": "^4.0.1",
  1161 + "pify": "^2.0.0",
  1162 + "pinkie-promise": "^2.0.0"
  1163 + }
  1164 + },
  1165 + "graceful-fs": {
  1166 + "version": "4.1.11",
  1167 + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
  1168 + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
  1169 + "dev": true
  1170 + },
  1171 + "har-schema": {
  1172 + "version": "2.0.0",
  1173 + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
  1174 + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
  1175 + },
  1176 + "har-validator": {
  1177 + "version": "5.1.5",
  1178 + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
  1179 + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
  1180 + "requires": {
  1181 + "ajv": "^6.12.3",
  1182 + "har-schema": "^2.0.0"
  1183 + },
  1184 + "dependencies": {
  1185 + "ajv": {
  1186 + "version": "6.12.6",
  1187 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
  1188 + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
  1189 + "requires": {
  1190 + "fast-deep-equal": "^3.1.1",
  1191 + "fast-json-stable-stringify": "^2.0.0",
  1192 + "json-schema-traverse": "^0.4.1",
  1193 + "uri-js": "^4.2.2"
  1194 + }
  1195 + },
  1196 + "fast-deep-equal": {
  1197 + "version": "3.1.3",
  1198 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
  1199 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
  1200 + }
  1201 + }
  1202 + },
  1203 + "has": {
  1204 + "version": "1.0.3",
  1205 + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
  1206 + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
  1207 + "dev": true,
  1208 + "requires": {
  1209 + "function-bind": "^1.1.1"
  1210 + }
  1211 + },
  1212 + "has-flag": {
  1213 + "version": "3.0.0",
  1214 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
  1215 + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
  1216 + "dev": true
  1217 + },
  1218 + "hosted-git-info": {
  1219 + "version": "2.7.1",
  1220 + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
  1221 + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
  1222 + "dev": true
  1223 + },
  1224 + "http-errors": {
  1225 + "version": "1.6.3",
  1226 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
  1227 + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
  1228 + "requires": {
  1229 + "depd": "~1.1.2",
  1230 + "inherits": "2.0.3",
  1231 + "setprototypeof": "1.1.0",
  1232 + "statuses": ">= 1.4.0 < 2"
  1233 + }
  1234 + },
  1235 + "http-signature": {
  1236 + "version": "1.2.0",
  1237 + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
  1238 + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
  1239 + "requires": {
  1240 + "assert-plus": "^1.0.0",
  1241 + "jsprim": "^1.2.2",
  1242 + "sshpk": "^1.7.0"
  1243 + }
  1244 + },
  1245 + "iconv-lite": {
  1246 + "version": "0.4.24",
  1247 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
  1248 + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
  1249 + "requires": {
  1250 + "safer-buffer": ">= 2.1.2 < 3"
  1251 + }
  1252 + },
  1253 + "ignore": {
  1254 + "version": "4.0.6",
  1255 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
  1256 + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
  1257 + "dev": true
  1258 + },
  1259 + "imurmurhash": {
  1260 + "version": "0.1.4",
  1261 + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
  1262 + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
  1263 + "dev": true
  1264 + },
  1265 + "inflight": {
  1266 + "version": "1.0.6",
  1267 + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
  1268 + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
  1269 + "dev": true,
  1270 + "requires": {
  1271 + "once": "^1.3.0",
  1272 + "wrappy": "1"
  1273 + }
  1274 + },
  1275 + "inherits": {
  1276 + "version": "2.0.3",
  1277 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
  1278 + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
  1279 + },
  1280 + "inquirer": {
  1281 + "version": "6.2.0",
  1282 + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz",
  1283 + "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==",
  1284 + "dev": true,
  1285 + "requires": {
  1286 + "ansi-escapes": "^3.0.0",
  1287 + "chalk": "^2.0.0",
  1288 + "cli-cursor": "^2.1.0",
  1289 + "cli-width": "^2.0.0",
  1290 + "external-editor": "^3.0.0",
  1291 + "figures": "^2.0.0",
  1292 + "lodash": "^4.17.10",
  1293 + "mute-stream": "0.0.7",
  1294 + "run-async": "^2.2.0",
  1295 + "rxjs": "^6.1.0",
  1296 + "string-width": "^2.1.0",
  1297 + "strip-ansi": "^4.0.0",
  1298 + "through": "^2.3.6"
  1299 + }
  1300 + },
  1301 + "ipaddr.js": {
  1302 + "version": "1.8.0",
  1303 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
  1304 + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
  1305 + },
  1306 + "is-arrayish": {
  1307 + "version": "0.2.1",
  1308 + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
  1309 + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
  1310 + "dev": true
  1311 + },
  1312 + "is-buffer": {
  1313 + "version": "1.1.6",
  1314 + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
  1315 + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
  1316 + },
  1317 + "is-builtin-module": {
  1318 + "version": "1.0.0",
  1319 + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
  1320 + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
  1321 + "dev": true,
  1322 + "requires": {
  1323 + "builtin-modules": "^1.0.0"
  1324 + }
  1325 + },
  1326 + "is-fullwidth-code-point": {
  1327 + "version": "2.0.0",
  1328 + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
  1329 + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
  1330 + "dev": true
  1331 + },
  1332 + "is-path-cwd": {
  1333 + "version": "1.0.0",
  1334 + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
  1335 + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
  1336 + "dev": true
  1337 + },
  1338 + "is-path-in-cwd": {
  1339 + "version": "1.0.1",
  1340 + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
  1341 + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
  1342 + "dev": true,
  1343 + "requires": {
  1344 + "is-path-inside": "^1.0.0"
  1345 + }
  1346 + },
  1347 + "is-path-inside": {
  1348 + "version": "1.0.1",
  1349 + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
  1350 + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
  1351 + "dev": true,
  1352 + "requires": {
  1353 + "path-is-inside": "^1.0.1"
  1354 + }
  1355 + },
  1356 + "is-promise": {
  1357 + "version": "2.1.0",
  1358 + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
  1359 + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
  1360 + "dev": true
  1361 + },
  1362 + "is-resolvable": {
  1363 + "version": "1.1.0",
  1364 + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
  1365 + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
  1366 + "dev": true
  1367 + },
  1368 + "is-typedarray": {
  1369 + "version": "1.0.0",
  1370 + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
  1371 + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
  1372 + },
  1373 + "isarray": {
  1374 + "version": "1.0.0",
  1375 + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
  1376 + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
  1377 + "dev": true
  1378 + },
  1379 + "isexe": {
  1380 + "version": "2.0.0",
  1381 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
  1382 + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
  1383 + "dev": true
  1384 + },
  1385 + "isstream": {
  1386 + "version": "0.1.2",
  1387 + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
  1388 + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
  1389 + },
  1390 + "js-tokens": {
  1391 + "version": "4.0.0",
  1392 + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
  1393 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
  1394 + "dev": true
  1395 + },
  1396 + "js-yaml": {
  1397 + "version": "3.12.0",
  1398 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
  1399 + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
  1400 + "dev": true,
  1401 + "requires": {
  1402 + "argparse": "^1.0.7",
  1403 + "esprima": "^4.0.0"
  1404 + }
  1405 + },
  1406 + "jsbn": {
  1407 + "version": "0.1.1",
  1408 + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
  1409 + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
  1410 + },
  1411 + "json-schema": {
  1412 + "version": "0.2.3",
  1413 + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
  1414 + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
  1415 + },
  1416 + "json-schema-traverse": {
  1417 + "version": "0.4.1",
  1418 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
  1419 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
  1420 + },
  1421 + "json-stable-stringify-without-jsonify": {
  1422 + "version": "1.0.1",
  1423 + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
  1424 + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
  1425 + "dev": true
  1426 + },
  1427 + "json-stringify-safe": {
  1428 + "version": "5.0.1",
  1429 + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
  1430 + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
  1431 + },
  1432 + "jsprim": {
  1433 + "version": "1.4.1",
  1434 + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
  1435 + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
  1436 + "requires": {
  1437 + "assert-plus": "1.0.0",
  1438 + "extsprintf": "1.3.0",
  1439 + "json-schema": "0.2.3",
  1440 + "verror": "1.10.0"
  1441 + }
  1442 + },
  1443 + "levn": {
  1444 + "version": "0.3.0",
  1445 + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
  1446 + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
  1447 + "dev": true,
  1448 + "requires": {
  1449 + "prelude-ls": "~1.1.2",
  1450 + "type-check": "~0.3.2"
  1451 + }
  1452 + },
  1453 + "load-json-file": {
  1454 + "version": "2.0.0",
  1455 + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
  1456 + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
  1457 + "dev": true,
  1458 + "requires": {
  1459 + "graceful-fs": "^4.1.2",
  1460 + "parse-json": "^2.2.0",
  1461 + "pify": "^2.0.0",
  1462 + "strip-bom": "^3.0.0"
  1463 + }
  1464 + },
  1465 + "locate-path": {
  1466 + "version": "2.0.0",
  1467 + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
  1468 + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
  1469 + "dev": true,
  1470 + "requires": {
  1471 + "p-locate": "^2.0.0",
  1472 + "path-exists": "^3.0.0"
  1473 + },
  1474 + "dependencies": {
  1475 + "path-exists": {
  1476 + "version": "3.0.0",
  1477 + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
  1478 + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
  1479 + "dev": true
  1480 + }
  1481 + }
  1482 + },
  1483 + "lodash": {
  1484 + "version": "4.17.10",
  1485 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
  1486 + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
  1487 + "dev": true
  1488 + },
  1489 + "media-typer": {
  1490 + "version": "0.3.0",
  1491 + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
  1492 + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
  1493 + },
  1494 + "merge-descriptors": {
  1495 + "version": "1.0.1",
  1496 + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
  1497 + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
  1498 + },
  1499 + "methods": {
  1500 + "version": "1.1.2",
  1501 + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
  1502 + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
  1503 + },
  1504 + "mime": {
  1505 + "version": "1.4.1",
  1506 + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
  1507 + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
  1508 + },
  1509 + "mime-db": {
  1510 + "version": "1.36.0",
  1511 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
  1512 + "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw=="
  1513 + },
  1514 + "mime-types": {
  1515 + "version": "2.1.20",
  1516 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz",
  1517 + "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==",
  1518 + "requires": {
  1519 + "mime-db": "~1.36.0"
  1520 + }
  1521 + },
  1522 + "mimic-fn": {
  1523 + "version": "1.2.0",
  1524 + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
  1525 + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
  1526 + "dev": true
  1527 + },
  1528 + "minimatch": {
  1529 + "version": "3.0.4",
  1530 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
  1531 + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
  1532 + "dev": true,
  1533 + "requires": {
  1534 + "brace-expansion": "^1.1.7"
  1535 + }
  1536 + },
  1537 + "minimist": {
  1538 + "version": "0.0.8",
  1539 + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
  1540 + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
  1541 + "dev": true
  1542 + },
  1543 + "mkdirp": {
  1544 + "version": "0.5.1",
  1545 + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
  1546 + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
  1547 + "dev": true,
  1548 + "requires": {
  1549 + "minimist": "0.0.8"
  1550 + }
  1551 + },
  1552 + "moment": {
  1553 + "version": "2.29.1",
  1554 + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
  1555 + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
  1556 + },
  1557 + "ms": {
  1558 + "version": "2.0.0",
  1559 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
  1560 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
  1561 + },
  1562 + "mute-stream": {
  1563 + "version": "0.0.7",
  1564 + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
  1565 + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
  1566 + "dev": true
  1567 + },
  1568 + "natural-compare": {
  1569 + "version": "1.4.0",
  1570 + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
  1571 + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
  1572 + "dev": true
  1573 + },
  1574 + "negotiator": {
  1575 + "version": "0.6.1",
  1576 + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
  1577 + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
  1578 + },
  1579 + "nice-try": {
  1580 + "version": "1.0.5",
  1581 + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
  1582 + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
  1583 + "dev": true
  1584 + },
  1585 + "normalize-package-data": {
  1586 + "version": "2.4.0",
  1587 + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
  1588 + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
  1589 + "dev": true,
  1590 + "requires": {
  1591 + "hosted-git-info": "^2.1.4",
  1592 + "is-builtin-module": "^1.0.0",
  1593 + "semver": "2 || 3 || 4 || 5",
  1594 + "validate-npm-package-license": "^3.0.1"
  1595 + }
  1596 + },
  1597 + "oauth-sign": {
  1598 + "version": "0.9.0",
  1599 + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
  1600 + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
  1601 + },
  1602 + "object-assign": {
  1603 + "version": "4.1.1",
  1604 + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
  1605 + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
  1606 + "dev": true
  1607 + },
  1608 + "on-finished": {
  1609 + "version": "2.3.0",
  1610 + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
  1611 + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
  1612 + "requires": {
  1613 + "ee-first": "1.1.1"
  1614 + }
  1615 + },
  1616 + "once": {
  1617 + "version": "1.4.0",
  1618 + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
  1619 + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
  1620 + "dev": true,
  1621 + "requires": {
  1622 + "wrappy": "1"
  1623 + }
  1624 + },
  1625 + "onetime": {
  1626 + "version": "2.0.1",
  1627 + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
  1628 + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
  1629 + "dev": true,
  1630 + "requires": {
  1631 + "mimic-fn": "^1.0.0"
  1632 + }
  1633 + },
  1634 + "optionator": {
  1635 + "version": "0.8.2",
  1636 + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
  1637 + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
  1638 + "dev": true,
  1639 + "requires": {
  1640 + "deep-is": "~0.1.3",
  1641 + "fast-levenshtein": "~2.0.4",
  1642 + "levn": "~0.3.0",
  1643 + "prelude-ls": "~1.1.2",
  1644 + "type-check": "~0.3.2",
  1645 + "wordwrap": "~1.0.0"
  1646 + }
  1647 + },
  1648 + "os-tmpdir": {
  1649 + "version": "1.0.2",
  1650 + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
  1651 + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
  1652 + "dev": true
  1653 + },
  1654 + "p-limit": {
  1655 + "version": "1.3.0",
  1656 + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
  1657 + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
  1658 + "dev": true,
  1659 + "requires": {
  1660 + "p-try": "^1.0.0"
  1661 + }
  1662 + },
  1663 + "p-locate": {
  1664 + "version": "2.0.0",
  1665 + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
  1666 + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
  1667 + "dev": true,
  1668 + "requires": {
  1669 + "p-limit": "^1.1.0"
  1670 + }
  1671 + },
  1672 + "p-try": {
  1673 + "version": "1.0.0",
  1674 + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
  1675 + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
  1676 + "dev": true
  1677 + },
  1678 + "parse-json": {
  1679 + "version": "2.2.0",
  1680 + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
  1681 + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
  1682 + "dev": true,
  1683 + "requires": {
  1684 + "error-ex": "^1.2.0"
  1685 + }
  1686 + },
  1687 + "parseurl": {
  1688 + "version": "1.3.2",
  1689 + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
  1690 + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
  1691 + },
  1692 + "path-exists": {
  1693 + "version": "2.1.0",
  1694 + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
  1695 + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
  1696 + "dev": true,
  1697 + "requires": {
  1698 + "pinkie-promise": "^2.0.0"
  1699 + }
  1700 + },
  1701 + "path-is-absolute": {
  1702 + "version": "1.0.1",
  1703 + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
  1704 + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
  1705 + "dev": true
  1706 + },
  1707 + "path-is-inside": {
  1708 + "version": "1.0.2",
  1709 + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
  1710 + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
  1711 + "dev": true
  1712 + },
  1713 + "path-key": {
  1714 + "version": "2.0.1",
  1715 + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
  1716 + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
  1717 + "dev": true
  1718 + },
  1719 + "path-parse": {
  1720 + "version": "1.0.6",
  1721 + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
  1722 + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
  1723 + "dev": true
  1724 + },
  1725 + "path-to-regexp": {
  1726 + "version": "0.1.7",
  1727 + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
  1728 + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
  1729 + },
  1730 + "path-type": {
  1731 + "version": "2.0.0",
  1732 + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
  1733 + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
  1734 + "dev": true,
  1735 + "requires": {
  1736 + "pify": "^2.0.0"
  1737 + }
  1738 + },
  1739 + "pathval": {
  1740 + "version": "1.1.1",
  1741 + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
  1742 + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ=="
  1743 + },
  1744 + "performance-now": {
  1745 + "version": "2.1.0",
  1746 + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
  1747 + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
  1748 + },
  1749 + "pify": {
  1750 + "version": "2.3.0",
  1751 + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
  1752 + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
  1753 + "dev": true
  1754 + },
  1755 + "pinkie": {
  1756 + "version": "2.0.4",
  1757 + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
  1758 + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
  1759 + "dev": true
  1760 + },
  1761 + "pinkie-promise": {
  1762 + "version": "2.0.1",
  1763 + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
  1764 + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
  1765 + "dev": true,
  1766 + "requires": {
  1767 + "pinkie": "^2.0.0"
  1768 + }
  1769 + },
  1770 + "pkg-dir": {
  1771 + "version": "1.0.0",
  1772 + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
  1773 + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
  1774 + "dev": true,
  1775 + "requires": {
  1776 + "find-up": "^1.0.0"
  1777 + }
  1778 + },
  1779 + "pluralize": {
  1780 + "version": "7.0.0",
  1781 + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
  1782 + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
  1783 + "dev": true
  1784 + },
  1785 + "prelude-ls": {
  1786 + "version": "1.1.2",
  1787 + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
  1788 + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
  1789 + "dev": true
  1790 + },
  1791 + "progress": {
  1792 + "version": "2.0.0",
  1793 + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
  1794 + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
  1795 + "dev": true
  1796 + },
  1797 + "proxy-addr": {
  1798 + "version": "2.0.4",
  1799 + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
  1800 + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
  1801 + "requires": {
  1802 + "forwarded": "~0.1.2",
  1803 + "ipaddr.js": "1.8.0"
  1804 + }
  1805 + },
  1806 + "psl": {
  1807 + "version": "1.8.0",
  1808 + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
  1809 + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
  1810 + },
  1811 + "punycode": {
  1812 + "version": "2.1.1",
  1813 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
  1814 + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
  1815 + },
  1816 + "qs": {
  1817 + "version": "6.7.0",
  1818 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
  1819 + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
  1820 + },
  1821 + "range-parser": {
  1822 + "version": "1.2.0",
  1823 + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
  1824 + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
  1825 + },
  1826 + "raw-body": {
  1827 + "version": "2.4.0",
  1828 + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
  1829 + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
  1830 + "requires": {
  1831 + "bytes": "3.1.0",
  1832 + "http-errors": "1.7.2",
  1833 + "iconv-lite": "0.4.24",
  1834 + "unpipe": "1.0.0"
  1835 + },
  1836 + "dependencies": {
  1837 + "bytes": {
  1838 + "version": "3.1.0",
  1839 + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
  1840 + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
  1841 + },
  1842 + "http-errors": {
  1843 + "version": "1.7.2",
  1844 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
  1845 + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
  1846 + "requires": {
  1847 + "depd": "~1.1.2",
  1848 + "inherits": "2.0.3",
  1849 + "setprototypeof": "1.1.1",
  1850 + "statuses": ">= 1.5.0 < 2",
  1851 + "toidentifier": "1.0.0"
  1852 + }
  1853 + },
  1854 + "setprototypeof": {
  1855 + "version": "1.1.1",
  1856 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
  1857 + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
  1858 + }
  1859 + }
  1860 + },
  1861 + "read-pkg": {
  1862 + "version": "2.0.0",
  1863 + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
  1864 + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
  1865 + "dev": true,
  1866 + "requires": {
  1867 + "load-json-file": "^2.0.0",
  1868 + "normalize-package-data": "^2.3.2",
  1869 + "path-type": "^2.0.0"
  1870 + }
  1871 + },
  1872 + "read-pkg-up": {
  1873 + "version": "2.0.0",
  1874 + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
  1875 + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
  1876 + "dev": true,
  1877 + "requires": {
  1878 + "find-up": "^2.0.0",
  1879 + "read-pkg": "^2.0.0"
  1880 + },
  1881 + "dependencies": {
  1882 + "find-up": {
  1883 + "version": "2.1.0",
  1884 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
  1885 + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
  1886 + "dev": true,
  1887 + "requires": {
  1888 + "locate-path": "^2.0.0"
  1889 + }
  1890 + }
  1891 + }
  1892 + },
  1893 + "regexpp": {
  1894 + "version": "2.0.0",
  1895 + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.0.tgz",
  1896 + "integrity": "sha512-g2FAVtR8Uh8GO1Nv5wpxW7VFVwHcCEr4wyA8/MHiRkO8uHoR5ntAA8Uq3P1vvMTX/BeQiRVSpDGLd+Wn5HNOTA==",
  1897 + "dev": true
  1898 + },
  1899 + "request": {
  1900 + "version": "2.88.2",
  1901 + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
  1902 + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
  1903 + "requires": {
  1904 + "aws-sign2": "~0.7.0",
  1905 + "aws4": "^1.8.0",
  1906 + "caseless": "~0.12.0",
  1907 + "combined-stream": "~1.0.6",
  1908 + "extend": "~3.0.2",
  1909 + "forever-agent": "~0.6.1",
  1910 + "form-data": "~2.3.2",
  1911 + "har-validator": "~5.1.3",
  1912 + "http-signature": "~1.2.0",
  1913 + "is-typedarray": "~1.0.0",
  1914 + "isstream": "~0.1.2",
  1915 + "json-stringify-safe": "~5.0.1",
  1916 + "mime-types": "~2.1.19",
  1917 + "oauth-sign": "~0.9.0",
  1918 + "performance-now": "^2.1.0",
  1919 + "qs": "~6.5.2",
  1920 + "safe-buffer": "^5.1.2",
  1921 + "tough-cookie": "~2.5.0",
  1922 + "tunnel-agent": "^0.6.0",
  1923 + "uuid": "^3.3.2"
  1924 + },
  1925 + "dependencies": {
  1926 + "qs": {
  1927 + "version": "6.5.2",
  1928 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
  1929 + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
  1930 + },
  1931 + "safe-buffer": {
  1932 + "version": "5.2.1",
  1933 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
  1934 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
  1935 + }
  1936 + }
  1937 + },
  1938 + "require-uncached": {
  1939 + "version": "1.0.3",
  1940 + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
  1941 + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
  1942 + "dev": true,
  1943 + "requires": {
  1944 + "caller-path": "^0.1.0",
  1945 + "resolve-from": "^1.0.0"
  1946 + }
  1947 + },
  1948 + "resolve": {
  1949 + "version": "1.8.1",
  1950 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
  1951 + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
  1952 + "dev": true,
  1953 + "requires": {
  1954 + "path-parse": "^1.0.5"
  1955 + }
  1956 + },
  1957 + "resolve-from": {
  1958 + "version": "1.0.1",
  1959 + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
  1960 + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
  1961 + "dev": true
  1962 + },
  1963 + "restore-cursor": {
  1964 + "version": "2.0.0",
  1965 + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
  1966 + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
  1967 + "dev": true,
  1968 + "requires": {
  1969 + "onetime": "^2.0.0",
  1970 + "signal-exit": "^3.0.2"
  1971 + }
  1972 + },
  1973 + "rimraf": {
  1974 + "version": "2.6.2",
  1975 + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
  1976 + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
  1977 + "dev": true,
  1978 + "requires": {
  1979 + "glob": "^7.0.5"
  1980 + }
  1981 + },
  1982 + "run-async": {
  1983 + "version": "2.3.0",
  1984 + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
  1985 + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
  1986 + "dev": true,
  1987 + "requires": {
  1988 + "is-promise": "^2.1.0"
  1989 + }
  1990 + },
  1991 + "rxjs": {
  1992 + "version": "6.3.2",
  1993 + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.2.tgz",
  1994 + "integrity": "sha512-hV7criqbR0pe7EeL3O66UYVg92IR0XsA97+9y+BWTePK9SKmEI5Qd3Zj6uPnGkNzXsBywBQWTvujPl+1Kn9Zjw==",
  1995 + "dev": true,
  1996 + "requires": {
  1997 + "tslib": "^1.9.0"
  1998 + }
  1999 + },
  2000 + "safe-buffer": {
  2001 + "version": "5.1.1",
  2002 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
  2003 + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
  2004 + },
  2005 + "safer-buffer": {
  2006 + "version": "2.1.2",
  2007 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
  2008 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
  2009 + },
  2010 + "save-as": {
  2011 + "version": "0.1.8",
  2012 + "resolved": "https://registry.npmjs.org/save-as/-/save-as-0.1.8.tgz",
  2013 + "integrity": "sha1-dl+Ue3h4urIz4ZUrvJEg4cPwQb4=",
  2014 + "requires": {
  2015 + "chai": "*"
  2016 + }
  2017 + },
  2018 + "semver": {
  2019 + "version": "5.5.1",
  2020 + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
  2021 + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
  2022 + "dev": true
  2023 + },
  2024 + "send": {
  2025 + "version": "0.16.2",
  2026 + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
  2027 + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
  2028 + "requires": {
  2029 + "debug": "2.6.9",
  2030 + "depd": "~1.1.2",
  2031 + "destroy": "~1.0.4",
  2032 + "encodeurl": "~1.0.2",
  2033 + "escape-html": "~1.0.3",
  2034 + "etag": "~1.8.1",
  2035 + "fresh": "0.5.2",
  2036 + "http-errors": "~1.6.2",
  2037 + "mime": "1.4.1",
  2038 + "ms": "2.0.0",
  2039 + "on-finished": "~2.3.0",
  2040 + "range-parser": "~1.2.0",
  2041 + "statuses": "~1.4.0"
  2042 + },
  2043 + "dependencies": {
  2044 + "debug": {
  2045 + "version": "2.6.9",
  2046 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  2047 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  2048 + "requires": {
  2049 + "ms": "2.0.0"
  2050 + }
  2051 + },
  2052 + "statuses": {
  2053 + "version": "1.4.0",
  2054 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
  2055 + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
  2056 + }
  2057 + }
  2058 + },
  2059 + "serve-static": {
  2060 + "version": "1.13.2",
  2061 + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
  2062 + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
  2063 + "requires": {
  2064 + "encodeurl": "~1.0.2",
  2065 + "escape-html": "~1.0.3",
  2066 + "parseurl": "~1.3.2",
  2067 + "send": "0.16.2"
  2068 + }
  2069 + },
  2070 + "setprototypeof": {
  2071 + "version": "1.1.0",
  2072 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
  2073 + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
  2074 + },
  2075 + "shebang-command": {
  2076 + "version": "1.2.0",
  2077 + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
  2078 + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
  2079 + "dev": true,
  2080 + "requires": {
  2081 + "shebang-regex": "^1.0.0"
  2082 + }
  2083 + },
  2084 + "shebang-regex": {
  2085 + "version": "1.0.0",
  2086 + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
  2087 + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
  2088 + "dev": true
  2089 + },
  2090 + "signal-exit": {
  2091 + "version": "3.0.2",
  2092 + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
  2093 + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
  2094 + "dev": true
  2095 + },
  2096 + "slice-ansi": {
  2097 + "version": "1.0.0",
  2098 + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
  2099 + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
  2100 + "dev": true,
  2101 + "requires": {
  2102 + "is-fullwidth-code-point": "^2.0.0"
  2103 + }
  2104 + },
  2105 + "spdx-correct": {
  2106 + "version": "3.0.0",
  2107 + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
  2108 + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
  2109 + "dev": true,
  2110 + "requires": {
  2111 + "spdx-expression-parse": "^3.0.0",
  2112 + "spdx-license-ids": "^3.0.0"
  2113 + }
  2114 + },
  2115 + "spdx-exceptions": {
  2116 + "version": "2.1.0",
  2117 + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
  2118 + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
  2119 + "dev": true
  2120 + },
  2121 + "spdx-expression-parse": {
  2122 + "version": "3.0.0",
  2123 + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
  2124 + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
  2125 + "dev": true,
  2126 + "requires": {
  2127 + "spdx-exceptions": "^2.1.0",
  2128 + "spdx-license-ids": "^3.0.0"
  2129 + }
  2130 + },
  2131 + "spdx-license-ids": {
  2132 + "version": "3.0.1",
  2133 + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz",
  2134 + "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==",
  2135 + "dev": true
  2136 + },
  2137 + "sprintf-js": {
  2138 + "version": "1.0.3",
  2139 + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
  2140 + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
  2141 + "dev": true
  2142 + },
  2143 + "sshpk": {
  2144 + "version": "1.16.1",
  2145 + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
  2146 + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
  2147 + "requires": {
  2148 + "asn1": "~0.2.3",
  2149 + "assert-plus": "^1.0.0",
  2150 + "bcrypt-pbkdf": "^1.0.0",
  2151 + "dashdash": "^1.12.0",
  2152 + "ecc-jsbn": "~0.1.1",
  2153 + "getpass": "^0.1.1",
  2154 + "jsbn": "~0.1.0",
  2155 + "safer-buffer": "^2.0.2",
  2156 + "tweetnacl": "~0.14.0"
  2157 + }
  2158 + },
  2159 + "statuses": {
  2160 + "version": "1.5.0",
  2161 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
  2162 + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
  2163 + },
  2164 + "string-width": {
  2165 + "version": "2.1.1",
  2166 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
  2167 + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
  2168 + "dev": true,
  2169 + "requires": {
  2170 + "is-fullwidth-code-point": "^2.0.0",
  2171 + "strip-ansi": "^4.0.0"
  2172 + }
  2173 + },
  2174 + "strip-ansi": {
  2175 + "version": "4.0.0",
  2176 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
  2177 + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
  2178 + "dev": true,
  2179 + "requires": {
  2180 + "ansi-regex": "^3.0.0"
  2181 + }
  2182 + },
  2183 + "strip-bom": {
  2184 + "version": "3.0.0",
  2185 + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
  2186 + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
  2187 + "dev": true
  2188 + },
  2189 + "strip-json-comments": {
  2190 + "version": "2.0.1",
  2191 + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
  2192 + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
  2193 + "dev": true
  2194 + },
  2195 + "supports-color": {
  2196 + "version": "5.5.0",
  2197 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
  2198 + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
  2199 + "dev": true,
  2200 + "requires": {
  2201 + "has-flag": "^3.0.0"
  2202 + }
  2203 + },
  2204 + "table": {
  2205 + "version": "4.0.3",
  2206 + "resolved": "http://registry.npmjs.org/table/-/table-4.0.3.tgz",
  2207 + "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==",
  2208 + "dev": true,
  2209 + "requires": {
  2210 + "ajv": "^6.0.1",
  2211 + "ajv-keywords": "^3.0.0",
  2212 + "chalk": "^2.1.0",
  2213 + "lodash": "^4.17.4",
  2214 + "slice-ansi": "1.0.0",
  2215 + "string-width": "^2.1.1"
  2216 + }
  2217 + },
  2218 + "text-table": {
  2219 + "version": "0.2.0",
  2220 + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
  2221 + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
  2222 + "dev": true
  2223 + },
  2224 + "through": {
  2225 + "version": "2.3.8",
  2226 + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
  2227 + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
  2228 + "dev": true
  2229 + },
  2230 + "tmp": {
  2231 + "version": "0.0.33",
  2232 + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
  2233 + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
  2234 + "dev": true,
  2235 + "requires": {
  2236 + "os-tmpdir": "~1.0.2"
  2237 + }
  2238 + },
  2239 + "toidentifier": {
  2240 + "version": "1.0.0",
  2241 + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
  2242 + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
  2243 + },
  2244 + "tough-cookie": {
  2245 + "version": "2.5.0",
  2246 + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
  2247 + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
  2248 + "requires": {
  2249 + "psl": "^1.1.28",
  2250 + "punycode": "^2.1.1"
  2251 + }
  2252 + },
  2253 + "tslib": {
  2254 + "version": "1.9.3",
  2255 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
  2256 + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
  2257 + "dev": true
  2258 + },
  2259 + "tunnel-agent": {
  2260 + "version": "0.6.0",
  2261 + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
  2262 + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
  2263 + "requires": {
  2264 + "safe-buffer": "^5.0.1"
  2265 + }
  2266 + },
  2267 + "tweetnacl": {
  2268 + "version": "0.14.5",
  2269 + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
  2270 + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
  2271 + },
  2272 + "type-check": {
  2273 + "version": "0.3.2",
  2274 + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
  2275 + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
  2276 + "dev": true,
  2277 + "requires": {
  2278 + "prelude-ls": "~1.1.2"
  2279 + }
  2280 + },
  2281 + "type-detect": {
  2282 + "version": "4.0.8",
  2283 + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
  2284 + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
  2285 + },
  2286 + "type-is": {
  2287 + "version": "1.6.16",
  2288 + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
  2289 + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
  2290 + "requires": {
  2291 + "media-typer": "0.3.0",
  2292 + "mime-types": "~2.1.18"
  2293 + }
  2294 + },
  2295 + "unpipe": {
  2296 + "version": "1.0.0",
  2297 + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
  2298 + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
  2299 + },
  2300 + "uri-js": {
  2301 + "version": "4.2.2",
  2302 + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
  2303 + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
  2304 + "requires": {
  2305 + "punycode": "^2.1.0"
  2306 + }
  2307 + },
  2308 + "utils-merge": {
  2309 + "version": "1.0.1",
  2310 + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
  2311 + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
  2312 + },
  2313 + "uuid": {
  2314 + "version": "3.4.0",
  2315 + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
  2316 + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
  2317 + },
  2318 + "validate-npm-package-license": {
  2319 + "version": "3.0.4",
  2320 + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
  2321 + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
  2322 + "dev": true,
  2323 + "requires": {
  2324 + "spdx-correct": "^3.0.0",
  2325 + "spdx-expression-parse": "^3.0.0"
  2326 + }
  2327 + },
  2328 + "vary": {
  2329 + "version": "1.1.2",
  2330 + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
  2331 + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
  2332 + },
  2333 + "verror": {
  2334 + "version": "1.10.0",
  2335 + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
  2336 + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
  2337 + "requires": {
  2338 + "assert-plus": "^1.0.0",
  2339 + "core-util-is": "1.0.2",
  2340 + "extsprintf": "^1.2.0"
  2341 + }
  2342 + },
  2343 + "which": {
  2344 + "version": "1.3.1",
  2345 + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
  2346 + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
  2347 + "dev": true,
  2348 + "requires": {
  2349 + "isexe": "^2.0.0"
  2350 + }
  2351 + },
  2352 + "wordwrap": {
  2353 + "version": "1.0.0",
  2354 + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
  2355 + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
  2356 + "dev": true
  2357 + },
  2358 + "wrappy": {
  2359 + "version": "1.0.2",
  2360 + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
  2361 + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
  2362 + "dev": true
  2363 + },
  2364 + "write": {
  2365 + "version": "0.2.1",
  2366 + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
  2367 + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
  2368 + "dev": true,
  2369 + "requires": {
  2370 + "mkdirp": "^0.5.1"
  2371 + }
  2372 + }
  2373 + }
  2374 +}
package.json 0 → 100644
  1 +++ a/package.json
@@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
  1 +{
  2 + "name": "line-bot-nodejs-starter",
  3 + "version": "1.0.0",
  4 + "description": "starter point to create new line bot project",
  5 + "main": "index.js",
  6 + "scripts": {
  7 + "start": "node index.js",
  8 + "test": "echo \"Error: no test specified\" && exit 1"
  9 + },
  10 + "keywords": [
  11 + "line",
  12 + "bot",
  13 + "messaging-api"
  14 + ],
  15 + "author": "Sitthi Thiammekha",
  16 + "license": "ISC",
  17 + "devDependencies": {
  18 + "eslint": "^5.5.0",
  19 + "eslint-config-standard": "^12.0.0",
  20 + "eslint-plugin-import": "^2.14.0",
  21 + "eslint-plugin-node": "^7.0.1",
  22 + "eslint-plugin-promise": "^4.0.1",
  23 + "eslint-plugin-standard": "^4.0.0"
  24 + },
  25 + "dependencies": {
  26 + "@line/bot-sdk": "^6.2.1",
  27 + "axios": "^0.23.0",
  28 + "blob": "^0.1.0",
  29 + "body-parser": "^1.19.0",
  30 + "express": "^4.16.3",
  31 + "file-saver": "^2.0.5",
  32 + "moment": "^2.29.1",
  33 + "request": "^2.88.2",
  34 + "save-as": "^0.1.8"
  35 + }
  36 +}