├── .gitignore ├── data ├── index.json └── index_backup.json ├── default-data.js ├── examples ├── links │ └── index.md ├── mutations │ ├── checkoutCreate.js │ ├── checkoutLineItemsAdd.js │ ├── checkoutLineItemsRemove.js │ └── checkoutLineItemsUpdate.js └── queries │ ├── hello.js │ ├── node.js │ ├── productByHandle.js │ └── products.js ├── index.js ├── package-lock.json ├── package.json └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | -------------------------------------------------------------------------------- /data/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "checkout": {}, 3 | "products": [ 4 | { 5 | "__typename": "Product", 6 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=", 7 | "handle": "cool-hat", 8 | "title": "Cool Hat", 9 | "vendor": "EincodeTest", 10 | "description": "The Next.js beanie has arrived! This embroidered beauty has a snug fit that ensures you're going to feel cozy and warm whatever you're doing. • 60% cotton, 40% acrylic• Breathable cotton blend• Form-fitting shape• One size fits most", 11 | "descriptionHtml": "\n

The Next.js beanie has arrived! This embroidered beauty has a snug fit that ensures you're going to feel cozy and warm whatever you're doing.

\n

• 60% cotton, 40% acrylic
• Breathable cotton blend
• Form-fitting shape
• One size fits most

\n", 12 | "priceRange": { 13 | "minVariantPrice": { 14 | "amount": "20.0", 15 | "currencyCode": "EUR" 16 | } 17 | }, 18 | "options": [ 19 | { 20 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODkwMjY3OTk4MDM=", 21 | "name": "Size", 22 | "values": [ 23 | "s", 24 | "l", 25 | "m" 26 | ] 27 | }, 28 | { 29 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODkwODQxNzY1NzE=", 30 | "name": "Color", 31 | "values": [ 32 | "#000000", 33 | "#ffffff" 34 | ] 35 | } 36 | ], 37 | "variants": [ 38 | { 39 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjMzNTE2Mw==", 40 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=", 41 | "title": "s / #000000", 42 | "sku": "", 43 | "selectedOptions": [ 44 | { 45 | "name": "Size", 46 | "value": "s" 47 | }, 48 | { 49 | "name": "Color", 50 | "value": "#000000" 51 | } 52 | ], 53 | "priceV2": { 54 | "amount": "20.0", 55 | "currencyCode": "EUR" 56 | }, 57 | "compareAtPriceV2": { 58 | "amount": "30.0", 59 | "currencyCode": "EUR" 60 | }, 61 | "image": { 62 | "originalSrc": "Hat-front-black__72990.1603748583.png", 63 | "altText": "", 64 | "width": 2048, 65 | "height": 2048 66 | } 67 | }, 68 | { 69 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjM2NzkzMQ==", 70 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=", 71 | "title": "s / #ffffff", 72 | "sku": "", 73 | "selectedOptions": [ 74 | { 75 | "name": "Size", 76 | "value": "s" 77 | }, 78 | { 79 | "name": "Color", 80 | "value": "#ffffff" 81 | } 82 | ], 83 | "priceV2": { 84 | "amount": "20.0", 85 | "currencyCode": "EUR" 86 | }, 87 | "compareAtPriceV2": { 88 | "amount": "30.0", 89 | "currencyCode": "EUR" 90 | }, 91 | "image": { 92 | "originalSrc": "Hat-front-black__72990.1603748583.png", 93 | "altText": "", 94 | "width": 2048, 95 | "height": 2048 96 | } 97 | }, 98 | { 99 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjQzMzQ2Nw==", 100 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=", 101 | "title": "l / #000000", 102 | "sku": "", 103 | "selectedOptions": [ 104 | { 105 | "name": "Size", 106 | "value": "l" 107 | }, 108 | { 109 | "name": "Color", 110 | "value": "#000000" 111 | } 112 | ], 113 | "priceV2": { 114 | "amount": "20.0", 115 | "currencyCode": "EUR" 116 | }, 117 | "compareAtPriceV2": { 118 | "amount": "30.0", 119 | "currencyCode": "EUR" 120 | }, 121 | "image": { 122 | "originalSrc": "Hat-front-black__72990.1603748583.png", 123 | "altText": "", 124 | "width": 2048, 125 | "height": 2048 126 | } 127 | }, 128 | { 129 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjQ2NjIzNQ==", 130 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=", 131 | "title": "l / #ffffff", 132 | "sku": "", 133 | "selectedOptions": [ 134 | { 135 | "name": "Size", 136 | "value": "l" 137 | }, 138 | { 139 | "name": "Color", 140 | "value": "#ffffff" 141 | } 142 | ], 143 | "priceV2": { 144 | "amount": "20.0", 145 | "currencyCode": "EUR" 146 | }, 147 | "compareAtPriceV2": { 148 | "amount": "30.0", 149 | "currencyCode": "EUR" 150 | }, 151 | "image": { 152 | "originalSrc": "Hat-front-black__72990.1603748583.png", 153 | "altText": "", 154 | "width": 2048, 155 | "height": 2048 156 | } 157 | }, 158 | { 159 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjQ5OTAwMw==", 160 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=", 161 | "title": "m / #000000", 162 | "sku": "", 163 | "selectedOptions": [ 164 | { 165 | "name": "Size", 166 | "value": "m" 167 | }, 168 | { 169 | "name": "Color", 170 | "value": "#000000" 171 | } 172 | ], 173 | "priceV2": { 174 | "amount": "20.0", 175 | "currencyCode": "EUR" 176 | }, 177 | "compareAtPriceV2": { 178 | "amount": "30.0", 179 | "currencyCode": "EUR" 180 | }, 181 | "image": { 182 | "originalSrc": "Hat-front-black__72990.1603748583.png", 183 | "altText": "", 184 | "width": 2048, 185 | "height": 2048 186 | } 187 | }, 188 | { 189 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjU2NDUzOQ==", 190 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=", 191 | "title": "m / #ffffff", 192 | "sku": "", 193 | "selectedOptions": [ 194 | { 195 | "name": "Size", 196 | "value": "m" 197 | }, 198 | { 199 | "name": "Color", 200 | "value": "#ffffff" 201 | } 202 | ], 203 | "priceV2": { 204 | "amount": "20.0", 205 | "currencyCode": "EUR" 206 | }, 207 | "compareAtPriceV2": { 208 | "amount": "30.0", 209 | "currencyCode": "EUR" 210 | }, 211 | "image": { 212 | "originalSrc": "Hat-front-black__72990.1603748583.png", 213 | "altText": "", 214 | "width": 2048, 215 | "height": 2048 216 | } 217 | } 218 | ], 219 | "images": [ 220 | { 221 | "originalSrc": "Hat-front-black__72990.1603748583.png", 222 | "altText": "", 223 | "width": 2048, 224 | "height": 2048 225 | }, 226 | { 227 | "originalSrc": "Hat-back-black__57260.1602591509.png", 228 | "altText": "", 229 | "width": 2048, 230 | "height": 2048 231 | }, 232 | { 233 | "originalSrc": "Hat-left-black__51142.1602591510.png", 234 | "altText": "", 235 | "width": 2048, 236 | "height": 2048 237 | }, 238 | { 239 | "originalSrc": "Hat-front-white__31525.1602591510.png", 240 | "altText": "", 241 | "width": 2048, 242 | "height": 2048 243 | } 244 | ] 245 | }, 246 | { 247 | "__typename": "Product", 248 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=", 249 | "handle": "lightweight-jacket", 250 | "title": "Lightweight Jacket", 251 | "vendor": "EincodeTest", 252 | "description": "Add a little zing to your winter wardrobe with this vibrant Winter-breaker Jacket. With a brushed fleece inside, and a relaxed unisex fit, this jacket is just the stuff of the dreams, so be quick to grab yourself one!Long sleeve ripstop jacket colorblocked in black. Rough pattern in obsidian black and brown printed throughout. Printed graphic in white throughout. Logo-woven webbing trim in white and black throughout. Bungee-style drawstring at hood featuring rubberized logo hardware. Zip closure at front. Rubberized logo appliqué at chest. Welt pockets and textile logo patch in orange at waist. Elasticized cuffs. Partially lined. Black hardware.", 253 | "descriptionHtml": "Add a little zing to your winter wardrobe with this vibrant Winter-breaker Jacket. With a brushed fleece inside, and a relaxed unisex fit, this jacket is just the stuff of the dreams, so be quick to grab yourself one!

Long sleeve ripstop jacket colorblocked in black. Rough pattern in obsidian black and brown printed throughout. Printed graphic in white throughout. Logo-woven webbing trim in white and black throughout. Bungee-style drawstring at hood featuring rubberized logo hardware. Zip closure at front. Rubberized logo appliqué at chest. Welt pockets and textile logo patch in orange at waist. Elasticized cuffs. Partially lined. Black hardware.", 254 | "priceRange": { 255 | "minVariantPrice": { 256 | "amount": "100.0", 257 | "currencyCode": "EUR" 258 | }, 259 | "maxVariantPrice": { 260 | "amount": "100.0", 261 | "currencyCode": "EUR" 262 | } 263 | }, 264 | "options": [ 265 | { 266 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NTgxNTc3NTU=", 267 | "name": "Size", 268 | "values": [ 269 | "l", 270 | "m", 271 | "s" 272 | ] 273 | }, 274 | { 275 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NTgxOTA1MjM=", 276 | "name": "Color", 277 | "values": [ 278 | "#000000", 279 | "#ffffff" 280 | ] 281 | } 282 | ], 283 | "variants": [ 284 | { 285 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjQzMDY1MQ==", 286 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=", 287 | "title": "l / #000000", 288 | "sku": "", 289 | "selectedOptions": [ 290 | { 291 | "name": "Size", 292 | "value": "l" 293 | }, 294 | { 295 | "name": "Color", 296 | "value": "#000000" 297 | } 298 | ], 299 | "priceV2": { 300 | "amount": "100.0", 301 | "currencyCode": "EUR" 302 | }, 303 | "compareAtPriceV2": { 304 | "amount": "70.0", 305 | "currencyCode": "EUR" 306 | }, 307 | "image": { 308 | "originalSrc": "Men-Jacket-Front-Black__15466.1603283963.png", 309 | "altText": "", 310 | "width": 2048, 311 | "height": 2048 312 | } 313 | }, 314 | { 315 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjQ2MzQxOQ==", 316 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=", 317 | "title": "l / #ffffff", 318 | "sku": "", 319 | "selectedOptions": [ 320 | { 321 | "name": "Size", 322 | "value": "l" 323 | }, 324 | { 325 | "name": "Color", 326 | "value": "#ffffff" 327 | } 328 | ], 329 | "priceV2": { 330 | "amount": "100.0", 331 | "currencyCode": "EUR" 332 | }, 333 | "compareAtPriceV2": { 334 | "amount": "70.0", 335 | "currencyCode": "EUR" 336 | } 337 | }, 338 | { 339 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjQ5NjE4Nw==", 340 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=", 341 | "title": "m / #000000", 342 | "sku": "", 343 | "selectedOptions": [ 344 | { 345 | "name": "Size", 346 | "value": "m" 347 | }, 348 | { 349 | "name": "Color", 350 | "value": "#000000" 351 | } 352 | ], 353 | "priceV2": { 354 | "amount": "100.0", 355 | "currencyCode": "EUR" 356 | }, 357 | "compareAtPriceV2": { 358 | "amount": "70.0", 359 | "currencyCode": "EUR" 360 | }, 361 | "image": { 362 | "originalSrc": "Men-Jacket-Front-Black__15466.1603283963.png", 363 | "altText": "", 364 | "width": 2048, 365 | "height": 2048 366 | } 367 | }, 368 | { 369 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjUyODk1NQ==", 370 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=", 371 | "title": "m / #ffffff", 372 | "sku": "", 373 | "selectedOptions": [ 374 | { 375 | "name": "Size", 376 | "value": "m" 377 | }, 378 | { 379 | "name": "Color", 380 | "value": "#ffffff" 381 | } 382 | ], 383 | "priceV2": { 384 | "amount": "100.0", 385 | "currencyCode": "EUR" 386 | }, 387 | "compareAtPriceV2": { 388 | "amount": "70.0", 389 | "currencyCode": "EUR" 390 | }, 391 | "image": { 392 | "originalSrc": "Men-Jacket-Front-Black__15466.1603283963.png", 393 | "altText": "", 394 | "width": 2048, 395 | "height": 2048 396 | } 397 | }, 398 | { 399 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjU2MTcyMw==", 400 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=", 401 | "title": "s / #000000", 402 | "sku": "", 403 | "selectedOptions": [ 404 | { 405 | "name": "Size", 406 | "value": "s" 407 | }, 408 | { 409 | "name": "Color", 410 | "value": "#000000" 411 | } 412 | ], 413 | "priceV2": { 414 | "amount": "100.0", 415 | "currencyCode": "EUR" 416 | }, 417 | "compareAtPriceV2": { 418 | "amount": "70.0", 419 | "currencyCode": "EUR" 420 | }, 421 | "image": { 422 | "originalSrc": "Men-Jacket-Front-Black__15466.1603283963.png", 423 | "altText": "", 424 | "width": 2048, 425 | "height": 2048 426 | } 427 | }, 428 | { 429 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjU5NDQ5MQ==", 430 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=", 431 | "title": "s / #ffffff", 432 | "sku": "", 433 | "selectedOptions": [ 434 | { 435 | "name": "Size", 436 | "value": "s" 437 | }, 438 | { 439 | "name": "Color", 440 | "value": "#ffffff" 441 | } 442 | ], 443 | "priceV2": { 444 | "amount": "100.0", 445 | "currencyCode": "EUR" 446 | }, 447 | "compareAtPriceV2": { 448 | "amount": "70.0", 449 | "currencyCode": "EUR" 450 | }, 451 | "image": { 452 | "originalSrc": "Men-Jacket-Front-Black__15466.1603283963.png", 453 | "altText": "", 454 | "width": 2048, 455 | "height": 2048 456 | } 457 | } 458 | ], 459 | "images": [ 460 | { 461 | "originalSrc": "Men-Jacket-Front-Black__15466.1603283963.png", 462 | "altText": "", 463 | "width": 2048, 464 | "height": 2048 465 | }, 466 | { 467 | "originalSrc": "Men-Jacket-Side-Black__68202.1603283961.png", 468 | "altText": "", 469 | "width": 2048, 470 | "height": 2048 471 | }, 472 | { 473 | "originalSrc": "Men-Jacket-Back-Black__33864.1603283963.png", 474 | "altText": "", 475 | "width": 2048, 476 | "height": 2048 477 | }, 478 | { 479 | "originalSrc": "Men-Jacket-Front-White__95300.1603283963.png", 480 | "altText": "", 481 | "width": 2048, 482 | "height": 2048 483 | }, 484 | { 485 | "originalSrc": "Men-Jacket-Side-White__91924.1603283962.png", 486 | "altText": "", 487 | "width": 2048, 488 | "height": 2048 489 | }, 490 | { 491 | "originalSrc": "Men-Jacket-Back-White__02866.1603283963.png", 492 | "altText": "", 493 | "width": 2048, 494 | "height": 2048 495 | } 496 | ] 497 | }, 498 | { 499 | "__typename": "Product", 500 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzk2ODA2OTk=", 501 | "handle": "t-shirt", 502 | "title": "T-Shirt", 503 | "vendor": "EincodeTest", 504 | "description": "This t-shirt is a must-have in your wardrobe, combining the timeless fit of a classic tee with an intricate embroidered detail that brings the shirt to a whole new level. It's soft and durable, so be prepared to have a new favorite t-shirt!", 505 | "descriptionHtml": "This t-shirt is a must-have in your wardrobe, combining the timeless fit of a classic tee with an intricate embroidered detail that brings the shirt to a whole new level. It's soft and durable, so be prepared to have a new favorite t-shirt!
", 506 | "priceRange": { 507 | "minVariantPrice": { 508 | "amount": "50.0", 509 | "currencyCode": "EUR" 510 | }, 511 | "maxVariantPrice": { 512 | "amount": "50.0", 513 | "currencyCode": "EUR" 514 | } 515 | }, 516 | "options": [ 517 | { 518 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NjAxNTY2MDM=", 519 | "name": "Size", 520 | "values": [ 521 | "m", 522 | "s" 523 | ] 524 | }, 525 | { 526 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NjAxODkzNzE=", 527 | "name": "Color", 528 | "values": [ 529 | "#000000" 530 | ] 531 | } 532 | ], 533 | "variants": [ 534 | { 535 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM4NTE3MTY0Mw==", 536 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzk2ODA2OTk=", 537 | "title": "m / #000000", 538 | "sku": "", 539 | "selectedOptions": [ 540 | { 541 | "name": "Size", 542 | "value": "m" 543 | }, 544 | { 545 | "name": "Color", 546 | "value": "#000000" 547 | } 548 | ], 549 | "priceV2": { 550 | "amount": "50.0", 551 | "currencyCode": "EUR" 552 | }, 553 | "compareAtPriceV2": { 554 | "amount": "30.0", 555 | "currencyCode": "EUR" 556 | }, 557 | "image": { 558 | "originalSrc": "Men-TShirt-Black-Front__70046.1603748348.png", 559 | "altText": "", 560 | "width": 2048, 561 | "height": 2048 562 | } 563 | }, 564 | { 565 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM4NTIwNDQxMQ==", 566 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzk2ODA2OTk=", 567 | "title": "s / #000000", 568 | "sku": "", 569 | "selectedOptions": [ 570 | { 571 | "name": "Size", 572 | "value": "s" 573 | }, 574 | { 575 | "name": "Color", 576 | "value": "#000000" 577 | } 578 | ], 579 | "priceV2": { 580 | "amount": "50.0", 581 | "currencyCode": "EUR" 582 | }, 583 | "compareAtPriceV2": { 584 | "amount": "30.0", 585 | "currencyCode": "EUR" 586 | } 587 | } 588 | ], 589 | "images": [ 590 | { 591 | "originalSrc": "Men-TShirt-Black-Front__70046.1603748348.png", 592 | "altText": "", 593 | "width": 2048, 594 | "height": 2048 595 | }, 596 | { 597 | "originalSrc": "Men-TShirt-Black-Left-Side__72119.1603284781.png", 598 | "altText": "", 599 | "width": 2048, 600 | "height": 2048 601 | }, 602 | { 603 | "originalSrc": "Men-TShirt-Black-Back__57266.1603748348.png", 604 | "altText": "", 605 | "width": 2048, 606 | "height": 2048 607 | }, 608 | { 609 | "originalSrc": "Men-TShirt-White-Front__99616.1603284781.png", 610 | "altText": "", 611 | "width": 2048, 612 | "height": 2048 613 | }, 614 | { 615 | "originalSrc": "Men-TShirt-White-Left-Side__69000.1603284781.png", 616 | "altText": "", 617 | "width": 2048, 618 | "height": 2048 619 | }, 620 | { 621 | "originalSrc": "Men-TShirt-White-Back__33450.1603284781.png", 622 | "altText": "", 623 | "width": 2048, 624 | "height": 2048 625 | } 626 | ] 627 | } 628 | ] 629 | } 630 | -------------------------------------------------------------------------------- /data/index_backup.json: -------------------------------------------------------------------------------- 1 | { 2 | "checkout": { 3 | "__typename": "Checkout", 4 | "id": "test_id_checkout", 5 | "webUrl": "test_webUrl", 6 | "subtotalPriceV2": { 7 | "amount": "0.0", 8 | "currencyCode": "EUR" 9 | }, 10 | "totalTaxV2": { 11 | "amount": "0.0", 12 | "currencyCode": "EUR" 13 | }, 14 | "totalPriceV2": { 15 | "amount": "0.0", 16 | "currencyCode": "EUR" 17 | }, 18 | "completedAt": null, 19 | "createdAt": "2021-06-02T22:32:40Z", 20 | "taxesIncluded": true, 21 | "lineItems": [] 22 | }, 23 | "products": [ 24 | { 25 | "__typename": "Product", 26 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=", 27 | "handle": "cool-hat", 28 | "title": "Cool Hat", 29 | "vendor": "EincodeTest", 30 | "description": "The Next.js beanie has arrived! This embroidered beauty has a snug fit that ensures you're going to feel cozy and warm whatever you're doing. • 60% cotton, 40% acrylic• Breathable cotton blend• Form-fitting shape• One size fits most", 31 | "descriptionHtml": "\n

The Next.js beanie has arrived! This embroidered beauty has a snug fit that ensures you're going to feel cozy and warm whatever you're doing.

\n

• 60% cotton, 40% acrylic
• Breathable cotton blend
• Form-fitting shape
• One size fits most

\n", 32 | "priceRange": { 33 | "minVariantPrice": { 34 | "amount": "20.0", 35 | "currencyCode": "EUR" 36 | } 37 | }, 38 | "options": [ 39 | { 40 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODkwMjY3OTk4MDM=", 41 | "name": "Size", 42 | "values": [ 43 | "s", 44 | "l", 45 | "m" 46 | ] 47 | }, 48 | { 49 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODkwODQxNzY1NzE=", 50 | "name": "Color", 51 | "values": [ 52 | "#000000", 53 | "#ffffff" 54 | ] 55 | } 56 | ], 57 | "variants": [ 58 | { 59 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjMzNTE2Mw==", 60 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=", 61 | "title": "s / #000000", 62 | "sku": "", 63 | "selectedOptions": [ 64 | { 65 | "name": "Size", 66 | "value": "s" 67 | }, 68 | { 69 | "name": "Color", 70 | "value": "#000000" 71 | } 72 | ], 73 | "priceV2": { 74 | "amount": "20.0", 75 | "currencyCode": "EUR" 76 | }, 77 | "compareAtPriceV2": { 78 | "amount": "30.0", 79 | "currencyCode": "EUR" 80 | } 81 | }, 82 | { 83 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjM2NzkzMQ==", 84 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=", 85 | "title": "s / #ffffff", 86 | "sku": "", 87 | "selectedOptions": [ 88 | { 89 | "name": "Size", 90 | "value": "s" 91 | }, 92 | { 93 | "name": "Color", 94 | "value": "#ffffff" 95 | } 96 | ], 97 | "priceV2": { 98 | "amount": "20.0", 99 | "currencyCode": "EUR" 100 | }, 101 | "compareAtPriceV2": { 102 | "amount": "30.0", 103 | "currencyCode": "EUR" 104 | } 105 | }, 106 | { 107 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjQzMzQ2Nw==", 108 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=", 109 | "title": "l / #000000", 110 | "sku": "", 111 | "selectedOptions": [ 112 | { 113 | "name": "Size", 114 | "value": "l" 115 | }, 116 | { 117 | "name": "Color", 118 | "value": "#000000" 119 | } 120 | ], 121 | "priceV2": { 122 | "amount": "20.0", 123 | "currencyCode": "EUR" 124 | }, 125 | "compareAtPriceV2": { 126 | "amount": "30.0", 127 | "currencyCode": "EUR" 128 | } 129 | }, 130 | { 131 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjQ2NjIzNQ==", 132 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=", 133 | "title": "l / #ffffff", 134 | "sku": "", 135 | "selectedOptions": [ 136 | { 137 | "name": "Size", 138 | "value": "l" 139 | }, 140 | { 141 | "name": "Color", 142 | "value": "#ffffff" 143 | } 144 | ], 145 | "priceV2": { 146 | "amount": "20.0", 147 | "currencyCode": "EUR" 148 | }, 149 | "compareAtPriceV2": { 150 | "amount": "30.0", 151 | "currencyCode": "EUR" 152 | } 153 | }, 154 | { 155 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjQ5OTAwMw==", 156 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=", 157 | "title": "m / #000000", 158 | "sku": "", 159 | "selectedOptions": [ 160 | { 161 | "name": "Size", 162 | "value": "m" 163 | }, 164 | { 165 | "name": "Color", 166 | "value": "#000000" 167 | } 168 | ], 169 | "priceV2": { 170 | "amount": "20.0", 171 | "currencyCode": "EUR" 172 | }, 173 | "compareAtPriceV2": { 174 | "amount": "30.0", 175 | "currencyCode": "EUR" 176 | } 177 | }, 178 | { 179 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjU2NDUzOQ==", 180 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjQ5NTQyNjE2OTE=", 181 | "title": "m / #ffffff", 182 | "sku": "", 183 | "selectedOptions": [ 184 | { 185 | "name": "Size", 186 | "value": "m" 187 | }, 188 | { 189 | "name": "Color", 190 | "value": "#ffffff" 191 | } 192 | ], 193 | "priceV2": { 194 | "amount": "20.0", 195 | "currencyCode": "EUR" 196 | }, 197 | "compareAtPriceV2": { 198 | "amount": "30.0", 199 | "currencyCode": "EUR" 200 | } 201 | } 202 | ], 203 | "images": [ 204 | { 205 | "originalSrc": "Hat-front-black__72990.1603748583.png", 206 | "altText": "", 207 | "width": 2048, 208 | "height": 2048 209 | }, 210 | { 211 | "originalSrc": "Hat-back-black__57260.1602591509.png", 212 | "altText": "", 213 | "width": 2048, 214 | "height": 2048 215 | }, 216 | { 217 | "originalSrc": "Hat-left-black__51142.1602591510.png", 218 | "altText": "", 219 | "width": 2048, 220 | "height": 2048 221 | }, 222 | { 223 | "originalSrc": "Hat-front-white__31525.1602591510.png", 224 | "altText": "", 225 | "width": 2048, 226 | "height": 2048 227 | }, 228 | { 229 | "originalSrc": "Hat-left-white__29807.1602591510.png", 230 | "altText": "", 231 | "width": 2048, 232 | "height": 2048 233 | }, 234 | { 235 | "originalSrc": "Hat-back-white__92043.1603748583.png", 236 | "altText": "", 237 | "width": 2048, 238 | "height": 2048 239 | } 240 | ] 241 | }, 242 | { 243 | "__typename": "Product", 244 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=", 245 | "handle": "lightweight-jacket", 246 | "title": "Lightweight Jacket", 247 | "vendor": "EincodeTest", 248 | "description": "Add a little zing to your winter wardrobe with this vibrant Winter-breaker Jacket. With a brushed fleece inside, and a relaxed unisex fit, this jacket is just the stuff of the dreams, so be quick to grab yourself one!Long sleeve ripstop jacket colorblocked in black. Rough pattern in obsidian black and brown printed throughout. Printed graphic in white throughout. Logo-woven webbing trim in white and black throughout. Bungee-style drawstring at hood featuring rubberized logo hardware. Zip closure at front. Rubberized logo appliqué at chest. Welt pockets and textile logo patch in orange at waist. Elasticized cuffs. Partially lined. Black hardware.", 249 | "descriptionHtml": "Add a little zing to your winter wardrobe with this vibrant Winter-breaker Jacket. With a brushed fleece inside, and a relaxed unisex fit, this jacket is just the stuff of the dreams, so be quick to grab yourself one!

Long sleeve ripstop jacket colorblocked in black. Rough pattern in obsidian black and brown printed throughout. Printed graphic in white throughout. Logo-woven webbing trim in white and black throughout. Bungee-style drawstring at hood featuring rubberized logo hardware. Zip closure at front. Rubberized logo appliqué at chest. Welt pockets and textile logo patch in orange at waist. Elasticized cuffs. Partially lined. Black hardware.", 250 | "priceRange": { 251 | "minVariantPrice": { 252 | "amount": "100.0", 253 | "currencyCode": "EUR" 254 | }, 255 | "maxVariantPrice": { 256 | "amount": "100.0", 257 | "currencyCode": "EUR" 258 | } 259 | }, 260 | "options": [ 261 | { 262 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NTgxNTc3NTU=", 263 | "name": "Size", 264 | "values": [ 265 | "l", 266 | "m", 267 | "s" 268 | ] 269 | }, 270 | { 271 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NTgxOTA1MjM=", 272 | "name": "Color", 273 | "values": [ 274 | "#000000", 275 | "#ffffff" 276 | ] 277 | } 278 | ], 279 | "variants": [ 280 | { 281 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjQzMDY1MQ==", 282 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=", 283 | "title": "l / #000000", 284 | "sku": "", 285 | "selectedOptions": [ 286 | { 287 | "name": "Size", 288 | "value": "l" 289 | }, 290 | { 291 | "name": "Color", 292 | "value": "#000000" 293 | } 294 | ], 295 | "priceV2": { 296 | "amount": "100.0", 297 | "currencyCode": "EUR" 298 | }, 299 | "compareAtPriceV2": { 300 | "amount": "70.0", 301 | "currencyCode": "EUR" 302 | } 303 | }, 304 | { 305 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjQ2MzQxOQ==", 306 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=", 307 | "title": "l / #ffffff", 308 | "sku": "", 309 | "selectedOptions": [ 310 | { 311 | "name": "Size", 312 | "value": "l" 313 | }, 314 | { 315 | "name": "Color", 316 | "value": "#ffffff" 317 | } 318 | ], 319 | "priceV2": { 320 | "amount": "100.0", 321 | "currencyCode": "EUR" 322 | }, 323 | "compareAtPriceV2": { 324 | "amount": "70.0", 325 | "currencyCode": "EUR" 326 | } 327 | }, 328 | { 329 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjQ5NjE4Nw==", 330 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=", 331 | "title": "m / #000000", 332 | "sku": "", 333 | "selectedOptions": [ 334 | { 335 | "name": "Size", 336 | "value": "m" 337 | }, 338 | { 339 | "name": "Color", 340 | "value": "#000000" 341 | } 342 | ], 343 | "priceV2": { 344 | "amount": "100.0", 345 | "currencyCode": "EUR" 346 | }, 347 | "compareAtPriceV2": { 348 | "amount": "70.0", 349 | "currencyCode": "EUR" 350 | } 351 | }, 352 | { 353 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjUyODk1NQ==", 354 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=", 355 | "title": "m / #ffffff", 356 | "sku": "", 357 | "selectedOptions": [ 358 | { 359 | "name": "Size", 360 | "value": "m" 361 | }, 362 | { 363 | "name": "Color", 364 | "value": "#ffffff" 365 | } 366 | ], 367 | "priceV2": { 368 | "amount": "100.0", 369 | "currencyCode": "EUR" 370 | }, 371 | "compareAtPriceV2": { 372 | "amount": "70.0", 373 | "currencyCode": "EUR" 374 | } 375 | }, 376 | { 377 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjU2MTcyMw==", 378 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=", 379 | "title": "s / #000000", 380 | "sku": "", 381 | "selectedOptions": [ 382 | { 383 | "name": "Size", 384 | "value": "s" 385 | }, 386 | { 387 | "name": "Color", 388 | "value": "#000000" 389 | } 390 | ], 391 | "priceV2": { 392 | "amount": "100.0", 393 | "currencyCode": "EUR" 394 | }, 395 | "compareAtPriceV2": { 396 | "amount": "70.0", 397 | "currencyCode": "EUR" 398 | } 399 | }, 400 | { 401 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM2MjU5NDQ5MQ==", 402 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzg0MzU1MTU=", 403 | "title": "s / #ffffff", 404 | "sku": "", 405 | "selectedOptions": [ 406 | { 407 | "name": "Size", 408 | "value": "s" 409 | }, 410 | { 411 | "name": "Color", 412 | "value": "#ffffff" 413 | } 414 | ], 415 | "priceV2": { 416 | "amount": "100.0", 417 | "currencyCode": "EUR" 418 | }, 419 | "compareAtPriceV2": { 420 | "amount": "70.0", 421 | "currencyCode": "EUR" 422 | } 423 | } 424 | ], 425 | "images": [ 426 | { 427 | "originalSrc": "Men-Jacket-Front-Black__15466.1603283963.png", 428 | "altText": "", 429 | "width": 2048, 430 | "height": 2048 431 | }, 432 | { 433 | "originalSrc": "Men-Jacket-Side-Black__68202.1603283961.png", 434 | "altText": "", 435 | "width": 2048, 436 | "height": 2048 437 | }, 438 | { 439 | "originalSrc": "Men-Jacket-Back-Black__33864.1603283963.png", 440 | "altText": "", 441 | "width": 2048, 442 | "height": 2048 443 | }, 444 | { 445 | "originalSrc": "Men-Jacket-Front-White__95300.1603283963.png", 446 | "altText": "", 447 | "width": 2048, 448 | "height": 2048 449 | }, 450 | { 451 | "originalSrc": "Men-Jacket-Side-White__91924.1603283962.png", 452 | "altText": "", 453 | "width": 2048, 454 | "height": 2048 455 | }, 456 | { 457 | "originalSrc": "Men-Jacket-Back-White__02866.1603283963.png", 458 | "altText": "", 459 | "width": 2048, 460 | "height": 2048 461 | } 462 | ] 463 | }, 464 | { 465 | "__typename": "Product", 466 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzk2ODA2OTk=", 467 | "handle": "t-shirt", 468 | "title": "T-Shirt", 469 | "vendor": "EincodeTest", 470 | "description": "This t-shirt is a must-have in your wardrobe, combining the timeless fit of a classic tee with an intricate embroidered detail that brings the shirt to a whole new level. It's soft and durable, so be prepared to have a new favorite t-shirt!", 471 | "descriptionHtml": "This t-shirt is a must-have in your wardrobe, combining the timeless fit of a classic tee with an intricate embroidered detail that brings the shirt to a whole new level. It's soft and durable, so be prepared to have a new favorite t-shirt!
", 472 | "priceRange": { 473 | "minVariantPrice": { 474 | "amount": "50.0", 475 | "currencyCode": "EUR" 476 | }, 477 | "maxVariantPrice": { 478 | "amount": "50.0", 479 | "currencyCode": "EUR" 480 | } 481 | }, 482 | "options": [ 483 | { 484 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NjAxNTY2MDM=", 485 | "name": "Size", 486 | "values": [ 487 | "m", 488 | "s" 489 | ] 490 | }, 491 | { 492 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0T3B0aW9uLzg3ODk0NjAxODkzNzE=", 493 | "name": "Color", 494 | "values": [ 495 | "#000000" 496 | ] 497 | } 498 | ], 499 | "variants": [ 500 | { 501 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM4NTE3MTY0Mw==", 502 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzk2ODA2OTk=", 503 | "title": "m / #000000", 504 | "sku": "", 505 | "selectedOptions": [ 506 | { 507 | "name": "Size", 508 | "value": "m" 509 | }, 510 | { 511 | "name": "Color", 512 | "value": "#000000" 513 | } 514 | ], 515 | "priceV2": { 516 | "amount": "50.0", 517 | "currencyCode": "EUR" 518 | }, 519 | "compareAtPriceV2": { 520 | "amount": "30.0", 521 | "currencyCode": "EUR" 522 | } 523 | }, 524 | { 525 | "id": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNjM4NTIwNDQxMQ==", 526 | "productId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzY4NjUyNzk2ODA2OTk=", 527 | "title": "s / #000000", 528 | "sku": "", 529 | "selectedOptions": [ 530 | { 531 | "name": "Size", 532 | "value": "s" 533 | }, 534 | { 535 | "name": "Color", 536 | "value": "#000000" 537 | } 538 | ], 539 | "priceV2": { 540 | "amount": "50.0", 541 | "currencyCode": "EUR" 542 | }, 543 | "compareAtPriceV2": { 544 | "amount": "30.0", 545 | "currencyCode": "EUR" 546 | } 547 | } 548 | ], 549 | "images": [ 550 | { 551 | "originalSrc": "Men-TShirt-Black-Front__70046.1603748348.png", 552 | "altText": "", 553 | "width": 2048, 554 | "height": 2048 555 | }, 556 | { 557 | "originalSrc": "Men-TShirt-Black-Left-Side__72119.1603284781.png", 558 | "altText": "", 559 | "width": 2048, 560 | "height": 2048 561 | }, 562 | { 563 | "originalSrc": "Men-TShirt-Black-Back__57266.1603748348.png", 564 | "altText": "", 565 | "width": 2048, 566 | "height": 2048 567 | }, 568 | { 569 | "originalSrc": "Men-TShirt-White-Front__99616.1603284781.png", 570 | "altText": "", 571 | "width": 2048, 572 | "height": 2048 573 | }, 574 | { 575 | "originalSrc": "Men-TShirt-White-Left-Side__69000.1603284781.png", 576 | "altText": "", 577 | "width": 2048, 578 | "height": 2048 579 | }, 580 | { 581 | "originalSrc": "Men-TShirt-White-Back__33450.1603284781.png", 582 | "altText": "", 583 | "width": 2048, 584 | "height": 2048 585 | } 586 | ] 587 | } 588 | ] 589 | } 590 | -------------------------------------------------------------------------------- /default-data.js: -------------------------------------------------------------------------------- 1 | 2 | exports.DEF_CHECKOUT = { 3 | "id": "test_id_checkout", 4 | "__typename": "Checkout", 5 | "webUrl": "test_webUrl", 6 | "subtotalPriceV2": { 7 | "amount": "0.0", 8 | "currencyCode": "EUR" 9 | }, 10 | "totalTaxV2": { 11 | "amount": "0.0", 12 | "currencyCode": "EUR" 13 | }, 14 | "totalPriceV2": { 15 | "amount": "0.0", 16 | "currencyCode": "EUR" 17 | }, 18 | "completedAt": null, 19 | "createdAt": "2021-06-02T22:32:40Z", 20 | "taxesIncluded": true, 21 | "lineItems": [] 22 | } 23 | -------------------------------------------------------------------------------- /examples/links/index.md: -------------------------------------------------------------------------------- 1 | [Shopify GraphQL Storefront](https://shopify.dev/docs/storefront-api/reference) 2 | 3 | [Api Explorer](https://shopify.dev/graphiql/storefront-graphiql) 4 | -------------------------------------------------------------------------------- /examples/mutations/checkoutCreate.js: -------------------------------------------------------------------------------- 1 | ` 2 | mutation { 3 | checkoutCreate { 4 | checkoutUserErrors { 5 | field 6 | message 7 | } 8 | checkout { 9 | id 10 | webUrl 11 | subtotalPriceV2{ 12 | amount 13 | currencyCode 14 | } 15 | totalTaxV2 { 16 | amount 17 | currencyCode 18 | } 19 | totalPriceV2 { 20 | amount 21 | currencyCode 22 | } 23 | completedAt 24 | createdAt 25 | taxesIncluded 26 | lineItems(first: 250) { 27 | pageInfo { 28 | hasNextPage 29 | hasPreviousPage 30 | } 31 | edges { 32 | node { 33 | id 34 | title 35 | variant { 36 | id 37 | sku 38 | title 39 | image { 40 | originalSrc 41 | altText 42 | width 43 | height 44 | } 45 | priceV2{ 46 | amount 47 | currencyCode 48 | } 49 | compareAtPriceV2{ 50 | amount 51 | currencyCode 52 | } 53 | product { 54 | handle 55 | } 56 | } 57 | quantity 58 | } 59 | } 60 | } 61 | } 62 | } 63 | } 64 | ` 65 | -------------------------------------------------------------------------------- /examples/mutations/checkoutLineItemsAdd.js: -------------------------------------------------------------------------------- 1 | ` 2 | mutation( 3 | $checkoutId: ID = "123", 4 | $lineItems: [CheckoutLineItemInput] = [{quantity: 1, variantId: "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjMzNTE2Mw=="}]) { 5 | checkoutLineItemsAdd(checkoutId: $checkoutId, lineItems: $lineItems) { 6 | checkoutUserErrors { 7 | field 8 | message 9 | } 10 | checkout { 11 | id 12 | webUrl 13 | subtotalPriceV2{ 14 | amount 15 | currencyCode 16 | } 17 | totalTaxV2 { 18 | amount 19 | currencyCode 20 | } 21 | totalPriceV2 { 22 | amount 23 | currencyCode 24 | } 25 | completedAt 26 | createdAt 27 | taxesIncluded 28 | lineItems(first: 250) { 29 | pageInfo { 30 | hasNextPage 31 | hasPreviousPage 32 | } 33 | edges { 34 | node { 35 | id 36 | title 37 | variant { 38 | id 39 | sku 40 | title 41 | image { 42 | originalSrc 43 | altText 44 | width 45 | height 46 | } 47 | priceV2{ 48 | amount 49 | currencyCode 50 | } 51 | compareAtPriceV2{ 52 | amount 53 | currencyCode 54 | } 55 | product { 56 | handle 57 | } 58 | } 59 | quantity 60 | } 61 | } 62 | } 63 | } 64 | } 65 | } 66 | ` 67 | -------------------------------------------------------------------------------- /examples/mutations/checkoutLineItemsRemove.js: -------------------------------------------------------------------------------- 1 | ` 2 | mutation( 3 | $checkoutId: ID = "123", 4 | $lineItemIds: [ID] = ["Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjMzNTE2Mw==__LI"]) { 5 | checkoutLineItemsRemove(checkoutId: $checkoutId, lineItemIds: $lineItemIds) { 6 | checkoutUserErrors { 7 | field 8 | message 9 | } 10 | checkout { 11 | id 12 | webUrl 13 | subtotalPriceV2 { 14 | amount 15 | currencyCode 16 | } 17 | totalTaxV2 { 18 | amount 19 | currencyCode 20 | } 21 | totalPriceV2 { 22 | amount 23 | currencyCode 24 | } 25 | completedAt 26 | createdAt 27 | taxesIncluded 28 | lineItems(first: 250) { 29 | pageInfo { 30 | hasNextPage 31 | hasPreviousPage 32 | } 33 | edges { 34 | node { 35 | id 36 | title 37 | variant { 38 | id 39 | sku 40 | title 41 | image { 42 | originalSrc 43 | altText 44 | width 45 | height 46 | } 47 | priceV2{ 48 | amount 49 | currencyCode 50 | } 51 | compareAtPriceV2{ 52 | amount 53 | currencyCode 54 | } 55 | product { 56 | handle 57 | } 58 | } 59 | quantity 60 | } 61 | } 62 | } 63 | } 64 | } 65 | } 66 | ` 67 | -------------------------------------------------------------------------------- /examples/mutations/checkoutLineItemsUpdate.js: -------------------------------------------------------------------------------- 1 | ` 2 | mutation( 3 | $checkoutId: ID = "123", 4 | $lineItems: [CheckoutLineItemUpdateInput] = [{quantity: 3, id: "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80MDQxNDM2NjMzNTE2Mw==__LI"}]) { 5 | checkoutLineItemsUpdate(checkoutId: $checkoutId, lineItems: $lineItems) { 6 | checkoutUserErrors { 7 | field 8 | message 9 | } 10 | checkout { 11 | id 12 | webUrl 13 | subtotalPriceV2{ 14 | amount 15 | currencyCode 16 | } 17 | totalTaxV2 { 18 | amount 19 | currencyCode 20 | } 21 | totalPriceV2 { 22 | amount 23 | currencyCode 24 | } 25 | completedAt 26 | createdAt 27 | taxesIncluded 28 | lineItems(first: 250) { 29 | pageInfo { 30 | hasNextPage 31 | hasPreviousPage 32 | } 33 | edges { 34 | node { 35 | id 36 | title 37 | variant { 38 | id 39 | sku 40 | title 41 | image { 42 | originalSrc 43 | altText 44 | width 45 | height 46 | } 47 | priceV2{ 48 | amount 49 | currencyCode 50 | } 51 | compareAtPriceV2{ 52 | amount 53 | currencyCode 54 | } 55 | product { 56 | handle 57 | } 58 | } 59 | quantity 60 | } 61 | } 62 | } 63 | } 64 | } 65 | } 66 | ` 67 | -------------------------------------------------------------------------------- /examples/queries/hello.js: -------------------------------------------------------------------------------- 1 | `query { hello }` 2 | -------------------------------------------------------------------------------- /examples/queries/node.js: -------------------------------------------------------------------------------- 1 | ` 2 | query($checkoutId: ID = "test_id_checkout"){ 3 | node(id: $checkoutId) { 4 | ... on Checkout { 5 | id 6 | webUrl 7 | subtotalPriceV2{ 8 | amount 9 | currencyCode 10 | } 11 | totalTaxV2 { 12 | amount 13 | currencyCode 14 | } 15 | totalPriceV2 { 16 | amount 17 | currencyCode 18 | } 19 | completedAt 20 | createdAt 21 | taxesIncluded 22 | lineItems(first: 250) { 23 | pageInfo { 24 | hasNextPage 25 | hasPreviousPage 26 | } 27 | edges { 28 | node { 29 | id 30 | title 31 | variant { 32 | id 33 | sku 34 | title 35 | image { 36 | originalSrc 37 | altText 38 | width 39 | height 40 | } 41 | priceV2{ 42 | amount 43 | currencyCode 44 | } 45 | compareAtPriceV2{ 46 | amount 47 | currencyCode 48 | } 49 | product { 50 | handle 51 | } 52 | } 53 | quantity 54 | } 55 | } 56 | } 57 | } 58 | } 59 | } 60 | ` 61 | -------------------------------------------------------------------------------- /examples/queries/productByHandle.js: -------------------------------------------------------------------------------- 1 | ` 2 | query productByHandle { 3 | productByHandle(handle: "cool-hat") { 4 | id 5 | handle 6 | title 7 | vendor 8 | description 9 | descriptionHtml 10 | options { 11 | id 12 | name 13 | values 14 | } 15 | priceRange { 16 | minVariantPrice { 17 | amount 18 | currencyCode 19 | } 20 | maxVariantPrice { 21 | amount 22 | currencyCode 23 | } 24 | } 25 | variants(first: 250) { 26 | pageInfo { 27 | hasNextPage 28 | hasPreviousPage 29 | } 30 | edges { 31 | node { 32 | id 33 | title 34 | sku 35 | selectedOptions { 36 | name 37 | value 38 | } 39 | priceV2 { 40 | amount 41 | currencyCode 42 | } 43 | compareAtPriceV2 { 44 | amount 45 | currencyCode 46 | } 47 | } 48 | } 49 | } 50 | images(first: 250) { 51 | pageInfo { 52 | hasNextPage 53 | hasPreviousPage 54 | } 55 | edges { 56 | node { 57 | originalSrc 58 | altText 59 | width 60 | height 61 | } 62 | } 63 | } 64 | } 65 | } 66 | ` 67 | -------------------------------------------------------------------------------- /examples/queries/products.js: -------------------------------------------------------------------------------- 1 | ` 2 | query getAllProducts($first: Int = 250) { 3 | products(first: $first) { 4 | pageInfo { 5 | hasNextPage 6 | hasPreviousPage 7 | } 8 | edges { 9 | node { 10 | id 11 | title 12 | vendor 13 | handle 14 | description 15 | priceRange { 16 | minVariantPrice { 17 | amount 18 | currencyCode 19 | } 20 | } 21 | images(first: 1) { 22 | pageInfo { 23 | hasNextPage 24 | hasPreviousPage 25 | } 26 | edges { 27 | node { 28 | originalSrc 29 | altText 30 | width 31 | height 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | } 39 | ` 40 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const { ApolloServer, gql } = require('apollo-server-express') 3 | const { DEF_CHECKOUT } = require("./default-data") 4 | 5 | const fs = require('fs'), 6 | path = require('path'), 7 | filePath = path.join(__dirname, "data", 'index.json'); 8 | 9 | const convertNodeToCursor = (node, field = "id") => { 10 | return Buffer.from(node[field], 'binary').toString('base64') 11 | } 12 | 13 | const convertCursorToNodeId = (cursor, field = "id") => { 14 | return Buffer.from(cursor[field], 'base64').toString('binary') 15 | } 16 | 17 | // Get Custom Data From JSON -> getData("products") 18 | const getData = (type) => { 19 | return new Promise((res, rej) => { 20 | fs.readFile(filePath, {encoding: 'utf-8'}, function(err, sData){ 21 | if (err) { 22 | return rej("Cannot read the file!") 23 | } 24 | 25 | const data = JSON.parse(sData) 26 | return res(data) 27 | }) 28 | }) 29 | } 30 | 31 | const saveData = (data) => { 32 | const stringifiedData = JSON.stringify(data, null, 2) 33 | return new Promise((res, rej) => { 34 | fs.writeFile(filePath, stringifiedData, function(err){ 35 | if (err) { 36 | return rej("Cannot read the file!") 37 | } 38 | 39 | return res("Data Saved!") 40 | }) 41 | }) 42 | } 43 | 44 | const getTotalPrice = (lineItems) => { 45 | return lineItems.reduce((acc, li) => { 46 | return acc + Number(li.variant.priceV2.amount) * li.quantity 47 | }, 0) 48 | } 49 | 50 | const getAllProducts = (args) => { 51 | let { first = 30, afterCursor } = args 52 | let afterIndex = 0 53 | return new Promise((res, rej) => { 54 | fs.readFile(filePath, {encoding: 'utf-8'}, function(err, sData){ 55 | if (!err) { 56 | const data = JSON.parse(sData)["products"] 57 | 58 | if (typeof afterCursor === 'string') { 59 | /* Extracting nodeId from afterCursor */ 60 | let nodeId = convertCursorToNodeId(afterCursor) 61 | /* Finding the index of nodeId */ 62 | let nodeIndex = data.findIndex(d => d.id === nodeId) 63 | if (nodeIndex >= 0) { 64 | afterIndex = nodeIndex + 1 // 1 is added to exclude the afterIndex node and include items after it 65 | } 66 | } 67 | 68 | const slicedData = data.slice(afterIndex, afterIndex + first) 69 | const edges = slicedData.map (node => { 70 | return { 71 | node, 72 | cursor: convertNodeToCursor(node) 73 | } 74 | }) 75 | 76 | let startCursor, endCursor = null 77 | if (edges.length > 0) { 78 | startCursor = convertNodeToCursor(edges[0].node) 79 | endCursor = convertNodeToCursor(edges[edges.length - 1].node) 80 | } 81 | let hasNextPage = data.length > afterIndex + first 82 | let hasPreviousPage = afterIndex > 0 83 | 84 | res({ 85 | totalCount: data.length, 86 | edges, 87 | pageInfo: { 88 | startCursor, 89 | endCursor, 90 | hasNextPage, 91 | hasPreviousPage 92 | } 93 | }) 94 | } else { 95 | rej("File Error!") 96 | } 97 | }); 98 | }) 99 | } 100 | 101 | const typeDefs = gql` 102 | type PageInfo { 103 | startCursor: String 104 | endCursor: String 105 | hasNextPage: Boolean 106 | hasPreviousPage: Boolean 107 | } 108 | 109 | type MoneyV2 { 110 | amount: Int 111 | currencyCode: String 112 | } 113 | 114 | type PriceRange { 115 | value: Int 116 | minVariantPrice: MoneyV2 117 | maxVariantPrice: MoneyV2 118 | } 119 | 120 | type ImageEdge { 121 | cursor: String! 122 | node: Image 123 | } 124 | 125 | type ImageConnection { 126 | pageInfo: PageInfo! 127 | edges: [ImageEdge] 128 | } 129 | 130 | type Image { 131 | pageInfo: PageInfo! 132 | originalSrc: String 133 | altText: String 134 | height: Int 135 | width: Int 136 | } 137 | 138 | type Option { 139 | id: ID 140 | name: String 141 | values: [String] 142 | } 143 | 144 | type SelectedOption { 145 | name: String 146 | value: String 147 | } 148 | 149 | type Variant { 150 | id: ID 151 | title: String 152 | sku: String 153 | selectedOptions: [SelectedOption] 154 | priceV2: MoneyV2 155 | compareAtPriceV2: MoneyV2 156 | image: Image 157 | product: Product 158 | } 159 | 160 | type VariantEdge { 161 | cursor: String! 162 | node: Variant 163 | } 164 | 165 | type VariantConnection { 166 | pageInfo: PageInfo! 167 | edges: [VariantEdge] 168 | } 169 | 170 | type Value { 171 | label: String 172 | isDefaul: Boolean 173 | hexColors: [String] 174 | } 175 | 176 | type ProductOption { 177 | entityId: Int 178 | displayName: String 179 | values: [Value] 180 | } 181 | 182 | interface Node { 183 | id: ID! 184 | } 185 | 186 | type ProductConnection { 187 | pageInfo: PageInfo! 188 | edges: [ProductEdge] 189 | } 190 | 191 | type ProductEdge { 192 | cursor: String! 193 | node: Product 194 | } 195 | 196 | type Product implements Node { 197 | id: ID! 198 | title: String 199 | handle: String 200 | description: String 201 | descriptionHtml: String 202 | vendor: String 203 | priceRange: PriceRange 204 | options: [Option] 205 | images(first: Int): ImageConnection 206 | variants(first: Int): VariantConnection 207 | } 208 | 209 | type CheckoutUserError { 210 | field: String 211 | message: String 212 | } 213 | 214 | type LineItem implements Node { 215 | id: ID! 216 | quantity: Int 217 | title: String 218 | unityPrice: MoneyV2 219 | variant: Variant 220 | product: Product 221 | } 222 | 223 | type LineItemEdge { 224 | cursor: String! 225 | node: LineItem 226 | } 227 | 228 | type LineItemConnection { 229 | pageInfo: PageInfo! 230 | edges: [LineItemEdge] 231 | } 232 | 233 | type Checkout implements Node { 234 | id: ID! 235 | webUrl: String 236 | subtotalPriceV2: MoneyV2 237 | totalTaxV2: MoneyV2 238 | totalPriceV2: MoneyV2 239 | completedAt: String 240 | createdAt: String 241 | taxesIncluded: Boolean 242 | lineItems(first: Int): LineItemConnection 243 | } 244 | 245 | type CheckoutResponse { 246 | checkoutUserErrors: [CheckoutUserError] 247 | checkout: Checkout 248 | } 249 | 250 | type Query { 251 | products(first: Int): ProductConnection 252 | productByHandle(handle: String): Product 253 | hello: String 254 | node(id: ID!): Node 255 | } 256 | 257 | input CheckoutLineItemInput { 258 | variantId: ID 259 | quantity: Int 260 | } 261 | 262 | input CheckoutLineItemUpdateInput { 263 | id: ID 264 | variantId: ID 265 | quantity: Int 266 | } 267 | 268 | input CheckoutCreateInput { 269 | id: ID 270 | } 271 | 272 | type Mutation { 273 | checkoutCreate(input: CheckoutCreateInput): CheckoutResponse 274 | checkoutLineItemsAdd(checkoutId: ID, lineItems: [CheckoutLineItemInput]): CheckoutResponse 275 | checkoutLineItemsUpdate(checkoutId: ID, lineItems: [CheckoutLineItemUpdateInput]): CheckoutResponse 276 | checkoutLineItemsRemove(checkoutId: ID, lineItemIds: [ID]): CheckoutResponse 277 | } 278 | `; 279 | 280 | const resolvers = { 281 | Node: { 282 | __resolveType (obj, ctx, info) { 283 | return obj.__typename; // GraphQLError is thrown 284 | } 285 | }, 286 | Checkout: { 287 | lineItems: (parent, args, context, info) => { 288 | const edges = parent.lineItems.map (node => ({ 289 | node, 290 | cursor: convertNodeToCursor(node, "id") 291 | })) 292 | 293 | return { 294 | edges, 295 | pageInfo: { 296 | startCursor: null, 297 | endCursor: null, 298 | hasNextPage: false, 299 | hasPreviousPage: false 300 | } 301 | } 302 | } 303 | }, 304 | Product: { 305 | images: (parent, args, context, info) => { 306 | const edges = parent.images.map (node => ({ 307 | node, 308 | cursor: convertNodeToCursor(node, "originalSrc") 309 | })) 310 | 311 | return { 312 | edges, 313 | pageInfo: { 314 | startCursor: null, 315 | endCursor: null, 316 | hasNextPage: false, 317 | hasPreviousPage: false 318 | } 319 | } 320 | }, 321 | variants: (parent, args, context, info) => { 322 | const edges = parent.variants.map (node => { 323 | 324 | node.product = {} 325 | node.product.handle = parent.handle 326 | node.image = parent.images[0] 327 | 328 | return { 329 | node, 330 | cursor: convertNodeToCursor(node, "id") 331 | } 332 | }) 333 | 334 | return { 335 | edges, 336 | pageInfo: { 337 | startCursor: null, 338 | endCursor: null, 339 | hasNextPage: false, 340 | hasPreviousPage: false 341 | } 342 | } 343 | } 344 | }, 345 | Mutation: { 346 | checkoutLineItemsRemove: async (_, { checkoutId, lineItemIds }) => { 347 | const data = await getData() 348 | const { checkout } = data 349 | 350 | lineItemIds.forEach(liId => { 351 | const liIndex = checkout.lineItems.findIndex(sli => { 352 | return sli.id === liId 353 | }) 354 | checkout.lineItems.splice(liIndex, 1) 355 | }) 356 | 357 | checkout.totalPriceV2.amount = getTotalPrice(checkout.lineItems) || 0; 358 | checkout.subtotalPriceV2.amount = getTotalPrice(checkout.lineItems) || 0; 359 | 360 | await saveData({...data, checkout}) 361 | 362 | return { 363 | checkout, 364 | checkoutUserErrors: [] 365 | } 366 | }, 367 | checkoutLineItemsUpdate: async (_, { checkoutId, lineItems }) => { 368 | const data = await getData() 369 | const { checkout } = data 370 | const storedLineItems = checkout.lineItems 371 | 372 | lineItems.forEach(li => { 373 | const liIndex = checkout.lineItems.findIndex(sli => { 374 | return sli.id === li.id 375 | }) 376 | storedLineItems[liIndex].quantity = li.quantity 377 | if (storedLineItems[liIndex].quantity === 0) { 378 | checkout.lineItems.splice(liIndex, 1) 379 | } 380 | }) 381 | 382 | checkout.totalPriceV2.amount = getTotalPrice(checkout.lineItems) || 0;; 383 | checkout.subtotalPriceV2.amount = getTotalPrice(checkout.lineItems) || 0; 384 | 385 | await saveData({...data, checkout}) 386 | 387 | return { 388 | checkout, 389 | checkoutUserErrors: [] 390 | } 391 | }, 392 | checkoutLineItemsAdd: async (_, { checkoutId, lineItems }) => { 393 | const data = await getData() 394 | const { checkout } = data 395 | 396 | if (!checkout) { 397 | throw new Error("Checkout is not created!") 398 | } 399 | 400 | function findVariantsProduct(products, variantId) { 401 | const product = products.filter(p => { 402 | return p.variants.find(v => v.id === variantId) 403 | })[0] || null 404 | 405 | return product 406 | } 407 | 408 | if (checkout.lineItems && checkout.lineItems.length > 0) { 409 | checkout.lineItems.forEach((chLi, index) => { 410 | const existingLiIndex = lineItems.findIndex(li => li.variantId === chLi.variantId) 411 | 412 | if (existingLiIndex >= 0) { 413 | checkout.lineItems[index].quantity++ 414 | lineItems.splice(existingLiIndex, 1) 415 | } 416 | }) 417 | } 418 | 419 | lineItems.forEach(li => { 420 | const product = findVariantsProduct(data["products"], li.variantId) 421 | li.id = li.variantId + "__LI" 422 | li.title = product.title 423 | li.variant = product.variants.find(v => { 424 | return v.id === li.variantId 425 | }) 426 | li.variant.image = product.images[0] 427 | li.product = product 428 | }) 429 | 430 | checkout.lineItems = [...checkout.lineItems, ...lineItems] 431 | checkout.totalPriceV2.amount =getTotalPrice(checkout.lineItems) || 0; 432 | checkout.subtotalPriceV2.amount = getTotalPrice(checkout.lineItems) || 0; 433 | await saveData({ 434 | ...data, 435 | checkout 436 | }) 437 | 438 | return { 439 | checkout, 440 | checkoutUserErrors: [] 441 | } 442 | }, 443 | checkoutCreate: async () => { 444 | const data = await getData() 445 | const { checkout } = data 446 | 447 | if (!checkout.id) { 448 | await saveData({ 449 | ...data, 450 | checkout: DEF_CHECKOUT 451 | }) 452 | } 453 | return { 454 | checkout: !checkout.id ? DEF_CHECKOUT : checkout, 455 | checkoutUserErrors: [] 456 | } 457 | } 458 | }, 459 | Query: { 460 | node: async (_, { id }) => { 461 | const data = await getData() 462 | let foundNode = null; 463 | 464 | Object.keys(data).forEach(dataType => { 465 | const entity = data[dataType] 466 | if (foundNode) { return; } 467 | if (Array.isArray(entity)) { 468 | foundNode = entity.find(e => e.id === id) 469 | } else if (entity.id === id) { 470 | foundNode = entity 471 | } 472 | }) 473 | 474 | return foundNode 475 | }, 476 | hello: () => { 477 | return 'Hello world!'; 478 | }, 479 | productByHandle: async (parent, args, ...rest) => { 480 | let { handle } = args 481 | const products = await getAllProducts(args) 482 | 483 | const product = products.edges.find(e => e.node.handle === handle)?.node 484 | return product || null 485 | }, 486 | products: (parent, args, context, info) => { 487 | return getAllProducts(args) 488 | } 489 | }, 490 | }; 491 | 492 | const server = new ApolloServer({ typeDefs, resolvers }) 493 | server.start() 494 | 495 | const app = express(); 496 | server.applyMiddleware({ app }); 497 | 498 | 499 | app.listen(4000, () => { 500 | console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`) 501 | }) 502 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@apollo/protobufjs": { 8 | "version": "1.2.2", 9 | "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.2.tgz", 10 | "integrity": "sha512-vF+zxhPiLtkwxONs6YanSt1EpwpGilThpneExUN5K3tCymuxNnVq2yojTvnpRjv2QfsEIt/n7ozPIIzBLwGIDQ==", 11 | "requires": { 12 | "@protobufjs/aspromise": "^1.1.2", 13 | "@protobufjs/base64": "^1.1.2", 14 | "@protobufjs/codegen": "^2.0.4", 15 | "@protobufjs/eventemitter": "^1.1.0", 16 | "@protobufjs/fetch": "^1.1.0", 17 | "@protobufjs/float": "^1.0.2", 18 | "@protobufjs/inquire": "^1.1.0", 19 | "@protobufjs/path": "^1.1.2", 20 | "@protobufjs/pool": "^1.1.0", 21 | "@protobufjs/utf8": "^1.1.0", 22 | "@types/long": "^4.0.0", 23 | "@types/node": "^10.1.0", 24 | "long": "^4.0.0" 25 | }, 26 | "dependencies": { 27 | "@types/node": { 28 | "version": "10.17.60", 29 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", 30 | "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" 31 | } 32 | } 33 | }, 34 | "@apollographql/apollo-tools": { 35 | "version": "0.5.1", 36 | "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.1.tgz", 37 | "integrity": "sha512-ZII+/xUFfb9ezDU2gad114+zScxVFMVlZ91f8fGApMzlS1kkqoyLnC4AJaQ1Ya/X+b63I20B4Gd+eCL8QuB4sA==" 38 | }, 39 | "@apollographql/graphql-playground-html": { 40 | "version": "1.6.27", 41 | "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.27.tgz", 42 | "integrity": "sha512-tea2LweZvn6y6xFV11K0KC8ETjmm52mQrW+ezgB2O/aTQf8JGyFmMcRPFgUaQZeHbWdm8iisDC6EjOKsXu0nfw==", 43 | "requires": { 44 | "xss": "^1.0.8" 45 | } 46 | }, 47 | "@apollographql/graphql-upload-8-fork": { 48 | "version": "8.1.3", 49 | "resolved": "https://registry.npmjs.org/@apollographql/graphql-upload-8-fork/-/graphql-upload-8-fork-8.1.3.tgz", 50 | "integrity": "sha512-ssOPUT7euLqDXcdVv3Qs4LoL4BPtfermW1IOouaqEmj36TpHYDmYDIbKoSQxikd9vtMumFnP87OybH7sC9fJ6g==", 51 | "requires": { 52 | "@types/express": "*", 53 | "@types/fs-capacitor": "*", 54 | "@types/koa": "*", 55 | "busboy": "^0.3.1", 56 | "fs-capacitor": "^2.0.4", 57 | "http-errors": "^1.7.3", 58 | "object-path": "^0.11.4" 59 | } 60 | }, 61 | "@josephg/resolvable": { 62 | "version": "1.0.1", 63 | "resolved": "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz", 64 | "integrity": "sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==" 65 | }, 66 | "@protobufjs/aspromise": { 67 | "version": "1.1.2", 68 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 69 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" 70 | }, 71 | "@protobufjs/base64": { 72 | "version": "1.1.2", 73 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 74 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 75 | }, 76 | "@protobufjs/codegen": { 77 | "version": "2.0.4", 78 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 79 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 80 | }, 81 | "@protobufjs/eventemitter": { 82 | "version": "1.1.0", 83 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 84 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" 85 | }, 86 | "@protobufjs/fetch": { 87 | "version": "1.1.0", 88 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 89 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", 90 | "requires": { 91 | "@protobufjs/aspromise": "^1.1.1", 92 | "@protobufjs/inquire": "^1.1.0" 93 | } 94 | }, 95 | "@protobufjs/float": { 96 | "version": "1.0.2", 97 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 98 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" 99 | }, 100 | "@protobufjs/inquire": { 101 | "version": "1.1.0", 102 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 103 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" 104 | }, 105 | "@protobufjs/path": { 106 | "version": "1.1.2", 107 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 108 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" 109 | }, 110 | "@protobufjs/pool": { 111 | "version": "1.1.0", 112 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 113 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" 114 | }, 115 | "@protobufjs/utf8": { 116 | "version": "1.1.0", 117 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 118 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" 119 | }, 120 | "@types/accepts": { 121 | "version": "1.3.5", 122 | "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", 123 | "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", 124 | "requires": { 125 | "@types/node": "*" 126 | } 127 | }, 128 | "@types/body-parser": { 129 | "version": "1.19.0", 130 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", 131 | "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", 132 | "requires": { 133 | "@types/connect": "*", 134 | "@types/node": "*" 135 | } 136 | }, 137 | "@types/connect": { 138 | "version": "3.4.34", 139 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", 140 | "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", 141 | "requires": { 142 | "@types/node": "*" 143 | } 144 | }, 145 | "@types/content-disposition": { 146 | "version": "0.5.3", 147 | "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.3.tgz", 148 | "integrity": "sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg==" 149 | }, 150 | "@types/cookies": { 151 | "version": "0.7.6", 152 | "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.6.tgz", 153 | "integrity": "sha512-FK4U5Qyn7/Sc5ih233OuHO0qAkOpEcD/eG6584yEiLKizTFRny86qHLe/rej3HFQrkBuUjF4whFliAdODbVN/w==", 154 | "requires": { 155 | "@types/connect": "*", 156 | "@types/express": "*", 157 | "@types/keygrip": "*", 158 | "@types/node": "*" 159 | } 160 | }, 161 | "@types/cors": { 162 | "version": "2.8.10", 163 | "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", 164 | "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==" 165 | }, 166 | "@types/express": { 167 | "version": "4.17.11", 168 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz", 169 | "integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==", 170 | "requires": { 171 | "@types/body-parser": "*", 172 | "@types/express-serve-static-core": "^4.17.18", 173 | "@types/qs": "*", 174 | "@types/serve-static": "*" 175 | } 176 | }, 177 | "@types/express-serve-static-core": { 178 | "version": "4.17.19", 179 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz", 180 | "integrity": "sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA==", 181 | "requires": { 182 | "@types/node": "*", 183 | "@types/qs": "*", 184 | "@types/range-parser": "*" 185 | } 186 | }, 187 | "@types/fs-capacitor": { 188 | "version": "2.0.0", 189 | "resolved": "https://registry.npmjs.org/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz", 190 | "integrity": "sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ==", 191 | "requires": { 192 | "@types/node": "*" 193 | } 194 | }, 195 | "@types/http-assert": { 196 | "version": "1.5.1", 197 | "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.1.tgz", 198 | "integrity": "sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ==" 199 | }, 200 | "@types/http-errors": { 201 | "version": "1.8.0", 202 | "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.0.tgz", 203 | "integrity": "sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA==" 204 | }, 205 | "@types/keygrip": { 206 | "version": "1.0.2", 207 | "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", 208 | "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==" 209 | }, 210 | "@types/koa": { 211 | "version": "2.13.3", 212 | "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.3.tgz", 213 | "integrity": "sha512-TaujBV+Dhe/FvmSMZJtCFBms+bqQacgUebk/M2C2tq8iGmHE/DDf4DcW2Hc7NqusVZmy5xzrWOjtdPKNP+fTfw==", 214 | "requires": { 215 | "@types/accepts": "*", 216 | "@types/content-disposition": "*", 217 | "@types/cookies": "*", 218 | "@types/http-assert": "*", 219 | "@types/http-errors": "*", 220 | "@types/keygrip": "*", 221 | "@types/koa-compose": "*", 222 | "@types/node": "*" 223 | } 224 | }, 225 | "@types/koa-compose": { 226 | "version": "3.2.5", 227 | "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", 228 | "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", 229 | "requires": { 230 | "@types/koa": "*" 231 | } 232 | }, 233 | "@types/long": { 234 | "version": "4.0.1", 235 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", 236 | "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" 237 | }, 238 | "@types/mime": { 239 | "version": "1.3.2", 240 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", 241 | "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" 242 | }, 243 | "@types/node": { 244 | "version": "15.12.1", 245 | "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.1.tgz", 246 | "integrity": "sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw==" 247 | }, 248 | "@types/qs": { 249 | "version": "6.9.6", 250 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", 251 | "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==" 252 | }, 253 | "@types/range-parser": { 254 | "version": "1.2.3", 255 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", 256 | "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" 257 | }, 258 | "@types/serve-static": { 259 | "version": "1.13.9", 260 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", 261 | "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", 262 | "requires": { 263 | "@types/mime": "^1", 264 | "@types/node": "*" 265 | } 266 | }, 267 | "@types/ws": { 268 | "version": "7.4.4", 269 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.4.tgz", 270 | "integrity": "sha512-d/7W23JAXPodQNbOZNXvl2K+bqAQrCMwlh/nuQsPSQk6Fq0opHoPrUw43aHsvSbIiQPr8Of2hkFbnz1XBFVyZQ==", 271 | "requires": { 272 | "@types/node": "*" 273 | } 274 | }, 275 | "@wry/equality": { 276 | "version": "0.1.11", 277 | "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.11.tgz", 278 | "integrity": "sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==", 279 | "requires": { 280 | "tslib": "^1.9.3" 281 | }, 282 | "dependencies": { 283 | "tslib": { 284 | "version": "1.14.1", 285 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 286 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 287 | } 288 | } 289 | }, 290 | "accepts": { 291 | "version": "1.3.7", 292 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 293 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 294 | "requires": { 295 | "mime-types": "~2.1.24", 296 | "negotiator": "0.6.2" 297 | } 298 | }, 299 | "apollo-cache-control": { 300 | "version": "0.14.0", 301 | "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.14.0.tgz", 302 | "integrity": "sha512-qN4BCq90egQrgNnTRMUHikLZZAprf3gbm8rC5Vwmc6ZdLolQ7bFsa769Hqi6Tq/lS31KLsXBLTOsRbfPHph12w==", 303 | "requires": { 304 | "apollo-server-env": "^3.1.0", 305 | "apollo-server-plugin-base": "^0.13.0" 306 | } 307 | }, 308 | "apollo-datasource": { 309 | "version": "0.9.0", 310 | "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.9.0.tgz", 311 | "integrity": "sha512-y8H99NExU1Sk4TvcaUxTdzfq2SZo6uSj5dyh75XSQvbpH6gdAXIW9MaBcvlNC7n0cVPsidHmOcHOWxJ/pTXGjA==", 312 | "requires": { 313 | "apollo-server-caching": "^0.7.0", 314 | "apollo-server-env": "^3.1.0" 315 | } 316 | }, 317 | "apollo-graphql": { 318 | "version": "0.9.3", 319 | "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.9.3.tgz", 320 | "integrity": "sha512-rcAl2E841Iko4kSzj4Pt3PRBitmyq1MvoEmpl04TQSpGnoVgl1E/ZXuLBYxMTSnEAm7umn2IsoY+c6Ll9U/10A==", 321 | "requires": { 322 | "core-js-pure": "^3.10.2", 323 | "lodash.sortby": "^4.7.0", 324 | "sha.js": "^2.4.11" 325 | } 326 | }, 327 | "apollo-link": { 328 | "version": "1.2.14", 329 | "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.14.tgz", 330 | "integrity": "sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==", 331 | "requires": { 332 | "apollo-utilities": "^1.3.0", 333 | "ts-invariant": "^0.4.0", 334 | "tslib": "^1.9.3", 335 | "zen-observable-ts": "^0.8.21" 336 | }, 337 | "dependencies": { 338 | "tslib": { 339 | "version": "1.14.1", 340 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 341 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 342 | } 343 | } 344 | }, 345 | "apollo-reporting-protobuf": { 346 | "version": "0.8.0", 347 | "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.8.0.tgz", 348 | "integrity": "sha512-B3XmnkH6Y458iV6OsA7AhfwvTgeZnFq9nPVjbxmLKnvfkEl8hYADtz724uPa0WeBiD7DSFcnLtqg9yGmCkBohg==", 349 | "requires": { 350 | "@apollo/protobufjs": "1.2.2" 351 | } 352 | }, 353 | "apollo-server-caching": { 354 | "version": "0.7.0", 355 | "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.7.0.tgz", 356 | "integrity": "sha512-MsVCuf/2FxuTFVhGLK13B+TZH9tBd2qkyoXKKILIiGcZ5CDUEBO14vIV63aNkMkS1xxvK2U4wBcuuNj/VH2Mkw==", 357 | "requires": { 358 | "lru-cache": "^6.0.0" 359 | } 360 | }, 361 | "apollo-server-core": { 362 | "version": "2.25.0", 363 | "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.25.0.tgz", 364 | "integrity": "sha512-LqDmY+R5dcb6zj/RgM7P8NnURV2XdQFIF4rY7g80hD9mc2WSCKHF6eH+lHG0sFPW7f8iBr+lJ4LyETuWEVF0hg==", 365 | "requires": { 366 | "@apollographql/apollo-tools": "^0.5.0", 367 | "@apollographql/graphql-playground-html": "1.6.27", 368 | "@apollographql/graphql-upload-8-fork": "^8.1.3", 369 | "@josephg/resolvable": "^1.0.0", 370 | "@types/ws": "^7.0.0", 371 | "apollo-cache-control": "^0.14.0", 372 | "apollo-datasource": "^0.9.0", 373 | "apollo-graphql": "^0.9.0", 374 | "apollo-reporting-protobuf": "^0.8.0", 375 | "apollo-server-caching": "^0.7.0", 376 | "apollo-server-env": "^3.1.0", 377 | "apollo-server-errors": "^2.5.0", 378 | "apollo-server-plugin-base": "^0.13.0", 379 | "apollo-server-types": "^0.9.0", 380 | "apollo-tracing": "^0.15.0", 381 | "async-retry": "^1.2.1", 382 | "fast-json-stable-stringify": "^2.0.0", 383 | "graphql-extensions": "^0.15.0", 384 | "graphql-tag": "^2.11.0", 385 | "graphql-tools": "^4.0.8", 386 | "loglevel": "^1.6.7", 387 | "lru-cache": "^6.0.0", 388 | "sha.js": "^2.4.11", 389 | "subscriptions-transport-ws": "^0.9.11", 390 | "uuid": "^8.0.0", 391 | "ws": "^6.0.0" 392 | } 393 | }, 394 | "apollo-server-env": { 395 | "version": "3.1.0", 396 | "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-3.1.0.tgz", 397 | "integrity": "sha512-iGdZgEOAuVop3vb0F2J3+kaBVi4caMoxefHosxmgzAbbSpvWehB8Y1QiSyyMeouYC38XNVk5wnZl+jdGSsWsIQ==", 398 | "requires": { 399 | "node-fetch": "^2.6.1", 400 | "util.promisify": "^1.0.0" 401 | } 402 | }, 403 | "apollo-server-errors": { 404 | "version": "2.5.0", 405 | "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.5.0.tgz", 406 | "integrity": "sha512-lO5oTjgiC3vlVg2RKr3RiXIIQ5pGXBFxYGGUkKDhTud3jMIhs+gel8L8zsEjKaKxkjHhCQAA/bcEfYiKkGQIvA==" 407 | }, 408 | "apollo-server-express": { 409 | "version": "2.25.0", 410 | "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.25.0.tgz", 411 | "integrity": "sha512-FCTisD+VB1LCcTjjhKvQZ/dkly83KVlioFMgcPjW1X/kzCznRT3aQoVn9bQHlzQr7NnpwFseb4Rhd2KKD4wKEA==", 412 | "requires": { 413 | "@apollographql/graphql-playground-html": "1.6.27", 414 | "@types/accepts": "^1.3.5", 415 | "@types/body-parser": "1.19.0", 416 | "@types/cors": "2.8.10", 417 | "@types/express": "4.17.11", 418 | "@types/express-serve-static-core": "4.17.19", 419 | "accepts": "^1.3.5", 420 | "apollo-server-core": "^2.25.0", 421 | "apollo-server-types": "^0.9.0", 422 | "body-parser": "^1.18.3", 423 | "cors": "^2.8.5", 424 | "express": "^4.17.1", 425 | "graphql-subscriptions": "^1.0.0", 426 | "graphql-tools": "^4.0.8", 427 | "parseurl": "^1.3.2", 428 | "subscriptions-transport-ws": "^0.9.16", 429 | "type-is": "^1.6.16" 430 | } 431 | }, 432 | "apollo-server-plugin-base": { 433 | "version": "0.13.0", 434 | "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.13.0.tgz", 435 | "integrity": "sha512-L3TMmq2YE6BU6I4Tmgygmd0W55L+6XfD9137k+cWEBFu50vRY4Re+d+fL5WuPkk5xSPKd/PIaqzidu5V/zz8Kg==", 436 | "requires": { 437 | "apollo-server-types": "^0.9.0" 438 | } 439 | }, 440 | "apollo-server-types": { 441 | "version": "0.9.0", 442 | "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.9.0.tgz", 443 | "integrity": "sha512-qk9tg4Imwpk732JJHBkhW0jzfG0nFsLqK2DY6UhvJf7jLnRePYsPxWfPiNkxni27pLE2tiNlCwoDFSeWqpZyBg==", 444 | "requires": { 445 | "apollo-reporting-protobuf": "^0.8.0", 446 | "apollo-server-caching": "^0.7.0", 447 | "apollo-server-env": "^3.1.0" 448 | } 449 | }, 450 | "apollo-tracing": { 451 | "version": "0.15.0", 452 | "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.15.0.tgz", 453 | "integrity": "sha512-UP0fztFvaZPHDhIB/J+qGuy6hWO4If069MGC98qVs0I8FICIGu4/8ykpX3X3K6RtaQ56EDAWKykCxFv4ScxMeA==", 454 | "requires": { 455 | "apollo-server-env": "^3.1.0", 456 | "apollo-server-plugin-base": "^0.13.0" 457 | } 458 | }, 459 | "apollo-utilities": { 460 | "version": "1.3.4", 461 | "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.4.tgz", 462 | "integrity": "sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig==", 463 | "requires": { 464 | "@wry/equality": "^0.1.2", 465 | "fast-json-stable-stringify": "^2.0.0", 466 | "ts-invariant": "^0.4.0", 467 | "tslib": "^1.10.0" 468 | }, 469 | "dependencies": { 470 | "tslib": { 471 | "version": "1.14.1", 472 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 473 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 474 | } 475 | } 476 | }, 477 | "array-flatten": { 478 | "version": "1.1.1", 479 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 480 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 481 | }, 482 | "async-limiter": { 483 | "version": "1.0.1", 484 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 485 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" 486 | }, 487 | "async-retry": { 488 | "version": "1.3.1", 489 | "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.1.tgz", 490 | "integrity": "sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==", 491 | "requires": { 492 | "retry": "0.12.0" 493 | } 494 | }, 495 | "backo2": { 496 | "version": "1.0.2", 497 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 498 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" 499 | }, 500 | "body-parser": { 501 | "version": "1.19.0", 502 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 503 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 504 | "requires": { 505 | "bytes": "3.1.0", 506 | "content-type": "~1.0.4", 507 | "debug": "2.6.9", 508 | "depd": "~1.1.2", 509 | "http-errors": "1.7.2", 510 | "iconv-lite": "0.4.24", 511 | "on-finished": "~2.3.0", 512 | "qs": "6.7.0", 513 | "raw-body": "2.4.0", 514 | "type-is": "~1.6.17" 515 | }, 516 | "dependencies": { 517 | "http-errors": { 518 | "version": "1.7.2", 519 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 520 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 521 | "requires": { 522 | "depd": "~1.1.2", 523 | "inherits": "2.0.3", 524 | "setprototypeof": "1.1.1", 525 | "statuses": ">= 1.5.0 < 2", 526 | "toidentifier": "1.0.0" 527 | } 528 | }, 529 | "inherits": { 530 | "version": "2.0.3", 531 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 532 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 533 | }, 534 | "setprototypeof": { 535 | "version": "1.1.1", 536 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 537 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 538 | } 539 | } 540 | }, 541 | "busboy": { 542 | "version": "0.3.1", 543 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", 544 | "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", 545 | "requires": { 546 | "dicer": "0.3.0" 547 | } 548 | }, 549 | "bytes": { 550 | "version": "3.1.0", 551 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 552 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 553 | }, 554 | "call-bind": { 555 | "version": "1.0.2", 556 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 557 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 558 | "requires": { 559 | "function-bind": "^1.1.1", 560 | "get-intrinsic": "^1.0.2" 561 | } 562 | }, 563 | "commander": { 564 | "version": "2.20.3", 565 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 566 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 567 | }, 568 | "content-disposition": { 569 | "version": "0.5.3", 570 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 571 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 572 | "requires": { 573 | "safe-buffer": "5.1.2" 574 | }, 575 | "dependencies": { 576 | "safe-buffer": { 577 | "version": "5.1.2", 578 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 579 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 580 | } 581 | } 582 | }, 583 | "content-type": { 584 | "version": "1.0.4", 585 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 586 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 587 | }, 588 | "cookie": { 589 | "version": "0.4.0", 590 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 591 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 592 | }, 593 | "cookie-signature": { 594 | "version": "1.0.6", 595 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 596 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 597 | }, 598 | "core-js-pure": { 599 | "version": "3.14.0", 600 | "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.14.0.tgz", 601 | "integrity": "sha512-YVh+LN2FgNU0odThzm61BsdkwrbrchumFq3oztnE9vTKC4KS2fvnPmcx8t6jnqAyOTCTF4ZSiuK8Qhh7SNcL4g==" 602 | }, 603 | "cors": { 604 | "version": "2.8.5", 605 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 606 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 607 | "requires": { 608 | "object-assign": "^4", 609 | "vary": "^1" 610 | } 611 | }, 612 | "cssfilter": { 613 | "version": "0.0.10", 614 | "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", 615 | "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=" 616 | }, 617 | "debug": { 618 | "version": "2.6.9", 619 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 620 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 621 | "requires": { 622 | "ms": "2.0.0" 623 | } 624 | }, 625 | "define-properties": { 626 | "version": "1.1.3", 627 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 628 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 629 | "requires": { 630 | "object-keys": "^1.0.12" 631 | } 632 | }, 633 | "depd": { 634 | "version": "1.1.2", 635 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 636 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 637 | }, 638 | "deprecated-decorator": { 639 | "version": "0.1.6", 640 | "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", 641 | "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" 642 | }, 643 | "destroy": { 644 | "version": "1.0.4", 645 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 646 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 647 | }, 648 | "dicer": { 649 | "version": "0.3.0", 650 | "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", 651 | "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", 652 | "requires": { 653 | "streamsearch": "0.1.2" 654 | } 655 | }, 656 | "ee-first": { 657 | "version": "1.1.1", 658 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 659 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 660 | }, 661 | "encodeurl": { 662 | "version": "1.0.2", 663 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 664 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 665 | }, 666 | "es-abstract": { 667 | "version": "1.18.3", 668 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", 669 | "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", 670 | "requires": { 671 | "call-bind": "^1.0.2", 672 | "es-to-primitive": "^1.2.1", 673 | "function-bind": "^1.1.1", 674 | "get-intrinsic": "^1.1.1", 675 | "has": "^1.0.3", 676 | "has-symbols": "^1.0.2", 677 | "is-callable": "^1.2.3", 678 | "is-negative-zero": "^2.0.1", 679 | "is-regex": "^1.1.3", 680 | "is-string": "^1.0.6", 681 | "object-inspect": "^1.10.3", 682 | "object-keys": "^1.1.1", 683 | "object.assign": "^4.1.2", 684 | "string.prototype.trimend": "^1.0.4", 685 | "string.prototype.trimstart": "^1.0.4", 686 | "unbox-primitive": "^1.0.1" 687 | } 688 | }, 689 | "es-to-primitive": { 690 | "version": "1.2.1", 691 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 692 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 693 | "requires": { 694 | "is-callable": "^1.1.4", 695 | "is-date-object": "^1.0.1", 696 | "is-symbol": "^1.0.2" 697 | } 698 | }, 699 | "escape-html": { 700 | "version": "1.0.3", 701 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 702 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 703 | }, 704 | "etag": { 705 | "version": "1.8.1", 706 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 707 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 708 | }, 709 | "eventemitter3": { 710 | "version": "3.1.2", 711 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", 712 | "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" 713 | }, 714 | "express": { 715 | "version": "4.17.1", 716 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 717 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 718 | "requires": { 719 | "accepts": "~1.3.7", 720 | "array-flatten": "1.1.1", 721 | "body-parser": "1.19.0", 722 | "content-disposition": "0.5.3", 723 | "content-type": "~1.0.4", 724 | "cookie": "0.4.0", 725 | "cookie-signature": "1.0.6", 726 | "debug": "2.6.9", 727 | "depd": "~1.1.2", 728 | "encodeurl": "~1.0.2", 729 | "escape-html": "~1.0.3", 730 | "etag": "~1.8.1", 731 | "finalhandler": "~1.1.2", 732 | "fresh": "0.5.2", 733 | "merge-descriptors": "1.0.1", 734 | "methods": "~1.1.2", 735 | "on-finished": "~2.3.0", 736 | "parseurl": "~1.3.3", 737 | "path-to-regexp": "0.1.7", 738 | "proxy-addr": "~2.0.5", 739 | "qs": "6.7.0", 740 | "range-parser": "~1.2.1", 741 | "safe-buffer": "5.1.2", 742 | "send": "0.17.1", 743 | "serve-static": "1.14.1", 744 | "setprototypeof": "1.1.1", 745 | "statuses": "~1.5.0", 746 | "type-is": "~1.6.18", 747 | "utils-merge": "1.0.1", 748 | "vary": "~1.1.2" 749 | }, 750 | "dependencies": { 751 | "safe-buffer": { 752 | "version": "5.1.2", 753 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 754 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 755 | }, 756 | "setprototypeof": { 757 | "version": "1.1.1", 758 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 759 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 760 | } 761 | } 762 | }, 763 | "express-graphql": { 764 | "version": "0.12.0", 765 | "resolved": "https://registry.npmjs.org/express-graphql/-/express-graphql-0.12.0.tgz", 766 | "integrity": "sha512-DwYaJQy0amdy3pgNtiTDuGGM2BLdj+YO2SgbKoLliCfuHv3VVTt7vNG/ZqK2hRYjtYHE2t2KB705EU94mE64zg==", 767 | "requires": { 768 | "accepts": "^1.3.7", 769 | "content-type": "^1.0.4", 770 | "http-errors": "1.8.0", 771 | "raw-body": "^2.4.1" 772 | }, 773 | "dependencies": { 774 | "raw-body": { 775 | "version": "2.4.1", 776 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", 777 | "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", 778 | "requires": { 779 | "bytes": "3.1.0", 780 | "http-errors": "1.7.3", 781 | "iconv-lite": "0.4.24", 782 | "unpipe": "1.0.0" 783 | }, 784 | "dependencies": { 785 | "http-errors": { 786 | "version": "1.7.3", 787 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", 788 | "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", 789 | "requires": { 790 | "depd": "~1.1.2", 791 | "inherits": "2.0.4", 792 | "setprototypeof": "1.1.1", 793 | "statuses": ">= 1.5.0 < 2", 794 | "toidentifier": "1.0.0" 795 | } 796 | } 797 | } 798 | }, 799 | "setprototypeof": { 800 | "version": "1.1.1", 801 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 802 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 803 | } 804 | } 805 | }, 806 | "fast-json-stable-stringify": { 807 | "version": "2.1.0", 808 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 809 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 810 | }, 811 | "finalhandler": { 812 | "version": "1.1.2", 813 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 814 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 815 | "requires": { 816 | "debug": "2.6.9", 817 | "encodeurl": "~1.0.2", 818 | "escape-html": "~1.0.3", 819 | "on-finished": "~2.3.0", 820 | "parseurl": "~1.3.3", 821 | "statuses": "~1.5.0", 822 | "unpipe": "~1.0.0" 823 | } 824 | }, 825 | "for-each": { 826 | "version": "0.3.3", 827 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 828 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 829 | "requires": { 830 | "is-callable": "^1.1.3" 831 | } 832 | }, 833 | "forwarded": { 834 | "version": "0.2.0", 835 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 836 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 837 | }, 838 | "fresh": { 839 | "version": "0.5.2", 840 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 841 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 842 | }, 843 | "fs-capacitor": { 844 | "version": "2.0.4", 845 | "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.4.tgz", 846 | "integrity": "sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA==" 847 | }, 848 | "function-bind": { 849 | "version": "1.1.1", 850 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 851 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 852 | }, 853 | "get-intrinsic": { 854 | "version": "1.1.1", 855 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 856 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 857 | "requires": { 858 | "function-bind": "^1.1.1", 859 | "has": "^1.0.3", 860 | "has-symbols": "^1.0.1" 861 | } 862 | }, 863 | "graphql": { 864 | "version": "15.5.0", 865 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.5.0.tgz", 866 | "integrity": "sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA==" 867 | }, 868 | "graphql-extensions": { 869 | "version": "0.15.0", 870 | "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.15.0.tgz", 871 | "integrity": "sha512-bVddVO8YFJPwuACn+3pgmrEg6I8iBuYLuwvxiE+lcQQ7POotVZxm2rgGw0PvVYmWWf3DT7nTVDZ5ROh/ALp8mA==", 872 | "requires": { 873 | "@apollographql/apollo-tools": "^0.5.0", 874 | "apollo-server-env": "^3.1.0", 875 | "apollo-server-types": "^0.9.0" 876 | } 877 | }, 878 | "graphql-subscriptions": { 879 | "version": "1.2.1", 880 | "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.2.1.tgz", 881 | "integrity": "sha512-95yD/tKi24q8xYa7Q9rhQN16AYj5wPbrb8tmHGM3WRc9EBmWrG/0kkMl+tQG8wcEuE9ibR4zyOM31p5Sdr2v4g==", 882 | "requires": { 883 | "iterall": "^1.3.0" 884 | } 885 | }, 886 | "graphql-tag": { 887 | "version": "2.12.4", 888 | "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.4.tgz", 889 | "integrity": "sha512-VV1U4O+9x99EkNpNmCUV5RZwq6MnK4+pGbRYWG+lA/m3uo7TSqJF81OkcOP148gFP6fzdl7JWYBrwWVTS9jXww==", 890 | "requires": { 891 | "tslib": "^2.1.0" 892 | } 893 | }, 894 | "graphql-tools": { 895 | "version": "4.0.8", 896 | "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.8.tgz", 897 | "integrity": "sha512-MW+ioleBrwhRjalKjYaLQbr+920pHBgy9vM/n47sswtns8+96sRn5M/G+J1eu7IMeKWiN/9p6tmwCHU7552VJg==", 898 | "requires": { 899 | "apollo-link": "^1.2.14", 900 | "apollo-utilities": "^1.0.1", 901 | "deprecated-decorator": "^0.1.6", 902 | "iterall": "^1.1.3", 903 | "uuid": "^3.1.0" 904 | }, 905 | "dependencies": { 906 | "uuid": { 907 | "version": "3.4.0", 908 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 909 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 910 | } 911 | } 912 | }, 913 | "has": { 914 | "version": "1.0.3", 915 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 916 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 917 | "requires": { 918 | "function-bind": "^1.1.1" 919 | } 920 | }, 921 | "has-bigints": { 922 | "version": "1.0.1", 923 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", 924 | "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" 925 | }, 926 | "has-symbols": { 927 | "version": "1.0.2", 928 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 929 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" 930 | }, 931 | "http-errors": { 932 | "version": "1.8.0", 933 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", 934 | "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", 935 | "requires": { 936 | "depd": "~1.1.2", 937 | "inherits": "2.0.4", 938 | "setprototypeof": "1.2.0", 939 | "statuses": ">= 1.5.0 < 2", 940 | "toidentifier": "1.0.0" 941 | } 942 | }, 943 | "iconv-lite": { 944 | "version": "0.4.24", 945 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 946 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 947 | "requires": { 948 | "safer-buffer": ">= 2.1.2 < 3" 949 | } 950 | }, 951 | "inherits": { 952 | "version": "2.0.4", 953 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 954 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 955 | }, 956 | "ipaddr.js": { 957 | "version": "1.9.1", 958 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 959 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 960 | }, 961 | "is-bigint": { 962 | "version": "1.0.2", 963 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", 964 | "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" 965 | }, 966 | "is-boolean-object": { 967 | "version": "1.1.1", 968 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", 969 | "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", 970 | "requires": { 971 | "call-bind": "^1.0.2" 972 | } 973 | }, 974 | "is-callable": { 975 | "version": "1.2.3", 976 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", 977 | "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" 978 | }, 979 | "is-date-object": { 980 | "version": "1.0.4", 981 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", 982 | "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" 983 | }, 984 | "is-negative-zero": { 985 | "version": "2.0.1", 986 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", 987 | "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" 988 | }, 989 | "is-number-object": { 990 | "version": "1.0.5", 991 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", 992 | "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==" 993 | }, 994 | "is-regex": { 995 | "version": "1.1.3", 996 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", 997 | "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", 998 | "requires": { 999 | "call-bind": "^1.0.2", 1000 | "has-symbols": "^1.0.2" 1001 | } 1002 | }, 1003 | "is-string": { 1004 | "version": "1.0.6", 1005 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", 1006 | "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" 1007 | }, 1008 | "is-symbol": { 1009 | "version": "1.0.4", 1010 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 1011 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 1012 | "requires": { 1013 | "has-symbols": "^1.0.2" 1014 | } 1015 | }, 1016 | "iterall": { 1017 | "version": "1.3.0", 1018 | "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz", 1019 | "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==" 1020 | }, 1021 | "lodash.sortby": { 1022 | "version": "4.7.0", 1023 | "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", 1024 | "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" 1025 | }, 1026 | "loglevel": { 1027 | "version": "1.7.1", 1028 | "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", 1029 | "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" 1030 | }, 1031 | "long": { 1032 | "version": "4.0.0", 1033 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 1034 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 1035 | }, 1036 | "lru-cache": { 1037 | "version": "6.0.0", 1038 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1039 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1040 | "requires": { 1041 | "yallist": "^4.0.0" 1042 | } 1043 | }, 1044 | "media-typer": { 1045 | "version": "0.3.0", 1046 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1047 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 1048 | }, 1049 | "merge-descriptors": { 1050 | "version": "1.0.1", 1051 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1052 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 1053 | }, 1054 | "methods": { 1055 | "version": "1.1.2", 1056 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1057 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 1058 | }, 1059 | "mime": { 1060 | "version": "1.6.0", 1061 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1062 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 1063 | }, 1064 | "mime-db": { 1065 | "version": "1.48.0", 1066 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", 1067 | "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" 1068 | }, 1069 | "mime-types": { 1070 | "version": "2.1.31", 1071 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", 1072 | "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", 1073 | "requires": { 1074 | "mime-db": "1.48.0" 1075 | } 1076 | }, 1077 | "ms": { 1078 | "version": "2.0.0", 1079 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1080 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1081 | }, 1082 | "negotiator": { 1083 | "version": "0.6.2", 1084 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 1085 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 1086 | }, 1087 | "node-fetch": { 1088 | "version": "2.6.1", 1089 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 1090 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 1091 | }, 1092 | "object-assign": { 1093 | "version": "4.1.1", 1094 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1095 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1096 | }, 1097 | "object-inspect": { 1098 | "version": "1.10.3", 1099 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", 1100 | "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" 1101 | }, 1102 | "object-keys": { 1103 | "version": "1.1.1", 1104 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1105 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 1106 | }, 1107 | "object-path": { 1108 | "version": "0.11.5", 1109 | "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.5.tgz", 1110 | "integrity": "sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg==" 1111 | }, 1112 | "object.assign": { 1113 | "version": "4.1.2", 1114 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 1115 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 1116 | "requires": { 1117 | "call-bind": "^1.0.0", 1118 | "define-properties": "^1.1.3", 1119 | "has-symbols": "^1.0.1", 1120 | "object-keys": "^1.1.1" 1121 | } 1122 | }, 1123 | "object.getownpropertydescriptors": { 1124 | "version": "2.1.2", 1125 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", 1126 | "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", 1127 | "requires": { 1128 | "call-bind": "^1.0.2", 1129 | "define-properties": "^1.1.3", 1130 | "es-abstract": "^1.18.0-next.2" 1131 | } 1132 | }, 1133 | "on-finished": { 1134 | "version": "2.3.0", 1135 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1136 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 1137 | "requires": { 1138 | "ee-first": "1.1.1" 1139 | } 1140 | }, 1141 | "parseurl": { 1142 | "version": "1.3.3", 1143 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1144 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 1145 | }, 1146 | "path-to-regexp": { 1147 | "version": "0.1.7", 1148 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1149 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 1150 | }, 1151 | "proxy-addr": { 1152 | "version": "2.0.7", 1153 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1154 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1155 | "requires": { 1156 | "forwarded": "0.2.0", 1157 | "ipaddr.js": "1.9.1" 1158 | } 1159 | }, 1160 | "qs": { 1161 | "version": "6.7.0", 1162 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 1163 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 1164 | }, 1165 | "range-parser": { 1166 | "version": "1.2.1", 1167 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1168 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 1169 | }, 1170 | "raw-body": { 1171 | "version": "2.4.0", 1172 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 1173 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 1174 | "requires": { 1175 | "bytes": "3.1.0", 1176 | "http-errors": "1.7.2", 1177 | "iconv-lite": "0.4.24", 1178 | "unpipe": "1.0.0" 1179 | }, 1180 | "dependencies": { 1181 | "http-errors": { 1182 | "version": "1.7.2", 1183 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 1184 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 1185 | "requires": { 1186 | "depd": "~1.1.2", 1187 | "inherits": "2.0.3", 1188 | "setprototypeof": "1.1.1", 1189 | "statuses": ">= 1.5.0 < 2", 1190 | "toidentifier": "1.0.0" 1191 | } 1192 | }, 1193 | "inherits": { 1194 | "version": "2.0.3", 1195 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1196 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1197 | }, 1198 | "setprototypeof": { 1199 | "version": "1.1.1", 1200 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 1201 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 1202 | } 1203 | } 1204 | }, 1205 | "retry": { 1206 | "version": "0.12.0", 1207 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", 1208 | "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" 1209 | }, 1210 | "safe-buffer": { 1211 | "version": "5.2.1", 1212 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1213 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1214 | }, 1215 | "safer-buffer": { 1216 | "version": "2.1.2", 1217 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1218 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1219 | }, 1220 | "send": { 1221 | "version": "0.17.1", 1222 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 1223 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 1224 | "requires": { 1225 | "debug": "2.6.9", 1226 | "depd": "~1.1.2", 1227 | "destroy": "~1.0.4", 1228 | "encodeurl": "~1.0.2", 1229 | "escape-html": "~1.0.3", 1230 | "etag": "~1.8.1", 1231 | "fresh": "0.5.2", 1232 | "http-errors": "~1.7.2", 1233 | "mime": "1.6.0", 1234 | "ms": "2.1.1", 1235 | "on-finished": "~2.3.0", 1236 | "range-parser": "~1.2.1", 1237 | "statuses": "~1.5.0" 1238 | }, 1239 | "dependencies": { 1240 | "http-errors": { 1241 | "version": "1.7.3", 1242 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", 1243 | "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", 1244 | "requires": { 1245 | "depd": "~1.1.2", 1246 | "inherits": "2.0.4", 1247 | "setprototypeof": "1.1.1", 1248 | "statuses": ">= 1.5.0 < 2", 1249 | "toidentifier": "1.0.0" 1250 | } 1251 | }, 1252 | "ms": { 1253 | "version": "2.1.1", 1254 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 1255 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 1256 | }, 1257 | "setprototypeof": { 1258 | "version": "1.1.1", 1259 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 1260 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 1261 | } 1262 | } 1263 | }, 1264 | "serve-static": { 1265 | "version": "1.14.1", 1266 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 1267 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 1268 | "requires": { 1269 | "encodeurl": "~1.0.2", 1270 | "escape-html": "~1.0.3", 1271 | "parseurl": "~1.3.3", 1272 | "send": "0.17.1" 1273 | } 1274 | }, 1275 | "setprototypeof": { 1276 | "version": "1.2.0", 1277 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1278 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1279 | }, 1280 | "sha.js": { 1281 | "version": "2.4.11", 1282 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 1283 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 1284 | "requires": { 1285 | "inherits": "^2.0.1", 1286 | "safe-buffer": "^5.0.1" 1287 | } 1288 | }, 1289 | "statuses": { 1290 | "version": "1.5.0", 1291 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 1292 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 1293 | }, 1294 | "streamsearch": { 1295 | "version": "0.1.2", 1296 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", 1297 | "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" 1298 | }, 1299 | "string.prototype.trimend": { 1300 | "version": "1.0.4", 1301 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", 1302 | "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", 1303 | "requires": { 1304 | "call-bind": "^1.0.2", 1305 | "define-properties": "^1.1.3" 1306 | } 1307 | }, 1308 | "string.prototype.trimstart": { 1309 | "version": "1.0.4", 1310 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", 1311 | "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", 1312 | "requires": { 1313 | "call-bind": "^1.0.2", 1314 | "define-properties": "^1.1.3" 1315 | } 1316 | }, 1317 | "subscriptions-transport-ws": { 1318 | "version": "0.9.18", 1319 | "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.18.tgz", 1320 | "integrity": "sha512-tztzcBTNoEbuErsVQpTN2xUNN/efAZXyCyL5m3x4t6SKrEiTL2N8SaKWBFWM4u56pL79ULif3zjyeq+oV+nOaA==", 1321 | "requires": { 1322 | "backo2": "^1.0.2", 1323 | "eventemitter3": "^3.1.0", 1324 | "iterall": "^1.2.1", 1325 | "symbol-observable": "^1.0.4", 1326 | "ws": "^5.2.0" 1327 | }, 1328 | "dependencies": { 1329 | "ws": { 1330 | "version": "5.2.2", 1331 | "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", 1332 | "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", 1333 | "requires": { 1334 | "async-limiter": "~1.0.0" 1335 | } 1336 | } 1337 | } 1338 | }, 1339 | "symbol-observable": { 1340 | "version": "1.2.0", 1341 | "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", 1342 | "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" 1343 | }, 1344 | "toidentifier": { 1345 | "version": "1.0.0", 1346 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 1347 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 1348 | }, 1349 | "ts-invariant": { 1350 | "version": "0.4.4", 1351 | "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz", 1352 | "integrity": "sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==", 1353 | "requires": { 1354 | "tslib": "^1.9.3" 1355 | }, 1356 | "dependencies": { 1357 | "tslib": { 1358 | "version": "1.14.1", 1359 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1360 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 1361 | } 1362 | } 1363 | }, 1364 | "tslib": { 1365 | "version": "2.2.0", 1366 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", 1367 | "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" 1368 | }, 1369 | "type-is": { 1370 | "version": "1.6.18", 1371 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1372 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1373 | "requires": { 1374 | "media-typer": "0.3.0", 1375 | "mime-types": "~2.1.24" 1376 | } 1377 | }, 1378 | "unbox-primitive": { 1379 | "version": "1.0.1", 1380 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", 1381 | "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", 1382 | "requires": { 1383 | "function-bind": "^1.1.1", 1384 | "has-bigints": "^1.0.1", 1385 | "has-symbols": "^1.0.2", 1386 | "which-boxed-primitive": "^1.0.2" 1387 | } 1388 | }, 1389 | "unpipe": { 1390 | "version": "1.0.0", 1391 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1392 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1393 | }, 1394 | "util.promisify": { 1395 | "version": "1.1.1", 1396 | "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.1.tgz", 1397 | "integrity": "sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==", 1398 | "requires": { 1399 | "call-bind": "^1.0.0", 1400 | "define-properties": "^1.1.3", 1401 | "for-each": "^0.3.3", 1402 | "has-symbols": "^1.0.1", 1403 | "object.getownpropertydescriptors": "^2.1.1" 1404 | } 1405 | }, 1406 | "utils-merge": { 1407 | "version": "1.0.1", 1408 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1409 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 1410 | }, 1411 | "uuid": { 1412 | "version": "8.3.2", 1413 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 1414 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" 1415 | }, 1416 | "vary": { 1417 | "version": "1.1.2", 1418 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1419 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 1420 | }, 1421 | "which-boxed-primitive": { 1422 | "version": "1.0.2", 1423 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 1424 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 1425 | "requires": { 1426 | "is-bigint": "^1.0.1", 1427 | "is-boolean-object": "^1.1.0", 1428 | "is-number-object": "^1.0.4", 1429 | "is-string": "^1.0.5", 1430 | "is-symbol": "^1.0.3" 1431 | } 1432 | }, 1433 | "ws": { 1434 | "version": "6.2.2", 1435 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", 1436 | "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", 1437 | "requires": { 1438 | "async-limiter": "~1.0.0" 1439 | } 1440 | }, 1441 | "xss": { 1442 | "version": "1.0.9", 1443 | "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.9.tgz", 1444 | "integrity": "sha512-2t7FahYnGJys6DpHLhajusId7R0Pm2yTmuL0GV9+mV0ZlaLSnb2toBmppATfg5sWIhZQGlsTLoecSzya+l4EAQ==", 1445 | "requires": { 1446 | "commander": "^2.20.3", 1447 | "cssfilter": "0.0.10" 1448 | } 1449 | }, 1450 | "yallist": { 1451 | "version": "4.0.0", 1452 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1453 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1454 | }, 1455 | "zen-observable": { 1456 | "version": "0.8.15", 1457 | "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", 1458 | "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" 1459 | }, 1460 | "zen-observable-ts": { 1461 | "version": "0.8.21", 1462 | "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz", 1463 | "integrity": "sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg==", 1464 | "requires": { 1465 | "tslib": "^1.9.3", 1466 | "zen-observable": "^0.8.0" 1467 | }, 1468 | "dependencies": { 1469 | "tslib": { 1470 | "version": "1.14.1", 1471 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1472 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 1473 | } 1474 | } 1475 | } 1476 | } 1477 | } 1478 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node index.js" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "apollo-server-express": "^2.24.0", 14 | "express": "^4.17.1", 15 | "express-graphql": "^0.12.0", 16 | "graphql": "^15.5.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | 1. ```npm install``` 2 | 2. ```npm start``` 3 | 3. go to ```localhost:4000/graphql``` to testout queries 4 | --------------------------------------------------------------------------------