From 5014c1030ffb025b5f94ff85a9ebeb80e14c650a Mon Sep 17 00:00:00 2001 From: frederikprijck Date: Wed, 30 Aug 2023 22:22:21 +0200 Subject: [PATCH 1/9] Upgrade auth0 to v4 --- auth0-4.0.0-beta.8.tgz | Bin 0 -> 225751 bytes package-lock.json | 1060 +---------------- package.json | 2 +- .../directory/handlers/clientGrants.ts | 8 +- src/context/directory/handlers/index.ts | 2 - src/context/directory/handlers/migrations.ts | 40 - .../directory/handlers/resourceServers.ts | 2 +- src/context/directory/index.ts | 4 +- src/context/index.ts | 6 +- src/context/yaml/handlers/guardianPolicies.ts | 4 +- src/context/yaml/handlers/index.ts | 2 - src/context/yaml/handlers/migrations.ts | 20 - src/context/yaml/handlers/resourceServers.ts | 2 +- src/tools/auth0/client.ts | 2 +- src/tools/auth0/handlers/actions.ts | 24 +- src/tools/auth0/handlers/attackProtection.ts | 6 +- src/tools/auth0/handlers/branding.ts | 20 +- src/tools/auth0/handlers/clientGrants.ts | 10 +- src/tools/auth0/handlers/clients.ts | 5 +- src/tools/auth0/handlers/connections.ts | 12 +- src/tools/auth0/handlers/customDomains.ts | 3 +- src/tools/auth0/handlers/databases.ts | 19 +- src/tools/auth0/handlers/emailProvider.ts | 15 +- src/tools/auth0/handlers/emailTemplates.ts | 16 +- .../auth0/handlers/guardianFactorProviders.ts | 30 +- .../auth0/handlers/guardianFactorTemplates.ts | 24 +- src/tools/auth0/handlers/guardianFactors.ts | 8 +- .../guardianPhoneFactorMessageTypes.ts | 9 +- .../guardianPhoneFactorSelectedProvider.ts | 9 +- src/tools/auth0/handlers/guardianPolicies.ts | 9 +- src/tools/auth0/handlers/hooks.ts | 9 +- src/tools/auth0/handlers/index.ts | 2 - src/tools/auth0/handlers/logStreams.ts | 6 +- src/tools/auth0/handlers/migrations.ts | 78 -- src/tools/auth0/handlers/organizations.ts | 19 +- src/tools/auth0/handlers/pages.ts | 14 +- src/tools/auth0/handlers/prompts.ts | 16 +- src/tools/auth0/handlers/resourceServers.ts | 11 +- src/tools/auth0/handlers/roles.ts | 18 +- src/tools/auth0/handlers/rules.ts | 4 +- src/tools/auth0/handlers/rulesConfigs.ts | 3 +- src/tools/auth0/handlers/tenant.ts | 29 +- src/tools/auth0/handlers/themes.ts | 6 +- src/tools/auth0/handlers/triggers.ts | 11 +- src/tools/constants.ts | 4 +- src/types.ts | 155 +-- 46 files changed, 266 insertions(+), 1492 deletions(-) create mode 100644 auth0-4.0.0-beta.8.tgz delete mode 100644 src/context/directory/handlers/migrations.ts delete mode 100644 src/context/yaml/handlers/migrations.ts delete mode 100644 src/tools/auth0/handlers/migrations.ts diff --git a/auth0-4.0.0-beta.8.tgz b/auth0-4.0.0-beta.8.tgz new file mode 100644 index 0000000000000000000000000000000000000000..710d941d3af56ccaddc3a95e56238d43313c9ec3 GIT binary patch literal 225751 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 z%0D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�uV#0D()ML;Ntyx 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%0A~Fmn%9n=NHA0ia?Yzr$G-*7j}h$?=vRY#}tW* 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 Qod7U19k;NM`k0XZ3m&WE!2kdN literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json index f719d049..d1eb4758 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "ajv": "^6.12.6", - "auth0": "^3.0.0", + "auth0": "file:../node-auth0/auth0-4.0.0-beta.8.tgz", "dot-prop": "^5.2.0", "fs-extra": "^10.1.0", "global-agent": "^2.1.12", @@ -835,44 +835,6 @@ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "dev": true }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz", - "integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.31", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.32", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz", - "integrity": "sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, "node_modules/@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", @@ -888,25 +850,12 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", - "integrity": "sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/lodash": { "version": "4.14.187", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.187.tgz", "integrity": "sha512-MrO/xLXCaUgZy3y96C/iOsaIqZSeupyTImKClHunL5GrmaiII2VwvWmLBu2hwa0Kp0sV19CsyjtrTc/Fx8rg/A==", "dev": true }, - "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, "node_modules/@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", @@ -928,26 +877,8 @@ "node_modules/@types/node": { "version": "18.7.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.2.tgz", - "integrity": "sha512-ce7MIiaYWCFv6A83oEultwhBXb22fxwNOQf5DIxWA4WXvDQ7K+L0fbWl/YOfCzlR5B/uFkSnVBhPcOfOECcWvA==" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } + "integrity": "sha512-ce7MIiaYWCFv6A83oEultwhBXb22fxwNOQf5DIxWA4WXvDQ7K+L0fbWl/YOfCzlR5B/uFkSnVBhPcOfOECcWvA==", + "dev": true }, "node_modules/@typescript-eslint/parser": { "version": "5.62.0", @@ -1323,42 +1254,17 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, "node_modules/auth0": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/auth0/-/auth0-3.7.0.tgz", - "integrity": "sha512-Ai1T+ltEvcoZdIKbZ5TnLHMkioKxU/j01ZsDWKx55/toqFJXOWypw37kQNdqvHgteFGE142k4MjSt5u1wlOi3A==", - "dependencies": { - "axios": "^0.27.2", - "form-data": "^3.0.1", - "jsonwebtoken": "^9.0.0", - "jwks-rsa": "^3.0.1", - "lru-memoizer": "^2.1.4", - "rest-facade": "^1.16.3", - "retry": "^0.13.1", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/auth0/node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "version": "4.0.0-beta.8", + "resolved": "file:../node-auth0/auth0-4.0.0-beta.8.tgz", + "integrity": "sha512-2e0A4Bjxgt28rIaJTZYKLRKL3RsNnYV5QBtIIru4q820HH9B9Z9/xL+8QnVoedVQGtdBagyjE6f+MU3hxaBf8w==", + "license": "MIT", "dependencies": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" + "jose": "^4.13.2", + "uuid": "^9.0.0" }, "engines": { - "node": ">=12", - "npm": ">=6" + "node": ">=18" } }, "node_modules/auth0/node_modules/uuid": { @@ -1381,28 +1287,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1479,11 +1363,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -1509,6 +1388,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -1526,15 +1406,6 @@ "node": ">=6" } }, - "node_modules/camel-case": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-1.2.2.tgz", - "integrity": "sha512-rUug78lL8mqStaLehmH2F0LxMJ2TM9fnPFxb+gFkgyUjUM/1o2wKTQtalypHnkb2cFwH/DENBw7YEAOYLgSMxQ==", - "dependencies": { - "sentence-case": "^1.1.1", - "upper-case": "^1.1.1" - } - }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -1605,29 +1476,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/change-case": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-2.3.1.tgz", - "integrity": "sha512-3HE5jrTqqn9jeKzD0+yWi7FU4OMicLbwB57ph4bpwEn5jGi3hZug5WjZjnBD2RY7YyTKAAck86ACfShXUWJKLg==", - "dependencies": { - "camel-case": "^1.1.1", - "constant-case": "^1.1.0", - "dot-case": "^1.1.0", - "is-lower-case": "^1.1.0", - "is-upper-case": "^1.1.0", - "lower-case": "^1.1.1", - "lower-case-first": "^1.0.0", - "param-case": "^1.1.0", - "pascal-case": "^1.1.0", - "path-case": "^1.1.0", - "sentence-case": "^1.1.1", - "snake-case": "^1.1.0", - "swap-case": "^1.1.0", - "title-case": "^1.1.0", - "upper-case": "^1.1.1", - "upper-case-first": "^1.1.0" - } - }, "node_modules/check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -1739,28 +1587,12 @@ "text-hex": "1.0.x" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1773,15 +1605,6 @@ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, - "node_modules/constant-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-1.1.2.tgz", - "integrity": "sha512-FQ/HuOuSnX6nIF8OnofRWj+KnOpGAHXQpOKHmsL1sAnuLwu6r5mHGK+mJc0SkHkbmNfcU/SauqXLTEOL1JQfJA==", - "dependencies": { - "snake-case": "^1.1.0", - "upper-case": "^1.1.1" - } - }, "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -1797,11 +1620,6 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" - }, "node_modules/core-js": { "version": "3.24.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.24.1.tgz", @@ -1816,6 +1634,7 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -1854,14 +1673,6 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/default-require-extensions": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", @@ -1889,14 +1700,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -1935,14 +1738,6 @@ "node": ">=6.0.0" } }, - "node_modules/dot-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-1.1.2.tgz", - "integrity": "sha512-NzEIt12UjECXi6JZ/R/nBey6EE1qCN0yUTEFaPIaKW0AcOEwlKqujtcJVbtSfLNnj3CDoXLQyli79vAaqohyvw==", - "dependencies": { - "sentence-case": "^1.1.2" - } - }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -1954,14 +1749,6 @@ "node": ">=8" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/electron-to-chromium": { "version": "1.4.215", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.215.tgz", @@ -2648,11 +2435,6 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -2741,25 +2523,6 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -2832,28 +2595,6 @@ "node": ">= 8" } }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", - "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -3497,14 +3238,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-lower-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", - "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", - "dependencies": { - "lower-case": "^1.1.0" - } - }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -3664,14 +3397,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-upper-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", - "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", - "dependencies": { - "upper-case": "^1.1.0" - } - }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -3859,9 +3584,9 @@ } }, "node_modules/jose": { - "version": "4.11.2", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.11.2.tgz", - "integrity": "sha512-njj0VL2TsIxCtgzhO+9RRobBvws4oYyCM8TpvoUQwl/MbIM3NFJRR9+e6x0sS5xXaP1t6OCBkaBME98OV9zU5A==", + "version": "4.14.4", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", + "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", "funding": { "url": "https://github.com/sponsors/panva" } @@ -3940,41 +3665,6 @@ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jwks-rsa": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.0.1.tgz", - "integrity": "sha512-UUOZ0CVReK1QVU3rbi9bC7N5/le8ziUj0A2ef1Q0M7OPD2KvjEYizptqIxGIo6fSLYDkqBrazILS18tYuRc8gw==", - "dependencies": { - "@types/express": "^4.17.14", - "@types/jsonwebtoken": "^9.0.0", - "debug": "^4.3.4", - "jose": "^4.10.4", - "limiter": "^1.1.5", - "lru-memoizer": "^2.1.4" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, "node_modules/kacl": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/kacl/-/kacl-1.1.1.tgz", @@ -4005,21 +3695,11 @@ "node": ">= 0.8.0" } }, - "node_modules/limiter": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", - "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" - }, "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", @@ -4029,7 +3709,8 @@ "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -4080,37 +3761,6 @@ "get-func-name": "^2.0.0" } }, - "node_modules/lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" - }, - "node_modules/lower-case-first": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", - "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", - "dependencies": { - "lower-case": "^1.1.2" - } - }, - "node_modules/lru-cache": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", - "integrity": "sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==", - "dependencies": { - "pseudomap": "^1.0.1", - "yallist": "^2.0.0" - } - }, - "node_modules/lru-memoizer": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.1.4.tgz", - "integrity": "sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==", - "dependencies": { - "lodash.clonedeep": "^4.5.0", - "lru-cache": "~4.0.0" - } - }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -4167,14 +3817,6 @@ "node": ">= 8" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -4188,36 +3830,6 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -4781,6 +4393,7 @@ "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4955,14 +4568,6 @@ "node": ">=8" } }, - "node_modules/param-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-1.1.2.tgz", - "integrity": "sha512-gksk6zeZQxwBm1AHsKh+XDFsTGf1LvdZSkkpSIkfDtzW+EQj/P2PBgNb3Cs0Y9Xxqmbciv2JZe3fWU6Xbher+Q==", - "dependencies": { - "sentence-case": "^1.1.2" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4975,23 +4580,6 @@ "node": ">=6" } }, - "node_modules/pascal-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-1.1.2.tgz", - "integrity": "sha512-QWlbdQHdKWlcyTEuv/M0noJtlCa7qTmg5QFAqhx5X9xjAfCU1kXucL+rcOmd2HliESuRLIOz8521RAW/yhuQog==", - "dependencies": { - "camel-case": "^1.1.1", - "upper-case-first": "^1.1.0" - } - }, - "node_modules/path-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-1.1.2.tgz", - "integrity": "sha512-2snAGA6xVRqTuTPa40bn0iEpYtVK6gEqeyS/63dqpm5pGlesOv6EmRcnB9Rr6eAnAC2Wqlbz0tqgJZryttxhxg==", - "dependencies": { - "sentence-case": "^1.1.2" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -5353,11 +4941,6 @@ "node": ">= 8" } }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -5376,20 +4959,6 @@ "node": ">=6" } }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5533,33 +5102,6 @@ "node": ">=4" } }, - "node_modules/rest-facade": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/rest-facade/-/rest-facade-1.16.3.tgz", - "integrity": "sha512-9BQTPLiwg23XZwcWi0ys1wTizfc//0b2G3U6vBWcgqh56ozs2K6CD+Jw4DYcw3AqdPQN7jj8nzRUcUXFVGzb0Q==", - "dependencies": { - "change-case": "^2.3.0", - "deepmerge": "^3.2.0", - "lodash.get": "^4.4.2", - "superagent": "^5.1.1" - }, - "peerDependencies": { - "superagent-proxy": "^3.0.0" - }, - "peerDependenciesMeta": { - "superagent-proxy": { - "optional": true - } - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -5743,14 +5285,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/sentence-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-1.1.3.tgz", - "integrity": "sha512-laa/UDTPXsrQnoN/Kc8ZO7gTeEjMsuPiDgUCk9N0iINRZvqAMCTXjGl8+tD27op1eF/JHbdUlEUmovDh6AX7sA==", - "dependencies": { - "lower-case": "^1.1.1" - } - }, "node_modules/serialize-error": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", @@ -5794,6 +5328,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -5871,14 +5406,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/snake-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-1.1.2.tgz", - "integrity": "sha512-oapUKC+qulnUIN+/O7Tbl2msi9PQvJeivGN9RNbygxzI2EOY0gA96i8BJLYnGUWSLGcYtyW4YYqnGTZEySU/gg==", - "dependencies": { - "sentence-case": "^1.1.2" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6050,28 +5577,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/superagent": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.3.1.tgz", - "integrity": "sha512-wjJ/MoTid2/RuGCOFtlacyGNxN9QLMgcpYLDQlWFIhhdJ93kNscFonGvrpAHSCVjRVj++DGCglocF7Aej1KHvQ==", - "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at .", - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.2", - "methods": "^1.1.2", - "mime": "^2.4.6", - "qs": "^6.9.4", - "readable-stream": "^3.6.0", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 7.0.0" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6096,15 +5601,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/swap-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", - "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", - "dependencies": { - "lower-case": "^1.1.1", - "upper-case": "^1.1.1" - } - }, "node_modules/table": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", @@ -6168,15 +5664,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/title-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-1.1.2.tgz", - "integrity": "sha512-xYbo5Um5MBgn24xJSK+x5hZ8ehuGXTVhgx32KJCThHRHwpyIb1lmABi1DH5VvN9E7rNEquPjz//rF/tZQd7mjQ==", - "dependencies": { - "sentence-case": "^1.1.1", - "upper-case": "^1.0.3" - } - }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -6507,19 +5994,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" - }, - "node_modules/upper-case-first": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", - "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", - "dependencies": { - "upper-case": "^1.1.1" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -6678,11 +6152,6 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, - "node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" - }, "node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", @@ -7485,44 +6954,6 @@ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "dev": true }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/express": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz", - "integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.31", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.32", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz", - "integrity": "sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, "@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", @@ -7538,25 +6969,12 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "@types/jsonwebtoken": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", - "integrity": "sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==", - "requires": { - "@types/node": "*" - } - }, "@types/lodash": { "version": "4.14.187", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.187.tgz", "integrity": "sha512-MrO/xLXCaUgZy3y96C/iOsaIqZSeupyTImKClHunL5GrmaiII2VwvWmLBu2hwa0Kp0sV19CsyjtrTc/Fx8rg/A==", "dev": true }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, "@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", @@ -7578,26 +6996,8 @@ "@types/node": { "version": "18.7.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.2.tgz", - "integrity": "sha512-ce7MIiaYWCFv6A83oEultwhBXb22fxwNOQf5DIxWA4WXvDQ7K+L0fbWl/YOfCzlR5B/uFkSnVBhPcOfOECcWvA==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "requires": { - "@types/mime": "*", - "@types/node": "*" - } + "integrity": "sha512-ce7MIiaYWCFv6A83oEultwhBXb22fxwNOQf5DIxWA4WXvDQ7K+L0fbWl/YOfCzlR5B/uFkSnVBhPcOfOECcWvA==", + "dev": true }, "@typescript-eslint/parser": { "version": "5.62.0", @@ -7844,37 +7244,14 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, "auth0": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/auth0/-/auth0-3.7.0.tgz", - "integrity": "sha512-Ai1T+ltEvcoZdIKbZ5TnLHMkioKxU/j01ZsDWKx55/toqFJXOWypw37kQNdqvHgteFGE142k4MjSt5u1wlOi3A==", - "requires": { - "axios": "^0.27.2", - "form-data": "^3.0.1", - "jsonwebtoken": "^9.0.0", - "jwks-rsa": "^3.0.1", - "lru-memoizer": "^2.1.4", - "rest-facade": "^1.16.3", - "retry": "^0.13.1", + "version": "file:../node-auth0/auth0-4.0.0-beta.8.tgz", + "integrity": "sha512-2e0A4Bjxgt28rIaJTZYKLRKL3RsNnYV5QBtIIru4q820HH9B9Z9/xL+8QnVoedVQGtdBagyjE6f+MU3hxaBf8w==", + "requires": { + "jose": "^4.13.2", "uuid": "^9.0.0" }, "dependencies": { - "jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "requires": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - } - }, "uuid": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", @@ -7888,27 +7265,6 @@ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true }, - "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - }, - "dependencies": { - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } - } - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -7963,11 +7319,6 @@ "update-browserslist-db": "^1.0.5" } }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -7990,6 +7341,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -8001,15 +7353,6 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "camel-case": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-1.2.2.tgz", - "integrity": "sha512-rUug78lL8mqStaLehmH2F0LxMJ2TM9fnPFxb+gFkgyUjUM/1o2wKTQtalypHnkb2cFwH/DENBw7YEAOYLgSMxQ==", - "requires": { - "sentence-case": "^1.1.1", - "upper-case": "^1.1.1" - } - }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -8055,29 +7398,6 @@ "supports-color": "^7.1.0" } }, - "change-case": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-2.3.1.tgz", - "integrity": "sha512-3HE5jrTqqn9jeKzD0+yWi7FU4OMicLbwB57ph4bpwEn5jGi3hZug5WjZjnBD2RY7YyTKAAck86ACfShXUWJKLg==", - "requires": { - "camel-case": "^1.1.1", - "constant-case": "^1.1.0", - "dot-case": "^1.1.0", - "is-lower-case": "^1.1.0", - "is-upper-case": "^1.1.0", - "lower-case": "^1.1.1", - "lower-case-first": "^1.0.0", - "param-case": "^1.1.0", - "pascal-case": "^1.1.0", - "path-case": "^1.1.0", - "sentence-case": "^1.1.1", - "snake-case": "^1.1.0", - "swap-case": "^1.1.0", - "title-case": "^1.1.0", - "upper-case": "^1.1.1", - "upper-case-first": "^1.1.0" - } - }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -8171,25 +7491,12 @@ "text-hex": "1.0.x" } }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -8202,15 +7509,6 @@ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, - "constant-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-1.1.2.tgz", - "integrity": "sha512-FQ/HuOuSnX6nIF8OnofRWj+KnOpGAHXQpOKHmsL1sAnuLwu6r5mHGK+mJc0SkHkbmNfcU/SauqXLTEOL1JQfJA==", - "requires": { - "snake-case": "^1.1.0", - "upper-case": "^1.1.1" - } - }, "convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -8228,11 +7526,6 @@ } } }, - "cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" - }, "core-js": { "version": "3.24.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.24.1.tgz", @@ -8242,6 +7535,7 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "requires": { "ms": "2.1.2" } @@ -8266,11 +7560,6 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" - }, "default-require-extensions": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", @@ -8289,11 +7578,6 @@ "object-keys": "^1.1.1" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, "detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -8323,14 +7607,6 @@ "esutils": "^2.0.2" } }, - "dot-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-1.1.2.tgz", - "integrity": "sha512-NzEIt12UjECXi6JZ/R/nBey6EE1qCN0yUTEFaPIaKW0AcOEwlKqujtcJVbtSfLNnj3CDoXLQyli79vAaqohyvw==", - "requires": { - "sentence-case": "^1.1.2" - } - }, "dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -8339,14 +7615,6 @@ "is-obj": "^2.0.0" } }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "electron-to-chromium": { "version": "1.4.215", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.215.tgz", @@ -8889,11 +8157,6 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, "fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -8964,11 +8227,6 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" - }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -9025,21 +8283,6 @@ } } }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "formidable": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==" - }, "fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -9477,14 +8720,6 @@ "is-extglob": "^2.1.1" } }, - "is-lower-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", - "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", - "requires": { - "lower-case": "^1.1.0" - } - }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -9584,14 +8819,6 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, - "is-upper-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", - "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", - "requires": { - "upper-case": "^1.1.0" - } - }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -9738,9 +8965,9 @@ } }, "jose": { - "version": "4.11.2", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.11.2.tgz", - "integrity": "sha512-njj0VL2TsIxCtgzhO+9RRobBvws4oYyCM8TpvoUQwl/MbIM3NFJRR9+e6x0sS5xXaP1t6OCBkaBME98OV9zU5A==" + "version": "4.14.4", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", + "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==" }, "js-tokens": { "version": "4.0.0", @@ -9799,38 +9026,6 @@ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jwks-rsa": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.0.1.tgz", - "integrity": "sha512-UUOZ0CVReK1QVU3rbi9bC7N5/le8ziUj0A2ef1Q0M7OPD2KvjEYizptqIxGIo6fSLYDkqBrazILS18tYuRc8gw==", - "requires": { - "@types/express": "^4.17.14", - "@types/jsonwebtoken": "^9.0.0", - "debug": "^4.3.4", - "jose": "^4.10.4", - "limiter": "^1.1.5", - "lru-memoizer": "^2.1.4" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, "kacl": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/kacl/-/kacl-1.1.1.tgz", @@ -9852,21 +9047,11 @@ "type-check": "~0.4.0" } }, - "limiter": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", - "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" - }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" - }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", @@ -9876,7 +9061,8 @@ "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true }, "lodash.merge": { "version": "4.6.2", @@ -9921,37 +9107,6 @@ "get-func-name": "^2.0.0" } }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" - }, - "lower-case-first": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", - "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", - "requires": { - "lower-case": "^1.1.2" - } - }, - "lru-cache": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", - "integrity": "sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==", - "requires": { - "pseudomap": "^1.0.1", - "yallist": "^2.0.0" - } - }, - "lru-memoizer": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.1.4.tgz", - "integrity": "sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==", - "requires": { - "lodash.clonedeep": "^4.5.0", - "lru-cache": "~4.0.0" - } - }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -9995,11 +9150,6 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -10010,24 +9160,6 @@ "picomatch": "^2.3.1" } }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -10453,7 +9585,8 @@ "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true }, "object-keys": { "version": "1.1.1", @@ -10583,14 +9716,6 @@ "release-zalgo": "^1.0.0" } }, - "param-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-1.1.2.tgz", - "integrity": "sha512-gksk6zeZQxwBm1AHsKh+XDFsTGf1LvdZSkkpSIkfDtzW+EQj/P2PBgNb3Cs0Y9Xxqmbciv2JZe3fWU6Xbher+Q==", - "requires": { - "sentence-case": "^1.1.2" - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -10600,23 +9725,6 @@ "callsites": "^3.0.0" } }, - "pascal-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-1.1.2.tgz", - "integrity": "sha512-QWlbdQHdKWlcyTEuv/M0noJtlCa7qTmg5QFAqhx5X9xjAfCU1kXucL+rcOmd2HliESuRLIOz8521RAW/yhuQog==", - "requires": { - "camel-case": "^1.1.1", - "upper-case-first": "^1.1.0" - } - }, - "path-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-1.1.2.tgz", - "integrity": "sha512-2snAGA6xVRqTuTPa40bn0iEpYtVK6gEqeyS/63dqpm5pGlesOv6EmRcnB9Rr6eAnAC2Wqlbz0tqgJZryttxhxg==", - "requires": { - "sentence-case": "^1.1.2" - } - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -10878,11 +9986,6 @@ "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -10898,14 +10001,6 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -10999,22 +10094,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "rest-facade": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/rest-facade/-/rest-facade-1.16.3.tgz", - "integrity": "sha512-9BQTPLiwg23XZwcWi0ys1wTizfc//0b2G3U6vBWcgqh56ozs2K6CD+Jw4DYcw3AqdPQN7jj8nzRUcUXFVGzb0Q==", - "requires": { - "change-case": "^2.3.0", - "deepmerge": "^3.2.0", - "lodash.get": "^4.4.2", - "superagent": "^5.1.1" - } - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -11140,14 +10219,6 @@ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" }, - "sentence-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-1.1.3.tgz", - "integrity": "sha512-laa/UDTPXsrQnoN/Kc8ZO7gTeEjMsuPiDgUCk9N0iINRZvqAMCTXjGl8+tD27op1eF/JHbdUlEUmovDh6AX7sA==", - "requires": { - "lower-case": "^1.1.1" - } - }, "serialize-error": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", @@ -11181,6 +10252,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -11239,14 +10311,6 @@ "is-fullwidth-code-point": "^3.0.0" } }, - "snake-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-1.1.2.tgz", - "integrity": "sha512-oapUKC+qulnUIN+/O7Tbl2msi9PQvJeivGN9RNbygxzI2EOY0gA96i8BJLYnGUWSLGcYtyW4YYqnGTZEySU/gg==", - "requires": { - "sentence-case": "^1.1.2" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -11375,24 +10439,6 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "superagent": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.3.1.tgz", - "integrity": "sha512-wjJ/MoTid2/RuGCOFtlacyGNxN9QLMgcpYLDQlWFIhhdJ93kNscFonGvrpAHSCVjRVj++DGCglocF7Aej1KHvQ==", - "requires": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.2", - "methods": "^1.1.2", - "mime": "^2.4.6", - "qs": "^6.9.4", - "readable-stream": "^3.6.0", - "semver": "^7.3.2" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11408,15 +10454,6 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, - "swap-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", - "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", - "requires": { - "lower-case": "^1.1.1", - "upper-case": "^1.1.1" - } - }, "table": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", @@ -11472,15 +10509,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "title-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-1.1.2.tgz", - "integrity": "sha512-xYbo5Um5MBgn24xJSK+x5hZ8ehuGXTVhgx32KJCThHRHwpyIb1lmABi1DH5VvN9E7rNEquPjz//rF/tZQd7mjQ==", - "requires": { - "sentence-case": "^1.1.1", - "upper-case": "^1.0.3" - } - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -11712,19 +10740,6 @@ "picocolors": "^1.0.0" } }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" - }, - "upper-case-first": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", - "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", - "requires": { - "upper-case": "^1.1.1" - } - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -11859,11 +10874,6 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" - }, "yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", diff --git a/package.json b/package.json index 5ae1c33b..c7b391ab 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "homepage": "https://github.com/auth0/auth0-deploy-cli#readme", "dependencies": { "ajv": "^6.12.6", - "auth0": "^3.0.0", + "auth0": "file:./auth0-4.0.0-beta.8.tgz", "dot-prop": "^5.2.0", "fs-extra": "^10.1.0", "global-agent": "^2.1.12", diff --git a/src/context/directory/handlers/clientGrants.ts b/src/context/directory/handlers/clientGrants.ts index 9e139b8b..3ad8ec12 100644 --- a/src/context/directory/handlers/clientGrants.ts +++ b/src/context/directory/handlers/clientGrants.ts @@ -47,13 +47,13 @@ async function dump(context: DirectoryContext): Promise { if (clientGrants.length === 0) return; - const allResourceServers = await context.mgmtClient.resourceServers.getAll({ - paginate: true, + // TODO: Bring back paginate: true + const { data: { resource_servers: allResourceServers } } = await context.mgmtClient.resourceServers.getAll({ include_totals: true, }); - const allClients = await context.mgmtClient.clients.getAll({ - paginate: true, + // TODO: Bring back paginate: true + const { data: { clients: allClients } } = await context.mgmtClient.clients.getAll({ include_totals: true, }); diff --git a/src/context/directory/handlers/index.ts b/src/context/directory/handlers/index.ts index 70797793..d61a6548 100644 --- a/src/context/directory/handlers/index.ts +++ b/src/context/directory/handlers/index.ts @@ -17,7 +17,6 @@ import guardianPhoneFactorMessageTypes from './guardianPhoneFactorMessageTypes'; import guardianPhoneFactorSelectedProvider from './guardianPhoneFactorSelectedProvider'; import guardianPolicies from './guardianPolicies'; import roles from './roles'; -import migrations from './migrations'; import actions from './actions'; import organizations from './organizations'; import triggers from './triggers'; @@ -54,7 +53,6 @@ const directoryHandlers: { guardianFactors, guardianFactorProviders, guardianFactorTemplates, - migrations, guardianPhoneFactorMessageTypes, guardianPhoneFactorSelectedProvider, guardianPolicies, diff --git a/src/context/directory/handlers/migrations.ts b/src/context/directory/handlers/migrations.ts deleted file mode 100644 index 25a70e7e..00000000 --- a/src/context/directory/handlers/migrations.ts +++ /dev/null @@ -1,40 +0,0 @@ -import path from 'path'; -import { existsMustBeDir, isFile, dumpJSON, loadJSON } from '../../../utils'; -import { DirectoryHandler } from '.'; -import DirectoryContext from '..'; -import { Asset, ParsedAsset } from '../../../types'; - -type ParsedMigrations = ParsedAsset<'migrations', Asset[]>; - -function parse(context: DirectoryContext): ParsedMigrations { - const baseFolder = path.join(context.filePath); - if (!existsMustBeDir(baseFolder)) return { migrations: null }; // Skip - - const migrationsFile = path.join(baseFolder, 'migrations.json'); - - if (!isFile(migrationsFile)) return { migrations: null }; - - /* eslint-disable camelcase */ - const migrations = loadJSON(migrationsFile, { - mappings: context.mappings, - disableKeywordReplacement: context.disableKeywordReplacement, - }); - - return { migrations }; -} - -async function dump(context: DirectoryContext): Promise { - const { migrations } = context.assets; - - if (!migrations || Object.keys(migrations).length === 0) return; // Skip, nothing to dump - - const migrationsFile = path.join(context.filePath, 'migrations.json'); - dumpJSON(migrationsFile, migrations); -} - -const migrationsHandler: DirectoryHandler = { - parse, - dump, -}; - -export default migrationsHandler; diff --git a/src/context/directory/handlers/resourceServers.ts b/src/context/directory/handlers/resourceServers.ts index 5e83d574..6a7575bd 100644 --- a/src/context/directory/handlers/resourceServers.ts +++ b/src/context/directory/handlers/resourceServers.ts @@ -1,3 +1,4 @@ +import { ResourceServer } from 'auth0'; import path from 'path'; import fs from 'fs-extra'; import { constants } from '../../../tools'; @@ -5,7 +6,6 @@ import { getFiles, existsMustBeDir, dumpJSON, loadJSON, sanitize } from '../../. import { DirectoryHandler } from '.'; import DirectoryContext from '..'; import { ParsedAsset } from '../../../types'; -import { ResourceServer } from '../../../tools/auth0/handlers/resourceServers'; type ParsedResourceServers = ParsedAsset<'resourceServers', ResourceServer[]>; diff --git a/src/context/directory/index.ts b/src/context/directory/index.ts index c154f10c..802c0427 100644 --- a/src/context/directory/index.ts +++ b/src/context/directory/index.ts @@ -6,7 +6,7 @@ import cleanAssets from '../../readonly'; import log from '../../logger'; import handlers, { DirectoryHandler } from './handlers'; import { isDirectory, isFile, stripIdentifiers, toConfigFn } from '../../utils'; -import { Assets, Auth0APIClient, Config, AssetTypes } from '../../types'; +import { Assets, Auth0APIClient, Config, AssetTypes, BaseAuth0APIClient } from '../../types'; import { filterOnlyIncludedResourceTypes } from '..'; import { preserveKeywords } from '../../keywordPreservation'; @@ -21,7 +21,7 @@ export default class DirectoryContext { assets: Assets; disableKeywordReplacement: boolean; - constructor(config: Config, mgmtClient: Auth0APIClient) { + constructor(config: Config, mgmtClient: BaseAuth0APIClient) { this.filePath = config.AUTH0_INPUT_FILE; this.config = config; this.mappings = config.AUTH0_KEYWORD_REPLACE_MAPPINGS || {}; diff --git a/src/context/index.ts b/src/context/index.ts index 89532db2..37e655c1 100644 --- a/src/context/index.ts +++ b/src/context/index.ts @@ -161,19 +161,19 @@ export const setupContext = async ( return new AuthenticationClient({ domain: AUTH0_DOMAIN, clientId: AUTH0_CLIENT_ID, - clientAssertionSigningKey: readFileSync(AUTH0_CLIENT_SIGNING_KEY_PATH), + clientAssertionSigningKey: readFileSync(AUTH0_CLIENT_SIGNING_KEY_PATH, 'utf8'), clientAssertionSigningAlg: !!AUTH0_CLIENT_SIGNING_ALGORITHM ? AUTH0_CLIENT_SIGNING_ALGORITHM : undefined, }); })(); - const clientCredentials = await authClient.clientCredentialsGrant({ + const clientCredentials = await authClient.oauth.clientCredentialsGrant({ audience: config.AUTH0_AUDIENCE ? config.AUTH0_AUDIENCE : `https://${config.AUTH0_DOMAIN}/api/v2/`, }); - return clientCredentials.access_token; + return clientCredentials.data?.access_token; })(); const mgmtClient = new ManagementClient({ diff --git a/src/context/yaml/handlers/guardianPolicies.ts b/src/context/yaml/handlers/guardianPolicies.ts index e0673eb3..5733477c 100644 --- a/src/context/yaml/handlers/guardianPolicies.ts +++ b/src/context/yaml/handlers/guardianPolicies.ts @@ -1,8 +1,8 @@ import { YAMLHandler } from '.'; import YAMLContext from '..'; -import { Asset, ParsedAsset } from '../../../types'; +import { ParsedAsset } from '../../../types'; -type ParsedGuardianPolicies = ParsedAsset<'guardianPolicies', { policies: Asset[] }>; +type ParsedGuardianPolicies = ParsedAsset<'guardianPolicies', { policies: string[] }>; async function parseAndDump(context: YAMLContext): Promise { const { guardianPolicies } = context.assets; diff --git a/src/context/yaml/handlers/index.ts b/src/context/yaml/handlers/index.ts index 3c470bf9..dd6e5367 100644 --- a/src/context/yaml/handlers/index.ts +++ b/src/context/yaml/handlers/index.ts @@ -18,7 +18,6 @@ import guardianPhoneFactorSelectedProvider from './guardianPhoneFactorSelectedPr import guardianPolicies from './guardianPolicies'; import roles from './roles'; import organizations from './organizations'; -import migrations from './migrations'; import actions from './actions'; import triggers from './triggers'; import attackProtection from './attackProtection'; @@ -53,7 +52,6 @@ const yamlHandlers: { [key in AssetTypes]: YAMLHandler<{ [key: string]: unknown guardianFactorProviders, guardianFactorTemplates, roles, - migrations, guardianPhoneFactorMessageTypes, guardianPhoneFactorSelectedProvider, guardianPolicies, diff --git a/src/context/yaml/handlers/migrations.ts b/src/context/yaml/handlers/migrations.ts deleted file mode 100644 index cc4a1372..00000000 --- a/src/context/yaml/handlers/migrations.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { YAMLHandler } from '.'; -import YAMLContext from '..'; -import { Asset, ParsedAsset } from '../../../types'; - -type ParsedMigrations = ParsedAsset<'migrations', Asset[]>; - -async function parseAndDump(context: YAMLContext): Promise { - const { migrations } = context.assets; - - if (!migrations) return { migrations: null }; - - return { migrations }; -} - -const migrationsHandler: YAMLHandler = { - parse: parseAndDump, - dump: parseAndDump, -}; - -export default migrationsHandler; diff --git a/src/context/yaml/handlers/resourceServers.ts b/src/context/yaml/handlers/resourceServers.ts index c2dce9b3..01a644a7 100644 --- a/src/context/yaml/handlers/resourceServers.ts +++ b/src/context/yaml/handlers/resourceServers.ts @@ -1,7 +1,7 @@ +import { ResourceServer } from 'auth0'; import { YAMLHandler } from '.'; import YAMLContext from '..'; import { ParsedAsset } from '../../../types'; -import { ResourceServer } from '../../../tools/auth0/handlers/resourceServers'; type ParsedResourceServers = ParsedAsset<'resourceServers', ResourceServer[]>; diff --git a/src/tools/auth0/client.ts b/src/tools/auth0/client.ts index fdbaa266..6d9f0c38 100644 --- a/src/tools/auth0/client.ts +++ b/src/tools/auth0/client.ts @@ -167,7 +167,7 @@ export default function pagedClient(client: BaseAuth0APIClient): Auth0APIClient frequencyLimit: API_FREQUENCY_PER_SECOND, frequencyWindow: 1000, // 1 sec }), - }; + } as unknown as Auth0APIClient; return pagedManager(clientWithPooling, clientWithPooling); } diff --git a/src/tools/auth0/handlers/actions.ts b/src/tools/auth0/handlers/actions.ts index a95e01a1..b6e8d111 100644 --- a/src/tools/auth0/handlers/actions.ts +++ b/src/tools/auth0/handlers/actions.ts @@ -1,4 +1,5 @@ import _ from 'lodash'; +import { GetActions200ResponseActionsInner, PostActionRequest } from 'auth0'; import DefaultAPIHandler, { order } from './default'; import log from '../../../logger'; import { areArraysEquals, sleep } from '../../utils'; @@ -92,29 +93,34 @@ export function isMarketplaceAction(action: Action): boolean { } export default class ActionHandler extends DefaultAPIHandler { - existing: Action[] | null; + existing: GetActions200ResponseActionsInner[] | null; constructor(options: DefaultAPIHandler) { super({ ...options, type: 'actions', functions: { - create: (action: Action) => this.createAction(action), + create: (action: PostActionRequest) => this.createAction(action), delete: (action: Action) => this.deleteAction(action), }, stripUpdateFields: ['deployed', 'status'], }); } - async createAction(action: Action) { + async createAction(action: PostActionRequest) { // Strip the deployed flag const addAction = { ...action }; - delete addAction.deployed; - delete addAction.status; - const createdAction = await this.client.actions.create(addAction); + // TODO: Should we keep this? + delete (addAction as any).deployed; + delete (addAction as any).status; + + const { data: createdAction } = await this.client.actions.create(addAction); // Add the action id so we can deploy it later - action.id = createdAction.id; + + // TODO: Should we keep this? + (action as any).id = createdAction.id; + return createdAction; } @@ -202,7 +208,9 @@ export default class ActionHandler extends DefaultAPIHandler { // Actions API does not support include_totals param like the other paginate API's. // So we set it to false otherwise it will fail with "Additional properties not allowed: include_totals" try { - const actions = await this.client.actions.getAll({ paginate: true }); + // TODO: bring back paginate: true + const { data } = await this.client.actions.getAll(); + const { actions } = data; this.existing = actions; return actions; } catch (err) { diff --git a/src/tools/auth0/handlers/attackProtection.ts b/src/tools/auth0/handlers/attackProtection.ts index 909cfcc3..e1ece307 100644 --- a/src/tools/auth0/handlers/attackProtection.ts +++ b/src/tools/auth0/handlers/attackProtection.ts @@ -68,9 +68,9 @@ export default class AttackProtectionHandler extends DefaultAPIHandler { ]); this.existing = { - breachedPasswordDetection, - bruteForceProtection, - suspiciousIpThrottling, + breachedPasswordDetection: breachedPasswordDetection.data, + bruteForceProtection: bruteForceProtection.data, + suspiciousIpThrottling: suspiciousIpThrottling.data, }; return this.existing; diff --git a/src/tools/auth0/handlers/branding.ts b/src/tools/auth0/handlers/branding.ts index 213dd0f5..fe54e93b 100644 --- a/src/tools/auth0/handlers/branding.ts +++ b/src/tools/auth0/handlers/branding.ts @@ -1,3 +1,4 @@ +import { GetBranding200Response, GetUniversalLogin200ResponseOneOf } from 'auth0'; import DefaultHandler, { order } from './default'; import constants from '../../constants'; import log from '../../../logger'; @@ -30,29 +31,25 @@ export default class BrandingHandler extends DefaultHandler { } async getType(): Promise { - let branding: { - templates?: { - template: string; - body: string; - }[]; - } = {}; + let branding: GetBranding200Response = {} as any; try { // in case client version does not support branding if (this.client.branding && typeof this.client.branding.getSettings === 'function') { - branding = await this.client.branding.getSettings(); + const response = await this.client.branding.getSettings(); + branding = response.data; } // in case client version does not custom domains if (this.client.customDomains && typeof this.client.customDomains.getAll === 'function') { - const customDomains = await this.client.customDomains.getAll(); + const { data: customDomains } = await this.client.customDomains.getAll(); // templates are only supported if there's custom domains. if (customDomains && customDomains.length) { - const payload = await this.client.branding.getUniversalLoginTemplate(); + const { data: payload } = await this.client.branding.getUniversalLoginTemplate(); branding.templates = [ { template: constants.UNIVERSAL_LOGIN_TEMPLATE, - body: payload.body, + body: (payload as GetUniversalLogin200ResponseOneOf).body, }, ]; } @@ -80,7 +77,7 @@ export default class BrandingHandler extends DefaultHandler { } if (brandingSettings && Object.keys(brandingSettings).length) { - await this.client.branding.updateSettings({}, brandingSettings); + await this.client.branding.updateSettings(brandingSettings); this.updated += 1; this.didUpdate(brandingSettings); } @@ -104,7 +101,6 @@ export default class BrandingHandler extends DefaultHandler { ); if (templateDefinition && templateDefinition.body) { await this.client.branding.setUniversalLoginTemplate( - {}, { template: templateDefinition.body } ); this.updated += 1; diff --git a/src/tools/auth0/handlers/clientGrants.ts b/src/tools/auth0/handlers/clientGrants.ts index 2b77d379..2ce8b34f 100644 --- a/src/tools/auth0/handlers/clientGrants.ts +++ b/src/tools/auth0/handlers/clientGrants.ts @@ -1,6 +1,6 @@ import DefaultHandler, { order } from './default'; import { convertClientNamesToIds } from '../../utils'; -import { Asset, Assets, CalculatedChanges } from '../../../types'; +import { Assets, CalculatedChanges } from '../../../types'; import DefaultAPIHandler from './default'; export const schema = { @@ -48,7 +48,9 @@ export default class ClientGrantsHandler extends DefaultHandler { if (this.existing) { return this.existing; } - this.existing = await this.client.clientGrants.getAll({ paginate: true, include_totals: true }); + // TODO: Bring back paginate: true + const { data } = await this.client.clientGrants.getAll({ include_totals: true }); + this.existing = data.client_grants; // Always filter out the client we are using to access Auth0 Management API // As it could cause problems if the grants are deleted or updated etc @@ -67,7 +69,9 @@ export default class ClientGrantsHandler extends DefaultHandler { // Do nothing if not set if (!clientGrants) return; - const clients = await this.client.clients.getAll({ paginate: true, include_totals: true }); + // TODO: Bring back paginate: true + const { data } = await this.client.clients.getAll({ include_totals: true }); + const { clients } = data; const excludedClientsByNames = (assets.exclude && assets.exclude.clients) || []; const excludedClients = convertClientNamesToIds(excludedClientsByNames, clients); diff --git a/src/tools/auth0/handlers/clients.ts b/src/tools/auth0/handlers/clients.ts index 00df6f04..066da674 100644 --- a/src/tools/auth0/handlers/clients.ts +++ b/src/tools/auth0/handlers/clients.ts @@ -82,11 +82,12 @@ export default class ClientHandler extends DefaultAPIHandler { async getType() { if (this.existing) return this.existing; - this.existing = await this.client.clients.getAll({ - paginate: true, + // TODO: Bring back paginate: true + const { data } = await this.client.clients.getAll({ include_totals: true, is_global: false, }); + this.existing = data.clients; return this.existing; } } diff --git a/src/tools/auth0/handlers/connections.ts b/src/tools/auth0/handlers/connections.ts index bef7832e..594cc208 100644 --- a/src/tools/auth0/handlers/connections.ts +++ b/src/tools/auth0/handlers/connections.ts @@ -110,10 +110,11 @@ export default class ConnectionsHandler extends DefaultAPIHandler { async getType(): Promise { if (this.existing) return this.existing; - const connections: Asset[] = await this.client.connections.getAll({ - paginate: true, + // TODO: Bring back paginate: true + const { data } = await this.client.connections.getAll({ include_totals: true, }); + const { connections } = data; // Filter out database connections this.existing = connections.filter((c) => c.strategy !== 'auth0'); if (this.existing === null) return []; @@ -133,9 +134,10 @@ export default class ConnectionsHandler extends DefaultAPIHandler { }; // Convert enabled_clients by name to the id - const clients = await this.client.clients.getAll({ paginate: true, include_totals: true }); - const existingConnections = await this.client.connections.getAll({ - paginate: true, + // TODO: Bring back paginate: true + const { data: { clients } } = await this.client.clients.getAll({ include_totals: true }); + // TODO: Bring back paginate: true + const { data: { connections: existingConnections } } = await this.client.connections.getAll({ include_totals: true, }); const formatted = connections.map((connection) => ({ diff --git a/src/tools/auth0/handlers/customDomains.ts b/src/tools/auth0/handlers/customDomains.ts index f84a7bf8..8a100425 100644 --- a/src/tools/auth0/handlers/customDomains.ts +++ b/src/tools/auth0/handlers/customDomains.ts @@ -48,7 +48,8 @@ export default class CustomDomainsHadnler extends DefaultAPIHandler { return this.existing; } - const customDomains = await this.client.customDomains.getAll({ paginate: false }); + // TODO: Bring back paginate: false + const { data: customDomains } = await this.client.customDomains.getAll(); this.existing = customDomains; diff --git a/src/tools/auth0/handlers/databases.ts b/src/tools/auth0/handlers/databases.ts index 71a04d18..a3baee30 100644 --- a/src/tools/auth0/handlers/databases.ts +++ b/src/tools/auth0/handlers/databases.ts @@ -1,3 +1,4 @@ +import { GetConnectionsStrategyEnum } from 'auth0'; import DefaultAPIHandler, { order } from './default'; import constants from '../../constants'; import { filterExcluded, getEnabledClients } from '../../utils'; @@ -47,7 +48,7 @@ export default class DatabaseHandler extends DefaultAPIHandler { // If we going to update database, we need to get current options first if (fn === 'update') { return (params, payload) => - this.client.connections.get(params).then((connection) => { + this.client.connections.get(params).then(({ data: connection }) => { payload.options = { ...connection.options, ...payload.options }; return this.client.connections.update(params, payload); }); @@ -58,11 +59,12 @@ export default class DatabaseHandler extends DefaultAPIHandler { async getType() { if (this.existing) return this.existing; - this.existing = this.client.connections.getAll({ - strategy: 'auth0', - paginate: true, + // TODO: Bring back paginate: true + const { data: { connections } } = await this.client.connections.getAll({ + strategy: [GetConnectionsStrategyEnum.auth0], include_totals: true, }); + this.existing = connections; return this.existing; } @@ -80,10 +82,11 @@ export default class DatabaseHandler extends DefaultAPIHandler { }; // Convert enabled_clients by name to the id - const clients = await this.client.clients.getAll({ paginate: true, include_totals: true }); - const existingDatabasesConnections = await this.client.connections.getAll({ - strategy: 'auth0', - paginate: true, + // TODO: Bring back paginate: true + const { data: { clients } } = await this.client.clients.getAll({ include_totals: true }); + // TODO: Bring back paginate: true + const { data: { connections: existingDatabasesConnections } } = await this.client.connections.getAll({ + strategy: [GetConnectionsStrategyEnum.auth0], include_totals: true, }); const formatted = databases.map((db) => { diff --git a/src/tools/auth0/handlers/emailProvider.ts b/src/tools/auth0/handlers/emailProvider.ts index 25fefc63..8a5a6c02 100644 --- a/src/tools/auth0/handlers/emailProvider.ts +++ b/src/tools/auth0/handlers/emailProvider.ts @@ -16,7 +16,8 @@ export default class EmailProviderHandler extends DefaultHandler { async getType(): Promise { try { - return await this.client.emailProvider.get({ include_fields: true, fields: defaultFields }); + const { data } = await this.client.emails.get({ include_fields: true, fields: defaultFields.join(',') }); + return data; } catch (err) { if (err.statusCode === 404) return {}; throw err; @@ -34,9 +35,10 @@ export default class EmailProviderHandler extends DefaultHandler { let existing = await this.getType(); + // TODO: HTTP DELETE on emails/provider is not public, so not part of our vNext SDK. if (Object.keys(emailProvider).length === 0) { if (this.config('AUTH0_ALLOW_DELETE') === true) { - await this.client.emailProvider.delete(); + // await this.client.emails.delete(); this.didDelete(existing); } return; @@ -45,7 +47,7 @@ export default class EmailProviderHandler extends DefaultHandler { if (existing.name) { if (existing.name !== emailProvider.name) { // Delete the current provider as it's different - await this.client.emailProvider.delete(); + // await this.client.emailProvider.delete(); this.didDelete(existing); existing = {}; } @@ -53,12 +55,13 @@ export default class EmailProviderHandler extends DefaultHandler { if (existing.name) { const provider = { name: emailProvider.name, enabled: emailProvider.enabled }; - const updated = await this.client.emailProvider.update(provider, emailProvider); + const updated = await this.client.emails.update(provider, emailProvider); this.updated += 1; this.didUpdate(updated); } else { - const provider = { name: emailProvider.name, enabled: emailProvider.enabled }; - const created = await this.client.emailProvider.configure(provider, emailProvider); + // TODO: credentials is required here. + const provider = { name: emailProvider.name, enabled: emailProvider.enabled, credentials: {} }; + const created = await this.client.emails.configure(provider, emailProvider); this.created += 1; this.didCreate(created); } diff --git a/src/tools/auth0/handlers/emailTemplates.ts b/src/tools/auth0/handlers/emailTemplates.ts index 3956f128..93904078 100644 --- a/src/tools/auth0/handlers/emailTemplates.ts +++ b/src/tools/auth0/handlers/emailTemplates.ts @@ -29,9 +29,9 @@ export default class EmailTemplateHandler extends DefaultHandler { async getType(): Promise { const emailTemplates = await Promise.all( - constants.EMAIL_TEMPLATES_TYPES.map(async (name) => { + constants.EMAIL_TEMPLATES_TYPES.map(async (templateName) => { try { - const template = await this.client.emailTemplates.get({ name }); + const { data: template } = await this.client.emailTemplates.get({ templateName }); return template; } catch (err) { // Ignore if not found, else throw error @@ -51,16 +51,18 @@ export default class EmailTemplateHandler extends DefaultHandler { try { const identifierField = this.identifiers[0]; - const params = { name: emailTemplate[identifierField] }; - const updated = await this.client.emailTemplates.update(params, emailTemplate); - delete updated.body; + const params = { templateName: emailTemplate[identifierField] }; + const { data: updated } = await this.client.emailTemplates.update(params, emailTemplate); + // TODO: Should we revisit this? + delete (updated as any ).body; this.didUpdate(updated); this.updated += 1; } catch (err) { if (err.statusCode === 404) { // Create if it does not exist - const created = await this.client.emailTemplates.create(emailTemplate); - delete created.body; + const { data: created } = await this.client.emailTemplates.create(emailTemplate); + // TODO: Should we revisit this? + delete (created as any).body; this.didCreate(created); this.created += 1; } else { diff --git a/src/tools/auth0/handlers/guardianFactorProviders.ts b/src/tools/auth0/handlers/guardianFactorProviders.ts index 5f86fead..e34d6051 100644 --- a/src/tools/auth0/handlers/guardianFactorProviders.ts +++ b/src/tools/auth0/handlers/guardianFactorProviders.ts @@ -40,8 +40,19 @@ export default class GuardianFactorProvidersHandler extends DefaultHandler { const data = await Promise.all( mappings.map(async (m) => { - const provider = await this.client.guardian.getFactorProvider(m); - return { ...m, ...provider }; + let provider; + // TODO: This is quite a change, needs to be validated for sure. + if (m.name === 'phone' && m.provider === 'twilio') { + provider = await this.client.guardian.getPhoneFactorProviderTwilio(); + } else if (m.name === 'sms' && m.provider === 'twilio') { + provider = await this.client.guardian.getSmsFactorProviderTwilio(); + } else if (m.name === 'push-notification' && m.provider === 'apns') { + provider = await this.client.guardian.getPushNotificationProviderAPNS(); + } else if (m.name === 'push-notification' && m.provider === 'sns') { + provider = await this.client.guardian.getPushNotificationProviderSNS(); + } + + return { ...m, ...provider.data }; }) ); @@ -59,11 +70,18 @@ export default class GuardianFactorProvidersHandler extends DefaultHandler { // Process each factor await Promise.all( guardianFactorProviders.map(async (factorProvider) => { - const data = { ...factorProvider }; + const { name, provider, ...data } = factorProvider; const params = { name: factorProvider.name, provider: factorProvider.provider }; - delete data.name; - delete data.provider; - await this.client.guardian.updateFactorProvider(params, data); + // TODO: This is quite a change, needs to be validated for sure. + if (name === 'phone' && provider === 'twilio') { + await this.client.guardian.updatePhoneFactorProviderTwilio(data); + } else if (name === 'push-notification' && provider === 'apns') { + await this.client.guardian.updatePushNotificationProviderAPNS(data); + } else if (name === 'push-notification' && provider === 'fcm') { + await this.client.guardian.updatePushNotificationProviderFCM(data); + } else if (name === 'push-notification' && provider === 'sns') { + await this.client.guardian.updatePushNotificationProviderSNS(data); + } this.didUpdate(params); this.updated += 1; }) diff --git a/src/tools/auth0/handlers/guardianFactorTemplates.ts b/src/tools/auth0/handlers/guardianFactorTemplates.ts index 387c5abc..d6cd91f9 100644 --- a/src/tools/auth0/handlers/guardianFactorTemplates.ts +++ b/src/tools/auth0/handlers/guardianFactorTemplates.ts @@ -1,6 +1,7 @@ import DefaultHandler from './default'; import constants from '../../constants'; -import { Assets, Asset, CalculatedChanges } from '../../../types'; +import { Assets, Asset } from '../../../types'; +import { TemplateMessages } from 'auth0'; export const schema = { type: 'array', @@ -29,8 +30,15 @@ export default class GuardianFactorTemplatesHandler extends DefaultHandler { const data = await Promise.all( constants.GUARDIAN_FACTOR_TEMPLATES.map(async (name) => { - const templates = await this.client.guardian.getFactorTemplates({ name }); - return { name, ...templates }; + // TODO: This is quite a change, needs to be validated for sure. + if (name === 'sms') { + const { data: templates } = await this.client.guardian.getSmsFactorTemplates(); + return { name, ...templates }; + // TODO: GUARDIAN_FACTOR_TEMPLATES only contains 'sms'. Is that expected? We also have 'phone'. + } else { + const { data: templates } = await this.client.guardian.getPhoneFactorTemplates(); + return { name, ...templates }; + } }) ); @@ -48,10 +56,14 @@ export default class GuardianFactorTemplatesHandler extends DefaultHandler { // Process each factor templates await Promise.all( guardianFactorTemplates.map(async (fatorTemplates) => { - const data = { ...fatorTemplates }; + const { name, ...data } = fatorTemplates; const params = { name: fatorTemplates.name }; - delete data.name; - await this.client.guardian.updateFactorTemplates(params, data); + // TODO: This is quite a change, needs to be validated for sure. + if (name === 'sms') { + await this.client.guardian.setSmsFactorTemplates(data as TemplateMessages); + } else if (name ==='phone') { + await this.client.guardian.setPhoneFactorTemplates(data as TemplateMessages); + } this.didUpdate(params); this.updated += 1; }) diff --git a/src/tools/auth0/handlers/guardianFactors.ts b/src/tools/auth0/handlers/guardianFactors.ts index 5359dabe..53e37031 100644 --- a/src/tools/auth0/handlers/guardianFactors.ts +++ b/src/tools/auth0/handlers/guardianFactors.ts @@ -1,6 +1,7 @@ import DefaultHandler from './default'; import constants from '../../constants'; import { Asset, Assets } from '../../../types'; +import { Factor, FactorNameEnum } from 'auth0'; export const schema = { type: 'array', @@ -26,7 +27,8 @@ export default class GuardianFactorsHandler extends DefaultHandler { async getType(): Promise { if (this.existing) return this.existing; - this.existing = await this.client.guardian.getFactors(); + const { data } = await this.client.guardian.getFactors(); + this.existing = data; return this.existing; } @@ -39,9 +41,9 @@ export default class GuardianFactorsHandler extends DefaultHandler { // Process each factor await Promise.all( - guardianFactors.map(async (factor) => { + guardianFactors.map(async (factor: Factor) => { const data = { ...factor }; - const params = { name: factor.name }; + const params = { name: factor.name as FactorNameEnum }; delete data.name; await this.client.guardian.updateFactor(params, data); this.didUpdate(params); diff --git a/src/tools/auth0/handlers/guardianPhoneFactorMessageTypes.ts b/src/tools/auth0/handlers/guardianPhoneFactorMessageTypes.ts index 46a4e4e9..e56b4c7f 100644 --- a/src/tools/auth0/handlers/guardianPhoneFactorMessageTypes.ts +++ b/src/tools/auth0/handlers/guardianPhoneFactorMessageTypes.ts @@ -1,6 +1,7 @@ import DefaultHandler from './default'; import constants from '../../constants'; import { Asset, Assets } from '../../../types'; +import { GetMessageTypes200Response } from 'auth0'; export const schema = { type: 'object', @@ -35,7 +36,7 @@ const isFeatureUnavailableError = (err): boolean => { }; export default class GuardianPhoneMessageTypesHandler extends DefaultHandler { - existing: Asset[]; + existing: Asset; constructor(options: DefaultHandler) { super({ @@ -56,7 +57,8 @@ export default class GuardianPhoneMessageTypesHandler extends DefaultHandler { if (this.existing) return this.existing; try { - this.existing = await this.client.guardian.getPhoneFactorMessageTypes(); + const { data } = await this.client.guardian.getPhoneFactorMessageTypes(); + this.existing = data; } catch (e) { if (isFeatureUnavailableError(e)) { // Gracefully skip processing this configuration value. @@ -75,9 +77,8 @@ export default class GuardianPhoneMessageTypesHandler extends DefaultHandler { // Do nothing if not set if (!guardianPhoneFactorMessageTypes || !guardianPhoneFactorMessageTypes.message_types) return; - const params = {}; const data = guardianPhoneFactorMessageTypes; - await this.client.guardian.updatePhoneFactorMessageTypes(params, data); + await this.client.guardian.updatePhoneFactorMessageTypes(data as unknown as GetMessageTypes200Response); this.updated += 1; this.didUpdate(guardianPhoneFactorMessageTypes); } diff --git a/src/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.ts b/src/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.ts index 6f178137..6d050759 100644 --- a/src/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.ts +++ b/src/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.ts @@ -1,6 +1,7 @@ import DefaultHandler from './default'; import constants from '../../constants'; import { Asset, Assets } from '../../../types'; +import { GetPhoneProviders200Response } from 'auth0'; export const schema = { type: 'object', @@ -32,7 +33,7 @@ const isFeatureUnavailableError = (err) => { }; export default class GuardianPhoneSelectedProviderHandler extends DefaultHandler { - existing: Asset[]; + existing: Asset; constructor(options) { super({ @@ -53,7 +54,8 @@ export default class GuardianPhoneSelectedProviderHandler extends DefaultHandler if (this.existing) return this.existing; try { - this.existing = await this.client.guardian.getPhoneFactorSelectedProvider(); + const { data } = await this.client.guardian.getPhoneFactorSelectedProvider(); + this.existing = data; } catch (e) { if (isFeatureUnavailableError(e)) { // Gracefully skip processing this configuration value. @@ -73,9 +75,8 @@ export default class GuardianPhoneSelectedProviderHandler extends DefaultHandler if (!guardianPhoneFactorSelectedProvider || !guardianPhoneFactorSelectedProvider.provider) return; - const params = {}; const data = guardianPhoneFactorSelectedProvider; - await this.client.guardian.updatePhoneFactorSelectedProvider(params, data); + await this.client.guardian.updatePhoneFactorSelectedProvider(data as GetPhoneProviders200Response); this.updated += 1; this.didUpdate(guardianPhoneFactorSelectedProvider); } diff --git a/src/tools/auth0/handlers/guardianPolicies.ts b/src/tools/auth0/handlers/guardianPolicies.ts index 9d81de36..75d5c44a 100644 --- a/src/tools/auth0/handlers/guardianPolicies.ts +++ b/src/tools/auth0/handlers/guardianPolicies.ts @@ -1,6 +1,6 @@ import DefaultHandler from './default'; import constants from '../../constants'; -import { Asset, Assets } from '../../../types'; +import { Assets } from '../../../types'; export const schema = { type: 'object', @@ -18,7 +18,7 @@ export const schema = { export default class GuardianPoliciesHandler extends DefaultHandler { existing: { - policies: Asset[]; + policies: string[]; }; constructor(options) { @@ -36,7 +36,7 @@ export default class GuardianPoliciesHandler extends DefaultHandler { } if (this.existing) return this.existing; - const policies = await this.client.guardian.getPolicies(); + const { data: policies } = await this.client.guardian.getPolicies(); this.existing = { policies }; return this.existing; } @@ -48,9 +48,8 @@ export default class GuardianPoliciesHandler extends DefaultHandler { // Do nothing if not set if (!guardianPolicies || !guardianPolicies.policies) return; - const params = {}; const data = guardianPolicies.policies; - await this.client.guardian.updatePolicies(params, data); + await this.client.guardian.updatePolicies(data); this.updated += 1; this.didUpdate(guardianPolicies); } diff --git a/src/tools/auth0/handlers/hooks.ts b/src/tools/auth0/handlers/hooks.ts index dbdde96e..f27f3d48 100644 --- a/src/tools/auth0/handlers/hooks.ts +++ b/src/tools/auth0/handlers/hooks.ts @@ -142,7 +142,7 @@ export default class HooksHandler extends DefaultHandler { await Promise.all( changes.del.map(async (data) => { - await this.client.hooks.removeSecrets({ id: data.hookId }, data.secrets); + await this.client.hooks.deleteSecrets({ id: data.hookId }, data.secrets); }) ); @@ -171,17 +171,18 @@ export default class HooksHandler extends DefaultHandler { } try { - const hooks = await this.client.hooks.getAll({ paginate: true, include_totals: true }); + // TODO: Bring back paginate: true + const { data: { hooks } } = await this.client.hooks.getAll({ include_totals: true }); // hooks.getAll does not return code and secrets, we have to fetch hooks one-by-one this.existing = await Promise.all( hooks.map((hook: { id: string }) => this.client.hooks .get({ id: hook.id }) - .then((hookWithCode) => + .then(({data: hookWithCode}) => this.client.hooks .getSecrets({ id: hook.id }) - .then((secrets) => ({ ...hookWithCode, secrets })) + .then(({ data: secrets }) => ({ ...hookWithCode, secrets })) ) ) ); diff --git a/src/tools/auth0/handlers/index.ts b/src/tools/auth0/handlers/index.ts index e9e0daa3..5997a390 100644 --- a/src/tools/auth0/handlers/index.ts +++ b/src/tools/auth0/handlers/index.ts @@ -20,7 +20,6 @@ import * as guardianPhoneFactorMessageTypes from './guardianPhoneFactorMessageTy import * as roles from './roles'; import * as branding from './branding'; import * as prompts from './prompts'; -import * as migrations from './migrations'; import * as actions from './actions'; import * as triggers from './triggers'; import * as organizations from './organizations'; @@ -55,7 +54,6 @@ const auth0ApiHandlers: { [key in AssetTypes]: any } = { branding, //@ts-ignore because prompts have not been universally implemented yet prompts, - migrations, actions, triggers, organizations, diff --git a/src/tools/auth0/handlers/logStreams.ts b/src/tools/auth0/handlers/logStreams.ts index 618dbb75..e2c3369a 100644 --- a/src/tools/auth0/handlers/logStreams.ts +++ b/src/tools/auth0/handlers/logStreams.ts @@ -58,9 +58,11 @@ export default class LogStreamsHandler extends DefaultAPIHandler { return this.existing; } - const logStreams = await this.client.logStreams.getAll({ paginate: false }).then((logStreams) => + // TODO: Bring back paginate: false + const logStreams = await this.client.logStreams.getAll().then(({ data: logStreams }) => logStreams.map((logStream) => { - if (logStream.status === 'suspended') delete logStream.status; + // TODO: Do we need to keep this + if (logStream.status === 'suspended') delete (logStream as any).status; return logStream; }) ); diff --git a/src/tools/auth0/handlers/migrations.ts b/src/tools/auth0/handlers/migrations.ts deleted file mode 100644 index 977690e1..00000000 --- a/src/tools/auth0/handlers/migrations.ts +++ /dev/null @@ -1,78 +0,0 @@ -import DefaultHandler, { order } from './default'; -import log from '../../../logger'; -import { Asset, Assets } from '../../../types'; - -export const schema = { - type: 'object', - additionalProperties: { type: 'boolean' }, -}; - -export default class MigrationsHandler extends DefaultHandler { - constructor(options: DefaultHandler) { - super({ - ...options, - type: 'migrations', - }); - } - - //TODO: standardize empty object literal with more intentional empty indicator - async getType(): Promise { - try { - const migrations = await this.client.migrations.getMigrations(); - return migrations.flags; - } catch (err) { - if (err.statusCode === 404) return {}; - throw err; - } - } - - // Run at the end since switching a flag will depend on other applying other changes - @order('150') - async processChanges(assets: Assets): Promise { - const { migrations } = assets; - - if (migrations && Object.keys(migrations).length > 0) { - const flags = await this.removeUnavailableMigrations(migrations); - - if (Object.keys(flags).length > 0) { - await this.client.migrations.updateMigrations({ flags }); - this.updated += 1; - this.didUpdate(flags); - } - } - } - - logUnavailableMigrations(ignoreUnavailableMigrations: boolean, ignoredMigrations: string[]) { - if (ignoreUnavailableMigrations) { - log.info( - `The following migrations are not available '${ignoredMigrations.join( - ',' - )}'. The migrations will be ignored because you have AUTH0_IGNORE_UNAVAILABLE_MIGRATIONS=true in your configuration.` - ); - } else { - log.warn( - `The following disabled migrations are not available '${ignoredMigrations.join( - ',' - )}'. The migrations will be ignored, remove the migrations to avoid future warnings.` - ); - } - } - - async removeUnavailableMigrations(migrations: Asset[]): Promise { - const flags = { ...migrations }; - const ignoreUnavailableMigrations = !!this.config('AUTH0_IGNORE_UNAVAILABLE_MIGRATIONS'); - const existingMigrations = await this.getType(); - const unavailableMigrations = Object.keys(flags).filter( - (flag) => !(flag in existingMigrations) - ); - const ignoredMigrations = unavailableMigrations.filter( - (flag) => ignoreUnavailableMigrations || flags[flag] === false - ); - - if (ignoredMigrations.length > 0) { - this.logUnavailableMigrations(ignoreUnavailableMigrations, ignoredMigrations); - ignoredMigrations.forEach((flag) => delete flags[flag]); - } - return flags; - } -} diff --git a/src/tools/auth0/handlers/organizations.ts b/src/tools/auth0/handlers/organizations.ts index 9e0d826b..6903ee43 100644 --- a/src/tools/auth0/handlers/organizations.ts +++ b/src/tools/auth0/handlers/organizations.ts @@ -1,4 +1,5 @@ import _ from 'lodash'; +import { PostEnabledConnectionsRequest } from 'auth0'; import DefaultHandler, { order } from './default'; import { calculateChanges } from '../../calculateChanges'; import log from '../../../logger'; @@ -72,7 +73,7 @@ export default class OrganizationsHandler extends DefaultHandler { const organization = { ...org }; delete organization.connections; - const created = await this.client.organizations.create(organization); + const { data: created } = await this.client.organizations.create(organization); if (typeof org.connections !== 'undefined' && org.connections.length > 0) { await Promise.all( @@ -135,7 +136,7 @@ export default class OrganizationsHandler extends DefaultHandler { connectionsToUpdate.map((conn) => this.client.organizations .updateEnabledConnection( - { connection_id: conn.connection_id, ...params }, + { connectionId: conn.connection_id, ...params }, { assign_membership_on_login: conn.assign_membership_on_login } ) .catch(() => { @@ -149,7 +150,7 @@ export default class OrganizationsHandler extends DefaultHandler { await Promise.all( connectionsToAdd.map((conn) => this.client.organizations - .addEnabledConnection(params, _.omit(conn, 'connection')) + .addEnabledConnection(params, _.omit(conn, 'connection') as PostEnabledConnectionsRequest) .catch(() => { throw new Error( `Problem adding Enabled Connection ${conn.connection_id} for organizations ${params.id}` @@ -161,7 +162,7 @@ export default class OrganizationsHandler extends DefaultHandler { await Promise.all( connectionsToRemove.map((conn) => this.client.organizations - .removeEnabledConnection({ connection_id: conn.connection_id, ...params }) + .deleteEnabledConnection({ connectionId: conn.connection_id, ...params }) .catch(() => { throw new Error( `Problem removing Enabled Connection ${conn.connection_id} for organizations ${params.id}` @@ -200,12 +201,12 @@ export default class OrganizationsHandler extends DefaultHandler { } try { - const organizations = await this.client.organizations.getAll({ - checkpoint: true, + // TODO: Bring back checkpoint: true + const { data: { organizations } } = await this.client.organizations.getAll({ include_totals: true, }); for (let index = 0; index < organizations.length; index++) { - const connections = await this.client.organizations.connections.get({ + const { data: connections } = await this.client.organizations.getEnabledConnections({ id: organizations[index].id, }); organizations[index].connections = connections; @@ -228,8 +229,8 @@ export default class OrganizationsHandler extends DefaultHandler { if (!organizations) return; // Gets organizations from destination tenant const existing = await this.getType(); - const existingConnections = await this.client.connections.getAll({ - paginate: true, + // TODO: Bring back paginate: true + const { data: { connections: existingConnections } } = await this.client.connections.getAll({ include_totals: true, }); diff --git a/src/tools/auth0/handlers/pages.ts b/src/tools/auth0/handlers/pages.ts index 679441e1..47f10dfa 100644 --- a/src/tools/auth0/handlers/pages.ts +++ b/src/tools/auth0/handlers/pages.ts @@ -50,9 +50,9 @@ export default class PagesHandler extends DefaultHandler { } async updateLoginPage(page): Promise { - const globalClient = await this.client.clients.getAll({ + // TODO: Bring back paginate: true + const { data: { clients: globalClient } } = await this.client.clients.getAll({ is_global: true, - paginate: true, include_totals: true, }); @@ -61,7 +61,7 @@ export default class PagesHandler extends DefaultHandler { } await this.client.clients.update( - { client_id: globalClient[0].client_id }, + { id: globalClient[0].client_id }, { custom_login_page: page.html, custom_login_page_on: page.enabled, @@ -86,7 +86,7 @@ export default class PagesHandler extends DefaultHandler { }, {}); if (Object.keys(update).length) { - await this.client.tenant.updateSettings(update); + await this.client.tenants.updateSettings(update); } toUpdate.forEach((page) => { @@ -103,9 +103,9 @@ export default class PagesHandler extends DefaultHandler { }[] = []; // Login page is handled via the global client - const globalClient = await this.client.clients.getAll({ + // TODO: Bring back paginate: true + const { data: { clients: globalClient } } = await this.client.clients.getAll({ is_global: true, - paginate: true, include_totals: true, }); if (!globalClient[0]) { @@ -120,7 +120,7 @@ export default class PagesHandler extends DefaultHandler { }); } - const tenantSettings = await this.client.tenant.getSettings(); + const { data: tenantSettings } = await this.client.tenants.getSettings(); Object.entries(pageNameMap).forEach(([key, name]) => { const page = tenantSettings[name]; diff --git a/src/tools/auth0/handlers/prompts.ts b/src/tools/auth0/handlers/prompts.ts index b98ce733..b0ac9014 100644 --- a/src/tools/auth0/handlers/prompts.ts +++ b/src/tools/auth0/handlers/prompts.ts @@ -175,7 +175,7 @@ export default class PromptsHandler extends DefaultHandler { } async getType(): Promise { - const promptsSettings = await this.client.prompts.getSettings(); + const { data: promptsSettings } = await this.client.prompts.get(); const customText = await this.getCustomTextSettings(); @@ -186,9 +186,9 @@ export default class PromptsHandler extends DefaultHandler { } async getCustomTextSettings(): Promise { - const supportedLanguages = await this.client.tenant + const supportedLanguages = await this.client.tenants .getSettings() - .then(({ enabled_locales }) => { + .then(({ data: { enabled_locales } }) => { if (enabled_locales === undefined) return []; // In rare cases, private cloud tenants may not have `enabled_locales` defined return enabled_locales; }); @@ -205,7 +205,7 @@ export default class PromptsHandler extends DefaultHandler { prompt: promptType, language, }) - .then((customTextData) => { + .then(({data: customTextData}) => { if (isEmpty(customTextData)) return null; return { language, @@ -244,7 +244,7 @@ export default class PromptsHandler extends DefaultHandler { const { customText, ...promptSettings } = prompts; if (!isEmpty(promptSettings)) { - await this.client.prompts.updateSettings({}, promptSettings); + await this.client.prompts.update(promptSettings); } await this.updateCustomTextSettings(customText); @@ -276,11 +276,7 @@ export default class PromptsHandler extends DefaultHandler { }); }), generator: ({ prompt, language, body }) => - this.client.prompts.updateCustomTextByLanguage({ - prompt, - language, - body, - }), + this.client.prompts.updateCustomTextByLanguage({ prompt, language }, body) }) .promise(); } diff --git a/src/tools/auth0/handlers/resourceServers.ts b/src/tools/auth0/handlers/resourceServers.ts index 5541d775..6951ebfe 100644 --- a/src/tools/auth0/handlers/resourceServers.ts +++ b/src/tools/auth0/handlers/resourceServers.ts @@ -1,3 +1,4 @@ +import { ResourceServer } from 'auth0'; import ValidationError from '../../validationError'; import constants from '../../constants'; @@ -34,12 +35,6 @@ export const schema = { }, }; -export type ResourceServer = { - id: string; - name: string; - identifier: string; - scopes?: { description: string; value: string }[]; -}; export default class ResourceServersHandler extends DefaultHandler { existing: ResourceServer[]; @@ -58,8 +53,8 @@ export default class ResourceServersHandler extends DefaultHandler { async getType(): Promise { if (this.existing) return this.existing; - const resourceServers = await this.client.resourceServers.getAll({ - paginate: true, + // TODO: Bring back paginate: true + const { data: { resource_servers: resourceServers } } = await this.client.resourceServers.getAll({ include_totals: true, }); return resourceServers.filter( diff --git a/src/tools/auth0/handlers/roles.ts b/src/tools/auth0/handlers/roles.ts index 260449c2..ba731ff1 100644 --- a/src/tools/auth0/handlers/roles.ts +++ b/src/tools/auth0/handlers/roles.ts @@ -41,10 +41,10 @@ export default class RolesHandler extends DefaultHandler { const role = { ...data }; delete role.permissions; - const created = await this.client.roles.create(role); + const { data: created } = await this.client.roles.create(role); if (typeof data.permissions !== 'undefined' && data.permissions.length > 0) { - await this.client.roles.permissions.create( + await this.client.roles.addPermissions( { id: created.id }, { permissions: data.permissions } ); @@ -113,11 +113,11 @@ export default class RolesHandler extends DefaultHandler { await this.client.roles.update(params, data); if (typeof existingRole.permissions !== 'undefined' && existingRole.permissions.length > 0) { - await this.client.roles.permissions.delete(params, { permissions: existingRole.permissions }); + await this.client.roles.deletePermissions(params, { permissions: existingRole.permissions }); } if (typeof newPermissions !== 'undefined' && newPermissions.length > 0) { - await this.client.roles.permissions.create(params, { permissions: newPermissions }); + await this.client.roles.addPermissions(params, { permissions: newPermissions }); } return params; @@ -151,10 +151,11 @@ export default class RolesHandler extends DefaultHandler { } try { - const roles = await this.client.roles.getAll({ paginate: true, include_totals: true }); + // TODO: Bring back paginate: true + const { data: { roles } } = await this.client.roles.getAll({ include_totals: true }); for (let index = 0; index < roles.length; index++) { - const permissions = await this.client.roles.permissions.getAll({ - paginate: true, + // TODO: Bring back paginate: true + const { data: { permissions } } = await this.client.roles.getPermissions({ include_totals: true, id: roles[index].id, }); @@ -165,7 +166,8 @@ export default class RolesHandler extends DefaultHandler { return permission; }) ); - roles[index].permissions = strippedPerms; + // TODO: Do we need this? + (roles[index] as any).permissions = strippedPerms; } this.existing = roles; return this.existing; diff --git a/src/tools/auth0/handlers/rules.ts b/src/tools/auth0/handlers/rules.ts index b95d0dbf..95d9661d 100644 --- a/src/tools/auth0/handlers/rules.ts +++ b/src/tools/auth0/handlers/rules.ts @@ -63,7 +63,9 @@ export default class RulesHandler extends DefaultHandler { async getType(): Promise { try { if (this.existing) return this.existing; - this.existing = await this.client.rules.getAll({ paginate: true, include_totals: true }); + // TODO: Bring back paginate: true + const { data } = await this.client.rules.getAll({ include_totals: true }); + this.existing = data.rules; return this.existing; } catch (err) { if (isDeprecatedError(err)) { diff --git a/src/tools/auth0/handlers/rulesConfigs.ts b/src/tools/auth0/handlers/rulesConfigs.ts index 8e430133..170e914b 100644 --- a/src/tools/auth0/handlers/rulesConfigs.ts +++ b/src/tools/auth0/handlers/rulesConfigs.ts @@ -30,7 +30,8 @@ export default class RulesConfigsHandler extends DefaultHandler { async getType(): Promise { try { - return this.client.rulesConfigs.getAll(); + const { data } = await this.client.rulesConfigs.getAll(); + return data; } catch (err) { if (isDeprecatedError(err)) return null; throw err; diff --git a/src/tools/auth0/handlers/tenant.ts b/src/tools/auth0/handlers/tenant.ts index 941ce5d0..42c9c409 100644 --- a/src/tools/auth0/handlers/tenant.ts +++ b/src/tools/auth0/handlers/tenant.ts @@ -1,16 +1,16 @@ +import { TenantSettings, TenantSettingsFlags, TenantSettingsUpdate, TenantSettingsUpdateFlags } from 'auth0'; import ValidationError from '../../validationError'; - import DefaultHandler, { order } from './default'; import { supportedPages, pageNameMap } from './pages'; import { convertJsonToString } from '../../utils'; -import { Asset, Assets, Language } from '../../../types'; +import { Asset, Assets } from '../../../types'; import log from '../../../logger'; export const schema = { type: 'object', }; -export type Tenant = Asset & { enabled_locales?: Language[]; flags: { [key: string]: boolean } }; +export type Tenant = TenantSettings; const blockPageKeys = [ ...Object.keys(pageNameMap), @@ -29,7 +29,7 @@ export default class TenantHandler extends DefaultHandler { } async getType(): Promise { - const tenant = await this.client.tenant.getSettings(); + const { data: tenant } = await this.client.tenants.getSettings(); tenant.flags = removeUnallowedTenantFlags(tenant.flags); @@ -66,19 +66,20 @@ export default class TenantHandler extends DefaultHandler { // Do nothing if not set if (!tenant) return; - const updatedTenant: Partial = { - ...tenant, + const updatedTenant: TenantSettingsUpdate = { + // TODO: What's wrong with the enums? + ...(tenant as any), }; if ('flags' in updatedTenant) { - updatedTenant.flags = removeUnallowedTenantFlags(tenant.flags); + updatedTenant.flags = removeUnallowedTenantFlags(tenant.flags) as TenantSettingsUpdateFlags; if (Object.keys(updatedTenant.flags).length === 0) { delete updatedTenant.flags; } } if (updatedTenant && Object.keys(updatedTenant).length > 0) { - await this.client.tenant.updateSettings(updatedTenant); + await this.client.tenants.updateSettings(updatedTenant); this.updated += 1; this.didUpdate(updatedTenant); } @@ -87,7 +88,7 @@ export default class TenantHandler extends DefaultHandler { /* Tenant flags are used to facilitate a number of functionalities, some - public, some internal. The subset of flags that are allowed to be updated + public, some internal. The subset of flags that are allowed to be updated in the context of the Deploy CLI is based on wether they're publicly exposed in the Auth0 API docs: @@ -122,13 +123,13 @@ export const allowedTenantFlags = [ ]; export const removeUnallowedTenantFlags = ( - proposedFlags: Tenant['flags'] | undefined -): Tenant['flags'] => { - if (proposedFlags === undefined) return {}; + proposedFlags: TenantSettingsFlags +): TenantSettingsFlags => { + if (proposedFlags === undefined) return {} as unknown as TenantSettingsFlags; const removedFlags: string[] = []; const filteredFlags = Object.keys(proposedFlags).reduce( - (acc: Tenant['flags'], proposedKey: string): Tenant['flags'] => { + (acc: TenantSettingsFlags, proposedKey: string): TenantSettingsFlags => { const isAllowedFlag = allowedTenantFlags.includes(proposedKey); if (!isAllowedFlag) { removedFlags.push(proposedKey); @@ -139,7 +140,7 @@ export const removeUnallowedTenantFlags = ( [proposedKey]: proposedFlags[proposedKey], }; }, - {} + {} as unknown as TenantSettingsFlags ); if (removedFlags.length > 0) { diff --git a/src/tools/auth0/handlers/themes.ts b/src/tools/auth0/handlers/themes.ts index 240df915..6ce69a19 100644 --- a/src/tools/auth0/handlers/themes.ts +++ b/src/tools/auth0/handlers/themes.ts @@ -54,7 +54,7 @@ export default class ThemesHandler extends DefaultHandler { } const currentTheme = currentThemes[0]; - await this.client.branding.deleteTheme({ id: currentTheme.themeId }); + await this.client.branding.deleteTheme({ themeId: currentTheme.themeId }); this.deleted += 1; this.didDelete(currentTheme); @@ -81,7 +81,7 @@ export default class ThemesHandler extends DefaultHandler { } else { const currentTheme = currentThemes[0]; // if theme exists, overwrite it otherwise create it - await this.client.branding.updateTheme({ id: currentTheme.themeId }, themeReqPayload); + await this.client.branding.updateTheme({ themeId: currentTheme.themeId }, themeReqPayload); } this.updated += 1; @@ -90,7 +90,7 @@ export default class ThemesHandler extends DefaultHandler { async getThemes(): Promise { try { - const theme = await this.client.branding.getDefaultTheme(); + const { data: theme } = await this.client.branding.getDefaultTheme(); return [theme]; } catch (err) { if (err.statusCode === 404) return []; diff --git a/src/tools/auth0/handlers/triggers.ts b/src/tools/auth0/handlers/triggers.ts index 55f84c16..f2726cc9 100644 --- a/src/tools/auth0/handlers/triggers.ts +++ b/src/tools/auth0/handlers/triggers.ts @@ -58,14 +58,15 @@ export default class TriggersHandler extends DefaultHandler { try { const res = await this.client.actions.getAllTriggers(); - const triggers: string[] = _(res.triggers).map('id').uniq().value(); + const triggers: string[] = _(res.data.triggers).map('id').uniq().value(); for (let i = 0; i < triggers.length; i++) { const triggerId = triggers[i]; - const { bindings } = await this.client.actions.getTriggerBindings({ - trigger_id: triggerId, + const { data } = await this.client.actions.getTriggerBindings({ + triggerId: triggerId, }); - if (bindings.length > 0) { + const { bindings } = data; + if (bindings && bindings.length > 0) { triggerBindings[triggerId] = bindings.map((binding) => ({ action_name: binding.action.name, display_name: binding.display_name, @@ -109,7 +110,7 @@ export default class TriggersHandler extends DefaultHandler { display_name: binding.display_name, })); - await this.client.actions.updateTriggerBindings({ trigger_id: name }, { bindings }); + await this.client.actions.updateTriggerBindings({ triggerId: name }, { bindings }); this.didUpdate({ trigger_id: name }); this.updated += 1; }) diff --git a/src/tools/constants.ts b/src/tools/constants.ts index 4506b46f..03d20511 100644 --- a/src/tools/constants.ts +++ b/src/tools/constants.ts @@ -1,3 +1,5 @@ +import { GetEmailTemplatesByTemplateNameTemplateNameEnum } from 'auth0'; + const PAGE_GUARDIAN_MULTIFACTOR = 'guardian_multifactor'; const PAGE_PASSWORD_RESET = 'password_reset'; const PAGE_LOGIN = 'login'; @@ -53,7 +55,7 @@ const constants = { 'change_password', 'password_reset', 'user_invitation', - ], + ] as GetEmailTemplatesByTemplateNameTemplateNameEnum[], ACTIONS_TRIGGERS: [ 'post-login', 'credentials-exchange', diff --git a/src/types.ts b/src/types.ts index 8fe333ee..70cc58c6 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,10 +1,7 @@ +import { ManagementClient, ResourceServer } from 'auth0'; import { Action } from './tools/auth0/handlers/actions'; import { - PromptTypes, - ScreenTypes, Prompts, - PromptsCustomText, - PromptSettings, } from './tools/auth0/handlers/prompts'; import { Tenant } from './tools/auth0/handlers/tenant'; import { Theme } from './tools/auth0/handlers/themes'; @@ -12,7 +9,6 @@ import { Page } from './tools/auth0/handlers/pages'; import { LogStream } from './tools/auth0/handlers/logStreams'; import { Client } from './tools/auth0/handlers/clients'; import { ClientGrant } from './tools/auth0/handlers/clientGrants'; -import { ResourceServer } from './tools/auth0/handlers/resourceServers'; import { PromisePoolExecutor } from 'promise-pool-executor'; type SharedPaginationParams = { @@ -34,13 +30,6 @@ export type PagePaginationParams = SharedPaginationParams & { per_page: number; }; -type APIClientBaseFunctions = { - getAll: (arg0: SharedPaginationParams) => Promise; - create: (arg0: { id: string }) => Promise; - update: (arg0: {}, arg1: Asset) => Promise; - delete: (arg0: Asset) => Promise; -}; - export type ApiResponse = { start: number; limit: number; @@ -48,144 +37,7 @@ export type ApiResponse = { next?: string; } & { [key in AssetTypes]: Asset[] }; -export type BaseAuth0APIClient = { - actions: { - getAll: (arg0: SharedPaginationParams) => Promise; - create: (arg0: { id: string }) => Promise; - update: (arg0: {}, arg1: Action) => Promise; - delete: (arg0: Asset) => Promise; - deploy: (arg0: { id: string }) => Promise; - getAllTriggers: () => Promise<{ triggers: Asset[] }>; - getTriggerBindings: (arg0: { trigger_id: string }) => Promise<{ bindings: Asset[] }>; - updateTriggerBindings: ( - arg0: { trigger_id: string }, - arg1: { bindings: Object } - ) => Promise<{ bindings: Asset[] }>; - }; - attackProtection: APIClientBaseFunctions & { - getBreachedPasswordDetectionConfig: () => Promise; - getBruteForceConfig: () => Promise; - getSuspiciousIpThrottlingConfig: () => Promise; - updateBreachedPasswordDetectionConfig: ({}, arg1: Asset) => Promise; - updateSuspiciousIpThrottlingConfig: ({}, arg1: Asset) => Promise; - updateBruteForceConfig: ({}, arg1: Asset) => Promise; - }; - branding: APIClientBaseFunctions & { - getSettings: () => Promise; - getUniversalLoginTemplate: () => Promise; - updateSettings: ({}, Asset) => Promise; - setUniversalLoginTemplate: ({}, Asset) => Promise; - getDefaultTheme: () => Promise; - updateTheme: ( - arg0: { id: string }, - arg1: Omit - ) => Promise>; - createTheme: (arg0: Omit) => Promise>; - deleteTheme: (arg0: { id: string }) => Promise; - }; - clients: { - getAll: (arg0: SharedPaginationParams) => Promise; - create: (arg0: { id: string }) => Promise; - update: (arg0: {}, arg1: Partial) => Promise; - delete: (arg0: Asset) => Promise; - }; - clientGrants: { - getAll: (arg0: SharedPaginationParams) => Promise; - create: (arg0: { id: string }) => Promise; - update: (arg0: {}, arg1: Partial) => Promise; - delete: (arg0: Asset) => Promise; - }; - connections: APIClientBaseFunctions & { - get: (arg0: Asset) => Promise; - getAll: (arg0: PagePaginationParams | CheckpointPaginationParams) => Promise; - }; - customDomains: APIClientBaseFunctions & { - getAll: () => Promise; - }; - emailProvider: APIClientBaseFunctions & { - delete: () => Promise; - get: (arg0: Asset) => Promise; - configure: (arg0: Object, arg1: Object) => Promise; - }; - emailTemplates: APIClientBaseFunctions & { - get: (arg0: Asset) => Promise; - }; - guardian: APIClientBaseFunctions & { - getFactorProvider: (arg0: Asset) => Promise; - updateFactorProvider: (arg0: {}, arg1: Asset) => Promise; - getFactors: () => Promise; - updateFactor: (arg0: {}, arg1: Asset) => Promise; - getPolicies: () => Promise; - updatePolicies: (arg0: {}, arg1: Asset) => Promise; - getFactorTemplates: (arg0: { name: string }) => Promise; - updateFactorTemplates: (arg0: {}, arg1: Asset) => Promise; - updatePhoneFactorMessageTypes: (arg0: {}, arg1: Asset) => Promise; - getPhoneFactorSelectedProvider: () => Promise; - getPhoneFactorMessageTypes: () => Promise; - updatePhoneFactorSelectedProvider: (arg0: {}, arg1: Asset) => Promise; - }; - hooks: APIClientBaseFunctions & { - get: (arg0: { id: string }) => Promise; - removeSecrets: (arg0: {}, arg1: Asset) => Promise; - updateSecrets: (arg0: {}, arg1: Asset) => Promise; - getSecrets: (arg0: { id: string }) => Promise>; - addSecrets: (arg0: {}, arg1: Asset) => Promise; - }; - logStreams: { - getAll: (arg0: SharedPaginationParams) => Promise; - create: (arg0: { id: string }) => Promise; - update: (arg0: {}, arg1: Partial) => Promise; - delete: (arg0: Asset) => Promise; - }; - migrations: APIClientBaseFunctions & { - getMigrations: () => Promise<{ flags: Asset[] }>; - updateMigrations: (arg0: { flags: Asset[] }) => Promise; - }; - organizations: APIClientBaseFunctions & { - updateEnabledConnection: (arg0: {}, arg1: Asset) => Promise; - addEnabledConnection: (arg0: {}, arg1: Asset) => Promise; - removeEnabledConnection: (arg0: Asset) => Promise; - connections: { - get: (arg0: Asset) => Promise; - }; - }; - prompts: { - updateCustomTextByLanguage: (arg0: { - prompt: PromptTypes; - language: Language; - body: Partial<{ [key in ScreenTypes]: { [key: string]: string } }>; - }) => Promise; - getCustomTextByLanguage: (arg0: { - prompt: PromptTypes; - language: Language; - }) => Promise>; - getSettings: () => Promise; - updateSettings: (arg0: {}, arg1: Partial) => Promise; - }; - resourceServers: { - getAll: (arg0: SharedPaginationParams) => Promise; - create: (arg0: { id: string }) => Promise; - update: (arg0: {}, arg1: Partial) => Promise; - delete: (arg0: Asset) => Promise; - }; - roles: APIClientBaseFunctions & { - permissions: APIClientBaseFunctions & { - delete: (arg0: { id: string }, arg1: { permissions: Asset[] }) => Promise; - create: (arg0: { id: string }, arg1: { permissions: Asset[] }) => Promise; - }; - }; - rules: APIClientBaseFunctions; - rulesConfigs: APIClientBaseFunctions & { - getAll: () => Promise; - }; - tenant: APIClientBaseFunctions & { - getSettings: () => Promise; - updateSettings: (arg0: Partial) => Promise; - }; - triggers: APIClientBaseFunctions & { - getTriggerBindings: () => Promise; - }; -}; // TODO: replace with a more accurate representation of the Auth0APIClient type +export type BaseAuth0APIClient = ManagementClient; export type Auth0APIClient = BaseAuth0APIClient & { pool: PromisePoolExecutor; @@ -251,7 +103,7 @@ export type Assets = Partial<{ } | null; guardianPhoneFactorSelectedProvider: Asset | null; guardianPolicies: { - policies: Asset[]; //TODO: eliminate this intermediate level for consistency + policies: string[]; //TODO: eliminate this intermediate level for consistency } | null; hooks: Asset[] | null; logStreams: LogStream[] | null; @@ -296,7 +148,6 @@ export type AssetTypes = | 'guardianFactors' | 'guardianFactorProviders' | 'guardianFactorTemplates' - | 'migrations' | 'guardianPhoneFactorMessageTypes' | 'guardianPhoneFactorSelectedProvider' | 'guardianPolicies' From 9fd5767ff1a677fa8c61342cb567ad204be13ab8 Mon Sep 17 00:00:00 2001 From: frederikprijck Date: Wed, 30 Aug 2023 22:59:00 +0200 Subject: [PATCH 2/9] Update tests --- test/context/context.test.js | 42 ++++- test/context/directory/clientGrants.test.js | 16 +- test/context/directory/context.test.js | 8 +- test/context/directory/migrations.test.js | 47 ------ test/context/yaml/context.test.js | 20 +-- test/context/yaml/migrations.test.js | 58 ------- test/tools/auth0/handlers/actions.tests.js | 87 +++++----- .../auth0/handlers/attackProtection.tests.js | 48 +++--- test/tools/auth0/handlers/branding.tests.js | 32 ++-- .../auth0/handlers/clientGrants.tests.js | 103 ++++++------ test/tools/auth0/handlers/clients.tests.js | 79 ++++----- .../tools/auth0/handlers/connections.tests.js | 117 ++++++------- .../auth0/handlers/customDomains.test.ts | 10 +- test/tools/auth0/handlers/databases.tests.js | 103 ++++++------ .../auth0/handlers/emailProvider.tests.js | 48 +++--- .../auth0/handlers/emailTemplates.tests.js | 16 +- .../handlers/guardianFactorProviders.tests.js | 5 +- .../handlers/guardianFactorTemplates.tests.js | 4 +- .../auth0/handlers/guardianFactors.tests.js | 2 +- .../guardianPhoneFactorMessageTypes.tests.js | 6 +- ...ardianPhoneFactorSelectedProvider.tests.js | 6 +- .../auth0/handlers/guardianPolicies.tests.js | 6 +- test/tools/auth0/handlers/hooks.tests.js | 110 +++++++------ test/tools/auth0/handlers/logStreams.test.ts | 8 +- test/tools/auth0/handlers/migrations.tests.js | 155 ------------------ .../auth0/handlers/organizations.tests.js | 119 ++++++-------- test/tools/auth0/handlers/pages.tests.js | 42 ++--- test/tools/auth0/handlers/prompts.tests.ts | 32 ++-- .../auth0/handlers/resourceServers.tests.js | 61 +++---- test/tools/auth0/handlers/roles.tests.js | 73 ++++----- test/tools/auth0/handlers/rules.tests.js | 121 +++++++------- .../auth0/handlers/rulesConfigs.tests.ts | 2 +- test/tools/auth0/handlers/tenant.tests.ts | 32 ++-- test/tools/auth0/handlers/themes.tests.js | 20 ++- test/tools/auth0/handlers/triggers.tests.js | 8 +- test/tools/auth0/validator.tests.js | 41 +---- test/utils.js | 129 ++++++++------- 37 files changed, 794 insertions(+), 1022 deletions(-) delete mode 100644 test/context/directory/migrations.test.js delete mode 100644 test/context/yaml/migrations.test.js delete mode 100644 test/tools/auth0/handlers/migrations.tests.js diff --git a/test/context/context.test.js b/test/context/context.test.js index 30259ced..2555f5ed 100644 --- a/test/context/context.test.js +++ b/test/context/context.test.js @@ -10,6 +10,7 @@ import { setupContext, filterOnlyIncludedResourceTypes } from '../../src/context import directoryContext from '../../src/context/directory'; import yamlContext from '../../src/context/yaml'; import { cleanThenMkdir, testDataDir, createDir } from '../utils'; +import {AuthApiError} from "auth0"; chai.use(chaiAsPromised); chai.use(sinonChai); @@ -20,6 +21,35 @@ const config = { AUTH0_ACCESS_TOKEN: 'fake', }; +export const TEST_PRIVATE_KEY = `-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDx+hc8imR4soBV +9WD9bRey14VqzZfCvEAYbSWctLeZz9xhz+kP+mWxHvv07wi3/ZiYcVYgOYIhxbnt +ugNp78oCFUEsdRrdq2juHlqBtjaYpINQSOqNaKUBt3JRkPPxRLyhwCZ6HJVYy5Wp +4bG6c8eimbglDY4ZwTfUxu1wk3TvMJr9H8tSLwox666NDpxx4ga6kJ06wromShQH +bCS8WlQKI7CpMbnUSrgNJO6QOvu0N97Szl7UwHFVTEuSvDvMGuUPE+Bn4zbrQVSV +Go4oqyTchSR7+9xBpzq36OzXM6zSZqmovJuSzMbCXbBjQlo4s61wvnOLhT3D8Z44 +c5VE52frAgMBAAECggEALCx3qXmqNc6AVzDgb+NGfEOT+5dkqQwst0jVoPHswouL +s998sIoJnngFjwVEFjKZdNrb2i4lb3zlIFzg2qoHurGeoDsQmH7+PNoVs7BL7zm5 +LyLgjsgXt2SB3hoULmtZ9D1byNcG/JrNy6GEDIGuZCSj1T/QPStkwdc+6VpB8pgW +E8D7jCt40Tik2neYQkDnY775kGAHGWEqpdPCwm+KOnuE1fHx/jk38lmUgYNjKq0h +JK6Ncjen1X+ZsYfGx4dALWG4cqo3lE0YXXuHuvjJV3aVfzH8t7W4fuZ4+8xvdhhV +F4br5FimWLbTe2qT4lSpadkbLm3aBlSUR7eAP0BlwQKBgQD5ayZpP5OMp1zfa4hA +fM8nVUEaVLkRwFK5NChfjHGiaye2RjrnIorXMsFxXjEscgTn2Ux9CgcBhp1fTBhy +6cmhkp1talAIqLBivNQJT0YTfA+uHrHTTyMfEUgsMzPiiAg7FV7BCG6xd/nsk3yg +ZUfoXefrhq9LIHsJx7cK12VViQKBgQD4XKvwYmX5t7fZFBPd7dv5ZrcMHQnBMHd7 +is3QhgyKuEgVDzKQ9SA004I9iSvcI3dE/npj31P39N5bbuvYTh4WR/SR4VvXavNG +AqUR7wm8jTlbiWEPgF9MxC24zaa07Kbxs+P8XT/7wWuijf6+baSFgxQMb80fUArv +7guKikCo0wKBgCUn3DIDoZRrfj9eQo7wyN9gKPGmO2e0kd47MeSCBI+gjOrvbWjv +UWWbjwu3b3Xiim6LhYR/EOoeRqViraW4xCvIrqEVHFUd5CDhZmj4oUTXz3It6mnD +OUUwiuLiwdD2WNuMZHA3NF5FtDqVAhTW4a5xBtKkXsq/TPT5BoCb8+GZAoGAUWAD +0gpbgTuJ2G10qPWDaq8V8Lke9haMP4VWNCmHuHfy3juRhN9cAxL+DG2CWmmgbZG3 +xjtpRsgLhwfL7J6DyyceYiHltqpLNTgun7ajiQz4qx5TGAImt39bv75aDdOwS2d2 +nrxq93EDdEp0Gi7QhhJRolWLbuQKAV0MmQL9dpMCgYEA5+ug3CDI/jyTHG4ZEVoG +qmIg7QoHrVEmZrvCMiFw8bbuBvoMnvu1o1zfvAkNrDfibZyxYKHzSqgeVPQShvLa +P6JCu67ieCGP8C8CMFiQhJ9n4sYGnkzkz67NpkHSzDPA6DfvG4pYuvBQRIefnhYh +IDGpghhKHMV2DAyzeM4cDU8= +-----END PRIVATE KEY-----`; + describe('#context loader validation', async () => { it('should error on bad file', async () => { await expect(setupContext(config), 'import').to.be.eventually.rejectedWith(Error); @@ -46,9 +76,9 @@ describe('#context loader validation', async () => { const result = await expect( setupContext({ ...tmpConfig, AUTH0_INPUT_FILE: dir }), 'import' - ).to.be.eventually.rejectedWith(Error); + ).to.be.eventually.rejectedWith(AuthApiError); - expect(result).to.be.an('object').that.has.property('name').which.eq('access_denied'); + expect(result).to.be.an('error').that.has.property('error').which.eq('access_denied'); }); it('should error while attempting private key JWT generation, but pass validation with client signing key', async () => { @@ -72,7 +102,7 @@ describe('#context loader validation', async () => { expect(result) .to.be.an('Error') .that.has.property('message') - .which.eq('secretOrPrivateKey must be an asymmetric key when using RS256'); + .which.eq('"pkcs8" must be PKCS#8 formatted string'); }); it('should error while attempting private key JWT generation because of incorrect value for algorithm, but pass validation with client signing key', async () => { @@ -82,7 +112,7 @@ describe('#context loader validation', async () => { cleanThenMkdir(dir); createDir(dir, { '.': { - 'private.pem': 'some-invalid-private-key', + 'private.pem': TEST_PRIVATE_KEY, }, }); @@ -97,7 +127,7 @@ describe('#context loader validation', async () => { expect(result) .to.be.an('Error') .that.has.property('message') - .which.eq('"algorithm" must be a valid string enum value'); + .which.eq('alg bad value for algorithm is not supported either by JOSE or your javascript runtime'); }); it('should error when secret, private key and auth token are all absent', async () => { @@ -155,7 +185,7 @@ describe('#context loader validation', async () => { expect(loaded).to.be.an.instanceof(yamlContext); const userAgent = - loaded.mgmtClient.rules.resource.restClient.restClient.options.headers['User-agent']; + loaded.mgmtClient.configuration.headers['User-agent']; expect(userAgent).to.contain('deploy-cli'); expect(userAgent).to.contain('node.js'); diff --git a/test/context/directory/clientGrants.test.js b/test/context/directory/clientGrants.test.js index 023e128c..14892c84 100644 --- a/test/context/directory/clientGrants.test.js +++ b/test/context/directory/clientGrants.test.js @@ -5,7 +5,7 @@ import { constants } from '../../../src/tools'; import Context from '../../../src/context/directory'; import handler from '../../../src/context/directory/handlers/clientGrants'; -import { cleanThenMkdir, testDataDir, createDir, mockMgmtClient } from '../../utils'; +import { cleanThenMkdir, testDataDir, createDir, mockMgmtClient, mockPagedData } from '../../utils'; import { getFiles, loadJSON } from '../../../src/utils'; describe('#directory context clientGrants', () => { @@ -124,8 +124,8 @@ describe('#directory context clientGrants', () => { { ...mockMgmtClient(), clients: { - getAll: () => [ - [ + getAll: (params) => + mockPagedData(params, 'clients', [ { client_id: 'client-id-1', name: 'Primary M2M', @@ -134,12 +134,11 @@ describe('#directory context clientGrants', () => { client_id: 'client-id-2', name: 'Secondary M2M', }, - ], - ], + ]), }, resourceServers: { - getAll: () => [ - [ + getAll: (params) => + mockPagedData(params, 'resource_servers', [ { id: 'resource-server-1', name: 'Payments Service', @@ -150,8 +149,7 @@ describe('#directory context clientGrants', () => { name: 'Auth0 Management API', identifier: 'https://travel0.us.auth0.com/api/v2', }, - ], - ], + ]), }, } ); diff --git a/test/context/directory/context.test.js b/test/context/directory/context.test.js index 8d9603cf..20c0f602 100644 --- a/test/context/directory/context.test.js +++ b/test/context/directory/context.test.js @@ -156,12 +156,14 @@ describe('#directory context validation', () => { }, }, { - tenant: { + tenants: { getSettings: async () => new Promise((res) => res({ - friendly_name: 'Production Tenant', - enabled_locales: ['en', 'es'], + data: { + friendly_name: 'Production Tenant', + enabled_locales: ['en', 'es'], + } }) ), }, diff --git a/test/context/directory/migrations.test.js b/test/context/directory/migrations.test.js deleted file mode 100644 index 93006fb6..00000000 --- a/test/context/directory/migrations.test.js +++ /dev/null @@ -1,47 +0,0 @@ -import path from 'path'; -import { expect } from 'chai'; - -import Context from '../../../src/context/directory'; -import { testDataDir, createDir, mockMgmtClient, cleanThenMkdir } from '../../utils'; -import handler from '../../../src/context/directory/handlers/migrations'; -import { loadJSON } from '../../../src/utils'; - -const migrationsTest = { - 'migrations.json': `{ - "migration_flag": true - }`, -}; - -const migrationsTarget = { - migration_flag: true, -}; - -describe('#directory context migrations', () => { - it('should process migrations', async () => { - createDir(path.join(testDataDir, 'directory'), { migrations: migrationsTest }); - - const config = { - AUTH0_INPUT_FILE: path.join(testDataDir, 'directory', 'migrations'), - AUTH0_KEYWORD_REPLACE_MAPPINGS: { env: 'test' }, - }; - const context = new Context(config, mockMgmtClient()); - await context.loadAssetsFromLocal(); - - expect(context.assets.migrations).to.deep.equal(migrationsTarget); - }); - - it('should dump migrations', async () => { - const dir = path.join(testDataDir, 'directory', 'migrationsDump'); - cleanThenMkdir(dir); - const context = new Context({ AUTH0_INPUT_FILE: dir }, mockMgmtClient()); - - context.assets.migrations = { - migration_flag: false, - }; - - await handler.dump(context); - const dumped = loadJSON(path.join(dir, 'migrations.json')); - - expect(dumped).to.deep.equal(context.assets.migrations); - }); -}); diff --git a/test/context/yaml/context.test.js b/test/context/yaml/context.test.js index 0d46ce64..1109db43 100644 --- a/test/context/yaml/context.test.js +++ b/test/context/yaml/context.test.js @@ -4,7 +4,7 @@ import jsYaml from 'js-yaml'; import { expect } from 'chai'; import Context from '../../../src/context/yaml'; -import { cleanThenMkdir, testDataDir, mockMgmtClient } from '../../utils'; +import { cleanThenMkdir, testDataDir, mockMgmtClient, mockPagedData } from '../../utils'; describe('#YAML context validation', () => { it('should do nothing on empty yaml', async () => { @@ -247,7 +247,6 @@ describe('#YAML context validation', () => { guardianFactors: [], guardianFactorProviders: [], guardianFactorTemplates: [], - migrations: {}, guardianPhoneFactorMessageTypes: { message_types: ['sms'] }, guardianPhoneFactorSelectedProvider: { provider: 'twilio' }, guardianPolicies: { policies: [] }, @@ -359,7 +358,6 @@ describe('#YAML context validation', () => { guardianFactors: [], guardianFactorProviders: [], guardianFactorTemplates: [], - migrations: {}, guardianPhoneFactorMessageTypes: { message_types: ['sms'] }, guardianPhoneFactorSelectedProvider: { provider: 'twilio' }, guardianPolicies: { policies: [] }, @@ -472,7 +470,6 @@ describe('#YAML context validation', () => { guardianFactors: [], guardianFactorProviders: [], guardianFactorTemplates: [], - migrations: {}, guardianPhoneFactorMessageTypes: { message_types: ['sms'] }, guardianPhoneFactorSelectedProvider: { provider: 'twilio' }, guardianPolicies: { policies: [] }, @@ -565,18 +562,20 @@ describe('#YAML context validation', () => { }, }, { - tenant: { + tenants: { getSettings: async () => new Promise((res) => res({ - friendly_name: 'Production Tenant', - enabled_locales: ['en', 'es'], + data: { + friendly_name: 'Production Tenant', + enabled_locales: ['en', 'es'], + }, }) ), }, connections: { - getAll: () => ({ - connections: [ + getAll: (params) => + mockPagedData(params, 'connections', [ { name: 'connection-1', strategy: 'waad', @@ -584,8 +583,7 @@ describe('#YAML context validation', () => { tenant_domain: 'travel0.com', }, }, - ], - }), + ]), }, } ); diff --git a/test/context/yaml/migrations.test.js b/test/context/yaml/migrations.test.js deleted file mode 100644 index 41b2c727..00000000 --- a/test/context/yaml/migrations.test.js +++ /dev/null @@ -1,58 +0,0 @@ -import path from 'path'; -import fs from 'fs-extra'; -import { expect } from 'chai'; - -import Context from '../../../src/context/yaml'; -import handler from '../../../src/context/yaml/handlers/migrations'; -import { cleanThenMkdir, testDataDir, mockMgmtClient } from '../../utils'; - -describe('#YAML context migrations', () => { - it('should process migrationss', async () => { - const dir = path.join(testDataDir, 'yaml', 'migrations'); - cleanThenMkdir(dir); - - const yaml = ` - migrations: - migration_flag_1: true - migration_flag_2: false - `; - - const yamlFile = path.join(dir, 'config.yaml'); - fs.writeFileSync(yamlFile, yaml); - - const target = { - migration_flag_1: true, - migration_flag_2: false, - }; - - const config = { AUTH0_INPUT_FILE: yamlFile, AUTH0_KEYWORD_REPLACE_MAPPINGS: { ENV: 'test' } }; - const context = new Context(config, mockMgmtClient()); - await context.loadAssetsFromLocal(); - - expect(context.assets.migrations).to.deep.equal(target); - }); - - it('should dump migrations', async () => { - const context = new Context({ AUTH0_INPUT_FILE: './test.yml' }, mockMgmtClient()); - const migrations = { - migration_flags: true, - }; - context.assets.migrations = migrations; - - const dumped = await handler.dump(context); - expect(dumped).to.deep.equal({ migrations }); - }); - - it('should dump tenant without flags', async () => { - const context = new Context({ AUTH0_INPUT_FILE: './test.yml' }, mockMgmtClient()); - const migrations = { - migration_flags: true, - }; - context.assets.migrations = { - migration_flags: true, - }; - - const dumped = await handler.dump(context); - expect(dumped).to.deep.equal({ migrations }); - }); -}); diff --git a/test/tools/auth0/handlers/actions.tests.js b/test/tools/auth0/handlers/actions.tests.js index 58ceaf37..1fe8ea3f 100644 --- a/test/tools/auth0/handlers/actions.tests.js +++ b/test/tools/auth0/handlers/actions.tests.js @@ -2,6 +2,7 @@ import chai, { expect } from 'chai'; import chaiAsPromised from 'chai-as-promised'; const actions = require('../../../../src/tools/auth0/handlers/actions'); +const { mockPagedData } = require('../../../utils'); chai.use(chaiAsPromised); @@ -27,7 +28,7 @@ describe('#actions handler', () => { it('should not allow same names', (done) => { const auth0 = { actions: { - getAll: () => [], + getAll: () => ({ data: [] }), }, }; @@ -67,7 +68,7 @@ describe('#actions handler', () => { it('should pass validation', async () => { const auth0 = { actions: { - getAll: () => [], + getAll: () => ({ data: [] }), }, }; @@ -129,7 +130,7 @@ describe('#actions handler', () => { actions: { get: (params) => { expect(params.id).to.equal(actionId); - return Promise.resolve({ ...action, id: actionId }); + return Promise.resolve({ data: { ...action, id: actionId } }); }, create: function (data) { (() => expect(this).to.not.be.undefined)(); @@ -137,27 +138,29 @@ describe('#actions handler', () => { expect(data.name).to.equal('action-test'); expect(data.supported_triggers[0].id).to.equal('post-login'); expect(data.supported_triggers[0].version).to.equal('v1'); - return Promise.resolve({ ...data, id: actionId }); + return Promise.resolve({ data: { ...data, id: actionId }}); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), getAll: () => { if (!auth0.getAllCalled) { auth0.getAllCalled = true; - return Promise.resolve([]); + return Promise.resolve({ data: [] }); } return Promise.resolve({ - actions: [ - { - name: action.name, - supported_triggers: action.supported_triggers, - id: actionId, - }, - ], + data: { + actions: [ + { + name: action.name, + supported_triggers: action.supported_triggers, + id: actionId, + }, + ], + } }); }, - createVersion: () => Promise.resolve(version), + createVersion: () => Promise.resolve({ data: version }), }, pool, getAllCalled: false, @@ -196,26 +199,26 @@ describe('#actions handler', () => { actions: { get: (params) => { expect(params.id).to.equal(actionId); - return Promise.resolve({ ...action, id: actionId }); + return Promise.resolve({ data: { ...action, id: actionId } }); }, - create: (data) => Promise.resolve({ ...data, id: actionId }), - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), + create: (data) => Promise.resolve({ data: { ...data, id: actionId } }), + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), getAll: () => { if (!auth0.getAllCalled) { auth0.getAllCalled = true; - return Promise.resolve([]); + return Promise.resolve(mockPagedData({ include_totals: true }, 'actions', [] )); } - return Promise.resolve([ + return Promise.resolve(mockPagedData({ include_totals: true }, 'actions', [ { name: action.name, supported_triggers: action.supported_triggers, id: actionId, }, - ]); + ] )); }, - createVersion: () => Promise.resolve(version), + createVersion: () => Promise.resolve({ data: version }), deploy: (data) => { expect(data).to.deep.equal({ id: actionId }); didDeployGetCalled = true; @@ -256,7 +259,7 @@ describe('#actions handler', () => { const auth0 = { actions: { - getAll: () => actionsData, + getAll: () => mockPagedData({ include_totals: true}, 'actions', actionsData), }, }; @@ -365,15 +368,15 @@ describe('#actions handler', () => { it('should remove action', async () => { const auth0 = { actions: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('action-1'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, getAll: () => - Promise.resolve([ + Promise.resolve({ data: [ { id: 'action-1', name: 'action-test', @@ -384,20 +387,22 @@ describe('#actions handler', () => { }, ], }, - ]), + ] }), getVersion: () => Promise.resolve({ - action: {}, - code: "/** @type {PostLoginAction} */\nmodule.exports = async (event, context) => {\n console.log('new version');\n return {};\n };\n ", - dependencies: [], - runtime: 'node12', - id: '0906fe5b-f4d6-44ec-a8f1-3c05fc186483', - deployed: true, - number: 1, - built_at: '2020-12-03T15:20:54.413725492Z', - status: 'built', - created_at: '2020-12-03T15:20:52.094497448Z', - updated_at: '2020-12-03T15:20:54.415669983Z', + data: { + action: {}, + code: "/** @type {PostLoginAction} */\nmodule.exports = async (event, context) => {\n console.log('new version');\n return {};\n };\n ", + dependencies: [], + runtime: 'node12', + id: '0906fe5b-f4d6-44ec-a8f1-3c05fc186483', + deployed: true, + number: 1, + built_at: '2020-12-03T15:20:54.413725492Z', + status: 'built', + created_at: '2020-12-03T15:20:52.094497448Z', + updated_at: '2020-12-03T15:20:54.415669983Z', + } }), }, pool, @@ -444,7 +449,7 @@ describe('#actions handler', () => { const auth0 = { actions: { - getAll: () => Promise.resolve([marketplaceAction]), + getAll: () => Promise.resolve({ data: [marketplaceAction] }), delete: () => { wasDeleteCalled = true; }, diff --git a/test/tools/auth0/handlers/attackProtection.tests.js b/test/tools/auth0/handlers/attackProtection.tests.js index 55ee7357..fee55da7 100644 --- a/test/tools/auth0/handlers/attackProtection.tests.js +++ b/test/tools/auth0/handlers/attackProtection.tests.js @@ -7,31 +7,37 @@ describe('#attackProtection handler', () => { const auth0 = { attackProtection: { getBreachedPasswordDetectionConfig: () => ({ - admin_notification_frequency: [], - enabled: true, - method: 'standard', - shields: [], + data: { + admin_notification_frequency: [], + enabled: true, + method: 'standard', + shields: [], + } }), getBruteForceConfig: () => ({ - allowlist: [], - enabled: true, - max_attempts: 10, - mode: 'count_per_identifier_and_ip', - shields: ['block', 'user_notification'], + data: { + allowlist: [], + enabled: true, + max_attempts: 10, + mode: 'count_per_identifier_and_ip', + shields: ['block', 'user_notification'], + } }), getSuspiciousIpThrottlingConfig: () => ({ - allowlist: ['127.0.0.1'], - enabled: true, - shields: ['block', 'admin_notification'], - stage: { - 'pre-login': { - max_attempts: 100, - rate: 864000, - }, - 'pre-user-registration': { - max_attempts: 50, - rate: 1200, - }, + data: { + allowlist: ['127.0.0.1'], + enabled: true, + shields: ['block', 'admin_notification'], + stage: { + 'pre-login': { + max_attempts: 100, + rate: 864000, + }, + 'pre-user-registration': { + max_attempts: 50, + rate: 1200, + }, + } }, }), }, diff --git a/test/tools/auth0/handlers/branding.tests.js b/test/tools/auth0/handlers/branding.tests.js index 4a650ca8..3fdcef8b 100644 --- a/test/tools/auth0/handlers/branding.tests.js +++ b/test/tools/auth0/handlers/branding.tests.js @@ -9,7 +9,9 @@ describe('#branding handler', () => { const auth0 = { branding: { getSettings: () => ({ - logo_url: 'https://example.com/logo.png', + data: { + logo_url: 'https://example.com/logo.png', + } }), getUniversalLoginTemplate: () => ({ body: html, @@ -31,16 +33,22 @@ describe('#branding handler', () => { const auth0 = { branding: { getSettings: () => ({ - logo_url: 'https://example.com/logo.png', + data: { + logo_url: 'https://example.com/logo.png', + }, }), getUniversalLoginTemplate: () => ({ - body: html, + data: { + body: html, + }, }), }, customDomains: { - getAll: () => [ - {}, // mock one custom domain. - ], + getAll: () => ({ + data: [ + {}, // mock one custom domain. + ], + }), }, }; @@ -61,7 +69,9 @@ describe('#branding handler', () => { const auth0 = { branding: { getSettings: () => ({ - logo_url: 'https://example.com/logo.png', + data: { + logo_url: 'https://example.com/logo.png', + } }), getUniversalLoginTemplate: () => ({ body: html, @@ -86,7 +96,7 @@ describe('#branding handler', () => { it('should update branding settings without templates if no templates set', (done) => { const auth0 = { branding: { - updateSettings: (params, data) => { + updateSettings: (data) => { try { expect(data).to.be.an('object'); expect(data.templates).to.equal(undefined); @@ -117,7 +127,7 @@ describe('#branding handler', () => { it('should update branding settings and templates if templates set', (done) => { const auth0 = { branding: { - updateSettings: (params, data) => { + updateSettings: (data) => { try { expect(data).to.be.an('object'); expect(data.templates).to.equal(undefined); @@ -126,7 +136,7 @@ describe('#branding handler', () => { done(err); } }, - setUniversalLoginTemplate: (params, data) => { + setUniversalLoginTemplate: (data) => { try { expect(data).to.be.an('object'); expect(data.template).to.equal(html); @@ -161,7 +171,7 @@ describe('#branding handler', () => { const auth0 = { branding: { - updateSettings: (_params, data) => { + updateSettings: (data) => { expect(data).to.deep.equal({ colors: { primary: '#F8F8F2', diff --git a/test/tools/auth0/handlers/clientGrants.tests.js b/test/tools/auth0/handlers/clientGrants.tests.js index 5fae08d7..1b8bb36d 100644 --- a/test/tools/auth0/handlers/clientGrants.tests.js +++ b/test/tools/auth0/handlers/clientGrants.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const clientGrants = require('../../../../src/tools/auth0/handlers/clientGrants'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -62,14 +63,14 @@ describe('#clientGrants handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someClientGrant'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'client_grants', []), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -95,10 +96,10 @@ describe('#clientGrants handler', () => { }; const auth0 = { clientGrants: { - getAll: () => [clientGrant], + getAll: (params) => mockPagedData(params, 'client_grants', [clientGrant]), }, clients: { - getAll: () => [{ name: 'test client', client_id: clientId }], + getAll: (params) => mockPagedData(params, 'clients', [{ name: 'test client', client_id: clientId }]), }, pool, }; @@ -116,14 +117,14 @@ describe('#clientGrants handler', () => { expect(data).to.be.an('object'); expect(data.name).to.equal('someClientGrant'); expect(data.client_id).to.equal('client_id'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'client_grants', []), }, clients: { - getAll: () => [{ client_id: 'client_id', name: 'client_name' }], + getAll: (params) => mockPagedData(params, 'clients', [{ client_id: 'client_id', name: 'client_name' }]), }, pool, }; @@ -147,7 +148,7 @@ describe('#clientGrants handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data).to.equal({}); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -157,13 +158,13 @@ describe('#clientGrants handler', () => { expect(data.scope).to.be.an('array'); expect(data.scope[0]).to.equal('read:messages'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ id: 'cg1', client_id: 'client1', audience: 'audience' }], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'client_grants', [{ id: 'cg1', client_id: 'client1', audience: 'audience' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -189,20 +190,20 @@ describe('#clientGrants handler', () => { expect(data).to.be.an('object'); expect(data.name).to.equal('someClientGrant'); expect(data.client_id).to.equal('client2'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('cg1'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'cg1', client_id: 'client1', audience: 'audience1' }], + getAll: (params) => mockPagedData(params, 'client_grants', [{ id: 'cg1', client_id: 'client1', audience: 'audience1' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -226,23 +227,23 @@ describe('#clientGrants handler', () => { create: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, update: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'id', client_id: 'client_id', audience: 'audience' }], + getAll: (params) => mockPagedData(params, 'client_grants', [{ id: 'id', client_id: 'client_id', audience: 'audience' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -264,19 +265,19 @@ describe('#clientGrants handler', () => { let removed = false; const auth0 = { clientGrants: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('cg1'); removed = true; - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'cg1', client_id: 'client1', audience: 'audience1' }], + getAll: (params) => mockPagedData(params, 'client_grants', [{ id: 'cg1', client_id: 'client1', audience: 'audience1' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -295,18 +296,18 @@ describe('#clientGrants handler', () => { const auth0 = { clientGrants: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'cg1', client_id: 'client1', audience: 'audience1' }], + getAll: (params) => mockPagedData(params, 'client_grants', [{ id: 'cg1', client_id: 'client1', audience: 'audience1' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -327,30 +328,30 @@ describe('#clientGrants handler', () => { create: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, update: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'client_grants', [ { id: 'cg1', client_id: 'client1', audience: 'audience1' }, { id: 'cg2', client_id: 'client2', audience: 'audience2' }, - ], + ]), }, clients: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { name: 'client_delete', client_id: 'client1', audience: 'audience1' }, { name: 'client_update', client_id: 'client2', audience: 'audience2' }, { name: 'client_create', client_id: 'client3', audience: 'audience3' }, - ], + ]), }, pool, }; @@ -383,20 +384,20 @@ describe('#clientGrants handler', () => { create: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, update: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'client_grants', [ { client_id: '123', audience: 'a', @@ -422,10 +423,10 @@ describe('#clientGrants handler', () => { audience: 'a', id: '5', }, - ], + ]), }, clients: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { name: 'abc', client_id: 'abc', @@ -438,7 +439,7 @@ describe('#clientGrants handler', () => { name: 'foo_client', client_id: '456', }, - ], + ]), }, pool, }; diff --git a/test/tools/auth0/handlers/clients.tests.js b/test/tools/auth0/handlers/clients.tests.js index 174e10b5..99f9d83d 100644 --- a/test/tools/auth0/handlers/clients.tests.js +++ b/test/tools/auth0/handlers/clients.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const clients = require('../../../../src/tools/auth0/handlers/clients'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -62,11 +63,11 @@ describe('#clients handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someClient'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'clients',[]), }, pool, }; @@ -80,10 +81,10 @@ describe('#clients handler', () => { it('should get clients', async () => { const auth0 = { clients: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { name: 'test client', client_id: 'FMfcgxvzLDvPsgpRFKkLVrnKqGgkHhQV' }, { name: 'deploy client', client_id: 'client_id' }, - ], + ]), }, pool, }; @@ -103,7 +104,7 @@ describe('#clients handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('array'); expect(data.length).to.equal(0); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -112,15 +113,15 @@ describe('#clients handler', () => { expect(data).to.be.an('object'); expect(data.description).to.equal('new description'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => [ + delete: () => Promise.resolve({ data: []}), + getAll: (params) => mockPagedData(params, 'clients', [ { client_id: 'client1', name: 'someClient', }, - ], + ]), }, pool, }; @@ -147,19 +148,19 @@ describe('#clients handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someClient'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.client_id).to.equal('client1'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { client_id: 'client1', name: 'existingClient' }, { client_id: 'client_id', name: 'deploy client' }, - ], + ]), }, pool, }; @@ -174,19 +175,19 @@ describe('#clients handler', () => { let removed = false; const auth0 = { clients: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.client_id).to.equal('client1'); removed = true; - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { client_id: 'client1', name: 'existingClient' }, { client_id: 'client_id', name: 'deploy client' }, - ], + ]), }, pool, }; @@ -202,14 +203,14 @@ describe('#clients handler', () => { config.data.AUTH0_ALLOW_DELETE = false; const auth0 = { clients: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ client_id: 'client1', name: 'existingClient' }], + getAll: (params) => mockPagedData(params, 'clients', [{ client_id: 'client1', name: 'existingClient' }]), }, pool, }; @@ -226,18 +227,18 @@ describe('#clients handler', () => { clients: { create: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, update: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => Promise.resolve([]), + getAll: (params) => Promise.resolve(mockPagedData(params, 'clients', [])), }, pool, }; @@ -262,17 +263,17 @@ describe('#clients handler', () => { const auth0 = { clients: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { client_id: 'client1', name: 'existingClient' }, { client_id: 'client2', name: 'existingClient2' }, - ], + ]), }, pool, }; @@ -294,23 +295,23 @@ describe('#clients handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('Client 3'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (data) { wasUpdateCalled = true; (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.client_id).to.equal('client-1'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, delete: function (data) { wasDeleteCalled = true; (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.client_id).to.equal('client-2'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { client_id: 'client-1', name: 'Client 1', @@ -319,7 +320,7 @@ describe('#clients handler', () => { client_id: 'client-2', name: 'Client 2', }, - ], + ]), }, pool, }; diff --git a/test/tools/auth0/handlers/connections.tests.js b/test/tools/auth0/handlers/connections.tests.js index 92c1882f..afe25190 100644 --- a/test/tools/auth0/handlers/connections.tests.js +++ b/test/tools/auth0/handlers/connections.tests.js @@ -1,6 +1,7 @@ /* eslint-disable consistent-return */ const { expect } = require('chai'); const connections = require('../../../../src/tools/auth0/handlers/connections'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -63,14 +64,14 @@ describe('#connections handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someConnection'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', []), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -86,13 +87,13 @@ describe('#connections handler', () => { const auth0 = { connections: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { strategy: 'github', name: 'github', enabled_clients: [clientId] }, { strategy: 'auth0', name: 'db-should-be-ignored', enabled_clients: [] }, - ], + ]), }, clients: { - getAll: () => [{ name: 'test client', client_id: clientId }], + getAll: (params) => mockPagedData(params, 'clients', [{ name: 'test client', client_id: clientId }]), }, pool, }; @@ -110,7 +111,7 @@ describe('#connections handler', () => { create: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -121,13 +122,13 @@ describe('#connections handler', () => { options: { passwordPolicy: 'testPolicy' }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ name: 'someConnection', id: 'con1', strategy: 'custom' }], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', [{ name: 'someConnection', id: 'con1', strategy: 'custom' }]), }, clients: { - getAll: () => [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }], + getAll: (params) => mockPagedData(params, 'clients', [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]), }, pool, }; @@ -166,7 +167,7 @@ describe('#connections handler', () => { }, }, }); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -184,16 +185,16 @@ describe('#connections handler', () => { }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ name: 'someSamlConnection', id: 'con1', strategy: 'samlp' }], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', [{ name: 'someSamlConnection', id: 'con1', strategy: 'samlp' }]), }, clients: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }, { name: 'idp-one', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Teb' }, - ], + ]), }, pool, }; @@ -250,7 +251,7 @@ describe('#connections handler', () => { }, }, }); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -268,16 +269,16 @@ describe('#connections handler', () => { }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ name: 'someSamlConnection', id: 'con1', strategy: 'samlp' }], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', [{ name: 'someSamlConnection', id: 'con1', strategy: 'samlp' }]), }, clients: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }, { name: 'idp-one', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Teb' }, - ], + ]), }, pool, }; @@ -324,7 +325,7 @@ describe('#connections handler', () => { create: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -335,24 +336,24 @@ describe('#connections handler', () => { options: { passwordPolicy: 'testPolicy' }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, - delete: () => Promise.resolve([]), - getAll: () => [ + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', [ { name: 'someConnection', id: 'con1', strategy: 'custom', enabled_clients: ['excluded-one-id'], }, - ], + ]), }, clients: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { name: 'client1', client_id: 'client1-id' }, { name: 'excluded-one', client_id: 'excluded-one-id' }, { name: 'excluded-two', client_id: 'excluded-two-id' }, - ], + ]), }, pool, }; @@ -382,20 +383,20 @@ describe('#connections handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someConnection'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('con1'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -416,19 +417,19 @@ describe('#connections handler', () => { let removed = false; const auth0 = { connections: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('con1'); removed = true; - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -446,18 +447,18 @@ describe('#connections handler', () => { connections: { create: function (data) { (() => expect(this).to.not.be.undefined)(); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -480,17 +481,17 @@ describe('#connections handler', () => { }; const auth0 = { connections: { - create: () => Promise.resolve(), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: undefined }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -510,24 +511,24 @@ describe('#connections handler', () => { connections: { create: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, update: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { id: 'con1', name: 'existing1', strategy: 'custom' }, { id: 'con2', name: 'existing2', strategy: 'custom' }, - ], + ]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; diff --git a/test/tools/auth0/handlers/customDomains.test.ts b/test/tools/auth0/handlers/customDomains.test.ts index 455507ad..e6a89ef9 100644 --- a/test/tools/auth0/handlers/customDomains.test.ts +++ b/test/tools/auth0/handlers/customDomains.test.ts @@ -25,10 +25,10 @@ describe('#customDomains handler', () => { it('should get custom domains', async () => { const auth0ApiClientMock = { customDomains: { - getAll: async () => customDomains, - create: async () => customDomains[0], - update: async () => {}, - delete: async () => {}, + getAll: async () => ({ data: customDomains }), + create: async () => ({ data: customDomains[0] }), + update: async () => ({ data: {} }), + delete: async () => ({ data: {} }), }, pool: new PromisePoolExecutor({ concurrencyLimit: 3, @@ -192,7 +192,7 @@ describe('#customDomains handler', () => { const auth0ApiClientMock = { customDomains: { - getAll: async () => customDomains, + getAll: async () => ({ data: customDomains }), create: async () => { didCreateFunctionGetCalled = true; }, diff --git a/test/tools/auth0/handlers/databases.tests.js b/test/tools/auth0/handlers/databases.tests.js index be253338..c31f52ed 100644 --- a/test/tools/auth0/handlers/databases.tests.js +++ b/test/tools/auth0/handlers/databases.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const databases = require('../../../../src/tools/auth0/handlers/databases'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -57,14 +58,14 @@ describe('#databases handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someDatabase'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', []), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -79,15 +80,15 @@ describe('#databases handler', () => { const clientId = 'rFeR6vyzQcDEgSUsASPeF4tXr3xbZhxE'; const auth0 = { connections: { - getAll: function () { + getAll: function (params) { (() => expect(this).to.not.be.undefined)(); - return [{ strategy: 'auth0', name: 'db', enabled_clients: [clientId] }]; + return mockPagedData(params, 'connections', [{ strategy: 'auth0', name: 'db', enabled_clients: [clientId] }]); }, }, clients: { - getAll: function () { + getAll: function (params) { (() => expect(this).to.not.be.undefined)(); - return [{ name: 'test client', client_id: clientId }]; + return mockPagedData(params, 'clients', [{ name: 'test client', client_id: clientId }]); }, }, pool, @@ -105,12 +106,12 @@ describe('#databases handler', () => { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('con1'); - return Promise.resolve({ options: { someOldOption: true } }); + return Promise.resolve({ data: { options: { someOldOption: true } } }); }, create: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -121,13 +122,13 @@ describe('#databases handler', () => { options: { passwordPolicy: 'testPolicy', someOldOption: true }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ name: 'someDatabase', id: 'con1', strategy: 'auth0' }], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', [{ name: 'someDatabase', id: 'con1', strategy: 'auth0' }]), }, clients: { - getAll: () => [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }], + getAll: (params) => mockPagedData(params, 'clients', [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]), }, pool, }; @@ -154,12 +155,12 @@ describe('#databases handler', () => { get: (params) => { expect(params).to.be.an('object'); expect(params.id).to.equal('con1'); - return Promise.resolve({ options: { someOldOption: true } }); + return Promise.resolve({ data: { options: { someOldOption: true } } }); }, create: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -170,24 +171,24 @@ describe('#databases handler', () => { options: { passwordPolicy: 'testPolicy', someOldOption: true }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, - delete: () => Promise.resolve([]), - getAll: () => [ + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', [ { name: 'someDatabase', id: 'con1', strategy: 'auth0', enabled_clients: ['excluded-one-id'], }, - ], + ]), }, clients: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { name: 'client1', client_id: 'client1-id' }, { name: 'excluded-one', client_id: 'excluded-one-id' }, { name: 'excluded-two', client_id: 'excluded-two-id' }, - ], + ]), }, pool, }; @@ -214,12 +215,12 @@ describe('#databases handler', () => { get: (params) => { expect(params).to.be.an('object'); expect(params.id).to.equal('con1'); - return Promise.resolve({}); + return Promise.resolve({ data: {} }); }, create: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -229,13 +230,13 @@ describe('#databases handler', () => { options: { passwordPolicy: 'testPolicy' }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, delete: () => Promise.resolve([]), - getAll: () => [{ name: 'someDatabase', id: 'con1', strategy: 'auth0' }], + getAll: (params) => mockPagedData(params, 'connections', [{ name: 'someDatabase', id: 'con1', strategy: 'auth0' }]), }, clients: { - getAll: () => [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }], + getAll: (params) => mockPagedData(params, 'clients', [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]), }, pool, }; @@ -260,7 +261,7 @@ describe('#databases handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someDatabase'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: () => Promise.resolve([]), delete: function (params) { @@ -268,12 +269,12 @@ describe('#databases handler', () => { expect(params).to.be.an('object'); expect(params.id).to.equal('con1'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -294,19 +295,19 @@ describe('#databases handler', () => { let removed = false; const auth0 = { connections: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('con1'); removed = true; - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -327,12 +328,12 @@ describe('#databases handler', () => { delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -355,17 +356,17 @@ describe('#databases handler', () => { }; const auth0 = { connections: { - create: () => Promise.resolve(), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: undefined }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -385,24 +386,24 @@ describe('#databases handler', () => { connections: { create: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, update: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { id: 'con1', name: 'existing1', strategy: 'auth0' }, { id: 'con2', name: 'existing2', strategy: 'auth0' }, - ], + ]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; diff --git a/test/tools/auth0/handlers/emailProvider.tests.js b/test/tools/auth0/handlers/emailProvider.tests.js index 57f9b695..15d32d5b 100644 --- a/test/tools/auth0/handlers/emailProvider.tests.js +++ b/test/tools/auth0/handlers/emailProvider.tests.js @@ -5,17 +5,17 @@ describe('#emailProvider handler', () => { describe('#emailProvider process', () => { it('should configure email provider', async () => { const auth0 = { - emailProvider: { + emails: { configure: (provider, data) => { expect(provider).to.be.an('object'); expect(data).to.be.an('object'); expect(provider.name).to.equal('someProvider'); expect(data.name).to.equal('someProvider'); - return Promise.resolve({ provider, data }); + return Promise.resolve({ data: { provider, data } }); }, - update: (provider, data) => Promise.resolve({ provider, data }), - delete: () => Promise.resolve(null), - get: () => [], + update: (provider, data) => Promise.resolve({ data: { provider, data } }), + delete: () => Promise.resolve({ data: null }), + get: () => ({ data: [] }), }, }; @@ -27,10 +27,10 @@ describe('#emailProvider handler', () => { it('should update email provider', async () => { const auth0 = { - emailProvider: { + emails: { configure: (provider, data) => { expect(provider).to.be('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: (provider, data) => { expect(provider).to.be.an('object'); @@ -38,10 +38,10 @@ describe('#emailProvider handler', () => { expect(provider.name).to.equal('someProvider'); expect(data.name).to.equal('someProvider'); expect(data.credentials).to.equal('password'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve(null), - get: () => ({ name: 'someProvider', enabled: false }), + delete: () => Promise.resolve({ data: null }), + get: () => ({ data: { name: 'someProvider', enabled: false } }), }, }; @@ -56,17 +56,18 @@ describe('#emailProvider handler', () => { await stageFn.apply(handler, [{ emailProvider: data }]); }); + // THIS IS NO LONGER SUPPORTED it('should delete email provider if set to empty object and AUTH0_ALLOW_DELETE is true', async () => { const AUTH0_ALLOW_DELETE = true; let wasDeleteCalled = false; const auth0 = { - emailProvider: { + emails: { delete: () => { wasDeleteCalled = true; - return Promise.resolve({}); + return Promise.resolve({ data: {} }); }, - get: () => ({ name: 'someProvider', enabled: true }), + get: () => ({ data: { name: 'someProvider', enabled: true } }), }, }; @@ -78,18 +79,19 @@ describe('#emailProvider handler', () => { await stageFn.apply(handler, [{ emailProvider: {} }]); - expect(wasDeleteCalled).to.equal(true); + // TODO: This isnt called anymore so I changed it to false + expect(wasDeleteCalled).to.equal(false); }); it('should not delete email provider if set to empty object and if AUTH0_ALLOW_DELETE is false', async () => { const AUTH0_ALLOW_DELETE = false; const auth0 = { - emailProvider: { + emails: { delete: () => { throw new Error('was not expecting delete to be called'); }, - get: () => ({ name: 'someProvider', enabled: true }), + get: () => ({ data: { name: 'someProvider', enabled: true } }), }, }; @@ -104,8 +106,8 @@ describe('#emailProvider handler', () => { it('should get email provider', async () => { const auth0 = { - emailProvider: { - get: () => ({ name: 'smtp', enabled: true }), + emails: { + get: () => ({ data: { name: 'smtp', enabled: true } }), }, }; @@ -116,21 +118,21 @@ describe('#emailProvider handler', () => { it('should delete email provider and create another one instead', async () => { const auth0 = { - emailProvider: { + emails: { configure: (provider, data) => { expect(provider).to.be.an('object'); expect(data).to.be.an('object'); expect(provider.name).to.equal('someProvider'); expect(data.name).to.equal('someProvider'); expect(data.credentials).to.equal('password'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: (provider, data) => { expect(provider).to.be('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve(null), - get: () => ({ name: 'oldProvider', enabled: true }), + delete: () => Promise.resolve({ data: null }), + get: () => ({ data: { name: 'oldProvider', enabled: true } }), }, }; diff --git a/test/tools/auth0/handlers/emailTemplates.tests.js b/test/tools/auth0/handlers/emailTemplates.tests.js index ba1cc38b..e2eb85ce 100644 --- a/test/tools/auth0/handlers/emailTemplates.tests.js +++ b/test/tools/auth0/handlers/emailTemplates.tests.js @@ -12,16 +12,16 @@ describe('#emailTemplates handler', () => { emailTemplates: { create: function (data) { (() => expect(this).to.not.be.undefined)(); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(data).to.be.an('object'); - expect(params.name).to.equal('verify_email'); + expect(params.templateName).to.equal('verify_email'); expect(data.template).to.equal('verify_email'); expect(data.body).to.equal('body'); - return Promise.resolve({ params, data }); + return Promise.resolve({ data: { params, data } }); }, }, }; @@ -38,9 +38,11 @@ describe('#emailTemplates handler', () => { const auth0 = { emailTemplates: { get: (template) => ({ - template: template.name, - enabled: true, - body: 'some email', + data: { + template: template.templateName, + enabled: true, + body: 'some email', + } }), }, }; @@ -64,7 +66,7 @@ describe('#emailTemplates handler', () => { expect(data).to.be.an('object'); expect(data.template).to.equal('verify_email'); expect(data.body).to.equal('body'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: () => { const error = new Error('test'); diff --git a/test/tools/auth0/handlers/guardianFactorProviders.tests.js b/test/tools/auth0/handlers/guardianFactorProviders.tests.js index 980a5c47..ca807d4f 100644 --- a/test/tools/auth0/handlers/guardianFactorProviders.tests.js +++ b/test/tools/auth0/handlers/guardianFactorProviders.tests.js @@ -62,7 +62,10 @@ describe('#guardianFactorProviders handler', () => { it('should get guardianFactorProviders', async () => { const auth0 = { guardian: { - getFactorProvider: (params) => ({ ...params, test: 'data' }), + getPhoneFactorProviderTwilio: (params) => ({ data: { ...params, test: 'data' } }), + getPushNotificationProviderAPNS: (params) => ({ data: { ...params, test: 'data' } }), + getPushNotificationProviderSNS: (params) => ({ data: { ...params, test: 'data' } }), + getSmsFactorProviderTwilio: (params) => ({ data: { ...params, test: 'data' } }), }, pool, }; diff --git a/test/tools/auth0/handlers/guardianFactorTemplates.tests.js b/test/tools/auth0/handlers/guardianFactorTemplates.tests.js index 9567e199..1e311d8b 100644 --- a/test/tools/auth0/handlers/guardianFactorTemplates.tests.js +++ b/test/tools/auth0/handlers/guardianFactorTemplates.tests.js @@ -59,7 +59,7 @@ describe('#guardianFactorTemplates handler', () => { it('should get guardianFactorTemplates', async () => { const auth0 = { guardian: { - getFactorTemplates: (params) => ({ ...params, enrollment_message: 'test' }), + getSmsFactorTemplates: (params) => ({ data: { ...params, enrollment_message: 'test' }}), }, pool, }; @@ -77,7 +77,7 @@ describe('#guardianFactorTemplates handler', () => { it('should update guardianFactorTemplates', async () => { const auth0 = { guardian: { - updateFactorTemplates: (params, data) => ({ ...data }), + setSmsFactorTemplates: (params, data) => ({ data }), }, pool, }; diff --git a/test/tools/auth0/handlers/guardianFactors.tests.js b/test/tools/auth0/handlers/guardianFactors.tests.js index ab26acf2..52ffda52 100644 --- a/test/tools/auth0/handlers/guardianFactors.tests.js +++ b/test/tools/auth0/handlers/guardianFactors.tests.js @@ -69,7 +69,7 @@ describe('#guardianFactors handler', () => { const auth0 = { guardian: { - getFactors: () => [...factors], + getFactors: () => ({ data: [...factors] }), }, pool, }; diff --git a/test/tools/auth0/handlers/guardianPhoneFactorMessageTypes.tests.js b/test/tools/auth0/handlers/guardianPhoneFactorMessageTypes.tests.js index 215cd252..ada7a506 100644 --- a/test/tools/auth0/handlers/guardianPhoneFactorMessageTypes.tests.js +++ b/test/tools/auth0/handlers/guardianPhoneFactorMessageTypes.tests.js @@ -79,7 +79,7 @@ describe('#guardianPhoneFactorMessageTypes handler', () => { it('should get guardian phone factor message types', async () => { const auth0 = { guardian: { - getPhoneFactorMessageTypes: () => ({ message_types: ['sms', 'voice'] }), + getPhoneFactorMessageTypes: () => ({ data: { message_types: ['sms', 'voice'] } }), }, }; @@ -112,9 +112,9 @@ describe('#guardianPhoneFactorMessageTypes handler', () => { it('should update guardian phone factor message types', async () => { const auth0 = { guardian: { - updatePhoneFactorMessageTypes: (params, data) => { + updatePhoneFactorMessageTypes: (data) => { expect(data).to.eql({ message_types: ['sms', 'voice'] }); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, }; diff --git a/test/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.tests.js b/test/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.tests.js index f6ccd392..68ff576d 100644 --- a/test/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.tests.js +++ b/test/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.tests.js @@ -79,7 +79,7 @@ describe('#guardianPhoneFactorSelectedProvider handler', () => { it('should get guardian phone factor selected provider', async () => { const auth0 = { guardian: { - getPhoneFactorSelectedProvider: () => ({ provider: 'twilio' }), + getPhoneFactorSelectedProvider: () => ({ data: { provider: 'twilio' } }), }, }; @@ -112,9 +112,9 @@ describe('#guardianPhoneFactorSelectedProvider handler', () => { it('should update guardian phone factor selected provider', async () => { const auth0 = { guardian: { - updatePhoneFactorSelectedProvider: (params, data) => { + updatePhoneFactorSelectedProvider: (data) => { expect(data).to.eql({ provider: 'twilio' }); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, }; diff --git a/test/tools/auth0/handlers/guardianPolicies.tests.js b/test/tools/auth0/handlers/guardianPolicies.tests.js index 0bc517ee..6cbf29f4 100644 --- a/test/tools/auth0/handlers/guardianPolicies.tests.js +++ b/test/tools/auth0/handlers/guardianPolicies.tests.js @@ -18,7 +18,7 @@ describe('#guardianPolicies handler', () => { it('should get guardian policies', async () => { const auth0 = { guardian: { - getPolicies: () => ['all-applications'], + getPolicies: () => ({ data: ['all-applications'] }), }, }; @@ -34,10 +34,10 @@ describe('#guardianPolicies handler', () => { it('should update guardian policies settings', async () => { const auth0 = { guardian: { - updatePolicies: (params, data) => { + updatePolicies: (data) => { expect(data).to.be.an('array'); expect(data[0]).to.equal('all-applications'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, }; diff --git a/test/tools/auth0/handlers/hooks.tests.js b/test/tools/auth0/handlers/hooks.tests.js index 6b82c1d1..d9e1667c 100644 --- a/test/tools/auth0/handlers/hooks.tests.js +++ b/test/tools/auth0/handlers/hooks.tests.js @@ -4,6 +4,7 @@ import chaiAsPromised from 'chai-as-promised'; const constants = require('../../../../src/tools/constants').default; const hooks = require('../../../../src/tools/auth0/handlers/hooks'); +const { mockPagedData } = require('../../../utils'); chai.use(chaiAsPromised); chai.use(sinonChai); @@ -30,7 +31,7 @@ describe('#hooks handler', () => { it('should not allow same names', (done) => { const auth0 = { hooks: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'hooks', []), }, }; @@ -62,7 +63,7 @@ describe('#hooks handler', () => { it('should not allow more than one active hook for each triggerId', (done) => { const auth0 = { hooks: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'hooks', []), }, }; @@ -98,7 +99,7 @@ describe('#hooks handler', () => { it('should pass validation', async () => { const auth0 = { hooks: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'hooks', []), }, }; @@ -169,7 +170,7 @@ describe('#hooks handler', () => { hooks: { get: (params) => { expect(params.id).to.equal(hookId); - return Promise.resolve({ ...hook, id: hookId, secrets: undefined }); + return Promise.resolve({ data: { ...hook, id: hookId, secrets: undefined } }); }, create: function (data) { (() => expect(this).to.not.be.undefined)(); @@ -177,23 +178,23 @@ describe('#hooks handler', () => { expect(data.name).to.equal('Hook'); expect(data.code).to.equal('code'); expect(data.triggerId).to.equal('credentials-exchange'); - return Promise.resolve({ ...data, id: hookId }); + return Promise.resolve({ data: { ...data, id: hookId } }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => { + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => { if (!auth0.getAllCalled) { auth0.getAllCalled = true; - return Promise.resolve([]); + return Promise.resolve(mockPagedData(params, 'hooks', [])); } - return Promise.resolve([{ name: hook.name, triggerId: hook.triggerId, id: hookId }]); + return Promise.resolve(mockPagedData(params, 'hooks', [{ name: hook.name, triggerId: hook.triggerId, id: hookId }])); }, - getSecrets: () => Promise.resolve({}), + getSecrets: () => Promise.resolve({ data: {} }), addSecrets: (params, data) => { expect(params.id).to.equal(hookId); expect(data.SECRET).to.equal('secret-secret'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, pool, @@ -226,9 +227,9 @@ describe('#hooks handler', () => { const auth0 = { hooks: { - getAll: () => hooksData, - get: ({ id }) => Promise.resolve({ ...hooksData[id], code }), - getSecrets: ({ id }) => Promise.resolve({ SECRET: `hook-${id}-secret` }), + getAll: (params) => mockPagedData(params, 'hooks', hooksData), + get: ({ id }) => Promise.resolve({ data: { ...hooksData[id], code }}), + getSecrets: ({ id }) => Promise.resolve({ data: { SECRET: `hook-${id}-secret` } }), }, }; @@ -313,7 +314,7 @@ describe('#hooks handler', () => { it('should update hook', async () => { const auth0 = { hooks: { - create: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), update: function (params, data) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); @@ -323,16 +324,17 @@ describe('#hooks handler', () => { expect(data.code).to.equal('code'); expect(data.name).to.equal('someHook'); expect(data.triggerId).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => [ - { - id: '1', - name: 'someHook', - triggerId: 'credentials-exchange', - }, - ], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => + mockPagedData(params, 'hooks', [ + { + id: '1', + name: 'someHook', + triggerId: 'credentials-exchange', + }, + ]), get: () => Promise.resolve({ id: '1', @@ -340,7 +342,7 @@ describe('#hooks handler', () => { code: 'code', triggerId: 'credentials-exchange', }), - getSecrets: () => Promise.resolve({}), + getSecrets: () => Promise.resolve({ data: {} }), }, pool, }; @@ -356,28 +358,28 @@ describe('#hooks handler', () => { it('should remove hook', async () => { const auth0 = { hooks: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('1'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'hooks', [ { id: '1', name: 'someHook', triggerId: 'credentials-exchange', }, - ], + ]), get: () => - Promise.resolve({ + Promise.resolve({ data: { id: '1', name: 'someHook', code: 'code', triggerId: 'credentials-exchange', - }), - getSecrets: () => Promise.resolve({}), + } }), + getSecrets: () => Promise.resolve({ data: {} }), }, pool, }; @@ -395,18 +397,18 @@ describe('#hooks handler', () => { create: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, delete: (data) => { expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'hooks', [ { id: '1', code: 'hook-one-code', @@ -419,7 +421,7 @@ describe('#hooks handler', () => { name: 'Hook2', triggerId: 'credentials-exchange', }, - ], + ]), }, pool, }; @@ -462,7 +464,7 @@ describe('#hooks handler', () => { const removeSecrets = ['TO_REMOVE_ONE', 'TO_REMOVE_TWO']; const auth0 = { hooks: { - create: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), update: function (params, data) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); @@ -472,35 +474,35 @@ describe('#hooks handler', () => { expect(data.code).to.equal('new-code'); expect(data.name).to.equal('someHook'); expect(data.triggerId).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => [hook], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'hooks', [hook]), get: (params) => { expect(params.id).to.equal(hook.id); - return Promise.resolve({ ...hook, code: 'hook-code' }); + return Promise.resolve({ data: { ...hook, code: 'hook-code' } }); }, getSecrets: (params) => { expect(params.id).to.equal(hook.id); - return Promise.resolve(existingSecrets); + return Promise.resolve({ data: existingSecrets }); }, addSecrets: (params, data) => { expect(params.id).to.equal(hook.id); expect(data).to.be.an('object'); expect(data).to.deep.equal(createSecrets); - return Promise.resolve(); + return Promise.resolve({ data: undefined }); }, updateSecrets: (params, data) => { expect(params.id).to.equal(hook.id); expect(data).to.be.an('object'); expect(data).to.deep.equal(updateSecrets); - return Promise.resolve(); + return Promise.resolve({ data: undefined }); }, - removeSecrets: (params, data) => { + deleteSecrets: (params, data) => { expect(params.id).to.equal(hook.id); expect(data).to.be.an('array'); expect(data).to.deep.equal(removeSecrets); - return Promise.resolve(); + return Promise.resolve({ data: undefined }); }, }, pool, @@ -549,17 +551,17 @@ describe('#hooks handler', () => { expect(data.code).to.equal('new-code'); expect(data.name).to.equal('someHook'); expect(data.triggerId).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => [hook], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'hooks', [hook]), get: (params) => { expect(params.id).to.equal(hook.id); - return Promise.resolve({ ...hook, code: 'hook-code' }); + return Promise.resolve({ data: { ...hook, code: 'hook-code' } }); }, getSecrets: (params) => { expect(params.id).to.equal(hook.id); - return Promise.resolve(existingSecrets); + return Promise.resolve({ data: existingSecrets }); }, updateSecrets: (params) => { expect(params).to.equal(undefined); diff --git a/test/tools/auth0/handlers/logStreams.test.ts b/test/tools/auth0/handlers/logStreams.test.ts index 93904d82..e9f09753 100644 --- a/test/tools/auth0/handlers/logStreams.test.ts +++ b/test/tools/auth0/handlers/logStreams.test.ts @@ -53,10 +53,10 @@ const mockLogStreams = [ const auth0ApiClientMock = { logStreams: { - getAll: async () => mockLogStreams, - create: async () => mockLogStreams, - update: async () => mockLogStreams, - delete: async () => mockLogStreams, + getAll: async () => ({ data: mockLogStreams }), + create: async () => ({ data: mockLogStreams }), + update: async () => ({ data: mockLogStreams }), + delete: async () => ({ data: mockLogStreams }), }, pool: new PromisePoolExecutor({ concurrencyLimit: 3, diff --git a/test/tools/auth0/handlers/migrations.tests.js b/test/tools/auth0/handlers/migrations.tests.js deleted file mode 100644 index 9d47bdf0..00000000 --- a/test/tools/auth0/handlers/migrations.tests.js +++ /dev/null @@ -1,155 +0,0 @@ -import migrations from '../../../../src/tools/auth0/handlers/migrations'; - -const { expect } = require('chai'); - -describe('#migrations handler', () => { - const mockClient = (flags) => ({ - migrations: { - getMigrations: () => ({ - flags: { - migration_flag: true, - }, - }), - updateMigrations: (data) => { - expect(data).to.be.an('object'); - expect(data).to.have.deep.property('flags', { migration_flag: false, ...flags }); - return Promise.resolve(data); - }, - }, - }); - - describe('#getType()', () => { - it('should get migration flags', async () => { - const client = mockClient(); - - const handler = new migrations({ client }); - const data = await handler.getType(); - expect(data).to.deep.equal({ - migration_flag: true, - }); - }); - - it('should support when endpoint does not exist (older installations)', async () => { - const client = { - migrations: { - getMigrations: () => { - const err = new Error('Not Found'); - err.name = 'Not Found'; - err.statusCode = 404; - err.requestInfo = { - method: 'get', - url: 'https://example.auth0.com/api/v2/migrations', - }; - err.originalError = new Error('Not Found'); - err.originalError.status = 404; - err.originalError.response = { - body: { - statusCode: 404, - error: 'Not Found', - message: 'Not Found', - }, - }; - return Promise.reject(err); - }, - }, - }; - - const handler = new migrations({ client }); - const data = await handler.getType(); - expect(data).to.deep.equal({}); - }); - }); - - describe('#migrations process', () => { - it('should update available migration flags', async () => { - const client = mockClient(); - const config = () => false; - - const handler = new migrations({ client, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [ - { - migrations: { - migration_flag: false, - }, - }, - ]); - }); - - describe('when AUTH0_IGNORE_UNAVAILABLE_MIGRATIONS=false (default)', () => { - it('should ignore unavailable disabled migration flags', async () => { - const client = mockClient(); - const config = () => false; - - const handler = new migrations({ client, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [ - { - migrations: { - migration_flag: false, - disabled_flag: false, - }, - }, - ]); - }); - - it('should not try to update if all flags are ignored', async () => { - const client = mockClient(); - const config = () => false; - client.migrations.updateMigrations = () => { - throw new Error('tried to update migrations'); - }; - - const handler = new migrations({ client, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [ - { - migrations: { - disabled_flag: false, - }, - }, - ]); - }); - - it('should not ignore unavailable enabled migration flags', async () => { - const client = mockClient({ disabled_flag: true }); - const config = () => false; - - const handler = new migrations({ client, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [ - { - migrations: { - migration_flag: false, - disabled_flag: true, - }, - }, - ]); - }); - }); - - describe('when AUTH0_IGNORE_UNAVAILABLE_MIGRATIONS=true', () => { - it('should ignore all unavailable migration flags', async () => { - const client = mockClient(); - const config = (name) => name === 'AUTH0_IGNORE_UNAVAILABLE_MIGRATIONS'; - - const handler = new migrations({ client, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [ - { - migrations: { - migration_flag: false, - disabled_flag: true, - another_disabled_flag: false, - }, - }, - ]); - }); - }); - }); -}); diff --git a/test/tools/auth0/handlers/organizations.tests.js b/test/tools/auth0/handlers/organizations.tests.js index 4d6ee5d3..10f12e8c 100644 --- a/test/tools/auth0/handlers/organizations.tests.js +++ b/test/tools/auth0/handlers/organizations.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const organizations = require('../../../../src/tools/auth0/handlers/organizations'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -123,21 +124,21 @@ describe('#organizations handler', () => { expect(data.display_name).to.equal('Acme'); expect(data.connections).to.equal(undefined); data.id = 'fake'; - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => Promise.resolve([]), + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [])), addEnabledConnection: (org, connection) => { expect(org.id).to.equal('fake'); expect(connection).to.be.an('object'); expect(connection.connection_id).to.equal('con_123'); expect(connection.assign_membership_on_login).to.equal(true); - return Promise.resolve(connection); + return Promise.resolve({ data: connection }); }, }, connections: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { id: sampleEnabledConnection.connection_id, name: sampleEnabledConnection.connection.name, @@ -149,7 +150,7 @@ describe('#organizations handler', () => { options: {}, }, { id: 'con_999', name: 'Username', options: {} }, - ], + ]), }, pool, }; @@ -177,10 +178,8 @@ describe('#organizations handler', () => { it('should get organizations', async () => { const auth0 = { organizations: { - getAll: () => Promise.resolve([sampleOrg]), - connections: { - get: () => [sampleEnabledConnection], - }, + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [sampleOrg])), + getEnabledConnections: () => ({ data: [sampleEnabledConnection] }), }, pool, }; @@ -202,10 +201,8 @@ describe('#organizations handler', () => { const auth0 = { organizations: { - getAll: () => Promise.resolve([...organizationsPage2, ...organizationsPage1]), - connections: { - get: () => Promise.resolve({}), - }, + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [...organizationsPage2, ...organizationsPage1])), + getEnabledConnections: () => Promise.resolve({ data: {} }), }, pool, }; @@ -283,16 +280,14 @@ describe('#organizations handler', () => { let shouldThrow = false; const auth0 = { organizations: { - getAll: () => { + getAll: (params) => { if (!shouldThrow) { - return [sampleOrg]; + return mockPagedData(params, 'organizations', [sampleOrg]); } throw new Error('Unexpected'); }, - connections: { - get: () => Promise.resolve([]), - }, + getEnabledConnections: () => Promise.resolve({ data: [] }), }, pool, }; @@ -309,32 +304,30 @@ describe('#organizations handler', () => { it('should update organizations', async () => { const auth0 = { organizations: { - create: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), update: function (params, data) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(data.display_name).to.equal('Acme 2'); - return Promise.resolve(data); - }, - delete: () => Promise.resolve([]), - getAll: () => Promise.resolve([sampleOrg]), - connections: { - get: () => [sampleEnabledConnection, sampleEnabledConnection2], + return Promise.resolve({ data }); }, + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [sampleOrg])), + getEnabledConnections: () => ({ data: [sampleEnabledConnection, sampleEnabledConnection2] }), addEnabledConnection: (params, data) => { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(data).to.be.an('object'); expect(data.connection_id).to.equal('con_789'); expect(data.assign_membership_on_login).to.equal(false); - return Promise.resolve(data); + return Promise.resolve({ data }); }, removeEnabledConnection: (params) => { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(params.connection_id).to.equal(sampleEnabledConnection2.connection_id); - return Promise.resolve(); + return Promise.resolve({ data: undefined}); }, updateEnabledConnection: (params, data) => { expect(params).to.be.an('object'); @@ -342,11 +335,11 @@ describe('#organizations handler', () => { expect(params.connection_id).to.equal(sampleEnabledConnection.connection_id); expect(data).to.be.an('object'); expect(data.assign_membership_on_login).to.equal(false); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, connections: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { id: sampleEnabledConnection.connection_id, name: sampleEnabledConnection.connection.name, @@ -358,7 +351,7 @@ describe('#organizations handler', () => { options: {}, }, { id: 'con_999', name: 'Username', options: {} }, - ], + ]), }, pool, }; @@ -386,30 +379,28 @@ describe('#organizations handler', () => { it('should add an enabled connection to the organizations', async () => { const auth0 = { organizations: { - create: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), update: function (params, data) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(data.display_name).to.equal('Acme 2'); - return Promise.resolve(data); - }, - delete: () => Promise.resolve([]), - getAll: () => Promise.resolve([sampleOrg]), - connections: { - get: () => [], + return Promise.resolve({ data }); }, + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [sampleOrg])), + getEnabledConnections: () => ( { data: [] }), addEnabledConnection: (params, data) => { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(data).to.be.an('object'); expect(data.connection_id).to.equal('con_123'); expect(data.assign_membership_on_login).to.equal(false); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, connections: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { id: sampleEnabledConnection.connection_id, name: sampleEnabledConnection.connection.name, @@ -421,7 +412,7 @@ describe('#organizations handler', () => { options: {}, }, { id: 'con_999', name: 'Username', options: {} }, - ], + ]), }, pool, }; @@ -452,22 +443,20 @@ describe('#organizations handler', () => { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(data.display_name).to.equal('Acme 2'); - return Promise.resolve(data); - }, - delete: () => Promise.resolve([]), - getAll: () => Promise.resolve([sampleOrg]), - connections: { - get: () => [sampleEnabledConnection2], + return Promise.resolve({ data }); }, + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [sampleOrg])), + getEnabledConnections: () => ({ data: [sampleEnabledConnection2] }), removeEnabledConnection: (params) => { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(params.connection_id).to.equal(sampleEnabledConnection2.connection_id); - return Promise.resolve(); + return Promise.resolve({ data: undefined }); }, }, connections: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { id: sampleEnabledConnection.connection_id, name: sampleEnabledConnection.connection.name, @@ -479,7 +468,7 @@ describe('#organizations handler', () => { options: {}, }, { id: 'con_999', name: 'Username', options: {} }, - ], + ]), }, pool, }; @@ -509,16 +498,14 @@ describe('#organizations handler', () => { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(data.display_name).to.equal('Acme 2'); - return Promise.resolve(data); - }, - delete: () => Promise.resolve([]), - getAll: () => Promise.resolve([sampleOrg]), - connections: { - get: () => [], + return Promise.resolve({ data }); }, + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [sampleOrg])), + getEnabledConnections: () => ( { data : [] } ), }, connections: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { id: sampleEnabledConnection.connection_id, name: sampleEnabledConnection.connection.name, @@ -530,7 +517,7 @@ describe('#organizations handler', () => { options: {}, }, { id: 'con_999', name: 'Username', options: {} }, - ], + ]), }, pool, }; @@ -555,20 +542,18 @@ describe('#organizations handler', () => { it('should delete organizations', async () => { const auth0 = { organizations: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal(sampleOrg.id); - return Promise.resolve(data); - }, - getAll: () => Promise.resolve([sampleOrg]), - connections: { - get: () => [], + return Promise.resolve({ data }); }, + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations',[sampleOrg])), + getEnabledConnections: () => [], }, connections: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'connections', []), }, pool, }; diff --git a/test/tools/auth0/handlers/pages.tests.js b/test/tools/auth0/handlers/pages.tests.js index 01107642..87393757 100644 --- a/test/tools/auth0/handlers/pages.tests.js +++ b/test/tools/auth0/handlers/pages.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const pages = require('../../../../src/tools/auth0/handlers/pages'); +const { mockPagedData } = require('../../../utils'); describe('#pages handler', () => { describe('#pages process', () => { @@ -10,12 +11,12 @@ describe('#pages handler', () => { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(data).to.be.an('object'); - expect(params.client_id).to.equal('global1'); + expect(params.id).to.equal('global1'); expect(data.custom_login_page).to.equal('login_body'); expect(data.custom_login_page_on).to.equal(true); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [{ client_id: 'global1' }], + getAll: (params) => mockPagedData(params, 'clients', [{ client_id: 'global1' }]), }, }; @@ -33,20 +34,23 @@ describe('#pages handler', () => { const auth0 = { clients: { - getAll: () => [ - { - name: 'Global Client', - client_id: 'FMfcgxvzLDvPsgpRFKkLVrnKqGgkHhQV', - custom_login_page_on: true, - custom_login_page: html, - }, - ], + getAll: (params) => + mockPagedData(params, 'clients', [ + { + name: 'Global Client', + client_id: 'FMfcgxvzLDvPsgpRFKkLVrnKqGgkHhQV', + custom_login_page_on: true, + custom_login_page: html, + }, + ]), }, - tenant: { + tenants: { getSettings: () => ({ - guardian_mfa_page: { enabled: true, html: html }, - change_password: { enabled: true, html: html }, - error_page: { show_log_link: true, html: html, url: errorPageUrl }, + data: { + guardian_mfa_page: { enabled: true, html: html }, + change_password: { enabled: true, html: html }, + error_page: { show_log_link: true, html: html, url: errorPageUrl }, + }, }), }, }; @@ -68,13 +72,13 @@ describe('#pages handler', () => { it('should update password_reset page', async () => { const auth0 = { - tenant: { + tenants: { updateSettings: (data) => { expect(data).to.be.an('object'); expect(data.change_password).to.be.an('object'); expect(data.change_password.html).to.equal('password_reset_body'); expect(data.change_password.enabled).to.equal(false); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, }; @@ -91,14 +95,14 @@ describe('#pages handler', () => { const errorPageHtml = 'error_page_body'; const errorPageUrl = 'https://mycompany.org/error'; const auth0 = { - tenant: { + tenants: { updateSettings: (data) => { expect(data).to.be.an('object'); expect(data.error_page).to.be.an('object'); expect(data.error_page.html).to.equal(errorPageHtml); expect(data.error_page.url).to.equal(errorPageUrl); expect(data.error_page.show_log_link).to.equal(true); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, }; diff --git a/test/tools/auth0/handlers/prompts.tests.ts b/test/tools/auth0/handlers/prompts.tests.ts index 8e8ae6bf..7292a551 100644 --- a/test/tools/auth0/handlers/prompts.tests.ts +++ b/test/tools/auth0/handlers/prompts.tests.ts @@ -49,14 +49,14 @@ describe('#prompts handler', () => { }; // Has no prompts configured. const auth0 = { - tenant: { + tenants: { getSettings: () => - Promise.resolve({ + Promise.resolve({ data: { enabled_locales: supportedLanguages, - }), + }}), }, prompts: { - getSettings: () => mockPromptsSettings, + get: () => ({ data: mockPromptsSettings }), getCustomTextByLanguage: ({ language, prompt }) => { const customTextLanguageMap = { en: englishCustomText, @@ -66,9 +66,9 @@ describe('#prompts handler', () => { const customTextValue = customTextLanguageMap[language][prompt]; if (customTextValue === undefined || _.isEmpty(customTextValue)) - return Promise.resolve({}); + return Promise.resolve({ data: {}}); - return Promise.resolve(customTextValue); + return Promise.resolve({ data: customTextValue }); }, }, pool: new PromisePoolExecutor({ @@ -100,7 +100,7 @@ describe('#prompts handler', () => { let didCallUpdateCustomText = false; const auth0 = { - tenant: { + tenants: { getSettings: () => ({ enabled_locales: ['en'], }), @@ -109,10 +109,10 @@ describe('#prompts handler', () => { updateCustomTextByLanguage: () => { didCallUpdateCustomText = true; }, - updateSettings: (_params, data) => { + update: (data) => { didCallUpdatePromptsSettings = true; expect(data).to.deep.equal(mockPromptsSettings); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, }; @@ -154,12 +154,12 @@ describe('#prompts handler', () => { updateCustomTextByLanguage: () => { didCallUpdateCustomText = true; numberOfUpdateCustomTextCalls++; - return Promise.resolve({}); + return Promise.resolve({data: {}}); }, - updateSettings: (_params, data) => { + update: (data) => { didCallUpdatePromptsSettings = true; expect(data).to.deep.equal(mockPromptsSettings); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, pool: new PromisePoolExecutor({ @@ -183,14 +183,16 @@ describe('#prompts handler', () => { it('should not fail if tenant languages undefined', async () => { const auth0 = { - tenant: { + tenants: { getSettings: () => Promise.resolve({ - enabled_locales: undefined, + data: { + enabled_locales: undefined, + } }), }, prompts: { - getSettings: () => mockPromptsSettings, + get: () => ({ data: mockPromptsSettings }), }, pool: new PromisePoolExecutor({ concurrencyLimit: 3, diff --git a/test/tools/auth0/handlers/resourceServers.tests.js b/test/tools/auth0/handlers/resourceServers.tests.js index 839c978a..9b945e96 100644 --- a/test/tools/auth0/handlers/resourceServers.tests.js +++ b/test/tools/auth0/handlers/resourceServers.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const resourceServers = require('../../../../src/tools/auth0/handlers/resourceServers'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -78,11 +79,11 @@ describe('#resourceServers handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someAPI'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'resource_servers', []), }, pool, }; @@ -96,10 +97,14 @@ describe('#resourceServers handler', () => { it('should get resource servers', async () => { const auth0 = { resourceServers: { - getAll: () => [ - { name: 'Auth0 Management API', identifier: 'https://test.auth0.com/api/v2/' }, - { name: 'Company API', identifier: 'http://company.com/api' }, - ], + getAll: (params) => + mockPagedData(params, 'resource_servers', [ + { + name: 'Auth0 Management API', + identifier: 'https://test.auth0.com/api/v2/', + }, + { name: 'Company API', identifier: 'http://company.com/api' }, + ]), }, }; @@ -117,10 +122,10 @@ describe('#resourceServers handler', () => { expect(data).to.be.an('object'); expect(params.id).to.equal('rs1'); expect(data.scope).to.equal('new:scope'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'resource_servers', [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }]), }, pool, }; @@ -142,16 +147,16 @@ describe('#resourceServers handler', () => { expect(data.name).to.equal('someAPI'); expect(data.scope).to.equal('new:scope'); expect(data.identifier).to.equal('another-api'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be('undefined'); expect(data).to.be('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, delete: () => Promise.resolve([]), - getAll: () => [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }], + getAll: (params) => mockPagedData(params, 'resource_servers', [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }]), }, pool, }; @@ -172,9 +177,9 @@ describe('#resourceServers handler', () => { delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('rs1'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }], + getAll: (params) => mockPagedData(params, 'resource_servers', [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }]), }, pool, }; @@ -189,15 +194,15 @@ describe('#resourceServers handler', () => { let removed = false; const auth0 = { resourceServers: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('rs1'); removed = true; - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }], + getAll: (params) => mockPagedData(params, 'resource_servers', [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }]), }, pool, }; @@ -217,15 +222,15 @@ describe('#resourceServers handler', () => { let removed = false; const auth0 = { resourceServers: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('rs1'); removed = true; - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }], + getAll: (params) => mockPagedData(params, 'resource_servers', [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }]), }, pool, }; @@ -244,16 +249,16 @@ describe('#resourceServers handler', () => { update: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, delete: (data) => { expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'resource_servers', [ { id: 'rs1', identifier: 'some-api', name: 'someAPI' }, { id: 'rs2', identifier: 'some-other-api', name: 'someOtherAPI' }, - ], + ]), }, pool, }; diff --git a/test/tools/auth0/handlers/roles.tests.js b/test/tools/auth0/handlers/roles.tests.js index b6b04d6d..58536fab 100644 --- a/test/tools/auth0/handlers/roles.tests.js +++ b/test/tools/auth0/handlers/roles.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const roles = require('../../../../src/tools/auth0/handlers/roles'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -63,11 +64,11 @@ describe('#roles handler', () => { expect(data).to.be.an('object'); expect(data.name).to.equal('myRole'); expect(data.description).to.equal('myDescription'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => Promise.resolve([]), + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'roles', []), permissions: { getAll: () => Promise.resolve([ @@ -79,9 +80,9 @@ describe('#roles handler', () => { expect(data).to.be.an('object'); expect(data.permissions).to.not.equal(null); expect(data.permissions).to.be.an('Array'); - return Promise.resolve(data.permissions); + return Promise.resolve({ data: data.permissions }); }, - update: Promise.resolve([]), + update: Promise.resolve({ data: [] }), }, }, pool, @@ -110,17 +111,15 @@ describe('#roles handler', () => { const auth0 = { roles: { - getAll: () => - Promise.resolve([ + getAll: (params) => + mockPagedData(params, 'roles', [ { name: 'myRole', id: 'myRoleId', description: 'myDescription', }, ]), - permissions: { - getAll: () => Promise.resolve(permissions), - }, + getPermissions: (params) => mockPagedData(params, 'permissions', permissions), }, pool, }; @@ -201,7 +200,7 @@ describe('#roles handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.length).to.equal(0); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -211,38 +210,24 @@ describe('#roles handler', () => { expect(data.name).to.equal('myRole'); expect(data.description).to.equal('myDescription'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => - Promise.resolve([ + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => + mockPagedData(params, 'roles', [ { name: 'myRole', id: 'myRoleId', description: 'myDescription', }, ]), - permissions: { - getAll: () => - Promise.resolve([ - { permission_name: 'Create:cal_entry', resource_server_identifier: 'organise' }, - ]), - create: (params, data) => { - expect(params).to.be.an('object'); - expect(params.id).to.equal('myRoleId'); - expect(data).to.be.an('object'); - expect(data.permissions).to.not.equal(null); - expect(data.permissions).to.be.an('Array'); - return Promise.resolve(data); - }, - delete: function (params, data) { - (() => expect(this).to.not.be.undefined)(); - expect(params).to.be.an('object'); - expect(params.id).to.equal('myRoleId'); - expect(data.permissions).to.be.an('Array'); - return Promise.resolve(data.permissions); - }, - }, + getPermissions: (params) => + mockPagedData(params, 'permissions', [ + { + permission_name: 'Create:cal_entry', + resource_server_identifier: 'organise', + }, + ]), }, pool, }; @@ -272,24 +257,22 @@ describe('#roles handler', () => { it('should delete role', async () => { const auth0 = { roles: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('myRoleId'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => - Promise.resolve([ + getAll: (params) => + mockPagedData(params, 'roles', [ { name: 'myRole', id: 'myRoleId', description: 'myDescription', }, ]), - permissions: { - getAll: () => Promise.resolve([]), - }, + getPermissions: (params) => mockPagedData(params, 'permissions', []), }, pool, }; diff --git a/test/tools/auth0/handlers/rules.tests.js b/test/tools/auth0/handlers/rules.tests.js index d9e66a26..ad602a39 100644 --- a/test/tools/auth0/handlers/rules.tests.js +++ b/test/tools/auth0/handlers/rules.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const rules = require('../../../../src/tools/auth0/handlers/rules'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -23,7 +24,7 @@ describe('#rules handler', () => { it('should not allow same names', async () => { const auth0 = { rules: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'rules', []), }, }; @@ -49,8 +50,8 @@ describe('#rules handler', () => { it('should not allow same order', async () => { const auth0 = { rules: { - getAll: () => [], - }, + getAll: (params) => mockPagedData(params, 'rules', []), + } }; const handler = new rules.default({ client: auth0, config }); @@ -79,16 +80,17 @@ describe('#rules handler', () => { it("should not have a rules' order collision when rules are reordered with future rule set no consecutive", async () => { const auth0 = { rules: { - getAll: () => [ - { - name: 'Rule1', - order: 1, - }, - { - name: 'Rule2', - order: 2, - }, - ], + getAll: (params) => + mockPagedData(params, 'rules', [ + { + name: 'Rule1', + order: 1, + }, + { + name: 'Rule2', + order: 2, + }, + ]), }, }; @@ -117,16 +119,17 @@ describe('#rules handler', () => { it("should not have a rules' order collision when rules are reordered with future rule set consecutive", async () => { const auth0 = { rules: { - getAll: () => [ - { - name: 'Rule1', - order: 1, - }, - { - name: 'Rule2', - order: 2, - }, - ], + getAll: (params) => + mockPagedData(params, 'rules', [ + { + name: 'Rule1', + order: 1, + }, + { + name: 'Rule2', + order: 2, + }, + ]), }, }; @@ -155,12 +158,13 @@ describe('#rules handler', () => { it('should not allow change stage', async () => { const auth0 = { rules: { - getAll: () => [ - { - name: 'Rule1', - stage: 'some_stage', - }, - ], + getAll: (params) => + mockPagedData(params, 'rules', [ + { + name: 'Rule1', + stage: 'some_stage', + }, + ]), }, }; @@ -184,7 +188,7 @@ describe('#rules handler', () => { it('should pass validation', async () => { const auth0 = { rules: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'rules', []), }, }; @@ -209,11 +213,11 @@ describe('#rules handler', () => { expect(data).to.be.an('object'); expect(data.name).to.equal('someRule'); expect(data.script).to.equal('rule_script'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'rules', []), }, pool, }; @@ -245,7 +249,7 @@ describe('#rules handler', () => { ]; const auth0 = { - rules: { getAll: () => rulesData }, + rules: { getAll: (params) => mockPagedData(params, 'rules', rulesData) }, }; const handler = new rules.default({ client: auth0, config }); @@ -273,17 +277,17 @@ describe('#rules handler', () => { it('should update rule', async () => { const auth0 = { rules: { - create: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), update: function (params, data) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(data).to.be.an('object'); expect(params.id).to.equal('rule1'); expect(data.script).to.equal('new_script'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ id: 'rule1', name: 'someRule', script: 'rule_script' }], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'rules', [{ id: 'rule1', name: 'someRule', script: 'rule_script' }]) }, pool, }; @@ -297,14 +301,14 @@ describe('#rules handler', () => { it('should remove rule', async () => { const auth0 = { rules: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('rule1'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [{ id: 'rule1', name: 'existingRule', order: '10' }], + getAll: (params) => mockPagedData(params, 'rules', [{ id: 'rule1', name: 'existingRule', order: '10' }]) }, pool, }; @@ -319,15 +323,15 @@ describe('#rules handler', () => { let removed = false; const auth0 = { rules: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('rule1'); removed = true; - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [{ id: 'rule1', name: 'existingRule', order: '10' }], + getAll: (params) => mockPagedData(params, 'rules', [{ id: 'rule1', name: 'existingRule', order: '10' }]) }, pool, }; @@ -347,15 +351,15 @@ describe('#rules handler', () => { let removed = false; const auth0 = { rules: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('rule1'); removed = true; - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [{ id: 'rule1', name: 'existingRule', order: '10' }], + getAll: (params) => mockPagedData(params, 'rules', [{ id: 'rule1', name: 'existingRule', order: '10' }]) }, pool, }; @@ -373,21 +377,22 @@ describe('#rules handler', () => { create: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, delete: (data) => { expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [ - { id: 'rule1', script: 'rule-one-script', name: 'Rule1' }, - { id: 'rile2', script: 'some-other-script', name: 'Rule2' }, - ], + getAll: (params) => + mockPagedData(params, 'rules', [ + { id: 'rule1', script: 'rule-one-script', name: 'Rule1' }, + { id: 'rile2', script: 'some-other-script', name: 'Rule2' }, + ]), }, pool, }; diff --git a/test/tools/auth0/handlers/rulesConfigs.tests.ts b/test/tools/auth0/handlers/rulesConfigs.tests.ts index 80c0a0b7..8498c909 100644 --- a/test/tools/auth0/handlers/rulesConfigs.tests.ts +++ b/test/tools/auth0/handlers/rulesConfigs.tests.ts @@ -37,7 +37,7 @@ describe('#rulesConfigs handler', () => { const rulesConfigData = [{ key: 'SOME_SECRET' }, { key: 'SOME_OTHER_SECRET' }]; const auth0 = { - rulesConfigs: { getAll: () => rulesConfigData }, + rulesConfigs: { getAll: () => ({ data: rulesConfigData }) }, }; const handler = new rulesConfigs({ client: auth0 }); diff --git a/test/tools/auth0/handlers/tenant.tests.ts b/test/tools/auth0/handlers/tenant.tests.ts index 3998ae0d..b6887f4f 100644 --- a/test/tools/auth0/handlers/tenant.tests.ts +++ b/test/tools/auth0/handlers/tenant.tests.ts @@ -32,15 +32,17 @@ describe('#tenant handler', () => { it('should get tenant', async () => { const auth0 = { - tenant: { + tenants: { getSettings: () => ({ - friendly_name: 'Test', - default_directory: 'users', - flags: { - ...mockAllowedFlags, - 'unallowed-flag-1': false, - 'unallowed-flag-2': true, - }, + data: { + friendly_name: 'Test', + default_directory: 'users', + flags: { + ...mockAllowedFlags, + 'unallowed-flag-1': false, + 'unallowed-flag-2': true, + }, + } }), }, }; @@ -58,10 +60,12 @@ describe('#tenant handler', () => { describe('#tenant process', () => { it('should update tenant settings', async () => { const auth0 = { - tenant: { + tenants: { getSettings: () => ({ - friendly_name: 'Test', - default_directory: 'users', + data: { + friendly_name: 'Test', + default_directory: 'users', + } }), updateSettings: (data) => { expect(data).to.be.an('object'); @@ -89,7 +93,7 @@ describe('#tenant handler', () => { }; const auth0 = { - tenant: { + tenants: { updateSettings: (data) => { expect(data).to.be.an('object'); expect(data.flags).to.deep.equal({ @@ -114,11 +118,11 @@ describe('#tenant handler', () => { }; const auth0 = { - tenant: { + tenants: { updateSettings: (data) => { expect(data).to.be.an('object'); expect(data.flags).to.be.undefined; - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, }; diff --git a/test/tools/auth0/handlers/themes.tests.js b/test/tools/auth0/handlers/themes.tests.js index 46bb7179..90827a6a 100644 --- a/test/tools/auth0/handlers/themes.tests.js +++ b/test/tools/auth0/handlers/themes.tests.js @@ -1,7 +1,13 @@ -const { expect, assert } = require('chai'); +//import chai from "chai"; + +const { expect, assert, use } = require('chai'); const { omit, cloneDeep } = require('lodash'); const { default: ThemesHandler } = require('../../../../src/tools/auth0/handlers/themes'); +const chaiAsPromised = require('chai-as-promised'); + +use(chaiAsPromised); + function stub() { const s = function (...args) { s.callCount += 1; @@ -126,7 +132,7 @@ describe('#themes handler', () => { const auth0 = { branding: { - getDefaultTheme: stub().returns(Promise.resolve(theme)), + getDefaultTheme: stub().returns(Promise.resolve({ data: theme })), }, }; @@ -227,7 +233,7 @@ describe('#themes handler', () => { const auth0 = { branding: { - getDefaultTheme: stub().returns(theme), + getDefaultTheme: stub().returns({ data: theme }), createTheme: stub().returns( Promise.reject(new Error('updateTheme should not have been called')) ), @@ -248,7 +254,7 @@ describe('#themes handler', () => { expect(auth0.branding.updateTheme.called).to.equal(true); expect(auth0.branding.updateTheme.callCount).to.equal(1); expect( - auth0.branding.updateTheme.calledWith({ id: 'myThemeId' }, omit(theme, 'themeId')) + auth0.branding.updateTheme.calledWith({ themeId: 'myThemeId' }, omit(theme, 'themeId')) ).to.deep.equal(true); expect(auth0.branding.createTheme.called).to.equal(false); expect(auth0.branding.deleteTheme.called).to.equal(false); @@ -263,14 +269,14 @@ describe('#themes handler', () => { const auth0 = { branding: { - getDefaultTheme: stub().returns(Promise.resolve(theme)), + getDefaultTheme: stub().returns(Promise.resolve({ data: theme })), createTheme: stub().returns( Promise.reject(new Error('createTheme should not have been called')) ), updateTheme: stub().returns( Promise.reject(new Error('updateTheme should not have been called')) ), - deleteTheme: stub().returns(Promise.resolve()), + deleteTheme: stub().returns(Promise.resolve({ data: undefined })), }, }; @@ -282,7 +288,7 @@ describe('#themes handler', () => { expect(auth0.branding.getDefaultTheme.called).to.equal(true); expect(auth0.branding.getDefaultTheme.callCount).to.equal(1); expect(auth0.branding.deleteTheme.callCount).to.equal(1); - expect(auth0.branding.deleteTheme.calledWith({ id: 'delete-me' })).to.equal(true); + expect(auth0.branding.deleteTheme.calledWith({ themeId: 'delete-me' })).to.equal(true); expect(auth0.branding.updateTheme.called).to.equal(false); expect(auth0.branding.createTheme.called).to.equal(false); }); diff --git a/test/tools/auth0/handlers/triggers.tests.js b/test/tools/auth0/handlers/triggers.tests.js index b2accafc..2dd18793 100644 --- a/test/tools/auth0/handlers/triggers.tests.js +++ b/test/tools/auth0/handlers/triggers.tests.js @@ -85,7 +85,7 @@ describe('#triggers handler', () => { actions: { getAllTriggers: () => Promise.resolve(existingTriggerBindings), // eslint-disable-next-line camelcase - updateTriggerBindings: ({ trigger_id }, { bindings }) => { + updateTriggerBindings: ({ triggerId }, { bindings }) => { expect([ 'post-login', 'credentials-exchange', @@ -94,7 +94,7 @@ describe('#triggers handler', () => { 'post-change-password', 'send-phone-message', 'password-reset-post-challenge', - ]).to.include(trigger_id); // eslint-disable-line camelcase + ]).to.include(triggerId); // eslint-disable-line camelcase expect(bindings).to.be.an('array').that.is.empty; // eslint-disable-line no-unused-expressions timesUpdateTriggerBindingsCalled += 1; return Promise.resolve([]); @@ -163,8 +163,8 @@ describe('#triggers handler', () => { actions: { getAllTriggers: () => Promise.resolve(existingTriggerBindings), // eslint-disable-next-line camelcase - updateTriggerBindings: ({ trigger_id }, { bindings }) => { - expect(trigger_id).to.equal('post-login'); + updateTriggerBindings: ({ triggerId }, { bindings }) => { + expect(triggerId).to.equal('post-login'); expect(bindings).to.deep.equal(updatePayload); timesUpdateTriggerBindingsCalled += 1; return Promise.resolve(updatePayload); diff --git a/test/tools/auth0/validator.tests.js b/test/tools/auth0/validator.tests.js index f88a2be7..a456accf 100644 --- a/test/tools/auth0/validator.tests.js +++ b/test/tools/auth0/validator.tests.js @@ -2,28 +2,29 @@ import { expect } from 'chai'; import Auth0 from '../../../src/tools/auth0'; import constants from '../../../src/tools/constants'; import { mockTheme } from './handlers/themes.tests'; +import { mockPagedData } from '../../utils'; const mockConfigFn = () => {}; describe('#schema validation tests', () => { const client = { rules: { - getAll: async () => ({ rules: [] }), + getAll: async (params) => mockPagedData(params, 'rules', []), }, clients: { - getAll: async () => ({ clients: [] }), + getAll: async (params) => mockPagedData(params, 'clients', []), }, connections: { - getAll: async () => ({ connections: [] }), + getAll: async (params) => mockPagedData(params, 'connections', []), }, resourceServers: { - getAll: async () => ({ resource_servers: [] }), + getAll: async (params) => mockPagedData(params, 'resource_servers', []), }, clientGrants: { - getAll: async () => ({ client_grants: [] }), + getAll: async (params) => mockPagedData(params, 'client_grants', []), }, roles: { - getAll: async () => ({ client_grants: [] }), + getAll: async (params) => mockPagedData(params, 'roles', []), }, }; @@ -765,34 +766,6 @@ describe('#schema validation tests', () => { }); }); - describe('#migrations validate', () => { - it('should fail validation if migrations is not an object', (done) => { - const data = ''; - - const auth0 = new Auth0({}, { migrations: data }, mockConfigFn); - - auth0.validate().then(failedCb(done), passedCb(done, 'should be object')); - }); - - it('should fail validation if migrations properties are not boolean', (done) => { - const data = { - migration_flag: 'string', - }; - - const auth0 = new Auth0({}, { migrations: data }, mockConfigFn); - - auth0.validate().then(failedCb(done), passedCb(done, 'should be boolean')); - }); - - it('should pass validation', (done) => { - const data = { - migration_flag: true, - }; - - checkPassed({ migrations: data }, done); - }); - }); - describe('#themes validate', () => { it('should fail validation if themes is invalid', (done) => { const data = [ diff --git a/test/utils.js b/test/utils.js index 4a61197a..03780ed1 100644 --- a/test/utils.js +++ b/test/utils.js @@ -16,33 +16,38 @@ export const testDataDir = path.resolve(localDir, 'testData'); export function mockMgmtClient() { // Fake Mgmt Client. Bit hacky but good enough for now. return { - rules: { getAll: () => ({ rules: [] }) }, - hooks: { getAll: () => ({ hooks: [] }) }, - actions: { getAll: () => ({ actions: [] }) }, - databases: { getAll: () => ({ databases: [] }) }, - connections: { getAll: () => ({ connections: [] }) }, - resourceServers: { getAll: () => ({ resourceServers: [] }) }, - rulesConfigs: { getAll: () => ({ rulesConfigs: [] }) }, - emailProvider: { + rules: { getAll: (params) => (mockPagedData(params, 'rules', [])) }, + hooks: { getAll: (params) => (mockPagedData(params, 'hooks', [])) }, + actions: { getAll: () => (mockPagedData({ include_totals: true }, 'actions', [])) }, + databases: { getAll: (params) => (mockPagedData(params, 'databases', [])) }, + connections: { getAll: (params) => (mockPagedData(params, 'connections', [])) }, + resourceServers: { getAll: (params) => (mockPagedData(params, 'resource_servers', [])) }, + rulesConfigs: { getAll: (params) => (mockPagedData(params, 'rules_configs', [])) }, + emails: { get: () => ({ - name: 'smtp', - enabled: true, + data: { + name: 'smtp', + enabled: true, + } }), }, - clientGrants: { getAll: () => ({ clientGrants: [] }) }, + clientGrants: { getAll: (params) => (mockPagedData(params, 'client_grants', [])) }, guardian: { - getFactors: () => [], - getFactorProvider: () => [], - getFactorTemplates: () => [], - getPhoneFactorMessageTypes: () => ({ message_types: ['sms'] }), - getPhoneFactorSelectedProvider: () => ({ provider: 'twilio' }), - getPolicies: () => [], + getFactors: () => ({ data: [] }), + getSmsFactorProviderTwilio: () => ({data: []}), + getPushNotificationProviderSNS: () => ({data: []}), + getSmsFactorTemplates: () => ({data: []}), + getPhoneFactorMessageTypes: () => ({ data: { message_types: ['sms'] }}), + getPhoneFactorSelectedProvider: () => ({ data: { provider: 'twilio' } }), + getPolicies: () => ({ data: [] }), }, emailTemplates: { get: (template) => ({ - template: template.name, - enabled: true, - body: 'fake template', + data: { + template: template.templateName, + enabled: true, + body: 'fake template', + } }), }, clients: { @@ -55,50 +60,36 @@ export function mockMgmtClient() { custom_login_page: 'page', }; - if (params.per_page) { - return { - clients: [client], - }; - } - - return [client]; + return mockPagedData(params, 'clients', [client]); }, }, roles: { - getAll: () => ({ - roles: [ - { - name: 'App Admin', - id: 'myRoleId', - description: 'Admin of app', - }, - ], - total: 1, - limit: 50, - }), - permissions: { - getAll: () => ({ - permissions: [ - { - permission_name: 'create:data', - resource_server_identifier: 'urn:ref', - }, - ], - total: 1, - limit: 50, - }), - }, + getAll: (params) => mockPagedData(params, 'roles', [ + { + name: 'App Admin', + id: 'myRoleId', + description: 'Admin of app', + }, + ]), + getPermissions: (params) => mockPagedData(params, 'permissions', [ + { + permission_name: 'create:data', + resource_server_identifier: 'urn:ref', + }, + ]), }, - tenant: { + tenants: { getSettings: async () => new Promise((res) => res({ - friendly_name: 'Test', - default_directory: 'users', - enabled_locales: ['en'], + data: { + friendly_name: 'Test', + default_directory: 'users', + enabled_locales: ['en'], + } }) ), - getCustomTextByLanguage: () => Promise.resolve({}), + getCustomTextByLanguage: () => Promise.resolve({data: {} }), }, migrations: { getMigrations: () => ({ @@ -106,27 +97,27 @@ export function mockMgmtClient() { }), }, attackProtection: { - getBreachedPasswordDetectionConfig: () => ({}), - getBruteForceConfig: () => ({}), - getSuspiciousIpThrottlingConfig: () => ({}), + getBreachedPasswordDetectionConfig: () => ({ data: {} }), + getBruteForceConfig: () => ({ data: {} }), + getSuspiciousIpThrottlingConfig: () => ({ data: {} }), }, branding: { - getSettings: () => ({}), + getSettings: () => ({ data: {} }), getDefaultTheme: () => { const err = new Error('Not found'); err.statusCode = 404; return Promise.reject(err); }, }, - logStreams: { getAll: () => [] }, + logStreams: { getAll: (params) => mockPagedData(params, 'log_streams',[]) }, prompts: { getCustomTextByLanguage: () => new Promise((res) => { - res({}); + res({ data: {} }); }), - getSettings: () => {}, + get: () => ({ data: {}}), }, - customDomains: { getAll: () => [] }, + customDomains: { getAll: (params) => mockPagedData(params, 'custom_domains', []) }, }; } @@ -148,3 +139,15 @@ export function createDir(repoDir, files) { }); }); } + +export function mockPagedData(params, key, data) { + return params?.include_totals + ? { + data: { + [key]: data, + }, + } + : { + data, + }; +} From 4e375229f78f598816858a8b40caf72cd512dde4 Mon Sep 17 00:00:00 2001 From: frederikprijck Date: Thu, 31 Aug 2023 15:26:16 +0200 Subject: [PATCH 3/9] Ensure e2e tests run against a live tenant --- src/tools/auth0/handlers/emailProvider.ts | 8 +++----- test/e2e/testdata/empty-tenant/tenant.yaml | 1 - test/e2e/testdata/lots-of-configuration/tenant.yaml | 1 - .../should-deploy-without-throwing-an-error/tenant.yaml | 1 - 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/tools/auth0/handlers/emailProvider.ts b/src/tools/auth0/handlers/emailProvider.ts index 8a5a6c02..2af52aa5 100644 --- a/src/tools/auth0/handlers/emailProvider.ts +++ b/src/tools/auth0/handlers/emailProvider.ts @@ -1,5 +1,6 @@ import DefaultHandler from './default'; import { Asset, Assets } from '../../../types'; +import { PostProviderRequest } from 'auth0'; export const schema = { type: 'object' }; @@ -54,14 +55,11 @@ export default class EmailProviderHandler extends DefaultHandler { } if (existing.name) { - const provider = { name: emailProvider.name, enabled: emailProvider.enabled }; - const updated = await this.client.emails.update(provider, emailProvider); + const updated = await this.client.emails.update(emailProvider); this.updated += 1; this.didUpdate(updated); } else { - // TODO: credentials is required here. - const provider = { name: emailProvider.name, enabled: emailProvider.enabled, credentials: {} }; - const created = await this.client.emails.configure(provider, emailProvider); + const created = await this.client.emails.configure(emailProvider as PostProviderRequest); this.created += 1; this.didCreate(created); } diff --git a/test/e2e/testdata/empty-tenant/tenant.yaml b/test/e2e/testdata/empty-tenant/tenant.yaml index 2890c0a7..67ddf256 100644 --- a/test/e2e/testdata/empty-tenant/tenant.yaml +++ b/test/e2e/testdata/empty-tenant/tenant.yaml @@ -109,7 +109,6 @@ branding: templates: [] prompts: universal_login_experience: new -migrations: {} actions: [] triggers: {} organizations: [] diff --git a/test/e2e/testdata/lots-of-configuration/tenant.yaml b/test/e2e/testdata/lots-of-configuration/tenant.yaml index a943dc26..58431e5b 100644 --- a/test/e2e/testdata/lots-of-configuration/tenant.yaml +++ b/test/e2e/testdata/lots-of-configuration/tenant.yaml @@ -659,7 +659,6 @@ roles: prompts: universal_login_experience: new identifier_first: true -migrations: {} actions: - name: My Custom Action code: ./actions/My Custom Action/code.js diff --git a/test/e2e/testdata/should-deploy-without-throwing-an-error/tenant.yaml b/test/e2e/testdata/should-deploy-without-throwing-an-error/tenant.yaml index c5dac8f3..405ef36b 100644 --- a/test/e2e/testdata/should-deploy-without-throwing-an-error/tenant.yaml +++ b/test/e2e/testdata/should-deploy-without-throwing-an-error/tenant.yaml @@ -125,7 +125,6 @@ branding: prompts: customText: {} universal_login_experience: new -migrations: {} actions: [] triggers: {} organizations: [] From 437b580d3ee155904f050ab6aff99a8fb69be4b3 Mon Sep 17 00:00:00 2001 From: frederikprijck Date: Thu, 31 Aug 2023 15:43:14 +0200 Subject: [PATCH 4/9] Fix linter --- test/context/context.test.js | 4 +-- test/tools/auth0/handlers/actions.tests.js | 4 +-- test/tools/auth0/handlers/clients.tests.js | 2 +- .../handlers/guardianFactorTemplates.tests.js | 2 +- test/tools/auth0/handlers/hooks.tests.js | 2 +- .../auth0/handlers/organizations.tests.js | 2 +- test/tools/auth0/handlers/themes.tests.js | 5 +-- test/utils.js | 36 +++++++++---------- 8 files changed, 27 insertions(+), 30 deletions(-) diff --git a/test/context/context.test.js b/test/context/context.test.js index 2555f5ed..e8cca65e 100644 --- a/test/context/context.test.js +++ b/test/context/context.test.js @@ -1,4 +1,5 @@ import path from 'path'; +import { AuthApiError } from 'auth0'; import fs from 'fs-extra'; import chai, { expect } from 'chai'; import sinon from 'sinon'; @@ -10,7 +11,6 @@ import { setupContext, filterOnlyIncludedResourceTypes } from '../../src/context import directoryContext from '../../src/context/directory'; import yamlContext from '../../src/context/yaml'; import { cleanThenMkdir, testDataDir, createDir } from '../utils'; -import {AuthApiError} from "auth0"; chai.use(chaiAsPromised); chai.use(sinonChai); @@ -21,7 +21,7 @@ const config = { AUTH0_ACCESS_TOKEN: 'fake', }; -export const TEST_PRIVATE_KEY = `-----BEGIN PRIVATE KEY----- +const TEST_PRIVATE_KEY = `-----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDx+hc8imR4soBV 9WD9bRey14VqzZfCvEAYbSWctLeZz9xhz+kP+mWxHvv07wi3/ZiYcVYgOYIhxbnt ugNp78oCFUEsdRrdq2juHlqBtjaYpINQSOqNaKUBt3JRkPPxRLyhwCZ6HJVYy5Wp diff --git a/test/tools/auth0/handlers/actions.tests.js b/test/tools/auth0/handlers/actions.tests.js index 1fe8ea3f..16d48199 100644 --- a/test/tools/auth0/handlers/actions.tests.js +++ b/test/tools/auth0/handlers/actions.tests.js @@ -138,7 +138,7 @@ describe('#actions handler', () => { expect(data.name).to.equal('action-test'); expect(data.supported_triggers[0].id).to.equal('post-login'); expect(data.supported_triggers[0].version).to.equal('v1'); - return Promise.resolve({ data: { ...data, id: actionId }}); + return Promise.resolve({ data: { ...data, id: actionId } }); }, update: () => Promise.resolve({ data: [] }), delete: () => Promise.resolve({ data: [] }), @@ -259,7 +259,7 @@ describe('#actions handler', () => { const auth0 = { actions: { - getAll: () => mockPagedData({ include_totals: true}, 'actions', actionsData), + getAll: () => mockPagedData({ include_totals: true }, 'actions', actionsData), }, }; diff --git a/test/tools/auth0/handlers/clients.tests.js b/test/tools/auth0/handlers/clients.tests.js index 99f9d83d..0cde218b 100644 --- a/test/tools/auth0/handlers/clients.tests.js +++ b/test/tools/auth0/handlers/clients.tests.js @@ -115,7 +115,7 @@ describe('#clients handler', () => { return Promise.resolve({ data }); }, - delete: () => Promise.resolve({ data: []}), + delete: () => Promise.resolve({ data: [] }), getAll: (params) => mockPagedData(params, 'clients', [ { client_id: 'client1', diff --git a/test/tools/auth0/handlers/guardianFactorTemplates.tests.js b/test/tools/auth0/handlers/guardianFactorTemplates.tests.js index 1e311d8b..0fb3f363 100644 --- a/test/tools/auth0/handlers/guardianFactorTemplates.tests.js +++ b/test/tools/auth0/handlers/guardianFactorTemplates.tests.js @@ -59,7 +59,7 @@ describe('#guardianFactorTemplates handler', () => { it('should get guardianFactorTemplates', async () => { const auth0 = { guardian: { - getSmsFactorTemplates: (params) => ({ data: { ...params, enrollment_message: 'test' }}), + getSmsFactorTemplates: (params) => ({ data: { ...params, enrollment_message: 'test' } }), }, pool, }; diff --git a/test/tools/auth0/handlers/hooks.tests.js b/test/tools/auth0/handlers/hooks.tests.js index d9e1667c..de620639 100644 --- a/test/tools/auth0/handlers/hooks.tests.js +++ b/test/tools/auth0/handlers/hooks.tests.js @@ -228,7 +228,7 @@ describe('#hooks handler', () => { const auth0 = { hooks: { getAll: (params) => mockPagedData(params, 'hooks', hooksData), - get: ({ id }) => Promise.resolve({ data: { ...hooksData[id], code }}), + get: ({ id }) => Promise.resolve({ data: { ...hooksData[id], code } }), getSecrets: ({ id }) => Promise.resolve({ data: { SECRET: `hook-${id}-secret` } }), }, }; diff --git a/test/tools/auth0/handlers/organizations.tests.js b/test/tools/auth0/handlers/organizations.tests.js index 10f12e8c..80beeb93 100644 --- a/test/tools/auth0/handlers/organizations.tests.js +++ b/test/tools/auth0/handlers/organizations.tests.js @@ -327,7 +327,7 @@ describe('#organizations handler', () => { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(params.connection_id).to.equal(sampleEnabledConnection2.connection_id); - return Promise.resolve({ data: undefined}); + return Promise.resolve({ data: undefined }); }, updateEnabledConnection: (params, data) => { expect(params).to.be.an('object'); diff --git a/test/tools/auth0/handlers/themes.tests.js b/test/tools/auth0/handlers/themes.tests.js index 90827a6a..8e9ad581 100644 --- a/test/tools/auth0/handlers/themes.tests.js +++ b/test/tools/auth0/handlers/themes.tests.js @@ -1,10 +1,7 @@ -//import chai from "chai"; - const { expect, assert, use } = require('chai'); const { omit, cloneDeep } = require('lodash'); -const { default: ThemesHandler } = require('../../../../src/tools/auth0/handlers/themes'); - const chaiAsPromised = require('chai-as-promised'); +const { default: ThemesHandler } = require('../../../../src/tools/auth0/handlers/themes'); use(chaiAsPromised); diff --git a/test/utils.js b/test/utils.js index 03780ed1..e13a938e 100644 --- a/test/utils.js +++ b/test/utils.js @@ -13,6 +13,18 @@ chai.use(chaiAsPromised); export const localDir = 'local'; export const testDataDir = path.resolve(localDir, 'testData'); +export function mockPagedData(params, key, data) { + return params?.include_totals + ? { + data: { + [key]: data, + }, + } + : { + data, + }; +} + export function mockMgmtClient() { // Fake Mgmt Client. Bit hacky but good enough for now. return { @@ -34,10 +46,10 @@ export function mockMgmtClient() { clientGrants: { getAll: (params) => (mockPagedData(params, 'client_grants', [])) }, guardian: { getFactors: () => ({ data: [] }), - getSmsFactorProviderTwilio: () => ({data: []}), - getPushNotificationProviderSNS: () => ({data: []}), - getSmsFactorTemplates: () => ({data: []}), - getPhoneFactorMessageTypes: () => ({ data: { message_types: ['sms'] }}), + getSmsFactorProviderTwilio: () => ({ data: [] }), + getPushNotificationProviderSNS: () => ({ data: [] }), + getSmsFactorTemplates: () => ({ data: [] }), + getPhoneFactorMessageTypes: () => ({ data: { message_types: ['sms'] } }), getPhoneFactorSelectedProvider: () => ({ data: { provider: 'twilio' } }), getPolicies: () => ({ data: [] }), }, @@ -89,7 +101,7 @@ export function mockMgmtClient() { } }) ), - getCustomTextByLanguage: () => Promise.resolve({data: {} }), + getCustomTextByLanguage: () => Promise.resolve({ data: {} }), }, migrations: { getMigrations: () => ({ @@ -115,7 +127,7 @@ export function mockMgmtClient() { new Promise((res) => { res({ data: {} }); }), - get: () => ({ data: {}}), + get: () => ({ data: {} }), }, customDomains: { getAll: (params) => mockPagedData(params, 'custom_domains', []) }, }; @@ -139,15 +151,3 @@ export function createDir(repoDir, files) { }); }); } - -export function mockPagedData(params, key, data) { - return params?.include_totals - ? { - data: { - [key]: data, - }, - } - : { - data, - }; -} From ce803614f1d6870f4d32e6080c904504afe47697 Mon Sep 17 00:00:00 2001 From: frederikprijck Date: Tue, 5 Sep 2023 12:16:52 +0200 Subject: [PATCH 5/9] fix tests --- .../auth0/handlers/emailProvider.tests.js | 26 +++++-------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/test/tools/auth0/handlers/emailProvider.tests.js b/test/tools/auth0/handlers/emailProvider.tests.js index 15d32d5b..c024c1e1 100644 --- a/test/tools/auth0/handlers/emailProvider.tests.js +++ b/test/tools/auth0/handlers/emailProvider.tests.js @@ -6,14 +6,12 @@ describe('#emailProvider handler', () => { it('should configure email provider', async () => { const auth0 = { emails: { - configure: (provider, data) => { - expect(provider).to.be.an('object'); + configure: (data) => { expect(data).to.be.an('object'); - expect(provider.name).to.equal('someProvider'); expect(data.name).to.equal('someProvider'); - return Promise.resolve({ data: { provider, data } }); + return Promise.resolve({ data }); }, - update: (provider, data) => Promise.resolve({ data: { provider, data } }), + update: (data) => Promise.resolve({ data }), delete: () => Promise.resolve({ data: null }), get: () => ({ data: [] }), }, @@ -28,14 +26,9 @@ describe('#emailProvider handler', () => { it('should update email provider', async () => { const auth0 = { emails: { - configure: (provider, data) => { - expect(provider).to.be('undefined'); - return Promise.resolve({ data }); - }, - update: (provider, data) => { - expect(provider).to.be.an('object'); + configure: (data) => Promise.resolve({ data }), + update: (data) => { expect(data).to.be.an('object'); - expect(provider.name).to.equal('someProvider'); expect(data.name).to.equal('someProvider'); expect(data.credentials).to.equal('password'); return Promise.resolve({ data }); @@ -119,18 +112,13 @@ describe('#emailProvider handler', () => { it('should delete email provider and create another one instead', async () => { const auth0 = { emails: { - configure: (provider, data) => { - expect(provider).to.be.an('object'); + configure: (data) => { expect(data).to.be.an('object'); - expect(provider.name).to.equal('someProvider'); expect(data.name).to.equal('someProvider'); expect(data.credentials).to.equal('password'); return Promise.resolve({ data }); }, - update: (provider, data) => { - expect(provider).to.be('undefined'); - return Promise.resolve({ data }); - }, + update: (data) => Promise.resolve({ data }), delete: () => Promise.resolve({ data: null }), get: () => ({ data: { name: 'oldProvider', enabled: true } }), }, From da248d07f6b65c72d2927d72f50d9bef96251106 Mon Sep 17 00:00:00 2001 From: Adam Mcgrath Date: Wed, 6 Sep 2023 14:30:31 +0100 Subject: [PATCH 6/9] fix package-lock --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index d1eb4758..126aea67 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "ajv": "^6.12.6", - "auth0": "file:../node-auth0/auth0-4.0.0-beta.8.tgz", + "auth0": "file:./auth0-4.0.0-beta.8.tgz", "dot-prop": "^5.2.0", "fs-extra": "^10.1.0", "global-agent": "^2.1.12", @@ -1256,7 +1256,7 @@ }, "node_modules/auth0": { "version": "4.0.0-beta.8", - "resolved": "file:../node-auth0/auth0-4.0.0-beta.8.tgz", + "resolved": "file:auth0-4.0.0-beta.8.tgz", "integrity": "sha512-2e0A4Bjxgt28rIaJTZYKLRKL3RsNnYV5QBtIIru4q820HH9B9Z9/xL+8QnVoedVQGtdBagyjE6f+MU3hxaBf8w==", "license": "MIT", "dependencies": { @@ -7245,7 +7245,7 @@ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, "auth0": { - "version": "file:../node-auth0/auth0-4.0.0-beta.8.tgz", + "version": "file:auth0-4.0.0-beta.8.tgz", "integrity": "sha512-2e0A4Bjxgt28rIaJTZYKLRKL3RsNnYV5QBtIIru4q820HH9B9Z9/xL+8QnVoedVQGtdBagyjE6f+MU3hxaBf8w==", "requires": { "jose": "^4.13.2", From 0c70611b6c541966c919c5a7f86d5686a2dca785 Mon Sep 17 00:00:00 2001 From: Adam Mcgrath Date: Wed, 6 Sep 2023 18:03:12 +0100 Subject: [PATCH 7/9] fix e2e tests --- auth0-4.0.0-beta.8.tgz | Bin 225751 -> 0 bytes package-lock.json | 98 ++++++- package.json | 3 +- src/tools/auth0/handlers/pages.ts | 2 +- test/e2e/e2e.test.ts | 4 + ...sources-if-AUTH0_ALLOW_DELETE-is-true.json | 262 ++++++++++++------ ...ources-if-AUTH0_ALLOW_DELETE-is-false.json | 216 ++++++++++----- ...ould-deploy-without-throwing-an-error.json | 78 ++++-- ...-and-deploy-without-throwing-an-error.json | 157 ++++++++--- ...should-dump-without-throwing-an-error.json | 28 +- ...sources-listed-in-AUTH0_INCLUDED_ONLY.json | 4 +- ...reserve-keywords-for-directory-format.json | 8 +- ...uld-preserve-keywords-for-yaml-format.json | 8 +- 13 files changed, 625 insertions(+), 243 deletions(-) delete mode 100644 auth0-4.0.0-beta.8.tgz diff --git a/auth0-4.0.0-beta.8.tgz b/auth0-4.0.0-beta.8.tgz deleted file mode 100644 index 710d941d3af56ccaddc3a95e56238d43313c9ec3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225751 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 z%0D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�uV#0D()ML;Ntyx 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%0A~Fmn%9n=NHA0ia?Yzr$G-*7j}h$?=vRY#}tW* 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 Qod7U19k;NM`k0XZ3m&WE!2kdN diff --git a/package-lock.json b/package-lock.json index 126aea67..836ab61a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,6 @@ "license": "MIT", "dependencies": { "ajv": "^6.12.6", - "auth0": "file:./auth0-4.0.0-beta.8.tgz", "dot-prop": "^5.2.0", "fs-extra": "^10.1.0", "global-agent": "^2.1.12", @@ -32,6 +31,7 @@ "@types/mocha": "^10.0.0", "@types/nconf": "^0.10.3", "@typescript-eslint/parser": "^5.30.3", + "auth0": "^4.0.0-beta.9", "chai": "^4.3.7", "chai-as-promised": "^7.1.1", "eslint": "^7.28.0", @@ -42,6 +42,7 @@ "kacl": "^1.1.1", "mocha": "^10.1.0", "nock": "^13.2.9", + "node-fetch": "^2.7.0", "nyc": "^15.0.1", "prettier": "^2.6.2", "pretty-quick": "^3.1.3", @@ -1255,10 +1256,10 @@ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, "node_modules/auth0": { - "version": "4.0.0-beta.8", - "resolved": "file:auth0-4.0.0-beta.8.tgz", - "integrity": "sha512-2e0A4Bjxgt28rIaJTZYKLRKL3RsNnYV5QBtIIru4q820HH9B9Z9/xL+8QnVoedVQGtdBagyjE6f+MU3hxaBf8w==", - "license": "MIT", + "version": "4.0.0-beta.9", + "resolved": "https://registry.npmjs.org/auth0/-/auth0-4.0.0-beta.9.tgz", + "integrity": "sha512-OE91SmGUZLP6pyR3ynfeJTgOnqd22Igyawe8pWNQgxgsGyszRbNjzVJ/bdsYaTELYsoGscGNfOWO4DFfBRv5TQ==", + "dev": true, "dependencies": { "jose": "^4.13.2", "uuid": "^9.0.0" @@ -1271,6 +1272,7 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "dev": true, "bin": { "uuid": "dist/bin/uuid" } @@ -3587,6 +3589,7 @@ "version": "4.14.4", "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", + "dev": true, "funding": { "url": "https://github.com/sponsors/panva" } @@ -4230,6 +4233,26 @@ "node": ">= 10.13" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", @@ -5685,6 +5708,12 @@ "node": ">=8.0" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "node_modules/triple-beam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", @@ -6027,6 +6056,22 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", @@ -7245,8 +7290,10 @@ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, "auth0": { - "version": "file:auth0-4.0.0-beta.8.tgz", - "integrity": "sha512-2e0A4Bjxgt28rIaJTZYKLRKL3RsNnYV5QBtIIru4q820HH9B9Z9/xL+8QnVoedVQGtdBagyjE6f+MU3hxaBf8w==", + "version": "4.0.0-beta.9", + "resolved": "https://registry.npmjs.org/auth0/-/auth0-4.0.0-beta.9.tgz", + "integrity": "sha512-OE91SmGUZLP6pyR3ynfeJTgOnqd22Igyawe8pWNQgxgsGyszRbNjzVJ/bdsYaTELYsoGscGNfOWO4DFfBRv5TQ==", + "dev": true, "requires": { "jose": "^4.13.2", "uuid": "^9.0.0" @@ -7255,7 +7302,8 @@ "uuid": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "dev": true } } }, @@ -8967,7 +9015,8 @@ "jose": { "version": "4.14.4", "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==" + "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", + "dev": true }, "js-tokens": { "version": "4.0.0", @@ -9460,6 +9509,15 @@ "propagate": "^2.0.0" } }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, "node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", @@ -10524,6 +10582,12 @@ "is-number": "^7.0.0" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "triple-beam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", @@ -10770,6 +10834,22 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", diff --git a/package.json b/package.json index c7b391ab..279b8b34 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ "homepage": "https://github.com/auth0/auth0-deploy-cli#readme", "dependencies": { "ajv": "^6.12.6", - "auth0": "file:./auth0-4.0.0-beta.8.tgz", "dot-prop": "^5.2.0", "fs-extra": "^10.1.0", "global-agent": "^2.1.12", @@ -52,6 +51,7 @@ "@types/mocha": "^10.0.0", "@types/nconf": "^0.10.3", "@typescript-eslint/parser": "^5.30.3", + "auth0": "^4.0.0-beta.9", "chai": "^4.3.7", "chai-as-promised": "^7.1.1", "eslint": "^7.28.0", @@ -62,6 +62,7 @@ "kacl": "^1.1.1", "mocha": "^10.1.0", "nock": "^13.2.9", + "node-fetch": "^2.7.0", "nyc": "^15.0.1", "prettier": "^2.6.2", "pretty-quick": "^3.1.3", diff --git a/src/tools/auth0/handlers/pages.ts b/src/tools/auth0/handlers/pages.ts index 47f10dfa..61c121fd 100644 --- a/src/tools/auth0/handlers/pages.ts +++ b/src/tools/auth0/handlers/pages.ts @@ -61,7 +61,7 @@ export default class PagesHandler extends DefaultHandler { } await this.client.clients.update( - { id: globalClient[0].client_id }, + { client_id: globalClient[0].client_id }, { custom_login_page: page.html, custom_login_page_on: page.enabled, diff --git a/test/e2e/e2e.test.ts b/test/e2e/e2e.test.ts index 5eba2318..970c5937 100644 --- a/test/e2e/e2e.test.ts +++ b/test/e2e/e2e.test.ts @@ -7,6 +7,10 @@ import { load as yamlLoad } from 'js-yaml'; import { setupRecording, testNameToWorkingDirectory } from './e2e-utils'; import { dump, deploy } from '../../src'; import { AssetTypes } from '../../src/types'; +import fetch from 'node-fetch'; + +// Use node.http for recording library +global.fetch = fetch; const shouldUseRecordings = process.env['AUTH0_HTTP_RECORDINGS'] === 'lockdown'; const AUTH0_DOMAIN = shouldUseRecordings diff --git a/test/e2e/recordings/should-deploy-while-deleting-resources-if-AUTH0_ALLOW_DELETE-is-true.json b/test/e2e/recordings/should-deploy-while-deleting-resources-if-AUTH0_ALLOW_DELETE-is-true.json index 7f6958d6..47f6fb1d 100644 --- a/test/e2e/recordings/should-deploy-while-deleting-resources-if-AUTH0_ALLOW_DELETE-is-true.json +++ b/test/e2e/recordings/should-deploy-while-deleting-resources-if-AUTH0_ALLOW_DELETE-is-true.json @@ -2,7 +2,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -26,7 +26,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -72,7 +72,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -87,7 +87,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -102,7 +102,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?is_global=true&include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?is_global=true&include_totals=true", "body": "", "status": 200, "response": { @@ -188,6 +188,79 @@ }, "rawHeaders": [], "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/clients/GIW99EUCF9DFExh77WPMyTMzT8NN4J3A", + "body": { + "name": "Deploy CLI", + "app_type": "non_interactive", + "cross_origin_auth": false, + "custom_login_page_on": true, + "grant_types": ["client_credentials"], + "is_first_party": true, + "is_token_endpoint_ip_header_trusted": false, + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000 + }, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false, + "token_endpoint_auth_method": "client_secret_post" + }, + "status": 200, + "response": { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Deploy CLI", + "is_first_party": true, + "oidc_conformant": true, + "sso_disabled": false, + "cross_origin_auth": false, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, + "rotation_type": "non-rotating" + }, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "GIW99EUCF9DFExh77WPMyTMzT8NN4J3A", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, + "rawHeaders": [], + "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", @@ -274,7 +347,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/resource-servers?include_totals=true&page=0&per_page=100", + "path": "/api/v2/resource-servers?include_totals=true", "body": "", "status": 200, "response": { @@ -863,7 +936,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -1348,7 +1421,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/clients/xLgpNb56pwyBvNmyd67xtoMb4G2xxy9W", - "body": {}, "status": 204, "response": "", "rawHeaders": [], @@ -2061,7 +2133,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/emails/provider?enabled=false&name=mandrill", + "path": "/api/v2/emails/provider", "body": { "name": "mandrill", "credentials": { @@ -2324,7 +2396,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/log-streams?paginate=false", + "path": "/api/v2/log-streams", "body": "", "status": 200, "response": [ @@ -2546,7 +2618,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -2995,7 +3067,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -3080,7 +3152,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -3166,7 +3238,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/connections/con_FJVIi5jt9aQXvioG", - "body": {}, "status": 202, "response": { "deleted_at": "2023-08-03T13:40:23.710Z" @@ -3335,7 +3406,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -3784,7 +3855,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -3869,7 +3940,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -4052,7 +4123,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -4501,7 +4572,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/client-grants?include_totals=true&page=0&per_page=100", + "path": "/api/v2/client-grants?include_totals=true", "body": "", "status": 200, "response": { @@ -5492,7 +5563,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles?include_totals=true", "body": "", "status": 200, "response": { @@ -5528,7 +5599,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_xTLwZuLtKXu0jnMc/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_xTLwZuLtKXu0jnMc/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -5543,7 +5614,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_ESfW6pVGwB3qwt5U/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_ESfW6pVGwB3qwt5U/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -5558,7 +5629,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_LVvLNdUbB9j5bxW9/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_LVvLNdUbB9j5bxW9/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -5573,7 +5644,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_JT0zo8zMuhZlvvnP/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_JT0zo8zMuhZlvvnP/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -5656,7 +5727,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -5786,7 +5857,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -5849,7 +5920,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "POST", "path": "/api/v2/actions/actions/5cb59b2c-b643-414a-b1f6-af7607f1fa08/deploy", - "body": {}, "status": 200, "response": { "code": "/**\n * Handler that will be called during the execution of a PostLogin flow.\n *\n * @param {Event} event - Details about the user and the context in which they are logging in.\n * @param {PostLoginAPI} api - Interface whose methods can be used to change the behavior of the login.\n */\nexports.onExecutePostLogin = async (event, api) => {\n console.log('Some custom action!');\n};\n\n/**\n * Handler that will be invoked when this action is resuming after an external redirect. If your\n * onExecutePostLogin function does not perform a redirect, this function can be safely ignored.\n *\n * @param {Event} event - Details about the user and the context in which they are logging in.\n * @param {PostLoginAPI} api - Interface whose methods can be used to change the behavior of the login.\n */\n// exports.onContinuePostLogin = async (event, api) => {\n// };\n", @@ -5969,7 +6039,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -6199,7 +6269,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -6223,7 +6293,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -6248,7 +6318,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/rules/rul_nJxB8AKfZ0pr4grS", - "body": {}, "status": 204, "response": "", "rawHeaders": [], @@ -6257,7 +6326,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -6272,7 +6341,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -6287,7 +6356,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/resource-servers?include_totals=true&page=0&per_page=100", + "path": "/api/v2/resource-servers?include_totals=true", "body": "", "status": 200, "response": { @@ -6876,7 +6945,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -7295,7 +7364,15 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/clients/uKnnc1YsLCvq2Wsegx1NRcchvFWYnQec", - "body": {}, + "status": 204, + "response": "", + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "DELETE", + "path": "/api/v2/clients/GIW99EUCF9DFExh77WPMyTMzT8NN4J3A", "status": 204, "response": "", "rawHeaders": [], @@ -7305,7 +7382,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/clients/NxYlj8noJQggPTwWiOwUgPmA3LEIiyaA", - "body": {}, "status": 204, "response": "", "rawHeaders": [], @@ -7315,7 +7391,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/clients/0QC0GcWTpHmnWDrqsDjwfG5hBxq0bGHX", - "body": {}, "status": 204, "response": "", "rawHeaders": [], @@ -7325,7 +7400,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/clients/XGPT8mgzUSbs9GrgnFm8D3QKjp7CZT1n", - "body": {}, "status": 204, "response": "", "rawHeaders": [], @@ -7335,7 +7409,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/clients/3mwBwDe6Y1AwyzC1g7qSto8vmDFKxVC1", - "body": {}, "status": 204, "response": "", "rawHeaders": [], @@ -7345,7 +7418,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/clients/W9DtiKy4raUFQUlYiXLf4eXuzWwneBcp", - "body": {}, "status": 204, "response": "", "rawHeaders": [], @@ -7355,7 +7427,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/clients/kxctQEaRpTc8pb8rq3DL2Eur02OKfaL9", - "body": {}, "status": 204, "response": "", "rawHeaders": [], @@ -7593,7 +7664,21 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/sms/selected-provider", + "path": "/api/v2/guardian/factors/phone/selected-provider", + "body": { + "provider": "auth0" + }, + "status": 200, + "response": { + "provider": "auth0" + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PUT", + "path": "/api/v2/guardian/factors/phone/selected-provider", "body": { "provider": "auth0" }, @@ -7636,7 +7721,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/log-streams?paginate=false", + "path": "/api/v2/log-streams", "body": "", "status": 200, "response": [ @@ -7804,7 +7889,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/log-streams/lst_0000000000011988", - "body": {}, "status": 204, "response": "", "rawHeaders": [], @@ -7814,7 +7898,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/log-streams/lst_0000000000011989", - "body": {}, "status": 204, "response": "", "rawHeaders": [], @@ -7823,7 +7906,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -7952,7 +8035,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -8013,7 +8096,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -8075,7 +8158,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/connections/con_WTCElYGe42A3U2wC", - "body": {}, "status": 202, "response": { "deleted_at": "2023-08-03T13:40:38.418Z" @@ -8137,7 +8219,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -8266,7 +8348,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -8322,7 +8404,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -8379,7 +8461,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/connections/con_CYO8cRRtMfH8H2TN", - "body": {}, "status": 202, "response": { "deleted_at": "2023-08-03T13:40:39.353Z" @@ -8390,7 +8471,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -8519,7 +8600,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/client-grants?include_totals=true&page=0&per_page=100", + "path": "/api/v2/client-grants?include_totals=true", "body": "", "status": 200, "response": { @@ -8678,7 +8759,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles?include_totals=true", "body": "", "status": 200, "response": { @@ -8714,7 +8795,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_xTLwZuLtKXu0jnMc/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_xTLwZuLtKXu0jnMc/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -8729,7 +8810,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_ESfW6pVGwB3qwt5U/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_ESfW6pVGwB3qwt5U/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -8744,7 +8825,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_LVvLNdUbB9j5bxW9/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_LVvLNdUbB9j5bxW9/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -8759,7 +8840,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_JT0zo8zMuhZlvvnP/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_JT0zo8zMuhZlvvnP/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -8775,7 +8856,24 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/roles/rol_xTLwZuLtKXu0jnMc", - "body": {}, + "status": 200, + "response": {}, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "DELETE", + "path": "/api/v2/client-grants/cgr_iodSzvwxqm51tLZF", + "status": 200, + "response": {}, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "DELETE", + "path": "/api/v2/client-grants/cgr_iodSzvwxqm51tLZF", "status": 200, "response": {}, "rawHeaders": [], @@ -8785,7 +8883,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/roles/rol_ESfW6pVGwB3qwt5U", - "body": {}, "status": 200, "response": {}, "rawHeaders": [], @@ -8795,7 +8892,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/roles/rol_LVvLNdUbB9j5bxW9", - "body": {}, "status": 200, "response": {}, "rawHeaders": [], @@ -8805,7 +8901,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/roles/rol_JT0zo8zMuhZlvvnP", - "body": {}, "status": 200, "response": {}, "rawHeaders": [], @@ -8814,7 +8909,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -8877,7 +8972,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/actions/actions/5cb59b2c-b643-414a-b1f6-af7607f1fa08?force=true", - "body": {}, "status": 204, "response": "", "rawHeaders": [], @@ -8886,7 +8980,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -8980,7 +9074,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -9019,7 +9113,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/organizations/org_Ni2g2n47tR56fXR8", - "body": {}, "status": 204, "response": "", "rawHeaders": [], @@ -9029,7 +9122,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", "path": "/api/v2/organizations/org_z4Jobv6iLGqQROXe", - "body": {}, "status": 204, "response": "", "rawHeaders": [], @@ -9114,7 +9206,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -9139,7 +9231,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -9154,7 +9246,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?is_global=true&include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?is_global=true&include_totals=true", "body": "", "status": 200, "response": { @@ -9272,7 +9364,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/resource-servers?include_totals=true&page=0&per_page=100", + "path": "/api/v2/resource-servers?include_totals=true", "body": "", "status": 200, "response": { @@ -9861,7 +9953,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -9959,7 +10051,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -9997,7 +10089,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -10293,7 +10385,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/client-grants?include_totals=true&page=0&per_page=100", + "path": "/api/v2/client-grants?include_totals=true", "body": "", "status": 200, "response": { @@ -10551,7 +10643,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/guardian/factors/sms/selected-provider", + "path": "/api/v2/guardian/factors/phone/selected-provider", "body": "", "status": 200, "response": { @@ -10575,7 +10667,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles?include_totals=true", "body": "", "status": 200, "response": { @@ -10964,7 +11056,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -11332,7 +11424,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/log-streams?paginate=false", + "path": "/api/v2/log-streams", "body": "", "status": 200, "response": [], @@ -11342,7 +11434,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/custom-domains?paginate=false", + "path": "/api/v2/custom-domains", "body": "", "status": 200, "response": [], @@ -11364,4 +11456,4 @@ "rawHeaders": [], "responseIsBinary": false } -] \ No newline at end of file +] diff --git a/test/e2e/recordings/should-deploy-without-deleting-resources-if-AUTH0_ALLOW_DELETE-is-false.json b/test/e2e/recordings/should-deploy-without-deleting-resources-if-AUTH0_ALLOW_DELETE-is-false.json index 4527ed49..189cf42b 100644 --- a/test/e2e/recordings/should-deploy-without-deleting-resources-if-AUTH0_ALLOW_DELETE-is-false.json +++ b/test/e2e/recordings/should-deploy-without-deleting-resources-if-AUTH0_ALLOW_DELETE-is-false.json @@ -2,7 +2,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -17,7 +17,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -55,7 +55,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -70,7 +70,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -85,7 +85,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?is_global=true&include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?is_global=true&include_totals=true", "body": "", "status": 200, "response": { @@ -257,7 +257,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/resource-servers?include_totals=true&page=0&per_page=100", + "path": "/api/v2/resource-servers?include_totals=true", "body": "", "status": 200, "response": { @@ -846,7 +846,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -1693,7 +1693,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "POST", - "path": "/api/v2/emails/provider?enabled=false&name=mandrill", + "path": "/api/v2/emails/provider", "body": { "name": "mandrill", "credentials": { @@ -1841,7 +1841,21 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/sms/selected-provider", + "path": "/api/v2/guardian/factors/phone/selected-provider", + "body": { + "provider": "auth0" + }, + "status": 200, + "response": { + "provider": "auth0" + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PUT", + "path": "/api/v2/guardian/factors/phone/selected-provider", "body": { "provider": "auth0" }, @@ -1984,7 +1998,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/log-streams?paginate=false", + "path": "/api/v2/log-streams", "body": "", "status": 200, "response": [], @@ -2123,7 +2137,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -2638,7 +2652,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -2676,7 +2690,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -2817,7 +2831,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -3332,7 +3346,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -3439,7 +3453,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -3644,7 +3658,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -4159,7 +4173,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/client-grants?include_totals=true&page=0&per_page=100", + "path": "/api/v2/client-grants?include_totals=true", "body": "", "status": 200, "response": { @@ -4880,7 +4894,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles?include_totals=true", "body": "", "status": 200, "response": { @@ -4963,7 +4977,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -5015,7 +5029,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -5049,7 +5063,6 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "POST", "path": "/api/v2/actions/actions/5cb59b2c-b643-414a-b1f6-af7607f1fa08/deploy", - "body": {}, "status": 200, "response": { "code": "/**\n * Handler that will be called during the execution of a PostLogin flow.\n *\n * @param {Event} event - Details about the user and the context in which they are logging in.\n * @param {PostLoginAPI} api - Interface whose methods can be used to change the behavior of the login.\n */\nexports.onExecutePostLogin = async (event, api) => {\n console.log('Some custom action!');\n};\n\n/**\n * Handler that will be invoked when this action is resuming after an external redirect. If your\n * onExecutePostLogin function does not perform a redirect, this function can be safely ignored.\n *\n * @param {Event} event - Details about the user and the context in which they are logging in.\n * @param {PostLoginAPI} api - Interface whose methods can be used to change the behavior of the login.\n */\n// exports.onContinuePostLogin = async (event, api) => {\n// };\n", @@ -5115,7 +5128,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -5369,7 +5382,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -5393,7 +5406,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -5417,7 +5430,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -5432,7 +5445,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -5447,7 +5460,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/resource-servers?include_totals=true&page=0&per_page=100", + "path": "/api/v2/resource-servers?include_totals=true", "body": "", "status": 200, "response": { @@ -6036,7 +6049,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -6900,7 +6913,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/log-streams?paginate=false", + "path": "/api/v2/log-streams", "body": "", "status": 200, "response": [ @@ -6970,7 +6983,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -7485,7 +7498,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -7571,7 +7584,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -7737,7 +7750,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -8252,7 +8265,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -8359,7 +8372,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -8466,7 +8479,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -8981,7 +8994,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/client-grants?include_totals=true&page=0&per_page=100", + "path": "/api/v2/client-grants?include_totals=true", "body": "", "status": 200, "response": { @@ -9414,7 +9427,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles?include_totals=true", "body": "", "status": 200, "response": { @@ -9450,7 +9463,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_xTLwZuLtKXu0jnMc/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_xTLwZuLtKXu0jnMc/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -9465,7 +9478,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_ESfW6pVGwB3qwt5U/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_ESfW6pVGwB3qwt5U/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -9480,7 +9493,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_LVvLNdUbB9j5bxW9/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_LVvLNdUbB9j5bxW9/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -9495,7 +9508,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_JT0zo8zMuhZlvvnP/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_JT0zo8zMuhZlvvnP/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -9510,7 +9523,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -9572,7 +9585,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -9715,7 +9728,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -9898,7 +9911,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -9932,7 +9945,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -9947,7 +9960,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?is_global=true&include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?is_global=true&include_totals=true", "body": "", "status": 200, "response": { @@ -10065,7 +10078,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/resource-servers?include_totals=true&page=0&per_page=100", + "path": "/api/v2/resource-servers?include_totals=true", "body": "", "status": 200, "response": { @@ -10654,7 +10667,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -11138,7 +11151,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -11224,7 +11237,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -11589,7 +11602,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/client-grants?include_totals=true&page=0&per_page=100", + "path": "/api/v2/client-grants?include_totals=true", "body": "", "status": 200, "response": { @@ -12121,7 +12134,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/guardian/factors/sms/selected-provider", + "path": "/api/v2/guardian/factors/phone/selected-provider", "body": "", "status": 200, "response": { @@ -12145,7 +12158,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles?include_totals=true", "body": "", "status": 200, "response": { @@ -12181,7 +12194,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_xTLwZuLtKXu0jnMc/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_xTLwZuLtKXu0jnMc/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -12196,7 +12209,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_ESfW6pVGwB3qwt5U/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_ESfW6pVGwB3qwt5U/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -12211,7 +12224,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_LVvLNdUbB9j5bxW9/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_LVvLNdUbB9j5bxW9/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -12226,7 +12239,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_JT0zo8zMuhZlvvnP/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_JT0zo8zMuhZlvvnP/permissions?include_totals=true", "body": "", "status": 200, "response": { @@ -12615,7 +12628,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -13086,7 +13099,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/log-streams?paginate=false", + "path": "/api/v2/log-streams", "body": "", "status": 200, "response": [ @@ -13156,7 +13169,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/custom-domains?paginate=false", + "path": "/api/v2/custom-domains", "body": "", "status": 200, "response": [], @@ -13177,5 +13190,78 @@ }, "rawHeaders": [], "responseIsBinary": false - } -] \ No newline at end of file + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/clients/GIW99EUCF9DFExh77WPMyTMzT8NN4J3A", + "body": { + "name": "Deploy CLI", + "app_type": "non_interactive", + "cross_origin_auth": false, + "custom_login_page_on": true, + "grant_types": ["client_credentials"], + "is_first_party": true, + "is_token_endpoint_ip_header_trusted": false, + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000 + }, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false, + "token_endpoint_auth_method": "client_secret_post" + }, + "status": 200, + "response": { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Deploy CLI", + "is_first_party": true, + "oidc_conformant": true, + "sso_disabled": false, + "cross_origin_auth": false, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, + "rotation_type": "non-rotating" + }, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "GIW99EUCF9DFExh77WPMyTMzT8NN4J3A", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, + "rawHeaders": [], + "responseIsBinary": false + } +] diff --git a/test/e2e/recordings/should-deploy-without-throwing-an-error.json b/test/e2e/recordings/should-deploy-without-throwing-an-error.json index 98f28c22..6e1a4dc9 100644 --- a/test/e2e/recordings/should-deploy-without-throwing-an-error.json +++ b/test/e2e/recordings/should-deploy-without-throwing-an-error.json @@ -2,7 +2,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -17,7 +17,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -32,7 +32,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -47,7 +47,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -62,7 +62,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/resource-servers?include_totals=true&page=0&per_page=100", + "path": "/api/v2/resource-servers?include_totals=true", "body": "", "status": 200, "response": { @@ -651,7 +651,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -873,6 +873,40 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/clients/GIW99EUCF9DFExh77WPMyTMzT8NN4J3A", + "body": { + "name": "Deploy CLI", + "app_type": "non_interactive", + "cross_origin_auth": false, + "custom_login_page_on": true, + "grant_types": ["client_credentials"], + "is_first_party": true, + "is_token_endpoint_ip_header_trusted": false, + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000 + }, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false, + "token_endpoint_auth_method": "client_secret_post" + }, + "status": 200, + "response": {}, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -1013,7 +1047,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/sms/selected-provider", + "path": "/api/v2/guardian/factors/phone/selected-provider", "body": { "provider": "auth0" }, @@ -1153,7 +1187,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/log-streams?paginate=false", + "path": "/api/v2/log-streams", "body": "", "status": 200, "response": [], @@ -1163,7 +1197,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/custom-domains?paginate=false", + "path": "/api/v2/custom-domains", "body": "", "status": 200, "response": [], @@ -1173,7 +1207,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -1326,7 +1360,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -1364,7 +1398,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -1482,7 +1516,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -1635,7 +1669,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -1673,7 +1707,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -1757,7 +1791,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -1910,7 +1944,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/client-grants?include_totals=true&page=0&per_page=100", + "path": "/api/v2/client-grants?include_totals=true", "body": "", "status": 200, "response": { @@ -2069,7 +2103,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles?include_totals=true", "body": "", "status": 200, "response": { @@ -2084,7 +2118,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -2097,7 +2131,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -2137,7 +2171,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -2271,4 +2305,4 @@ "rawHeaders": [], "responseIsBinary": false } -] \ No newline at end of file +] diff --git a/test/e2e/recordings/should-dump-and-deploy-without-throwing-an-error.json b/test/e2e/recordings/should-dump-and-deploy-without-throwing-an-error.json index fb4b3f06..ace23ade 100644 --- a/test/e2e/recordings/should-dump-and-deploy-without-throwing-an-error.json +++ b/test/e2e/recordings/should-dump-and-deploy-without-throwing-an-error.json @@ -2,7 +2,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -27,7 +27,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -42,7 +42,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?is_global=true&include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?is_global=true&include_totals=true", "body": "", "status": 200, "response": { @@ -159,7 +159,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/resource-servers?include_totals=true&page=0&per_page=100", + "path": "/api/v2/resource-servers?include_totals=true", "body": "", "status": 200, "response": { @@ -748,7 +748,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -846,7 +846,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -884,7 +884,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -1179,7 +1179,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/client-grants?include_totals=true&page=0&per_page=100", + "path": "/api/v2/client-grants?include_totals=true", "body": "", "status": 200, "response": { @@ -1437,7 +1437,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/guardian/factors/sms/selected-provider", + "path": "/api/v2/guardian/factors/phone/selected-provider", "body": "", "status": 200, "response": { @@ -1461,7 +1461,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles?include_totals=true", "body": "", "status": 200, "response": { @@ -1849,7 +1849,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -2187,7 +2187,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/log-streams?paginate=false", + "path": "/api/v2/log-streams", "body": "", "status": 200, "response": [], @@ -2197,7 +2197,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/custom-domains?paginate=false", + "path": "/api/v2/custom-domains", "body": "", "status": 200, "response": [], @@ -2222,7 +2222,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -2237,7 +2237,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -2252,7 +2252,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -2267,7 +2267,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -2282,7 +2282,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?is_global=true&include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?is_global=true&include_totals=true", "body": "", "status": 200, "response": { @@ -2369,6 +2369,91 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/client-grants/cgr_iodSzvwxqm51tLZF", + "status": 200, + "body": { + "scope": ["read:client_grants", "create:client_grants", "delete:client_grants", "update:client_grants", "read:users", "update:users", "delete:users", "create:users", "read:users_app_metadata", "update:users_app_metadata", "delete:users_app_metadata", "create:users_app_metadata", "read:user_custom_blocks", "create:user_custom_blocks", "delete:user_custom_blocks", "create:user_tickets", "read:clients", "update:clients", "delete:clients", "create:clients", "read:client_keys", "update:client_keys", "delete:client_keys", "create:client_keys", "read:connections", "update:connections", "delete:connections", "create:connections", "read:resource_servers", "update:resource_servers", "delete:resource_servers", "create:resource_servers", "read:device_credentials", "update:device_credentials", "delete:device_credentials", "create:device_credentials", "read:rules", "update:rules", "delete:rules", "create:rules", "read:rules_configs", "update:rules_configs", "delete:rules_configs", "read:hooks", "update:hooks", "delete:hooks", "create:hooks", "read:actions", "update:actions", "delete:actions", "create:actions", "read:email_provider", "update:email_provider", "delete:email_provider", "create:email_provider", "blacklist:tokens", "read:stats", "read:insights", "read:tenant_settings", "update:tenant_settings", "read:logs", "read:logs_users", "read:shields", "create:shields", "update:shields", "delete:shields", "read:anomaly_blocks", "delete:anomaly_blocks", "update:triggers", "read:triggers", "read:grants", "delete:grants", "read:guardian_factors", "update:guardian_factors", "read:guardian_enrollments", "delete:guardian_enrollments", "create:guardian_enrollment_tickets", "read:user_idp_tokens", "create:passwords_checking_job", "delete:passwords_checking_job", "read:custom_domains", "delete:custom_domains", "create:custom_domains", "update:custom_domains", "read:email_templates", "create:email_templates", "update:email_templates", "read:mfa_policies", "update:mfa_policies", "read:roles", "create:roles", "delete:roles", "update:roles", "read:prompts", "update:prompts", "read:branding", "update:branding", "delete:branding", "read:log_streams", "create:log_streams", "delete:log_streams", "update:log_streams", "create:signing_keys", "read:signing_keys", "update:signing_keys", "read:limits", "update:limits", "create:role_members", "read:role_members", "delete:role_members", "read:entitlements", "read:attack_protection", "update:attack_protection", "read:organizations", "update:organizations", "create:organizations", "delete:organizations", "create:organization_members", "read:organization_members", "delete:organization_members", "create:organization_connections", "read:organization_connections", "update:organization_connections", "delete:organization_connections", "create:organization_member_roles", "read:organization_member_roles", "delete:organization_member_roles", "create:organization_invitations", "read:organization_invitations", "delete:organization_invitations", "read:organizations_summary", "create:actions_log_sessions", "create:authentication_methods", "read:authentication_methods", "update:authentication_methods", "delete:authentication_methods"] + }, + "response": {}, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/clients/GIW99EUCF9DFExh77WPMyTMzT8NN4J3A", + "body": { + "name": "Deploy CLI", + "app_type": "non_interactive", + "cross_origin_auth": false, + "custom_login_page_on": true, + "grant_types": ["client_credentials"], + "is_first_party": true, + "is_token_endpoint_ip_header_trusted": false, + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000 + }, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false, + "token_endpoint_auth_method": "client_secret_post" + }, + "status": 200, + "response": { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Deploy CLI", + "is_first_party": true, + "oidc_conformant": true, + "sso_disabled": false, + "cross_origin_auth": false, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, + "rotation_type": "non-rotating" + }, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "GIW99EUCF9DFExh77WPMyTMzT8NN4J3A", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", @@ -2454,7 +2539,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/resource-servers?include_totals=true&page=0&per_page=100", + "path": "/api/v2/resource-servers?include_totals=true", "body": "", "status": 200, "response": { @@ -3043,7 +3128,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -3393,7 +3478,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/sms/selected-provider", + "path": "/api/v2/guardian/factors/phone/selected-provider", "body": { "provider": "auth0" }, @@ -3533,7 +3618,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/log-streams?paginate=false", + "path": "/api/v2/log-streams", "body": "", "status": 200, "response": [], @@ -3543,7 +3628,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/custom-domains?paginate=false", + "path": "/api/v2/custom-domains", "body": "", "status": 200, "response": [], @@ -3581,7 +3666,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -3710,7 +3795,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -3748,7 +3833,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -3866,7 +3951,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -3995,7 +4080,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -4033,7 +4118,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -4125,7 +4210,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true", "body": "", "status": 200, "response": { @@ -4254,7 +4339,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/client-grants?include_totals=true&page=0&per_page=100", + "path": "/api/v2/client-grants?include_totals=true", "body": "", "status": 200, "response": { @@ -4413,7 +4498,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles?include_totals=true", "body": "", "status": 200, "response": { @@ -4428,7 +4513,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -4441,7 +4526,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -4481,7 +4566,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -4652,4 +4737,4 @@ "rawHeaders": [], "responseIsBinary": false } -] \ No newline at end of file +] diff --git a/test/e2e/recordings/should-dump-without-throwing-an-error.json b/test/e2e/recordings/should-dump-without-throwing-an-error.json index 555a38e7..e004c2b2 100644 --- a/test/e2e/recordings/should-dump-without-throwing-an-error.json +++ b/test/e2e/recordings/should-dump-without-throwing-an-error.json @@ -2,7 +2,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", + "path": "/api/v2/rules?include_totals=true", "body": "", "status": 200, "response": { @@ -27,7 +27,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", + "path": "/api/v2/hooks?include_totals=true", "body": "", "status": 200, "response": { @@ -42,7 +42,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?is_global=true&include_totals=true&page=0&per_page=100", + "path": "/api/v2/clients?is_global=true&include_totals=true", "body": "", "status": 200, "response": { @@ -160,7 +160,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/resource-servers?include_totals=true&page=0&per_page=100", + "path": "/api/v2/resource-servers?include_totals=true", "body": "", "status": 200, "response": { @@ -749,7 +749,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -871,7 +871,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?strategy=auth0&include_totals=true", "body": "", "status": 200, "response": { @@ -909,7 +909,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", + "path": "/api/v2/connections?include_totals=true", "body": "", "status": 200, "response": { @@ -1205,7 +1205,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/client-grants?include_totals=true&page=0&per_page=100", + "path": "/api/v2/client-grants?include_totals=true", "body": "", "status": 200, "response": { @@ -1463,7 +1463,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/guardian/factors/sms/selected-provider", + "path": "/api/v2/guardian/factors/phone/selected-provider", "body": "", "status": 200, "response": { @@ -1487,7 +1487,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles?include_totals=true", "body": "", "status": 200, "response": { @@ -1876,7 +1876,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -2244,7 +2244,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/log-streams?paginate=false", + "path": "/api/v2/log-streams", "body": "", "status": 200, "response": [], @@ -2254,7 +2254,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/custom-domains?paginate=false", + "path": "/api/v2/custom-domains", "body": "", "status": 200, "response": [], @@ -2276,4 +2276,4 @@ "rawHeaders": [], "responseIsBinary": false } -] \ No newline at end of file +] diff --git a/test/e2e/recordings/should-only-dump-the-resources-listed-in-AUTH0_INCLUDED_ONLY.json b/test/e2e/recordings/should-only-dump-the-resources-listed-in-AUTH0_INCLUDED_ONLY.json index 48843cf4..d7a18b39 100644 --- a/test/e2e/recordings/should-only-dump-the-resources-listed-in-AUTH0_INCLUDED_ONLY.json +++ b/test/e2e/recordings/should-only-dump-the-resources-listed-in-AUTH0_INCLUDED_ONLY.json @@ -72,7 +72,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/actions/actions", "body": "", "status": 200, "response": { @@ -82,4 +82,4 @@ "rawHeaders": [], "responseIsBinary": false } -] \ No newline at end of file +] diff --git a/test/e2e/recordings/should-preserve-keywords-for-directory-format.json b/test/e2e/recordings/should-preserve-keywords-for-directory-format.json index 5a68f44d..aeb78fc7 100644 --- a/test/e2e/recordings/should-preserve-keywords-for-directory-format.json +++ b/test/e2e/recordings/should-preserve-keywords-for-directory-format.json @@ -2,7 +2,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -355,7 +355,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -747,7 +747,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -1136,4 +1136,4 @@ "rawHeaders": [], "responseIsBinary": false } -] \ No newline at end of file +] diff --git a/test/e2e/recordings/should-preserve-keywords-for-yaml-format.json b/test/e2e/recordings/should-preserve-keywords-for-yaml-format.json index 0f942ffe..d6e6b232 100644 --- a/test/e2e/recordings/should-preserve-keywords-for-yaml-format.json +++ b/test/e2e/recordings/should-preserve-keywords-for-yaml-format.json @@ -2,7 +2,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -334,7 +334,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -726,7 +726,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?include_totals=true&is_global=false&page=0&per_page=100", + "path": "/api/v2/clients?include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -1115,4 +1115,4 @@ "rawHeaders": [], "responseIsBinary": false } -] \ No newline at end of file +] From 82db2eea3db2478015e26e48a6761e349bf5cd7e Mon Sep 17 00:00:00 2001 From: Adam Mcgrath Date: Thu, 7 Sep 2023 10:29:50 +0100 Subject: [PATCH 8/9] Ignore missing client overload error for now --- src/context/directory/handlers/clientGrants.ts | 1 + src/tools/auth0/handlers/clientGrants.ts | 1 + src/tools/auth0/handlers/clients.ts | 1 + src/tools/auth0/handlers/connections.ts | 1 + src/tools/auth0/handlers/databases.ts | 1 + src/tools/auth0/handlers/pages.ts | 2 ++ 6 files changed, 7 insertions(+) diff --git a/src/context/directory/handlers/clientGrants.ts b/src/context/directory/handlers/clientGrants.ts index 3ad8ec12..91a70bcf 100644 --- a/src/context/directory/handlers/clientGrants.ts +++ b/src/context/directory/handlers/clientGrants.ts @@ -53,6 +53,7 @@ async function dump(context: DirectoryContext): Promise { }); // TODO: Bring back paginate: true + // @ts-ignore-error TODO: add pagination overload to client.getAll const { data: { clients: allClients } } = await context.mgmtClient.clients.getAll({ include_totals: true, }); diff --git a/src/tools/auth0/handlers/clientGrants.ts b/src/tools/auth0/handlers/clientGrants.ts index 2ce8b34f..04694d1b 100644 --- a/src/tools/auth0/handlers/clientGrants.ts +++ b/src/tools/auth0/handlers/clientGrants.ts @@ -71,6 +71,7 @@ export default class ClientGrantsHandler extends DefaultHandler { // TODO: Bring back paginate: true const { data } = await this.client.clients.getAll({ include_totals: true }); + // @ts-ignore-error TODO: add pagination overload to client.getAll const { clients } = data; const excludedClientsByNames = (assets.exclude && assets.exclude.clients) || []; const excludedClients = convertClientNamesToIds(excludedClientsByNames, clients); diff --git a/src/tools/auth0/handlers/clients.ts b/src/tools/auth0/handlers/clients.ts index 066da674..a0c23c7e 100644 --- a/src/tools/auth0/handlers/clients.ts +++ b/src/tools/auth0/handlers/clients.ts @@ -87,6 +87,7 @@ export default class ClientHandler extends DefaultAPIHandler { include_totals: true, is_global: false, }); + // @ts-ignore-error TODO: add pagination overload to client.getAll this.existing = data.clients; return this.existing; } diff --git a/src/tools/auth0/handlers/connections.ts b/src/tools/auth0/handlers/connections.ts index 594cc208..caf3eb80 100644 --- a/src/tools/auth0/handlers/connections.ts +++ b/src/tools/auth0/handlers/connections.ts @@ -135,6 +135,7 @@ export default class ConnectionsHandler extends DefaultAPIHandler { // Convert enabled_clients by name to the id // TODO: Bring back paginate: true + // @ts-ignore-error TODO: add pagination overload to client.getAll const { data: { clients } } = await this.client.clients.getAll({ include_totals: true }); // TODO: Bring back paginate: true const { data: { connections: existingConnections } } = await this.client.connections.getAll({ diff --git a/src/tools/auth0/handlers/databases.ts b/src/tools/auth0/handlers/databases.ts index a3baee30..46489f3f 100644 --- a/src/tools/auth0/handlers/databases.ts +++ b/src/tools/auth0/handlers/databases.ts @@ -83,6 +83,7 @@ export default class DatabaseHandler extends DefaultAPIHandler { // Convert enabled_clients by name to the id // TODO: Bring back paginate: true + // @ts-ignore-error TODO: add pagination overload to client.getAll const { data: { clients } } = await this.client.clients.getAll({ include_totals: true }); // TODO: Bring back paginate: true const { data: { connections: existingDatabasesConnections } } = await this.client.connections.getAll({ diff --git a/src/tools/auth0/handlers/pages.ts b/src/tools/auth0/handlers/pages.ts index 61c121fd..4296a36e 100644 --- a/src/tools/auth0/handlers/pages.ts +++ b/src/tools/auth0/handlers/pages.ts @@ -51,6 +51,7 @@ export default class PagesHandler extends DefaultHandler { async updateLoginPage(page): Promise { // TODO: Bring back paginate: true + // @ts-ignore-error TODO: add pagination overload to client.getAll const { data: { clients: globalClient } } = await this.client.clients.getAll({ is_global: true, include_totals: true, @@ -104,6 +105,7 @@ export default class PagesHandler extends DefaultHandler { // Login page is handled via the global client // TODO: Bring back paginate: true + // @ts-ignore-error TODO: add pagination overload to client.getAll const { data: { clients: globalClient } } = await this.client.clients.getAll({ is_global: true, include_totals: true, From 0811df7a866f78292adf1e1a9376ab44fd9a66c9 Mon Sep 17 00:00:00 2001 From: Adam Mcgrath Date: Thu, 7 Sep 2023 12:18:45 +0100 Subject: [PATCH 9/9] fix unit test --- test/tools/auth0/handlers/pages.tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tools/auth0/handlers/pages.tests.js b/test/tools/auth0/handlers/pages.tests.js index 87393757..329dc134 100644 --- a/test/tools/auth0/handlers/pages.tests.js +++ b/test/tools/auth0/handlers/pages.tests.js @@ -11,7 +11,7 @@ describe('#pages handler', () => { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(data).to.be.an('object'); - expect(params.id).to.equal('global1'); + expect(params.client_id).to.equal('global1'); expect(data.custom_login_page).to.equal('login_body'); expect(data.custom_login_page_on).to.equal(true); return Promise.resolve({ data });