├── .gitignore ├── README.md ├── lib └── queryGraphQL.js ├── package-lock.json ├── package.json ├── test └── test.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .next 2 | .env 3 | .env.remote 4 | tmp_* 5 | .DS_Store 6 | node_modules 7 | sam_post.yaml 8 | template-packaged.yaml 9 | *-packaged.yaml 10 | build/ 11 | packaged.yaml 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # node-query-appsync 2 | 3 | Library to query AppSync GraphQL API from Node.js process such as Lambda 4 | 5 | ## Usage 6 | 7 | ``` 8 | npm i node-query-appsync --save 9 | ``` 10 | 11 | ``` 12 | const queryGraphQL = require('node-query-appsync'); 13 | 14 | exports.handler = async (event, context, callback) => { 15 | 16 | // ... 17 | 18 | const eventsQuery = { 19 | operationName: 'ListEvents', 20 | query: 21 | `query ListEvents($venue: String!) { 22 | broadcaster_by_key(venue: $venue) { 23 | title 24 | date 25 | owner { 26 | first_name 27 | last_name 28 | } 29 | } 30 | }` 31 | , 32 | variables: { 33 | venue, 34 | } 35 | }; 36 | 37 | const { data } = await queryGraphQL(eventsQuery); 38 | 39 | // ... 40 | }; 41 | 42 | ``` 43 | 44 | ## Advantages of using AppSync from Backend 45 | 46 | Mutations that are called by lambdas, invoked by triggers, webhooks and other events can then invoke subscriptions giving you nice real-time capabilities on front-end, while maintaining uniform global schema. 47 | 48 | ## Environment prerequisites 49 | 50 | The following environment variables are used. They are pre-set by default in Lambda environment. 51 | 52 | - AWS_REGION 53 | - AWS_ACCESS_KEY_ID 54 | - AWS_SECRET_ACCESS_KEY 55 | - AWS_SESSION_TOKEN 56 | 57 | - GRAPHQL_API Needs to be set in the environment (AppSync endpoint) 58 | 59 | ## Configuring Lambda permissions to AppSync 60 | 61 | 1) Use AWS_IAM authentication type with your GraphQL API. 62 | CloudFormation example (YAML): 63 | 64 | ``` 65 | GraphQLApi: 66 | Type: "AWS::AppSync::GraphQLApi" 67 | Properties: 68 | Name: ExampleApi 69 | AuthenticationType: "AWS_IAM" 70 | ``` 71 | 72 | 2) Add permissions to Lambda to appsync:GraphQL Action. 73 | CloudFormation example (YAML): 74 | 75 | ``` 76 | Role: 77 | Type: "AWS::IAM::Role" 78 | Properties: 79 | RoleName: example-lambda-role 80 | AssumeRolePolicyDocument: 81 | Version: "2012-10-17" 82 | Statement: 83 | - 84 | Effect: "Allow" 85 | Principal: 86 | Service: 87 | - "lambda.amazonaws.com" 88 | Action: 89 | - "sts:AssumeRole" 90 | Path: "/" 91 | Policies: 92 | - PolicyName: Logs 93 | PolicyDocument: 94 | Version: 2012-10-17 95 | Statement: 96 | - 97 | Effect: Allow 98 | Action: 99 | - "logs:CreateLogGroup" 100 | - "logs:CreateLogStream" 101 | - "logs:PutLogEvents" 102 | Resource: "arn:aws:logs:*:*:*" 103 | - 104 | Effect: Allow 105 | Action: appsync:GraphQL 106 | Resource: 107 | # Specify limited queries and mutations here: 108 | - !Sub "${GraphQLApi}/types/Query/*" 109 | - !Sub "${GraphQLApi}/types/Mutation/*" 110 | ``` 111 | 112 | ## Test 113 | TODO: Add some real tests 114 | 115 | export GRAPHQL_API=https://YOURENDPOINT.appsync-api.us-east-1.amazonaws.com/graphql && export AWS_REGION=us-east-1 && export AWS_ACCESS_KEY_ID=YOURKEYID && export AWS_SECRET_ACCESS_KEY=YOURSECRET && node test/test.js 116 | 117 | ## Limitations 118 | 119 | Use with Node 8+ 120 | 121 | ## Thanks 122 | 123 | Adrian Hall @AwsforMobile 124 | Code is extracted from this article https://read.acloud.guru/backend-graphql-how-to-trigger-an-aws-appsync-mutation-from-aws-lambda-eda13ebc96c3. 125 | 126 | ## License 127 | MIT 128 | -------------------------------------------------------------------------------- /lib/queryGraphQL.js: -------------------------------------------------------------------------------- 1 | const env = require('process').env; 2 | const fetch = require('node-fetch'); 3 | const URL = require('url'); 4 | const AWS = require('aws-sdk'); 5 | 6 | 7 | // Authenticate as lambda 8 | AWS.config.update({ 9 | region: env.AWS_REGION, 10 | credentials: new AWS.Credentials(env.AWS_ACCESS_KEY_ID, env.AWS_SECRET_ACCESS_KEY, env.AWS_SESSION_TOKEN) 11 | }); 12 | 13 | const uri = URL.parse(env.GRAPHQL_API); 14 | 15 | module.exports = async (post_body) => { 16 | try { 17 | // console.log(`Posting = ${JSON.stringify(post_body, null, 2)}`) 18 | const httpRequest = new AWS.HttpRequest(uri.href, env.AWS_REGION); 19 | httpRequest.headers.host = uri.host; 20 | httpRequest.headers['Content-Type'] = 'application/json'; 21 | httpRequest.method = 'POST'; 22 | httpRequest.body = JSON.stringify(post_body); 23 | 24 | const creds = await AWS.config.credentials.getPromise(); 25 | const signer = new AWS.Signers.V4(httpRequest, "appsync", true); 26 | signer.addAuthorization(AWS.config.credentials, AWS.util.date.getDate()); 27 | 28 | const options = { 29 | method: httpRequest.method, 30 | body: httpRequest.body, 31 | headers: httpRequest.headers 32 | }; 33 | 34 | const res = await fetch(uri.href, options); 35 | const json = await res.json(); 36 | // console.log(`JSON Response = ${JSON.stringify(json, null, 2)}`); 37 | 38 | return json; 39 | } catch (err) { 40 | console.error(`FETCH ERROR: ${JSON.stringify(err, null, 2)}`); 41 | throw err; 42 | } 43 | } 44 | 45 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "aws-sdk": { 6 | "version": "2.372.0", 7 | "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.372.0.tgz", 8 | "integrity": "sha512-5DLhDMQnULyZPcKSg9shYtSvkhVg9Cmg91aLi+4R8Nm/snM1THsaQKzSx/5vBd3Z+b2FLc4Z4Gp+1WvSqds1uA==", 9 | "requires": { 10 | "buffer": "4.9.1", 11 | "events": "1.1.1", 12 | "ieee754": "1.1.8", 13 | "jmespath": "0.15.0", 14 | "querystring": "0.2.0", 15 | "sax": "1.2.1", 16 | "url": "0.10.3", 17 | "uuid": "3.1.0", 18 | "xml2js": "0.4.19" 19 | }, 20 | "dependencies": { 21 | "uuid": { 22 | "version": "3.1.0", 23 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 24 | "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" 25 | } 26 | } 27 | }, 28 | "base64-js": { 29 | "version": "1.3.0", 30 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", 31 | "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" 32 | }, 33 | "buffer": { 34 | "version": "4.9.1", 35 | "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", 36 | "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", 37 | "requires": { 38 | "base64-js": "^1.0.2", 39 | "ieee754": "^1.1.4", 40 | "isarray": "^1.0.0" 41 | } 42 | }, 43 | "events": { 44 | "version": "1.1.1", 45 | "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", 46 | "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" 47 | }, 48 | "ieee754": { 49 | "version": "1.1.8", 50 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", 51 | "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" 52 | }, 53 | "isarray": { 54 | "version": "1.0.0", 55 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 56 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 57 | }, 58 | "jmespath": { 59 | "version": "0.15.0", 60 | "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", 61 | "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" 62 | }, 63 | "punycode": { 64 | "version": "1.3.2", 65 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 66 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" 67 | }, 68 | "querystring": { 69 | "version": "0.2.0", 70 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 71 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" 72 | }, 73 | "sax": { 74 | "version": "1.2.1", 75 | "resolved": "http://registry.npmjs.org/sax/-/sax-1.2.1.tgz", 76 | "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" 77 | }, 78 | "url": { 79 | "version": "0.10.3", 80 | "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", 81 | "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", 82 | "requires": { 83 | "punycode": "1.3.2", 84 | "querystring": "0.2.0" 85 | } 86 | }, 87 | "xml2js": { 88 | "version": "0.4.19", 89 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", 90 | "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", 91 | "requires": { 92 | "sax": ">=0.6.0", 93 | "xmlbuilder": "~9.0.1" 94 | } 95 | }, 96 | "xmlbuilder": { 97 | "version": "9.0.7", 98 | "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", 99 | "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" 100 | } 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "aws-sdk": ">=2.814.0", 4 | "node-fetch": "^2.6.7" 5 | }, 6 | "private": true, 7 | "main": "lib/queryGraphQL.js" 8 | } 9 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | const queryGraphQL = require("../lib/queryGraphQL"); 2 | 3 | const eventsQuery = { 4 | operationName: 'MyEvents', 5 | query: 6 | `query MyEvents($id: String) { 7 | events(id: $id) { 8 | title 9 | } 10 | }` 11 | , 12 | variables: { 13 | id: "Test" 14 | } 15 | }; 16 | 17 | (async function() { 18 | try { 19 | const res = await queryGraphQL(eventsQuery); 20 | const { data } = res; 21 | console.log(data); 22 | } catch (err) { 23 | console.error(err); 24 | } 25 | })(); -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | available-typed-arrays@^1.0.5: 6 | version "1.0.5" 7 | resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" 8 | integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== 9 | 10 | aws-sdk@>=2.814.0: 11 | version "2.1217.0" 12 | resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1217.0.tgz#2493e121a2b63508a40333d19664ac189fbdc631" 13 | integrity sha512-Mem3YD+vevt0qNg1aKB+7jdM2UMRIW2b3L5YDHzCctukndh91Y0rpy+EypPo4GXhQv5lfP+H9h+Csh/dvOQJiw== 14 | dependencies: 15 | buffer "4.9.2" 16 | events "1.1.1" 17 | ieee754 "1.1.13" 18 | jmespath "0.16.0" 19 | querystring "0.2.0" 20 | sax "1.2.1" 21 | url "0.10.3" 22 | util "^0.12.4" 23 | uuid "8.0.0" 24 | xml2js "0.4.19" 25 | 26 | base64-js@^1.0.2: 27 | version "1.5.1" 28 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 29 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 30 | 31 | buffer@4.9.2: 32 | version "4.9.2" 33 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" 34 | integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== 35 | dependencies: 36 | base64-js "^1.0.2" 37 | ieee754 "^1.1.4" 38 | isarray "^1.0.0" 39 | 40 | call-bind@^1.0.0, call-bind@^1.0.2: 41 | version "1.0.2" 42 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 43 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 44 | dependencies: 45 | function-bind "^1.1.1" 46 | get-intrinsic "^1.0.2" 47 | 48 | define-properties@^1.1.3, define-properties@^1.1.4: 49 | version "1.1.4" 50 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" 51 | integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== 52 | dependencies: 53 | has-property-descriptors "^1.0.0" 54 | object-keys "^1.1.1" 55 | 56 | es-abstract@^1.19.0, es-abstract@^1.19.5, es-abstract@^1.20.0: 57 | version "1.20.2" 58 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.2.tgz#8495a07bc56d342a3b8ea3ab01bd986700c2ccb3" 59 | integrity sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ== 60 | dependencies: 61 | call-bind "^1.0.2" 62 | es-to-primitive "^1.2.1" 63 | function-bind "^1.1.1" 64 | function.prototype.name "^1.1.5" 65 | get-intrinsic "^1.1.2" 66 | get-symbol-description "^1.0.0" 67 | has "^1.0.3" 68 | has-property-descriptors "^1.0.0" 69 | has-symbols "^1.0.3" 70 | internal-slot "^1.0.3" 71 | is-callable "^1.2.4" 72 | is-negative-zero "^2.0.2" 73 | is-regex "^1.1.4" 74 | is-shared-array-buffer "^1.0.2" 75 | is-string "^1.0.7" 76 | is-weakref "^1.0.2" 77 | object-inspect "^1.12.2" 78 | object-keys "^1.1.1" 79 | object.assign "^4.1.4" 80 | regexp.prototype.flags "^1.4.3" 81 | string.prototype.trimend "^1.0.5" 82 | string.prototype.trimstart "^1.0.5" 83 | unbox-primitive "^1.0.2" 84 | 85 | es-to-primitive@^1.2.1: 86 | version "1.2.1" 87 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 88 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 89 | dependencies: 90 | is-callable "^1.1.4" 91 | is-date-object "^1.0.1" 92 | is-symbol "^1.0.2" 93 | 94 | events@1.1.1: 95 | version "1.1.1" 96 | resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" 97 | integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== 98 | 99 | for-each@^0.3.3: 100 | version "0.3.3" 101 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" 102 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== 103 | dependencies: 104 | is-callable "^1.1.3" 105 | 106 | function-bind@^1.1.1: 107 | version "1.1.1" 108 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 109 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 110 | 111 | function.prototype.name@^1.1.5: 112 | version "1.1.5" 113 | resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" 114 | integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== 115 | dependencies: 116 | call-bind "^1.0.2" 117 | define-properties "^1.1.3" 118 | es-abstract "^1.19.0" 119 | functions-have-names "^1.2.2" 120 | 121 | functions-have-names@^1.2.2: 122 | version "1.2.3" 123 | resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" 124 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== 125 | 126 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.2: 127 | version "1.1.3" 128 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" 129 | integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== 130 | dependencies: 131 | function-bind "^1.1.1" 132 | has "^1.0.3" 133 | has-symbols "^1.0.3" 134 | 135 | get-symbol-description@^1.0.0: 136 | version "1.0.0" 137 | resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" 138 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== 139 | dependencies: 140 | call-bind "^1.0.2" 141 | get-intrinsic "^1.1.1" 142 | 143 | has-bigints@^1.0.1, has-bigints@^1.0.2: 144 | version "1.0.2" 145 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" 146 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== 147 | 148 | has-property-descriptors@^1.0.0: 149 | version "1.0.0" 150 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" 151 | integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== 152 | dependencies: 153 | get-intrinsic "^1.1.1" 154 | 155 | has-symbols@^1.0.2, has-symbols@^1.0.3: 156 | version "1.0.3" 157 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 158 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 159 | 160 | has-tostringtag@^1.0.0: 161 | version "1.0.0" 162 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" 163 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== 164 | dependencies: 165 | has-symbols "^1.0.2" 166 | 167 | has@^1.0.3: 168 | version "1.0.3" 169 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 170 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 171 | dependencies: 172 | function-bind "^1.1.1" 173 | 174 | ieee754@1.1.13: 175 | version "1.1.13" 176 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" 177 | integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== 178 | 179 | ieee754@^1.1.4: 180 | version "1.2.1" 181 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 182 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 183 | 184 | inherits@^2.0.3: 185 | version "2.0.4" 186 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 187 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 188 | 189 | internal-slot@^1.0.3: 190 | version "1.0.3" 191 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" 192 | integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== 193 | dependencies: 194 | get-intrinsic "^1.1.0" 195 | has "^1.0.3" 196 | side-channel "^1.0.4" 197 | 198 | is-arguments@^1.0.4: 199 | version "1.1.1" 200 | resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" 201 | integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== 202 | dependencies: 203 | call-bind "^1.0.2" 204 | has-tostringtag "^1.0.0" 205 | 206 | is-bigint@^1.0.1: 207 | version "1.0.4" 208 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" 209 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== 210 | dependencies: 211 | has-bigints "^1.0.1" 212 | 213 | is-boolean-object@^1.1.0: 214 | version "1.1.2" 215 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" 216 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== 217 | dependencies: 218 | call-bind "^1.0.2" 219 | has-tostringtag "^1.0.0" 220 | 221 | is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: 222 | version "1.2.6" 223 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.6.tgz#fd6170b0b8c7e2cc73de342ef8284a2202023c44" 224 | integrity sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q== 225 | 226 | is-date-object@^1.0.1: 227 | version "1.0.5" 228 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" 229 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== 230 | dependencies: 231 | has-tostringtag "^1.0.0" 232 | 233 | is-generator-function@^1.0.7: 234 | version "1.0.10" 235 | resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" 236 | integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== 237 | dependencies: 238 | has-tostringtag "^1.0.0" 239 | 240 | is-negative-zero@^2.0.2: 241 | version "2.0.2" 242 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" 243 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== 244 | 245 | is-number-object@^1.0.4: 246 | version "1.0.7" 247 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" 248 | integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== 249 | dependencies: 250 | has-tostringtag "^1.0.0" 251 | 252 | is-regex@^1.1.4: 253 | version "1.1.4" 254 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" 255 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 256 | dependencies: 257 | call-bind "^1.0.2" 258 | has-tostringtag "^1.0.0" 259 | 260 | is-shared-array-buffer@^1.0.2: 261 | version "1.0.2" 262 | resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" 263 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== 264 | dependencies: 265 | call-bind "^1.0.2" 266 | 267 | is-string@^1.0.5, is-string@^1.0.7: 268 | version "1.0.7" 269 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" 270 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== 271 | dependencies: 272 | has-tostringtag "^1.0.0" 273 | 274 | is-symbol@^1.0.2, is-symbol@^1.0.3: 275 | version "1.0.4" 276 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" 277 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 278 | dependencies: 279 | has-symbols "^1.0.2" 280 | 281 | is-typed-array@^1.1.3, is-typed-array@^1.1.9: 282 | version "1.1.9" 283 | resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.9.tgz#246d77d2871e7d9f5aeb1d54b9f52c71329ece67" 284 | integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== 285 | dependencies: 286 | available-typed-arrays "^1.0.5" 287 | call-bind "^1.0.2" 288 | es-abstract "^1.20.0" 289 | for-each "^0.3.3" 290 | has-tostringtag "^1.0.0" 291 | 292 | is-weakref@^1.0.2: 293 | version "1.0.2" 294 | resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" 295 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== 296 | dependencies: 297 | call-bind "^1.0.2" 298 | 299 | isarray@^1.0.0: 300 | version "1.0.0" 301 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 302 | integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== 303 | 304 | jmespath@0.16.0: 305 | version "0.16.0" 306 | resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" 307 | integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== 308 | 309 | node-fetch@^2.6.7: 310 | version "2.6.7" 311 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 312 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 313 | dependencies: 314 | whatwg-url "^5.0.0" 315 | 316 | object-inspect@^1.12.2, object-inspect@^1.9.0: 317 | version "1.12.2" 318 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" 319 | integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== 320 | 321 | object-keys@^1.1.1: 322 | version "1.1.1" 323 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 324 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 325 | 326 | object.assign@^4.1.4: 327 | version "4.1.4" 328 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" 329 | integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== 330 | dependencies: 331 | call-bind "^1.0.2" 332 | define-properties "^1.1.4" 333 | has-symbols "^1.0.3" 334 | object-keys "^1.1.1" 335 | 336 | punycode@1.3.2: 337 | version "1.3.2" 338 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 339 | integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== 340 | 341 | querystring@0.2.0: 342 | version "0.2.0" 343 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 344 | integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== 345 | 346 | regexp.prototype.flags@^1.4.3: 347 | version "1.4.3" 348 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" 349 | integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== 350 | dependencies: 351 | call-bind "^1.0.2" 352 | define-properties "^1.1.3" 353 | functions-have-names "^1.2.2" 354 | 355 | safe-buffer@^5.1.2: 356 | version "5.2.1" 357 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 358 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 359 | 360 | sax@1.2.1: 361 | version "1.2.1" 362 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" 363 | integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== 364 | 365 | sax@>=0.6.0: 366 | version "1.2.4" 367 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 368 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== 369 | 370 | side-channel@^1.0.4: 371 | version "1.0.4" 372 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 373 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 374 | dependencies: 375 | call-bind "^1.0.0" 376 | get-intrinsic "^1.0.2" 377 | object-inspect "^1.9.0" 378 | 379 | string.prototype.trimend@^1.0.5: 380 | version "1.0.5" 381 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" 382 | integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== 383 | dependencies: 384 | call-bind "^1.0.2" 385 | define-properties "^1.1.4" 386 | es-abstract "^1.19.5" 387 | 388 | string.prototype.trimstart@^1.0.5: 389 | version "1.0.5" 390 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" 391 | integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== 392 | dependencies: 393 | call-bind "^1.0.2" 394 | define-properties "^1.1.4" 395 | es-abstract "^1.19.5" 396 | 397 | tr46@~0.0.3: 398 | version "0.0.3" 399 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 400 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 401 | 402 | unbox-primitive@^1.0.2: 403 | version "1.0.2" 404 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" 405 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== 406 | dependencies: 407 | call-bind "^1.0.2" 408 | has-bigints "^1.0.2" 409 | has-symbols "^1.0.3" 410 | which-boxed-primitive "^1.0.2" 411 | 412 | url@0.10.3: 413 | version "0.10.3" 414 | resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" 415 | integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== 416 | dependencies: 417 | punycode "1.3.2" 418 | querystring "0.2.0" 419 | 420 | util@^0.12.4: 421 | version "0.12.4" 422 | resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" 423 | integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== 424 | dependencies: 425 | inherits "^2.0.3" 426 | is-arguments "^1.0.4" 427 | is-generator-function "^1.0.7" 428 | is-typed-array "^1.1.3" 429 | safe-buffer "^5.1.2" 430 | which-typed-array "^1.1.2" 431 | 432 | uuid@8.0.0: 433 | version "8.0.0" 434 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" 435 | integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== 436 | 437 | webidl-conversions@^3.0.0: 438 | version "3.0.1" 439 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 440 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 441 | 442 | whatwg-url@^5.0.0: 443 | version "5.0.0" 444 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 445 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 446 | dependencies: 447 | tr46 "~0.0.3" 448 | webidl-conversions "^3.0.0" 449 | 450 | which-boxed-primitive@^1.0.2: 451 | version "1.0.2" 452 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" 453 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 454 | dependencies: 455 | is-bigint "^1.0.1" 456 | is-boolean-object "^1.1.0" 457 | is-number-object "^1.0.4" 458 | is-string "^1.0.5" 459 | is-symbol "^1.0.3" 460 | 461 | which-typed-array@^1.1.2: 462 | version "1.1.8" 463 | resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.8.tgz#0cfd53401a6f334d90ed1125754a42ed663eb01f" 464 | integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== 465 | dependencies: 466 | available-typed-arrays "^1.0.5" 467 | call-bind "^1.0.2" 468 | es-abstract "^1.20.0" 469 | for-each "^0.3.3" 470 | has-tostringtag "^1.0.0" 471 | is-typed-array "^1.1.9" 472 | 473 | xml2js@0.4.19: 474 | version "0.4.19" 475 | resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" 476 | integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== 477 | dependencies: 478 | sax ">=0.6.0" 479 | xmlbuilder "~9.0.1" 480 | 481 | xmlbuilder@~9.0.1: 482 | version "9.0.7" 483 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" 484 | integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== 485 | --------------------------------------------------------------------------------