From 65ab9d2bafe539aed22759cc86e1d5debb6e50ca Mon Sep 17 00:00:00 2001 From: Kushal <43465488+kushalshit27@users.noreply.github.com> Date: Mon, 21 Oct 2024 14:56:49 +0530 Subject: [PATCH] Upgrading node-auth0 from v3 to v4 (#953) * Upgrade auth0 to v4 --------- Signed-off-by: dependabot[bot] Co-authored-by: frederikprijck Co-authored-by: Adam Mcgrath Co-authored-by: Will Vedder --- CONTRIBUTING.md | 1 + docs/configuring-the-deploy-cli.md | 2 +- docs/excluding-from-management.md | 1 - docs/resource-specific-documentation.md | 19 +- docs/v8_MIGRATION_GUIDE.md | 46 + examples/directory/README.md | 7 - examples/directory/config.json.example | 6 +- examples/yaml/config.json.example | 8 +- examples/yaml/tenant.yaml | 21 - package-lock.json | 1551 +--- package.json | 28 +- src/context/directory/handlers/branding.ts | 9 +- .../directory/handlers/clientGrants.ts | 15 +- src/context/directory/handlers/index.ts | 8 +- src/context/directory/handlers/migrations.ts | 40 - src/context/directory/handlers/prompts.ts | 6 +- .../directory/handlers/resourceServers.ts | 2 +- src/context/directory/handlers/themes.ts | 2 +- src/context/directory/index.ts | 3 +- src/context/index.ts | 10 +- src/context/yaml/handlers/clientGrants.ts | 7 +- src/context/yaml/handlers/guardianPolicies.ts | 4 +- src/context/yaml/handlers/index.ts | 10 +- src/context/yaml/handlers/migrations.ts | 20 - src/context/yaml/handlers/resourceServers.ts | 2 +- src/context/yaml/handlers/themes.ts | 2 +- src/context/yaml/index.ts | 3 +- src/tools/auth0/client.ts | 24 +- src/tools/auth0/handlers/actions.ts | 56 +- src/tools/auth0/handlers/attackProtection.ts | 17 +- src/tools/auth0/handlers/branding.ts | 49 +- src/tools/auth0/handlers/clientGrants.ts | 17 +- src/tools/auth0/handlers/clients.ts | 10 +- src/tools/auth0/handlers/connections.ts | 34 +- src/tools/auth0/handlers/customDomains.ts | 2 +- src/tools/auth0/handlers/databases.ts | 37 +- src/tools/auth0/handlers/default.ts | 13 +- src/tools/auth0/handlers/emailProvider.ts | 32 +- src/tools/auth0/handlers/emailTemplates.ts | 20 +- .../auth0/handlers/guardianFactorProviders.ts | 30 +- .../auth0/handlers/guardianFactorTemplates.ts | 24 +- src/tools/auth0/handlers/guardianFactors.ts | 8 +- .../guardianPhoneFactorMessageTypes.ts | 11 +- .../guardianPhoneFactorSelectedProvider.ts | 11 +- src/tools/auth0/handlers/guardianPolicies.ts | 9 +- src/tools/auth0/handlers/hooks.ts | 13 +- src/tools/auth0/handlers/index.ts | 3 - src/tools/auth0/handlers/logStreams.ts | 4 +- src/tools/auth0/handlers/migrations.ts | 78 - src/tools/auth0/handlers/organizations.ts | 47 +- src/tools/auth0/handlers/pages.ts | 14 +- src/tools/auth0/handlers/prompts.ts | 107 +- src/tools/auth0/handlers/resourceServers.ts | 11 +- src/tools/auth0/handlers/roles.ts | 56 +- src/tools/auth0/handlers/rules.ts | 9 +- src/tools/auth0/handlers/rulesConfigs.ts | 3 +- src/tools/auth0/handlers/scimHandler.ts | 222 +- src/tools/auth0/handlers/tenant.ts | 159 +- src/tools/auth0/handlers/themes.ts | 100 +- src/tools/auth0/handlers/triggers.ts | 11 +- src/tools/auth0/index.ts | 4 +- src/tools/constants.ts | 6 +- src/types.ts | 183 +- src/utils.ts | 2 +- test/context/context.test.js | 45 +- test/context/directory/actions.test.js | 2 +- test/context/directory/clientGrants.test.js | 16 +- test/context/directory/context.test.js | 8 +- test/context/directory/migrations.test.js | 47 - test/context/directory/organizations.test.js | 2 +- test/context/yaml/clientGrants.test.js | 13 +- test/context/yaml/context.test.js | 26 +- test/context/yaml/migrations.test.js | 58 - test/context/yaml/organizations.test.js | 4 +- test/e2e/e2e.test.ts | 9 +- ...SON)-config-with-keyword-replacements.json | 104 +- ...sources-if-AUTH0_ALLOW_DELETE-is-true.json | 1821 ++-- ...ources-if-AUTH0_ALLOW_DELETE-is-false.json | 4624 ++++------ ...ould-deploy-without-throwing-an-error.json | 6336 ++++++++++---- ...yaml-config-with-keyword-replacements.json | 118 +- ...-and-deploy-without-throwing-an-error.json | 7540 ++--------------- ...should-dump-without-throwing-an-error.json | 810 +- ...sources-listed-in-AUTH0_INCLUDED_ONLY.json | 158 +- ...reserve-keywords-for-directory-format.json | 1742 +++- ...uld-preserve-keywords-for-yaml-format.json | 1771 +++- test/e2e/testdata/empty-tenant/tenant.yaml | 1 - .../lots-of-configuration/tenant.yaml | 1 - .../tenant.yaml | 4 - test/keywordPreservation.test.ts | 2 +- test/tools/auth0/client.tests.js | 28 +- test/tools/auth0/handlers/actions.tests.js | 125 +- .../auth0/handlers/attackProtection.tests.js | 52 +- test/tools/auth0/handlers/branding.tests.js | 32 +- .../auth0/handlers/clientGrants.tests.js | 232 +- test/tools/auth0/handlers/clients.tests.js | 146 +- .../tools/auth0/handlers/connections.tests.js | 217 +- .../auth0/handlers/customDomains.test.ts | 10 +- test/tools/auth0/handlers/databases.tests.js | 1083 ++- .../auth0/handlers/emailProvider.tests.js | 74 +- .../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 | 623 -- test/tools/auth0/handlers/logStreams.test.ts | 22 +- test/tools/auth0/handlers/migrations.tests.js | 155 - .../auth0/handlers/organizations.tests.js | 292 +- test/tools/auth0/handlers/pages.tests.js | 50 +- test/tools/auth0/handlers/prompts.tests.ts | 144 +- .../auth0/handlers/resourceServers.tests.js | 99 +- test/tools/auth0/handlers/roles.tests.js | 98 +- test/tools/auth0/handlers/rules.tests.js | 435 - .../auth0/handlers/rulesConfigs.tests.ts | 47 - .../tools/auth0/handlers/scimHandler.tests.js | 170 +- test/tools/auth0/handlers/tenant.tests.ts | 30 +- test/tools/auth0/handlers/themes.tests.js | 19 +- test/tools/auth0/handlers/triggers.tests.js | 16 +- test/tools/auth0/index.test.ts | 4 +- test/tools/auth0/validator.tests.js | 245 +- test/utils.js | 136 +- 123 files changed, 14386 insertions(+), 18774 deletions(-) create mode 100644 docs/v8_MIGRATION_GUIDE.md 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 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/hooks.tests.js delete mode 100644 test/tools/auth0/handlers/migrations.tests.js delete mode 100644 test/tools/auth0/handlers/rules.tests.js delete mode 100644 test/tools/auth0/handlers/rulesConfigs.tests.ts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fa8be1bc2..b028bf16d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,5 @@ ## Commits + All commits should be signed to enhance security, authorship, trust and compliance. [About commit signature verification](https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification) diff --git a/docs/configuring-the-deploy-cli.md b/docs/configuring-the-deploy-cli.md index c2267e4e4..c449d8ee6 100644 --- a/docs/configuring-the-deploy-cli.md +++ b/docs/configuring-the-deploy-cli.md @@ -149,7 +149,7 @@ String. Separate value from audience value while retrieving an access token for ### `AUTH0_EXCLUDED_RULES` -Array of strings. Excludes the management of specific rules by name. **Note:** This configuration may be subject to deprecation in the future. See: [excluding resources from management](excluding-from-management.md). +Array of strings. Excludes the management of specific rules by ID. **Note:** This configuration may be subject to deprecation in the future. See: [excluding resources from management](excluding-from-management.md). ### `AUTH0_EXCLUDED_CLIENTS` diff --git a/docs/excluding-from-management.md b/docs/excluding-from-management.md index 7061b4a37..af9634f30 100644 --- a/docs/excluding-from-management.md +++ b/docs/excluding-from-management.md @@ -85,7 +85,6 @@ For non-set-based resource configuration like tenant, email provider and brandin #### Example of emptiness ```yaml -hooks: [] # Empty hooks connections: [] # Empty connections tenant: {} # Effectively a no-op, cannot delete tenant emailProvider: {} # Will delete email provider diff --git a/docs/resource-specific-documentation.md b/docs/resource-specific-documentation.md index f27e87a33..d4d717727 100644 --- a/docs/resource-specific-documentation.md +++ b/docs/resource-specific-documentation.md @@ -57,12 +57,12 @@ Folder structure when in YAML mode. ./databases/ /Username-Password-Authentication - /change_password.js - /create.js - /delete.js - /get_user.js - /login.js - /verify.js + /change_password.js + /create.js + /delete.js + /get_user.js + /login.js + /verify.js ./tenant.yaml ``` @@ -98,8 +98,8 @@ Folder structure when in directory mode. ./verify.js ``` - Contents of `database.json` + ```json { "options": { @@ -169,8 +169,8 @@ Folder structure when in directory mode. ./password_reset.json ``` - Contents of `login.json` + ```json { "name": "login", @@ -180,6 +180,7 @@ Contents of `login.json` ``` Contents of `error_page.json` + ```json { "html": "./error_page.html", @@ -190,6 +191,7 @@ Contents of `error_page.json` ``` Contents of `guardian_multifactor.json` + ```json { "enabled": true, @@ -199,6 +201,7 @@ Contents of `guardian_multifactor.json` ``` Contents of `password_reset.json` + ```json { "enabled": true, diff --git a/docs/v8_MIGRATION_GUIDE.md b/docs/v8_MIGRATION_GUIDE.md new file mode 100644 index 000000000..f0352a938 --- /dev/null +++ b/docs/v8_MIGRATION_GUIDE.md @@ -0,0 +1,46 @@ +# V8 Migration Guide + +Guide to migrating from `7.x` to `8.x` + +- [General](#general) + - [Node 18 or newer is required](#node-18-or-newer-is-required) + - [Auth0 V4 Migration Guide](https://github.com/auth0/node-auth0/blob/master/v4_MIGRATION_GUIDE.md) +- [Management Resources](#management-resources) + - [EmailProvider](#emailProvider) + - [Migrations](#migrations) + +## General + +### Node 18 or newer is required + +Node 18 LTS and newer LTS releases are supported. + +## Management Resources + +| Resource | Change | Description | +|---------------|------------------|-----------------------------------------------| +| emailProvider | delete operation | Delete operation is deprecated on auth0 `4.x` | +| migrations | removed support | Not supported on auth0 `4.x` | + +#### Note: Other resources from `7.x` are not affected and no changes are required. + +#### emailProvider + +The `delete` operation on the `emailProvider` resource will disable the email provider instead of deleting it. +This is because the email provider deletion operation is deprecated on auth0 `4.x`. User can disable the email provider +by email provider setting the `enabled` property to `false` from the configuration file. + +```yaml + emailProvider: + # other properties + enabled: false +``` + +Rest of the operations on emailProvider resource will work the same as `7.x`. + +#### migrations + +The `migrations` resource is not supported on auth0 `4.x`. It's recommended to remove the `migrations` resource from the +configuration file. If it's not removed, the deploy CLI will ignore the `migrations` resource for operations. + + diff --git a/examples/directory/README.md b/examples/directory/README.md index f8d8f9b07..9f8149bc7 100644 --- a/examples/directory/README.md +++ b/examples/directory/README.md @@ -40,13 +40,6 @@ repository => resource-servers resource_server1.json resource_server2.json - rules - rule1.js - rule1.json - rule2.js - rules-configs - env_param1.json - some_secret1.json guardian factors sms.json diff --git a/examples/directory/config.json.example b/examples/directory/config.json.example index c62ca0448..a92531161 100644 --- a/examples/directory/config.json.example +++ b/examples/directory/config.json.example @@ -7,13 +7,13 @@ "ENV": "DEV" }, "AUTH0_ALLOW_DELETE": false, + "INCLUDED_PROPS": { + "clients": [ "client_secret" ] + }, "AUTH0_EXCLUDED_RULES": [ "rule-1-name", "rule-2-name" ], - "INCLUDED_PROPS": { - "clients": [ "client_secret" ] - }, "EXCLUDED_PROPS": { "connections": [ "options.client_secret" ] } diff --git a/examples/yaml/config.json.example b/examples/yaml/config.json.example index b3805dd26..9c99cba23 100644 --- a/examples/yaml/config.json.example +++ b/examples/yaml/config.json.example @@ -1,5 +1,5 @@ { - "AUTH0_DOMAIN": "..auth0.com", + "AUTH0_DOMAIN": "..auth0.com", "AUTH0_CLIENT_ID": "", "AUTH0_CLIENT_SECRET": "", "AUTH0_KEYWORD_REPLACE_MAPPINGS": { @@ -7,13 +7,13 @@ "ENV": "DEV" }, "AUTH0_ALLOW_DELETE": false, + "INCLUDED_PROPS": { + "clients": [ "client_secret" ] + }, "AUTH0_EXCLUDED_RULES": [ "rule-1-name", "rule-2-name" ], - "INCLUDED_PROPS": { - "clients": [ "client_secret" ] - }, "EXCLUDED_PROPS": { "connections": [ "options.client_secret" ] } diff --git a/examples/yaml/tenant.yaml b/examples/yaml/tenant.yaml index eb5243568..3994f60a2 100644 --- a/examples/yaml/tenant.yaml +++ b/examples/yaml/tenant.yaml @@ -63,27 +63,6 @@ connections: # Add other connection settings (https://auth0.com/docs/api/management/v2#!/Connections/post_connections) -rules: - - name: "Common-Functions" - order: 10 - script: "rules/enrich_tokens.js" - -rulesConfigs: - # Key/Value pairs for Rule configuration settings - - key: "SOME_SECRET" - value: 'some_key' - -hooks: - - name: "Client Credentials Exchange" - triggerId: "credentials-exchange" - enabled: true - secrets: - api-key: "my custom api key" - dependencies: - bcrypt: "3.0.6" - script: "hooks/client-credentials-exchange.js" - - resourceServers: - name: "My API" diff --git a/package-lock.json b/package-lock.json index 87abe9687..48af89bd3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,17 +10,17 @@ "license": "MIT", "dependencies": { "ajv": "^6.12.6", - "auth0": "^3.0.0", + "auth0": "^4.10.0", "dot-prop": "^5.2.0", "fs-extra": "^10.1.0", "global-agent": "^2.1.12", "js-yaml": "^4.1.0", - "lodash": "^4.17.20", + "lodash": "^4.17.21", "mkdirp": "^1.0.4", - "nconf": "^0.12.0", + "nconf": "^0.12.1", "promise-pool-executor": "^1.1.1", - "sanitize-filename": "^1.6.1", - "winston": "^3.7.2", + "sanitize-filename": "^1.6.3", + "winston": "^3.15.0", "yargs": "^15.3.1" }, "bin": { @@ -28,20 +28,21 @@ }, "devDependencies": { "@types/fs-extra": "^9.0.13", - "@types/lodash": "^4.14.187", - "@types/mocha": "^10.0.0", - "@types/nconf": "^0.10.3", + "@types/lodash": "^4.17.7", + "@types/mocha": "^10.0.9", + "@types/nconf": "^0.10.7", "@typescript-eslint/parser": "^5.30.3", "chai": "^4.3.7", "chai-as-promised": "^7.1.1", "eslint": "^7.28.0", "eslint-config-airbnb-base": "^14.2.1", "eslint-config-prettier": "^8.5.0", - "eslint-plugin-import": "^2.26.0", + "eslint-plugin-import": "^2.30.0", "husky": "^7.0.4", "kacl": "^1.1.1", - "mocha": "^10.1.0", - "nock": "^13.2.9", + "mocha": "^10.7.3", + "nock": "^13.5.5", + "node-fetch": "^2.7.0", "nyc": "^15.0.1", "prettier": "^2.6.2", "pretty-quick": "^3.1.3", @@ -50,8 +51,11 @@ "sinon": "^13.0.2", "sinon-chai": "^3.7.0", "ts-mocha": "^10.0.0", - "typescript": "^4.8.4", + "typescript": "^5.6.3", "zlib": "^1.0.5" + }, + "engines": { + "node": ">= 18" } }, "node_modules/@ampproject/remapping": { @@ -152,14 +156,14 @@ } }, "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -282,18 +286,18 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, "engines": { "node": ">=6.9.0" @@ -412,6 +416,9 @@ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, + "dependencies": { + "@babel/types": "^7.25.6" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -632,13 +639,13 @@ } }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -886,9 +893,9 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" @@ -901,9 +908,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -986,44 +993,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", @@ -1039,60 +1008,29 @@ "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.17.6", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz", - "integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==", + "version": "4.17.7", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz", + "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==", "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/mocha": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz", - "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==", + "version": "10.0.9", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.9.tgz", + "integrity": "sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==", "dev": true }, "node_modules/@types/nconf": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@types/nconf/-/nconf-0.10.3.tgz", - "integrity": "sha512-leyIuBk/rMIp9114FlPRkc/cQG+/JzCz1Afx3BD+CwK2ep3ZRxoC843V1rqnE2pC/jRRjANWhuVBEn4clCwlug==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@types/nconf/-/nconf-0.10.7.tgz", + "integrity": "sha512-ltJgbQX0XgjkeDrz0anTCXLBLatppWYFCxp88ILEwybfAuyNWr0Qb+ceFFqZ0VDR8fguEjr0hH37ZF+AF4gsxw==", "dev": true }, "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/@types/triple-beam": { "version": "1.3.5", @@ -1462,48 +1400,27 @@ "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.2", - "resolved": "https://registry.npmjs.org/auth0/-/auth0-3.7.2.tgz", - "integrity": "sha512-8XwCi5e0CC08A4+l3eTmx/arXjGUlXrLd6/LUBvQfedmI8w4jiNc9pd7dyBUgR00EzhcbcrdNEQo5jkU3hMIJg==", - "dependencies": { - "axios": "^1.6.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.10.0", + "resolved": "https://registry.npmjs.org/auth0/-/auth0-4.10.0.tgz", + "integrity": "sha512-xfNtSyL84w9z1DQXWV1GXgtq2Oi3OXeJe/r+pI29GKZHpfgspNb4rFqp/CqI8zKVir6L3Iq2KZgE2rDHRDtxfA==", "dependencies": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" + "jose": "^4.13.2", + "undici-types": "^6.15.0", + "uuid": "^9.0.0" }, "engines": { - "node": ">=12", - "npm": ">=6" + "node": ">=18" } }, "node_modules/auth0/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } @@ -1523,29 +1440,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axios": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", - "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.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", @@ -1622,11 +1516,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", @@ -1652,6 +1541,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -1675,15 +1565,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", @@ -1763,29 +1644,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.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", @@ -1900,28 +1758,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", @@ -1934,15 +1776,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", @@ -1958,11 +1791,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", @@ -2025,11 +1853,12 @@ } }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2066,14 +1895,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", @@ -2118,14 +1939,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", @@ -2164,14 +1977,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", @@ -2183,14 +1988,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", @@ -2916,11 +2713,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", @@ -3009,25 +2801,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.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "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", @@ -3100,28 +2873,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", @@ -3792,14 +3543,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.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -3958,14 +3701,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", @@ -4153,9 +3888,9 @@ } }, "node_modules/jose": { - "version": "4.15.7", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.7.tgz", - "integrity": "sha512-L7ioP+JAuZe8v+T5+zVI9Tx8LtU8BL7NxkyDFVMv+Qr3JW0jSoYDedLtodaXwfqMpeCyx4WXFNyu9tJt4WvC1A==", + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", "funding": { "url": "https://github.com/sponsors/panva" } @@ -4234,41 +3969,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", @@ -4299,21 +3999,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", @@ -4323,7 +4013,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", @@ -4354,9 +4045,9 @@ } }, "node_modules/logform": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", - "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", + "integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", "dependencies": { "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", @@ -4378,37 +4069,6 @@ "get-func-name": "^2.0.1" } }, - "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", @@ -4465,57 +4125,19 @@ "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", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "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", @@ -4555,9 +4177,9 @@ } }, "node_modules/mocha": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.0.tgz", - "integrity": "sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==", + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", + "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", "dev": true, "dependencies": { "ansi-colors": "^4.1.3", @@ -4672,12 +4294,6 @@ "node": ">=10" } }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "node_modules/mocha/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -4786,9 +4402,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/natural-compare": { "version": "1.4.0", @@ -4797,9 +4413,9 @@ "dev": true }, "node_modules/nconf": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.0.tgz", - "integrity": "sha512-T3fZPw3c7Dfrz8JBQEbEcZJ2s8f7cUMpKuyBtsGQe0b71pcXx6gNh4oti2xh5dxB+gO9ufNfISBlGvvWtfyMcA==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.1.tgz", + "integrity": "sha512-p2cfF+B3XXacQdswUYWZ0w6Vld0832A/tuqjLBu3H1sfUcby4N2oVbGhyuCkZv+t3iY3aiFEj7gZGqax9Q2c1w==", "dependencies": { "async": "^3.0.0", "ini": "^2.0.0", @@ -4880,9 +4496,9 @@ } }, "node_modules/nock": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.4.tgz", - "integrity": "sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==", + "version": "13.5.5", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.5.tgz", + "integrity": "sha512-XKYnqUrCwXC8DGG1xX4YH5yNIrlh9c065uaMZZHUoeUUINTOyt+x/G+ezYk0Ft6ExSREVIs+qBJDK503viTfFA==", "dev": true, "dependencies": { "debug": "^4.1.0", @@ -4893,6 +4509,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", @@ -5056,6 +4692,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -5236,14 +4873,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", @@ -5256,23 +4885,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", @@ -5298,9 +4910,9 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "dev": true, "dependencies": { "isarray": "0.0.1" @@ -5649,16 +5261,6 @@ "node": ">= 8" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "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", @@ -5677,20 +5279,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", @@ -5721,9 +5309,9 @@ } }, "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -5835,33 +5423,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", @@ -5993,9 +5554,9 @@ } }, "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "engines": { "node": ">=10" } @@ -6048,14 +5609,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", @@ -6099,6 +5652,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -6127,13 +5681,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6207,14 +5766,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", @@ -6390,28 +5941,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", @@ -6436,15 +5965,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", @@ -6508,15 +6028,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", @@ -6538,6 +6049,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.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", @@ -6797,16 +6314,16 @@ } }, "node_modules/typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/unbox-primitive": { @@ -6824,6 +6341,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "6.19.4", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.4.tgz", + "integrity": "sha512-BiKTnNSkjSEYzxd0X3KQ/ZNoA8/aFlS598kds3PuZ55csLy3fFqGap0aP84Ekb/VWYG5um4MgilNs3kAx4LHMg==" + }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -6858,19 +6380,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", @@ -6904,6 +6413,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", @@ -6966,18 +6491,26 @@ } }, "node_modules/winston-transport": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", - "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.1.tgz", + "integrity": "sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==", "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", + "logform": "^2.6.1", + "readable-stream": "^3.6.2", "triple-beam": "^1.3.0" }, "engines": { "node": ">= 12.0.0" } }, + "node_modules/winston/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/word-wrap": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", @@ -7029,11 +6562,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", @@ -7289,14 +6817,14 @@ }, "dependencies": { "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" } } } @@ -7390,15 +6918,15 @@ } }, "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true }, "@babel/helper-validator-option": { @@ -7491,7 +7019,10 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "dev": true + "dev": true, + "requires": { + "@babel/types": "^7.25.6" + } }, "@babel/template": { "version": "7.22.15", @@ -7665,13 +7196,13 @@ } }, "@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" } }, @@ -7869,9 +7400,9 @@ "dev": true }, "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true }, "@jridgewell/sourcemap-codec": { @@ -7881,9 +7412,9 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.1.0", @@ -7957,44 +7488,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", @@ -8010,60 +7503,29 @@ "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.17.6", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz", - "integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==", + "version": "4.17.7", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz", + "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==", "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/mocha": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz", - "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==", + "version": "10.0.9", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.9.tgz", + "integrity": "sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==", "dev": true }, "@types/nconf": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@types/nconf/-/nconf-0.10.3.tgz", - "integrity": "sha512-leyIuBk/rMIp9114FlPRkc/cQG+/JzCz1Afx3BD+CwK2ep3ZRxoC843V1rqnE2pC/jRRjANWhuVBEn4clCwlug==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@types/nconf/-/nconf-0.10.7.tgz", + "integrity": "sha512-ltJgbQX0XgjkeDrz0anTCXLBLatppWYFCxp88ILEwybfAuyNWr0Qb+ceFFqZ0VDR8fguEjr0hH37ZF+AF4gsxw==", "dev": true }, "@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 }, "@types/triple-beam": { "version": "1.3.5", @@ -8307,41 +7769,20 @@ "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.2", - "resolved": "https://registry.npmjs.org/auth0/-/auth0-3.7.2.tgz", - "integrity": "sha512-8XwCi5e0CC08A4+l3eTmx/arXjGUlXrLd6/LUBvQfedmI8w4jiNc9pd7dyBUgR00EzhcbcrdNEQo5jkU3hMIJg==", - "requires": { - "axios": "^1.6.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": "4.10.0", + "resolved": "https://registry.npmjs.org/auth0/-/auth0-4.10.0.tgz", + "integrity": "sha512-xfNtSyL84w9z1DQXWV1GXgtq2Oi3OXeJe/r+pI29GKZHpfgspNb4rFqp/CqI8zKVir6L3Iq2KZgE2rDHRDtxfA==", + "requires": { + "jose": "^4.13.2", + "undici-types": "^6.15.0", "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", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" } } }, @@ -8354,28 +7795,6 @@ "possible-typed-array-names": "^1.0.0" } }, - "axios": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", - "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", - "requires": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.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", @@ -8430,11 +7849,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", @@ -8457,6 +7871,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, "requires": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -8471,15 +7886,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", @@ -8533,29 +7939,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.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", @@ -8652,25 +8035,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", @@ -8683,15 +8053,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", @@ -8709,11 +8070,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", @@ -8753,11 +8109,12 @@ } }, "debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "decamelize": { @@ -8780,11 +8137,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", @@ -8814,11 +8166,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", @@ -8848,14 +8195,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", @@ -8864,14 +8203,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", @@ -9444,11 +8775,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", @@ -9519,11 +8845,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.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" - }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -9580,21 +8901,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", @@ -10041,14 +9347,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.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -10144,14 +9442,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", @@ -10298,9 +9588,9 @@ } }, "jose": { - "version": "4.15.7", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.7.tgz", - "integrity": "sha512-L7ioP+JAuZe8v+T5+zVI9Tx8LtU8BL7NxkyDFVMv+Qr3JW0jSoYDedLtodaXwfqMpeCyx4WXFNyu9tJt4WvC1A==" + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==" }, "js-tokens": { "version": "4.0.0", @@ -10359,38 +9649,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", @@ -10412,21 +9670,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", @@ -10436,7 +9684,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", @@ -10461,9 +9710,9 @@ } }, "logform": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", - "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", + "integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", "requires": { "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", @@ -10482,37 +9731,6 @@ "get-func-name": "^2.0.1" } }, - "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", @@ -10556,39 +9774,16 @@ "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", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "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", @@ -10616,9 +9811,9 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "mocha": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.0.tgz", - "integrity": "sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==", + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", + "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", "dev": true, "requires": { "ansi-colors": "^4.1.3", @@ -10704,12 +9899,6 @@ "brace-expansion": "^2.0.1" } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -10784,9 +9973,9 @@ "dev": true }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "natural-compare": { "version": "1.4.0", @@ -10795,9 +9984,9 @@ "dev": true }, "nconf": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.0.tgz", - "integrity": "sha512-T3fZPw3c7Dfrz8JBQEbEcZJ2s8f7cUMpKuyBtsGQe0b71pcXx6gNh4oti2xh5dxB+gO9ufNfISBlGvvWtfyMcA==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.1.tgz", + "integrity": "sha512-p2cfF+B3XXacQdswUYWZ0w6Vld0832A/tuqjLBu3H1sfUcby4N2oVbGhyuCkZv+t3iY3aiFEj7gZGqax9Q2c1w==", "requires": { "async": "^3.0.0", "ini": "^2.0.0", @@ -10865,9 +10054,9 @@ } }, "nock": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.4.tgz", - "integrity": "sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==", + "version": "13.5.5", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.5.tgz", + "integrity": "sha512-XKYnqUrCwXC8DGG1xX4YH5yNIrlh9c065uaMZZHUoeUUINTOyt+x/G+ezYk0Ft6ExSREVIs+qBJDK503viTfFA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -10875,6 +10064,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", @@ -11000,7 +10198,8 @@ "object-inspect": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true }, "object-keys": { "version": "1.1.1", @@ -11130,14 +10329,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", @@ -11147,23 +10338,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", @@ -11183,9 +10357,9 @@ "dev": true }, "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "dev": true, "requires": { "isarray": "0.0.1" @@ -11434,16 +10608,6 @@ "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", "dev": true }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "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", @@ -11459,14 +10623,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", @@ -11483,9 +10639,9 @@ } }, "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11561,22 +10717,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", @@ -11657,9 +10797,9 @@ } }, "safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==" }, "sanitize-filename": { "version": "1.6.3", @@ -11702,14 +10842,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", @@ -11743,6 +10875,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, "requires": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -11765,13 +10898,15 @@ } }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { @@ -11826,14 +10961,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", @@ -11963,24 +11090,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", @@ -11996,15 +11105,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", @@ -12060,15 +11160,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", @@ -12084,6 +11175,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.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", @@ -12273,9 +11370,9 @@ } }, "typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true }, "unbox-primitive": { @@ -12290,6 +11387,11 @@ "which-boxed-primitive": "^1.0.2" } }, + "undici-types": { + "version": "6.19.4", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.4.tgz", + "integrity": "sha512-BiKTnNSkjSEYzxd0X3KQ/ZNoA8/aFlS598kds3PuZ55csLy3fFqGap0aP84Ekb/VWYG5um4MgilNs3kAx4LHMg==" + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -12305,19 +11407,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", @@ -12348,6 +11437,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", @@ -12395,15 +11500,22 @@ "stack-trace": "0.0.x", "triple-beam": "^1.3.0", "winston-transport": "^4.7.0" + }, + "dependencies": { + "@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" + } } }, "winston-transport": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", - "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.1.tgz", + "integrity": "sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==", "requires": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", + "logform": "^2.6.1", + "readable-stream": "^3.6.2", "triple-beam": "^1.3.0" } }, @@ -12452,11 +11564,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 c61c535f3..28286d6a9 100644 --- a/package.json +++ b/package.json @@ -33,35 +33,36 @@ "homepage": "https://github.com/auth0/auth0-deploy-cli#readme", "dependencies": { "ajv": "^6.12.6", - "auth0": "^3.0.0", + "auth0": "^4.10.0", "dot-prop": "^5.2.0", "fs-extra": "^10.1.0", "global-agent": "^2.1.12", "js-yaml": "^4.1.0", - "lodash": "^4.17.20", + "lodash": "^4.17.21", "mkdirp": "^1.0.4", - "nconf": "^0.12.0", + "nconf": "^0.12.1", "promise-pool-executor": "^1.1.1", - "sanitize-filename": "^1.6.1", - "winston": "^3.7.2", + "sanitize-filename": "^1.6.3", + "winston": "^3.15.0", "yargs": "^15.3.1" }, "devDependencies": { "@types/fs-extra": "^9.0.13", - "@types/lodash": "^4.14.187", - "@types/mocha": "^10.0.0", - "@types/nconf": "^0.10.3", + "@types/lodash": "^4.17.7", + "@types/mocha": "^10.0.9", + "@types/nconf": "^0.10.7", "@typescript-eslint/parser": "^5.30.3", "chai": "^4.3.7", "chai-as-promised": "^7.1.1", "eslint": "^7.28.0", "eslint-config-airbnb-base": "^14.2.1", "eslint-config-prettier": "^8.5.0", - "eslint-plugin-import": "^2.26.0", + "eslint-plugin-import": "^2.30.0", "husky": "^7.0.4", "kacl": "^1.1.1", - "mocha": "^10.1.0", - "nock": "^13.2.9", + "mocha": "^10.7.3", + "nock": "^13.5.5", + "node-fetch": "^2.7.0", "nyc": "^15.0.1", "prettier": "^2.6.2", "pretty-quick": "^3.1.3", @@ -70,9 +71,12 @@ "sinon": "^13.0.2", "sinon-chai": "^3.7.0", "ts-mocha": "^10.0.0", - "typescript": "^4.8.4", + "typescript": "^5.6.3", "zlib": "^1.0.5" }, + "engines": { + "node": ">= 18" + }, "overrides": { "istanbul-reports": "3.1.4" } diff --git a/src/context/directory/handlers/branding.ts b/src/context/directory/handlers/branding.ts index aca4408f9..017ba991e 100644 --- a/src/context/directory/handlers/branding.ts +++ b/src/context/directory/handlers/branding.ts @@ -1,7 +1,14 @@ import path from 'path'; import fs from 'fs-extra'; import { constants, loadFileAndReplaceKeywords } from '../../../tools'; -import { dumpJSON, existsMustBeDir, getFiles, isFile, loadJSON, nomalizedYAMLPath } from '../../../utils'; +import { + dumpJSON, + existsMustBeDir, + getFiles, + isFile, + loadJSON, + nomalizedYAMLPath, +} from '../../../utils'; import { DirectoryHandler } from '.'; import DirectoryContext from '..'; import { Asset, ParsedAsset } from '../../../types'; diff --git a/src/context/directory/handlers/clientGrants.ts b/src/context/directory/handlers/clientGrants.ts index 9e139b8bf..6a23dafe4 100644 --- a/src/context/directory/handlers/clientGrants.ts +++ b/src/context/directory/handlers/clientGrants.ts @@ -1,5 +1,6 @@ import path from 'path'; import fs from 'fs-extra'; +import { Client, ResourceServer } from 'auth0'; import { constants } from '../../../tools'; import { @@ -14,6 +15,7 @@ import { DirectoryHandler } from '.'; import DirectoryContext from '..'; import { ParsedAsset } from '../../../types'; import { ClientGrant } from '../../../tools/auth0/handlers/clientGrants'; +import { paginate } from '../../../tools/auth0/client'; type ParsedClientGrants = ParsedAsset<'clientGrants', ClientGrant[]>; @@ -47,12 +49,15 @@ async function dump(context: DirectoryContext): Promise { if (clientGrants.length === 0) return; - const allResourceServers = await context.mgmtClient.resourceServers.getAll({ - paginate: true, - include_totals: true, - }); + const allResourceServers = await paginate( + context.mgmtClient.resourceServers.getAll, + { + paginate: true, + include_totals: true, + } + ); - const allClients = await context.mgmtClient.clients.getAll({ + const allClients = await paginate(context.mgmtClient.clients.getAll, { paginate: true, include_totals: true, }); diff --git a/src/context/directory/handlers/index.ts b/src/context/directory/handlers/index.ts index 707977930..8976d91cd 100644 --- a/src/context/directory/handlers/index.ts +++ b/src/context/directory/handlers/index.ts @@ -1,6 +1,4 @@ import pages from './pages'; -import rules from './rules'; -import hooks from './hooks'; import clients from './clients'; import tenant from './tenant'; import emailProvider from './emailProvider'; @@ -8,7 +6,6 @@ import connections from './connections'; import databases from './databases'; import emailTemplates from './emailTemplates'; import clientGrants from './clientGrants'; -import rulesConfigs from './rulesConfigs'; import resourceServers from './resourceServers'; import guardianFactors from './guardianFactors'; import guardianFactorProviders from './guardianFactorProviders'; @@ -17,7 +14,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'; @@ -27,6 +23,9 @@ import logStreams from './logStreams'; import prompts from './prompts'; import customDomains from './customDomains'; import themes from './themes'; +import rules from './rules'; +import hooks from './hooks'; +import rulesConfigs from './rulesConfigs'; import DirectoryContext from '..'; import { AssetTypes, Asset } from '../../../types'; @@ -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 25a70e7eb..000000000 --- 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/prompts.ts b/src/context/directory/handlers/prompts.ts index 8890f6fb5..0d24ebd30 100644 --- a/src/context/directory/handlers/prompts.ts +++ b/src/context/directory/handlers/prompts.ts @@ -68,9 +68,9 @@ function parse(context: DirectoryContext): ParsedPrompts { const templateFilePath = path.join(promptsDirectory, template); insertionAcc[name] = isFile(templateFilePath) ? loadFileAndReplaceKeywords(templateFilePath, { - mappings: context.mappings, - disableKeywordReplacement: context.disableKeywordReplacement, - }).trim() + mappings: context.mappings, + disableKeywordReplacement: context.disableKeywordReplacement, + }).trim() : ''; return insertionAcc; }, diff --git a/src/context/directory/handlers/resourceServers.ts b/src/context/directory/handlers/resourceServers.ts index 5e83d5745..6a7575bdd 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/handlers/themes.ts b/src/context/directory/handlers/themes.ts index ba8c22ea7..1b08c3f9a 100644 --- a/src/context/directory/handlers/themes.ts +++ b/src/context/directory/handlers/themes.ts @@ -4,8 +4,8 @@ import { getFiles, dumpJSON, loadJSON, existsMustBeDir } from '../../../utils'; import { DirectoryHandler } from '.'; import DirectoryContext from '..'; import { ParsedAsset } from '../../../types'; -import { Theme } from '../../../tools/auth0/handlers/themes'; import { constants } from '../../../tools'; +import { Theme } from '../../../tools/auth0/handlers/themes'; type ParsedThemes = ParsedAsset<'themes', Theme[]>; diff --git a/src/context/directory/index.ts b/src/context/directory/index.ts index c154f10c7..a9d7523b6 100644 --- a/src/context/directory/index.ts +++ b/src/context/directory/index.ts @@ -1,4 +1,5 @@ import * as path from 'path'; +import { ManagementClient } from 'auth0'; import { loadFileAndReplaceKeywords, Auth0 } from '../../tools'; import pagedClient from '../../tools/auth0/client'; @@ -21,7 +22,7 @@ export default class DirectoryContext { assets: Assets; disableKeywordReplacement: boolean; - constructor(config: Config, mgmtClient: Auth0APIClient) { + constructor(config: Config, mgmtClient: ManagementClient) { 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 89532db20..86267c60b 100644 --- a/src/context/index.ts +++ b/src/context/index.ts @@ -161,19 +161,23 @@ 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; + const clientAccessToken = clientCredentials.data?.access_token; + if (!clientAccessToken) { + throw new Error('Failed to retrieve access token.'); + } + return clientAccessToken; })(); const mgmtClient = new ManagementClient({ diff --git a/src/context/yaml/handlers/clientGrants.ts b/src/context/yaml/handlers/clientGrants.ts index d864f66ad..5c14c9851 100644 --- a/src/context/yaml/handlers/clientGrants.ts +++ b/src/context/yaml/handlers/clientGrants.ts @@ -1,8 +1,10 @@ +import { Client } from 'auth0'; import { convertClientIdToName } from '../../../utils'; import { YAMLHandler } from '.'; import YAMLContext from '..'; import { ParsedAsset } from '../../../types'; import { ClientGrant } from '../../../tools/auth0/handlers/clientGrants'; +import { paginate } from '../../../tools/auth0/client'; type ParsedClientGrants = ParsedAsset<'clientGrants', ClientGrant[]>; @@ -17,12 +19,13 @@ async function parse(context: YAMLContext): Promise { } async function dump(context: YAMLContext): Promise { - let { clientGrants, clients } = context.assets; + let { clients } = context.assets; + const { clientGrants } = context.assets; if (!clientGrants) return { clientGrants: null }; if (clients === undefined) { - clients = await context.mgmtClient.clients.getAll({ + clients = await paginate(context.mgmtClient.clients.getAll, { paginate: true, include_totals: true, }); diff --git a/src/context/yaml/handlers/guardianPolicies.ts b/src/context/yaml/handlers/guardianPolicies.ts index e0673eb32..5733477cb 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 3c470bf9f..62a3e2a7b 100644 --- a/src/context/yaml/handlers/index.ts +++ b/src/context/yaml/handlers/index.ts @@ -1,6 +1,4 @@ import pages from './pages'; -import rules from './rules'; -import hooks from './hooks'; import clients from './clients'; import tenant from './tenant'; import emailProvider from './emailProvider'; @@ -8,7 +6,6 @@ import connections from './connections'; import databases from './databases'; import emailTemplates from './emailTemplates'; import clientGrants from './clientGrants'; -import rulesConfigs from './rulesConfigs'; import resourceServers from './resourceServers'; import guardianFactors from './guardianFactors'; import guardianFactorProviders from './guardianFactorProviders'; @@ -18,7 +15,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'; @@ -27,6 +23,9 @@ import logStreams from './logStreams'; import prompts from './prompts'; import customDomains from './customDomains'; import themes from './themes'; +import rules from './rules'; +import rulesConfigs from './rulesConfigs'; +import hooks from './hooks'; import YAMLContext from '..'; import { AssetTypes } from '../../../types'; @@ -38,8 +37,8 @@ export type YAMLHandler = { const yamlHandlers: { [key in AssetTypes]: YAMLHandler<{ [key: string]: unknown }> } = { rules, - hooks, rulesConfigs, + hooks, pages, databases, clientGrants, @@ -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 cc4a1372e..000000000 --- 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 c2dce9b3e..01a644a76 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/context/yaml/handlers/themes.ts b/src/context/yaml/handlers/themes.ts index 51ac477d3..90cb8f366 100644 --- a/src/context/yaml/handlers/themes.ts +++ b/src/context/yaml/handlers/themes.ts @@ -1,7 +1,7 @@ import { YAMLHandler } from '.'; import YAMLContext from '..'; -import { ParsedAsset } from '../../../types'; import { Theme } from '../../../tools/auth0/handlers/themes'; +import { ParsedAsset } from '../../../types'; type ParsedThemes = ParsedAsset<'themes', Theme[]>; diff --git a/src/context/yaml/index.ts b/src/context/yaml/index.ts index 715c4ccc6..fb071f9a1 100644 --- a/src/context/yaml/index.ts +++ b/src/context/yaml/index.ts @@ -1,6 +1,7 @@ import fs from 'fs-extra'; import yaml from 'js-yaml'; import path from 'path'; +import { ManagementClient } from 'auth0'; import { loadFileAndReplaceKeywords, keywordReplace, @@ -26,7 +27,7 @@ export default class YAMLContext { assets: Assets; disableKeywordReplacement: boolean; - constructor(config: Config, mgmtClient) { + constructor(config: Config, mgmtClient: ManagementClient) { this.configFile = config.AUTH0_INPUT_FILE; this.config = config; this.mappings = config.AUTH0_KEYWORD_REPLACE_MAPPINGS || {}; diff --git a/src/tools/auth0/client.ts b/src/tools/auth0/client.ts index fdbaa2667..8ec35be6a 100644 --- a/src/tools/auth0/client.ts +++ b/src/tools/auth0/client.ts @@ -1,6 +1,7 @@ import { PromisePoolExecutor } from 'promise-pool-executor'; import _ from 'lodash'; +import { JSONApiResponse, ManagementClient } from 'auth0'; import { flatten } from '../utils'; import { Asset, @@ -8,7 +9,6 @@ import { Auth0APIClient, CheckpointPaginationParams, PagePaginationParams, - BaseAuth0APIClient, } from '../../types'; const API_CONCURRENCY = 3; @@ -92,15 +92,15 @@ function pagePaginator( delete newArgs[0].paginate; // Run the first request to get the total number of entity items - const rsp = await client.pool + const rsp: JSONApiResponse = await client.pool .addSingleTask({ data: _.cloneDeep(newArgs), generator: (pageArgs) => target[name](...pageArgs), }) .promise(); - data.push(...getEntity(rsp)); - const total = rsp.total || 0; + data.push(...getEntity(rsp.data)); + const total = rsp.data?.total || 0; const pagesLeft = Math.ceil(total / perPage) - 1; // Setup pool to get the rest of the pages if (pagesLeft > 0) { @@ -111,7 +111,7 @@ function pagePaginator( const pageArgs = _.cloneDeep(newArgs); pageArgs[0].page = page + 1; - return target[name](...pageArgs).then((r) => getEntity(r)); + return target[name](...pageArgs).then((r) => getEntity(r.data)); }, }) .promise(); @@ -159,7 +159,7 @@ function pagedManager(client: Auth0APIClient, manager: Auth0APIClient) { } // Warp around the ManagementClient and detect when requesting specific pages to return all -export default function pagedClient(client: BaseAuth0APIClient): Auth0APIClient { +export default function pagedClient(client: ManagementClient): Auth0APIClient { const clientWithPooling: Auth0APIClient = { ...client, pool: new PromisePoolExecutor({ @@ -167,7 +167,17 @@ export default function pagedClient(client: BaseAuth0APIClient): Auth0APIClient frequencyLimit: API_FREQUENCY_PER_SECOND, frequencyWindow: 1000, // 1 sec }), - }; + } as Auth0APIClient; return pagedManager(clientWithPooling, clientWithPooling); } + +// eslint-disable-next-line no-unused-vars +export async function paginate( + fetchFunc: (...paginateArgs: any) => any, + args: PagePaginationParams +): Promise { + // override default .getAll() behaviour using pagedClient + const allItems = (await fetchFunc(args)) as unknown as T[]; + return allItems; +} diff --git a/src/tools/auth0/handlers/actions.ts b/src/tools/auth0/handlers/actions.ts index a95e01a1a..3a60026a5 100644 --- a/src/tools/auth0/handlers/actions.ts +++ b/src/tools/auth0/handlers/actions.ts @@ -1,8 +1,10 @@ import _ from 'lodash'; +import { GetActions200ResponseActionsInner, PostActionRequest } from 'auth0'; import DefaultAPIHandler, { order } from './default'; import log from '../../../logger'; import { areArraysEquals, sleep } from '../../utils'; import { Asset, Assets, CalculatedChanges } from '../../../types'; +import { paginate } from '../client'; const MAX_ACTION_DEPLOY_RETRY_ATTEMPTS = 60; // 60 * 2s => 2 min timeout @@ -30,6 +32,10 @@ export type Action = { integration?: Object; }; +type PostActionRequestWithId = PostActionRequest & { + id: string; +}; + // With this schema, we can only validate property types but not valid properties on per type basis export const schema = { type: 'array', @@ -92,29 +98,36 @@ 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: PostActionRequestWithId) => this.createAction(action), delete: (action: Action) => this.deleteAction(action), }, stripUpdateFields: ['deployed', 'status'], }); } - async createAction(action: Action) { + async createAction(action: PostActionRequestWithId) { // Strip the deployed flag const addAction = { ...action }; - delete addAction.deployed; - delete addAction.status; - const createdAction = await this.client.actions.create(addAction); + + if ('deployed' in addAction) { + delete addAction.deployed; + } + if ('status' in addAction) { + delete addAction.status; + } + + const { data: createdAction } = await this.client.actions.create(addAction); // Add the action id so we can deploy it later action.id = createdAction.id; + return createdAction; } @@ -202,7 +215,13 @@ 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 }); + const actions = await paginate( + this.client.actions.getAll, + { + paginate: true, + } + ); + this.existing = actions; return actions; } catch (err) { @@ -233,20 +252,17 @@ export default class ActionHandler extends DefaultAPIHandler { if (!actions) return; const changes = await this.calcChanges(assets); - //Management of marketplace actions not currently supported, see ESD-23225. - const changesWithMarketplaceActionsFiltered: CalculatedChanges = (() => { - return { - ...changes, - del: changes.del.filter((action: Action) => !isMarketplaceAction(action)), - }; - })(); + // Management of marketplace actions not currently supported, see ESD-23225. + const changesWithMarketplaceActionsFiltered: CalculatedChanges = (() => ({ + ...changes, + del: changes.del.filter((action: Action) => !isMarketplaceAction(action)), + }))(); await super.processChanges(assets, changesWithMarketplaceActionsFiltered); const postProcessedActions = await (async () => { - this.existing = null; //Clear the cache - const actions = await this.getType(); - return actions; + this.existing = null; // Clear the cache + return this.getType(); })(); // Deploy actions @@ -255,9 +271,9 @@ export default class ActionHandler extends DefaultAPIHandler { .filter((action) => action.deployed) .map((actionWithoutId) => { // Add IDs to just-created actions - const actionId = postProcessedActions?.find((postProcessedAction) => { - return postProcessedAction.name === actionWithoutId.name; - })?.id; + const actionId = postProcessedActions?.find( + (postProcessedAction) => postProcessedAction.name === actionWithoutId.name + )?.id; const actionWithId = { ...actionWithoutId, diff --git a/src/tools/auth0/handlers/attackProtection.ts b/src/tools/auth0/handlers/attackProtection.ts index 909cfcc32..e5eacff49 100644 --- a/src/tools/auth0/handlers/attackProtection.ts +++ b/src/tools/auth0/handlers/attackProtection.ts @@ -33,7 +33,7 @@ export default class AttackProtectionHandler extends DefaultAPIHandler { objString(item: Asset): string { const objectString = (() => { - let obj = {}; + const obj = {}; if (item.breachedPasswordDetection?.enabled) { obj['breached-password-protection'] = { enabled: item.breachedPasswordDetection.enabled, @@ -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; @@ -83,19 +83,14 @@ export default class AttackProtectionHandler extends DefaultAPIHandler { return; } - Promise.all([ + await Promise.all([ this.client.attackProtection.updateBreachedPasswordDetectionConfig( - {}, attackProtection.breachedPasswordDetection ), this.client.attackProtection.updateSuspiciousIpThrottlingConfig( - {}, attackProtection.suspiciousIpThrottling ), - this.client.attackProtection.updateBruteForceConfig( - {}, - attackProtection.bruteForceProtection - ), + this.client.attackProtection.updateBruteForceConfig(attackProtection.bruteForceProtection), ]); this.updated += 1; diff --git a/src/tools/auth0/handlers/branding.ts b/src/tools/auth0/handlers/branding.ts index 213dd0f59..789b3b37b 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,31 +31,42 @@ export default class BrandingHandler extends DefaultHandler { } async getType(): Promise { - let branding: { - templates?: { - template: string; - body: string; - }[]; - } = {}; + let branding = {}; 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 as GetBranding200Response; } // 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(); - branding.templates = [ - { - template: constants.UNIVERSAL_LOGIN_TEMPLATE, - body: payload.body, - }, - ]; + const { data: payload } = await this.client.branding.getUniversalLoginTemplate(); + + if (Object.keys(branding).length === 0) { + branding = { + templates: [ + { + template: constants.UNIVERSAL_LOGIN_TEMPLATE, + body: (payload as GetUniversalLogin200ResponseOneOf).body, + }, + ], + }; + } else { + branding = { + ...branding, + templates: [ + { + template: constants.UNIVERSAL_LOGIN_TEMPLATE, + body: (payload as GetUniversalLogin200ResponseOneOf).body, + }, + ], + }; + } } } @@ -80,7 +92,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); } @@ -103,10 +115,7 @@ export default class BrandingHandler extends DefaultHandler { (t) => t.template === constants.UNIVERSAL_LOGIN_TEMPLATE ); if (templateDefinition && templateDefinition.body) { - await this.client.branding.setUniversalLoginTemplate( - {}, - { template: templateDefinition.body } - ); + await this.client.branding.setUniversalLoginTemplate({ template: templateDefinition.body }); this.updated += 1; this.didUpdate(templates); } diff --git a/src/tools/auth0/handlers/clientGrants.ts b/src/tools/auth0/handlers/clientGrants.ts index 2b77d3793..8bb593106 100644 --- a/src/tools/auth0/handlers/clientGrants.ts +++ b/src/tools/auth0/handlers/clientGrants.ts @@ -1,7 +1,9 @@ +import { Client } from 'auth0'; import DefaultHandler, { order } from './default'; import { convertClientNamesToIds } from '../../utils'; -import { Asset, Assets, CalculatedChanges } from '../../../types'; +import { Assets, CalculatedChanges } from '../../../types'; import DefaultAPIHandler from './default'; +import { paginate } from '../client'; export const schema = { type: 'array', @@ -48,7 +50,13 @@ export default class ClientGrantsHandler extends DefaultHandler { if (this.existing) { return this.existing; } - this.existing = await this.client.clientGrants.getAll({ paginate: true, include_totals: true }); + + const clientGrants = await paginate(this.client.clientGrants.getAll, { + paginate: true, + include_totals: true, + }); + + this.existing = clientGrants; // 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 +75,10 @@ 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 }); + const clients = await paginate(this.client.clients.getAll, { + paginate: true, + include_totals: true, + }); 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 00df6f04c..5845ce17f 100644 --- a/src/tools/auth0/handlers/clients.ts +++ b/src/tools/auth0/handlers/clients.ts @@ -1,4 +1,5 @@ -import { Asset, Assets } from '../../../types'; +import { ApiResponse, Assets, PagePaginationParams } from '../../../types'; +import { paginate } from '../client'; import DefaultAPIHandler from './default'; export const schema = { @@ -20,7 +21,7 @@ export type Client = { }; export default class ClientHandler extends DefaultAPIHandler { - existing: Asset[] | null; + existing: Client[]; constructor(config: DefaultAPIHandler) { super({ @@ -82,11 +83,14 @@ export default class ClientHandler extends DefaultAPIHandler { async getType() { if (this.existing) return this.existing; - this.existing = await this.client.clients.getAll({ + + const clients = await paginate(this.client.clients.getAll, { paginate: true, include_totals: true, is_global: false, }); + + this.existing = clients; return this.existing; } } diff --git a/src/tools/auth0/handlers/connections.ts b/src/tools/auth0/handlers/connections.ts index f5b1aabf9..ef0fcf974 100644 --- a/src/tools/auth0/handlers/connections.ts +++ b/src/tools/auth0/handlers/connections.ts @@ -1,9 +1,11 @@ import dotProp from 'dot-prop'; import _ from 'lodash'; +import { Client, Connection } from 'auth0'; import DefaultAPIHandler, { order } from './default'; import { filterExcluded, convertClientNameToId, getEnabledClients } from '../../utils'; import { CalculatedChanges, Asset, Assets } from '../../../types'; import { ConfigFunction } from '../../../configFactory'; +import { paginate } from '../client'; import ScimHandler from './scimHandler'; export const schema = { @@ -21,11 +23,17 @@ export const schema = { type: 'object', properties: { connection_name: { type: 'string' }, - mapping: { type: 'array', items: { type: 'object', properties: { scim: { type: 'string' }, auth0: { type: 'string' } } } }, - user_id_attribute: { type: 'string' } + mapping: { + type: 'array', + items: { + type: 'object', + properties: { scim: { type: 'string' }, auth0: { type: 'string' } }, + }, + }, + user_id_attribute: { type: 'string' }, }, required: ['mapping', 'user_id_attribute'], - } + }, }, required: ['name', 'strategy'], }, @@ -99,11 +107,12 @@ export default class ConnectionsHandler extends DefaultAPIHandler { functions: { // When `connections` is updated, it can result in `update`,`create` or `delete` action on SCIM. // Because, `scim_configuration` is inside `connections`. - update: async (requestParams, bodyParams) => await this.scimHandler.updateOverride(requestParams, bodyParams), + update: async (requestParams, bodyParams) => + await this.scimHandler.updateOverride(requestParams, bodyParams), // When a new `connection` is created. We can perform only `create` option on SCIM. // When a connection is `deleted`. `scim_configuration` is also deleted along with it; no action on SCIM is required. - create: async (bodyParams) => await this.scimHandler.createOverride(bodyParams) + create: async (bodyParams) => await this.scimHandler.createOverride(bodyParams), }, }); @@ -133,7 +142,8 @@ export default class ConnectionsHandler extends DefaultAPIHandler { async getType(): Promise { if (this.existing) return this.existing; - const connections: Asset[] = await this.client.connections.getAll({ + + const connections = await paginate(this.client.connections.getAll, { paginate: true, include_totals: true, }); @@ -141,10 +151,10 @@ export default class ConnectionsHandler extends DefaultAPIHandler { // Filter out database connections this.existing = connections.filter((c) => c.strategy !== 'auth0'); if (this.existing === null) return []; - + // Apply `scim_configuration` to all the relevant `SCIM` connections. This method mutates `this.existing`. await this.scimHandler.applyScimConfiguration(this.existing); - + return this.existing; } @@ -161,8 +171,12 @@ 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({ + const clients = await paginate(this.client.clients.getAll, { + paginate: true, + include_totals: true, + }); + + const existingConnections = await paginate(this.client.connections.getAll, { paginate: true, include_totals: true, }); diff --git a/src/tools/auth0/handlers/customDomains.ts b/src/tools/auth0/handlers/customDomains.ts index f84a7bf8a..e06152f2d 100644 --- a/src/tools/auth0/handlers/customDomains.ts +++ b/src/tools/auth0/handlers/customDomains.ts @@ -48,7 +48,7 @@ export default class CustomDomainsHadnler extends DefaultAPIHandler { return this.existing; } - const customDomains = await this.client.customDomains.getAll({ 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 3468af644..ce16845a7 100644 --- a/src/tools/auth0/handlers/databases.ts +++ b/src/tools/auth0/handlers/databases.ts @@ -1,7 +1,9 @@ +import { Client, Connection, GetConnectionsStrategyEnum } from 'auth0'; import DefaultAPIHandler, { order } from './default'; import constants from '../../constants'; import { filterExcluded, getEnabledClients } from '../../utils'; import { CalculatedChanges, Assets } from '../../../types'; +import { paginate } from '../client'; import log from '../../../logger'; export const schema = { @@ -48,21 +50,20 @@ 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((response) => { + const connection = response.data; const attributes = payload?.options?.attributes; const requiresUsername = payload?.options?.requires_username; const validation = payload?.options?.validation; if (attributes && (requiresUsername || validation)) { - log.warn('Warning: "attributes" cannot be used with "requires_username" or "validation". Please remove one of the conflicting options.'); - } - - else if (attributes) { + log.warn( + 'Warning: "attributes" cannot be used with "requires_username" or "validation". Please remove one of the conflicting options.' + ); + } else if (attributes) { delete connection.options.validation; delete connection.options.requires_username; - } - - else if (requiresUsername || validation) { + } else if (requiresUsername || validation) { delete connection.options.attributes; } @@ -76,11 +77,13 @@ export default class DatabaseHandler extends DefaultAPIHandler { async getType() { if (this.existing) return this.existing; - this.existing = this.client.connections.getAll({ - strategy: 'auth0', + + const connections = await paginate(this.client.connections.getAll, { + strategy: [GetConnectionsStrategyEnum.auth0], paginate: true, include_totals: true, }); + this.existing = connections; return this.existing; } @@ -98,12 +101,20 @@ 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', + + const clients = await paginate(this.client.clients.getAll, { paginate: true, include_totals: true, }); + + const existingDatabasesConnections = await paginate( + this.client.connections.getAll, + { + strategy: [GetConnectionsStrategyEnum.auth0], + paginate: true, + include_totals: true, + } + ); const formatted = databases.map((db) => { if (db.enabled_clients) { return { diff --git a/src/tools/auth0/handlers/default.ts b/src/tools/auth0/handlers/default.ts index 1889002c6..a2e071cfd 100644 --- a/src/tools/auth0/handlers/default.ts +++ b/src/tools/auth0/handlers/default.ts @@ -1,3 +1,4 @@ +import { JSONApiResponse } from 'auth0'; import ValidationError from '../../validationError'; import { @@ -98,11 +99,19 @@ export default class APIHandler { } didCreate(item: Asset): void { - log.info(`Created [${this.type}]: ${this.objString(item)}`); + if (typeof item === 'object' && item instanceof JSONApiResponse) { + log.info(`Created [${this.type}]: ${this.objString(item?.data)}`); + } else { + log.info(`Created [${this.type}]: ${this.objString(item)}`); + } } didUpdate(item: Asset): void { - log.info(`Updated [${this.type}]: ${this.objString(item)}`); + if (typeof item === 'object' && item instanceof JSONApiResponse) { + log.info(`Updated [${this.type}]: ${this.objString(item?.data)}`); + } else { + log.info(`Updated [${this.type}]: ${this.objString(item)}`); + } } objString(item: Asset): string { diff --git a/src/tools/auth0/handlers/emailProvider.ts b/src/tools/auth0/handlers/emailProvider.ts index 25fefc630..ae4ad2cb4 100644 --- a/src/tools/auth0/handlers/emailProvider.ts +++ b/src/tools/auth0/handlers/emailProvider.ts @@ -1,3 +1,5 @@ +import { EmailProviderCreate } from 'auth0'; +import { isEmpty } from 'lodash'; import DefaultHandler from './default'; import { Asset, Assets } from '../../../types'; @@ -16,7 +18,11 @@ 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; @@ -32,12 +38,19 @@ export default class EmailProviderHandler extends DefaultHandler { if (!emailProvider) return; - let existing = await this.getType(); + const existing = await this.getType(); + // 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(); - this.didDelete(existing); + // await this.client.emails.delete(); + existing.enabled = false; + if (isEmpty(existing.credentials)) { + delete existing.credentials; + } + const updated = await this.client.emails.update(existing); + this.updated += 1; + this.didUpdate(updated); } return; } @@ -45,20 +58,17 @@ 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(); - this.didDelete(existing); - existing = {}; + // await this.client.emailProvider.delete(); + existing.enabled = false; } } 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(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); + const created = await this.client.emails.configure(emailProvider as EmailProviderCreate); this.created += 1; this.didCreate(created); } diff --git a/src/tools/auth0/handlers/emailTemplates.ts b/src/tools/auth0/handlers/emailTemplates.ts index 3956f1286..b6f93147a 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,17 +51,19 @@ 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; - this.didUpdate(updated); + const params = { templateName: emailTemplate[identifierField] }; + const { data: updated } = await this.client.emailTemplates.update(params, emailTemplate); + // Remove body from the response + const { body, ...excludedBody } = updated; + this.didUpdate(excludedBody); 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; - this.didCreate(created); + const { data: created } = await this.client.emailTemplates.create(emailTemplate); + // Remove body from the response + const { body, ...excludedBody } = created; + this.didCreate(excludedBody); this.created += 1; } else { throw err; diff --git a/src/tools/auth0/handlers/guardianFactorProviders.ts b/src/tools/auth0/handlers/guardianFactorProviders.ts index 5f86fead7..34e071417 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 387c5abca..3c8267222 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 5359dabe7..53e370310 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 46a4e4e97..45c1f032f 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,10 @@ 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 6f1781370..6d98cefb7 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,10 @@ 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 9d81de363..75d5c44a8 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 dbdde96e7..6bb1fccd5 100644 --- a/src/tools/auth0/handlers/hooks.ts +++ b/src/tools/auth0/handlers/hooks.ts @@ -1,8 +1,10 @@ +import { Hook } from 'auth0'; import DefaultHandler from './default'; import constants from '../../constants'; import { Asset, Assets, CalculatedChanges } from '../../../types'; import log from '../../../logger'; import { isDeprecatedError } from '../../utils'; +import { paginate } from '../client'; const ALLOWED_TRIGGER_IDS = [ 'credentials-exchange', @@ -142,7 +144,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 +173,20 @@ export default class HooksHandler extends DefaultHandler { } try { - const hooks = await this.client.hooks.getAll({ paginate: true, include_totals: true }); + const hooks = await paginate(this.client.hooks.getAll, { + paginate: true, + 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 e9e0daa3e..3f4791aca 100644 --- a/src/tools/auth0/handlers/index.ts +++ b/src/tools/auth0/handlers/index.ts @@ -1,4 +1,3 @@ -//TODO: import * as rules from './rules'; import * as rulesConfigs from './rulesConfigs'; import * as hooks from './hooks'; @@ -20,7 +19,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 +53,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 5aba24910..6d33a5654 100644 --- a/src/tools/auth0/handlers/logStreams.ts +++ b/src/tools/auth0/handlers/logStreams.ts @@ -58,9 +58,9 @@ export default class LogStreamsHandler extends DefaultAPIHandler { return this.existing; } - const logStreams = await this.client.logStreams.getAll({ paginate: false }).then((logStreams) => + const logStreams = await this.client.logStreams.getAll().then(({ data: logStreams }) => logStreams.map((logStream) => { - if (logStream.status === 'suspended') delete logStream.status; + 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 977690e1b..000000000 --- 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 45afa30d5..eec8c8ee1 100644 --- a/src/tools/auth0/handlers/organizations.ts +++ b/src/tools/auth0/handlers/organizations.ts @@ -1,8 +1,14 @@ import _ from 'lodash'; +import { + Connection, + GetOrganizations200ResponseOneOfInner, + PostEnabledConnectionsRequest, +} from 'auth0'; import DefaultHandler, { order } from './default'; import { calculateChanges } from '../../calculateChanges'; import log from '../../../logger'; import { Asset, Assets, CalculatedChanges } from '../../../types'; +import { paginate } from '../client'; export const schema = { type: 'array', @@ -21,7 +27,7 @@ export const schema = { connection_id: { type: 'string' }, assign_membership_on_login: { type: 'boolean' }, show_as_button: { type: 'boolean' }, - is_signup_enabled: { type: 'boolean' } + is_signup_enabled: { type: 'boolean' }, }, }, }, @@ -74,7 +80,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( @@ -128,11 +134,9 @@ export default class OrganizationsHandler extends DefaultHandler { existingConnections.find( (x) => x.connection_id === c.connection_id && - ( - x.assign_membership_on_login !== c.assign_membership_on_login || + (x.assign_membership_on_login !== c.assign_membership_on_login || x.show_as_button !== c.show_as_button || - x.is_signup_enabled !== c.is_signup_enabled - ) + x.is_signup_enabled !== c.is_signup_enabled) ) ); @@ -141,11 +145,11 @@ 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, show_as_button: conn.show_as_button, - is_signup_enabled: conn.is_signup_enabled + is_signup_enabled: conn.is_signup_enabled, } ) .catch(() => { @@ -159,7 +163,13 @@ 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}` @@ -171,7 +181,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}` @@ -210,12 +220,16 @@ export default class OrganizationsHandler extends DefaultHandler { } try { - const organizations = await this.client.organizations.getAll({ - checkpoint: true, - include_totals: true, - }); + const organizations = await paginate( + this.client.organizations.getAll, + { + paginate: true, + 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; @@ -238,7 +252,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({ + + const existingConnections = await paginate(this.client.connections.getAll, { paginate: true, include_totals: true, }); diff --git a/src/tools/auth0/handlers/pages.ts b/src/tools/auth0/handlers/pages.ts index 679441e16..745ce7be2 100644 --- a/src/tools/auth0/handlers/pages.ts +++ b/src/tools/auth0/handlers/pages.ts @@ -1,6 +1,8 @@ +import { Client } from 'auth0'; import DefaultHandler from './default'; import constants from '../../constants'; import { Asset, Assets } from '../../../types'; +import { paginate } from '../client'; export const supportedPages = constants.PAGE_NAMES.filter((p) => p.includes('.json')).map((p) => p.replace('.json', '') @@ -50,10 +52,10 @@ export default class PagesHandler extends DefaultHandler { } async updateLoginPage(page): Promise { - const globalClient = await this.client.clients.getAll({ - is_global: true, + const globalClient = await paginate(this.client.clients.getAll, { paginate: true, include_totals: true, + is_global: true, }); if (!globalClient[0]) { @@ -86,7 +88,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,10 +105,10 @@ export default class PagesHandler extends DefaultHandler { }[] = []; // Login page is handled via the global client - const globalClient = await this.client.clients.getAll({ - is_global: true, + const globalClient = await paginate(this.client.clients.getAll, { paginate: true, include_totals: true, + is_global: true, }); if (!globalClient[0]) { throw new Error('Unable to find global client id when trying to dump the login page'); @@ -120,7 +122,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 c466da39c..ef0f31721 100644 --- a/src/tools/auth0/handlers/prompts.ts +++ b/src/tools/auth0/handlers/prompts.ts @@ -1,6 +1,7 @@ import { isEmpty } from 'lodash'; +import { GetPartialsPromptEnum, PutPartialsRequest } from 'auth0'; import DefaultHandler from './default'; -import { Asset, Assets, Language, languages } from '../../../types'; +import { Assets, Language, languages } from '../../../types'; import log from '../../../logger'; const promptTypes = [ @@ -114,7 +115,7 @@ const customPartialsScreenTypes = [ 'signup-id', 'signup-password', 'login-passwordless-sms-otp', - 'login-passwordless-email-code' + 'login-passwordless-email-code', ] as const; export type CustomPartialsScreenTypes = typeof customPartialsPromptTypes[number]; @@ -168,67 +169,73 @@ export const schema = { }, customText: { type: 'object', - properties: languages.reduce((acc, language) => { - return { + properties: languages.reduce( + (acc, language) => ({ ...acc, [language]: { type: 'object', - properties: promptTypes.reduce((promptAcc, promptType) => { - return { + properties: promptTypes.reduce( + (promptAcc, promptType) => ({ ...promptAcc, [promptType]: { type: 'object', - properties: screenTypes.reduce((screenAcc, screenType) => { - return { + properties: screenTypes.reduce( + (screenAcc, screenType) => ({ ...screenAcc, [screenType]: { type: 'object', }, - }; - }, {}), + }), + {} + ), }, - }; - }, {}), + }), + {} + ), }, - }; - }, {}), + }), + {} + ), }, partials: { type: 'object', - properties: customPartialsPromptTypes.reduce((acc, customPartialsPromptType) => { - return { + properties: customPartialsPromptTypes.reduce( + (acc, customPartialsPromptType) => ({ ...acc, [customPartialsPromptType]: { oneOf: [ { type: 'object', - properties: customPartialsScreenTypes.reduce((screenAcc, customPartialsScreenType) => { - return { + properties: customPartialsScreenTypes.reduce( + (screenAcc, customPartialsScreenType) => ({ ...screenAcc, [customPartialsScreenType]: { oneOf: [ { type: 'object', - properties: customPartialsInsertionPoints.reduce((insertionAcc, customPartialsInsertionPoint) => { - return { + properties: customPartialsInsertionPoints.reduce( + (insertionAcc, customPartialsInsertionPoint) => ({ ...insertionAcc, [customPartialsInsertionPoint]: { type: 'string', }, - }; - }, {}), + }), + {} + ), }, - { type: 'null' } + { type: 'null' }, ], }, - }; - }, {}), + }), + {} + ), }, - { type: 'null' } + { type: 'null' }, ], }, - }; - }, {}), + }), + {} + ), }, }, }; @@ -263,20 +270,6 @@ export default class PromptsHandler extends DefaultHandler { private IsFeatureSupported: boolean = true; - private promptClient = this.client.prompts._getRestClient('/prompts/:prompt/partials'); - - private async partialHttpRequest( - method: string, - options: [{ prompt: string }, ...Record[]] - ): Promise { - return this.withErrorHandling(async () => { - if (method === 'put') { - return this.promptClient.invoke('wrappedProvider', [method, options]); - } - return this.promptClient[method](...options); - }); - } - constructor(options: DefaultHandler) { super({ ...options, @@ -289,7 +282,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(); @@ -303,9 +296,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; }); @@ -322,7 +315,7 @@ export default class PromptsHandler extends DefaultHandler { prompt: promptType, language, }) - .then((customTextData) => { + .then(({ data: customTextData }) => { if (isEmpty(customTextData)) return null; return { language, @@ -391,10 +384,10 @@ export default class PromptsHandler extends DefaultHandler { async getCustomPartial({ prompt, }: { - prompt: CustomPartialsPromptTypes; + prompt: GetPartialsPromptEnum; }): Promise { if (!this.IsFeatureSupported) return {}; - return this.partialHttpRequest('get', [{ prompt: prompt }]); // Implement this method for making HTTP requests + return this.withErrorHandling(async () => this.client.prompts.getPartials({ prompt })); } async getCustomPromptsPartials(): Promise { @@ -403,10 +396,10 @@ export default class PromptsHandler extends DefaultHandler { data: customPartialsPromptTypes, generator: (promptType) => this.getCustomPartial({ - prompt: promptType, + prompt: promptType as GetPartialsPromptEnum, }).then((partialsData: CustomPromptPartials) => { - if (isEmpty(partialsData)) return null; - return { promptType, partialsData }; + if (isEmpty(partialsData?.data)) return null; + return { promptType, partialsData: partialsData.data }; }), }) .promise(); @@ -434,7 +427,7 @@ export default class PromptsHandler extends DefaultHandler { const { partials, customText, ...promptSettings } = prompts; if (!isEmpty(promptSettings)) { - await this.client.prompts.updateSettings({}, promptSettings); + await this.client.prompts.update(promptSettings); } await this.updateCustomTextSettings(customText); @@ -467,11 +460,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(); } @@ -484,7 +473,9 @@ export default class PromptsHandler extends DefaultHandler { body: CustomPromptPartialsScreens; }): Promise { if (!this.IsFeatureSupported) return; - await this.partialHttpRequest('put', [{ prompt: prompt }, body]); // Implement this method for making HTTP requests + await this.withErrorHandling(async () => + this.client.prompts.updatePartials({ prompt } as PutPartialsRequest, body) + ); } async updateCustomPromptsPartials(partials: Prompts['partials']): Promise { diff --git a/src/tools/auth0/handlers/resourceServers.ts b/src/tools/auth0/handlers/resourceServers.ts index 5541d7759..250305ef3 100644 --- a/src/tools/auth0/handlers/resourceServers.ts +++ b/src/tools/auth0/handlers/resourceServers.ts @@ -1,9 +1,11 @@ +import { ResourceServer } from 'auth0'; import ValidationError from '../../validationError'; import constants from '../../constants'; import DefaultHandler from './default'; import { calculateChanges } from '../../calculateChanges'; import { Assets, CalculatedChanges } from '../../../types'; +import { paginate } from '../client'; export const excludeSchema = { type: 'array', @@ -34,12 +36,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,7 +54,8 @@ export default class ResourceServersHandler extends DefaultHandler { async getType(): Promise { if (this.existing) return this.existing; - const resourceServers = await this.client.resourceServers.getAll({ + + const resourceServers = await paginate(this.client.resourceServers.getAll, { paginate: true, include_totals: true, }); diff --git a/src/tools/auth0/handlers/roles.ts b/src/tools/auth0/handlers/roles.ts index 260449c2b..d40f55dd2 100644 --- a/src/tools/auth0/handlers/roles.ts +++ b/src/tools/auth0/handlers/roles.ts @@ -1,7 +1,10 @@ +import { GetOrganizationMemberRoles200ResponseOneOfInner, Permission, ResourceServer } from 'auth0'; +import { isArray } from 'lodash'; import DefaultHandler, { order } from './default'; import { calculateChanges } from '../../calculateChanges'; import log from '../../../logger'; import { Asset, Assets, CalculatedChanges } from '../../../types'; +import { paginate } from '../client'; export const schema = { type: 'array', @@ -41,13 +44,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( - { id: created.id }, - { permissions: data.permissions } - ); + await this.client.roles.addPermissions({ id: created.id }, { permissions: data.permissions }); } return created; @@ -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,21 +151,49 @@ export default class RolesHandler extends DefaultHandler { } try { - const roles = await this.client.roles.getAll({ paginate: true, include_totals: true }); - for (let index = 0; index < roles.length; index++) { - const permissions = await this.client.roles.permissions.getAll({ + const roles = await paginate( + this.client.roles.getAll, + { paginate: true, include_totals: true, - id: roles[index].id, - }); + } + ); + + for (let index = 0; index < roles.length; index++) { + // paginate without paginate helper as this is not getAll but getPermissions + // paginate through all permissions for each role + const allPermission: Permission[] = []; + let page = 0; + while (true) { + const { + data: { permissions, total }, + } = await this.client.roles.getPermissions({ + include_totals: true, + id: roles[index].id, + page: page, + per_page: 100, + }); + + allPermission.push(...permissions); + page += 1; + if (allPermission.length === total) { + break; + } + // if we get an unexpected response, break the loop to avoid infinite loop + if (!isArray(permissions) || typeof total !== 'number') { + break; + } + } + const strippedPerms = await Promise.all( - permissions.map(async (permission) => { + allPermission.map(async (permission) => { delete permission.resource_server_name; delete permission.description; return permission; }) ); - roles[index].permissions = strippedPerms; + + (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 b95d0dbf8..b88df00c8 100644 --- a/src/tools/auth0/handlers/rules.ts +++ b/src/tools/auth0/handlers/rules.ts @@ -1,9 +1,11 @@ +import { Rule } from 'auth0'; import ValidationError from '../../validationError'; import { convertJsonToString, stripFields, duplicateItems, isDeprecatedError } from '../../utils'; import DefaultHandler from './default'; import log from '../../../logger'; import { calculateChanges } from '../../calculateChanges'; import { Asset, Assets, CalculatedChanges } from '../../../types'; +import { paginate } from '../client'; export const excludeSchema = { type: 'array', @@ -63,7 +65,12 @@ 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 }); + + const rules = await paginate(this.client.rules.getAll, { + paginate: true, + include_totals: true, + }); + this.existing = 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 8e4301332..170e914b8 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/scimHandler.ts b/src/tools/auth0/handlers/scimHandler.ts index 938d44089..bf3acb89a 100644 --- a/src/tools/auth0/handlers/scimHandler.ts +++ b/src/tools/auth0/handlers/scimHandler.ts @@ -1,7 +1,7 @@ -import { Asset } from '../../../types'; -import log from '../../../logger'; import { PromisePoolExecutor } from 'promise-pool-executor'; -import { BaseAuth0APIClient } from '../../../types'; +import { ConnectionCreate } from 'auth0'; +import { Asset, Auth0APIClient } from '../../../types'; +import log from '../../../logger'; import { ConfigFunction } from '../../../configFactory'; interface IdMapValue { @@ -18,7 +18,19 @@ interface ScimBodyParams { mapping: { scim: string; auth0: string }[]; } -interface ScimScopes { read: boolean; create: boolean; update: boolean; delete: boolean } +interface ScimScopes { + read: boolean; + create: boolean; + update: boolean; + delete: boolean; +} + +interface ScimScopes { + read: boolean; + create: boolean; + update: boolean; + delete: boolean; +} /** * The current version of this sdk use `node-auth0` v3. But `SCIM` features are not natively supported by v3. @@ -26,23 +38,29 @@ interface ScimScopes { read: boolean; create: boolean; update: boolean; delete: */ export default class ScimHandler { private idMap: Map; + private readonly scimStrategies = ['samlp', 'oidc', 'okta', 'waad']; + private config: ConfigFunction; - private connectionsManager: BaseAuth0APIClient['connections']; + + private connectionsManager: Auth0APIClient['connections']; + private scimScopes: ScimScopes = { read: true, create: true, update: true, delete: true }; + private scopeMethodMap = { get: 'read', post: 'create', patch: 'update', - delete: 'delete' - } + delete: 'delete', + }; + private scimClient: any; + private poolClient: PromisePoolExecutor; - + constructor(config, connectionsManager, poolClient: PromisePoolExecutor) { this.config = config; this.connectionsManager = connectionsManager; - this.scimClient = connectionsManager?._getRestClient('/connections/:id/scim-configuration'); this.poolClient = poolClient; this.idMap = new Map(); } @@ -54,7 +72,7 @@ export default class ScimHandler { isScimStrategy(strategy: string) { return this.scimStrategies.includes(strategy.toLowerCase()); } - + /** * Creates connection_id -> { strategy, scimConfiguration } map. * Store only the SCIM ids available on the existing / remote config. @@ -66,26 +84,33 @@ export default class ScimHandler { this.idMap.clear(); log.info('Reviewing connections for SCIM support. This may take a while...'); - await this.poolClient.addEachTask({ - data: connections || [], - generator: (connection) => { - if (!this.scimScopes.read) return Promise.resolve(null); - if (!this.isScimStrategy(connection.strategy)) return Promise.resolve(null); - - this.idMap.set(connection.id, { strategy: connection.strategy }); - return this.getScimConfiguration({ id: connection.id }).then((scimConfiguration) => { - if (scimConfiguration) { - const { mapping, user_id_attribute, connection_id } = scimConfiguration; - this.idMap.set(connection_id, { ...this.idMap.get(connection_id)!, scimConfiguration : { mapping, user_id_attribute } }); - } - }).catch((error) => { - throw new Error( - `Problem fetching SCIM configurations while running \"createIdMap\".\n${ error }` - ); - }); - }, - }) - .promise(); + await this.poolClient + .addEachTask({ + data: connections || [], + generator: (connection) => { + if (!this.scimScopes.read) return Promise.resolve(null); + if (!this.isScimStrategy(connection.strategy)) return Promise.resolve(null); + + this.idMap.set(connection.id, { strategy: connection.strategy }); + return this.getScimConfiguration({ id: connection.id }) + .then((response) => { + const scimConfiguration = response?.data; + if (scimConfiguration) { + const { mapping, user_id_attribute, connection_id } = scimConfiguration; + this.idMap.set(connection_id, { + ...this.idMap.get(connection_id)!, + scimConfiguration: { mapping, user_id_attribute }, + }); + } + }) + .catch((error) => { + throw new Error( + `Problem fetching SCIM configurations while running \"createIdMap\".\n${error}` + ); + }); + }, + }) + .promise(); } /** @@ -93,7 +118,7 @@ export default class ScimHandler { * The following conditions should be met to have `scim_configuration` set to a `connection`. * 1. Connection `strategy` should be one of `scimStrategies` * 2. Connection should have `SCIM` enabled. - * + * * This method mutates the incoming `connections`. */ async applyScimConfiguration(connections: Asset[]) { @@ -113,15 +138,24 @@ export default class ScimHandler { } } } - - /** + + /** * Wrapper over scimClient methods. + */ + /* + private async useScimClient( + method: string, + options: [ScimRequestParams, ...Record[]] + ): Promise { + return await this.withErrorHandling( + async () => { + return await this.scimClient[method](...options); + }, + method, + options[0].id + ); + } */ - private async useScimClient(method: string, options: [ScimRequestParams, ...Record[]]): Promise { - return await this.withErrorHandling(async () => { - return await this.scimClient[method](...options); - }, method, options[0].id); - } /** * Error handler wrapper. @@ -133,77 +167,114 @@ export default class ScimHandler { return this.handleExpectedErrors(error, method, connectionId); } } - + /** - * Handle expected errors. - */ + * Handle expected errors. + */ handleExpectedErrors(error, method: string, connectionId: string) { // Skip the connection if it returns 404. This can happen if `SCIM` is not enabled on a `SCIM` connection. if (error && error.statusCode === 404) { - log.debug(`SCIM configuration is not enabled on connection \"${ connectionId }\".`); + log.debug(`SCIM configuration is not enabled on connection \"${connectionId}\".`); return null; - }; + } - // Skip the connection if it returns 403. Looks like "scim_config" permissions are not enabled on Management API. + // Skip the connection if it returns 403. Looks like "scim_config" permissions are not enabled on Management API. if (error && error.statusCode === 403) { const scope = this.scopeMethodMap[method]; this.scimScopes[scope] = false; - const warningMessage = `Insufficient scope, \"${ scope }:scim_config\". Required \"read:scim_config\", \"create:scim_config\", \"update:scim_config\" and \"delete:scim_config\".`; - const suggestionText = `If you are not using SCIM, you can keep these permissions disabled and ignore this warning.`; + const warningMessage = `Insufficient scope, \"${scope}:scim_config\". Required \"read:scim_config\", \"create:scim_config\", \"update:scim_config\" and \"delete:scim_config\".`; + const suggestionText = + 'If you are not using SCIM, you can keep these permissions disabled and ignore this warning.'; - log.warn(`${ warningMessage }\n${ suggestionText }\n`); + log.warn(`${warningMessage}\n${suggestionText}\n`); return null; } // Skip the connection if it returns 400. This can happen if `SCIM` configuration already exists on a `SCIM` connection. if (error && error.statusCode === 400 && error.message?.includes('already exists')) { - log.warn(`SCIM configuration already exists on connection \"${ connectionId }\".`); + log.warn(`SCIM configuration already exists on connection \"${connectionId}\".`); return null; } // Rate limiting errors should be mostly handled by `scimClient`. But, in the worst case scenario also we don;t want to break the pipeline. if (error && error.statusCode === 429) { - log.error(`The global rate limit has been exceeded, resulting in a ${ error.statusCode } error. ${ error.message }. Although this is an error, it is not blocking the pipeline.`); + log.error( + `The global rate limit has been exceeded, resulting in a ${error.statusCode} error. ${error.message}. Although this is an error, it is not blocking the pipeline.` + ); return null; } - log.error(`SCIM request failed with status code ${ error.statusCode }. ${ error.message || error.toString() }.`); + log.error( + `SCIM request failed with status code ${error.statusCode}. ${ + error.message || error.toString() + }.` + ); throw error; } /** * Creates a new `SCIM` configuration. */ - async createScimConfiguration({ id: connection_id }: ScimRequestParams, { user_id_attribute, mapping }: ScimBodyParams): Promise { - log.debug(`Creating SCIM configuration on connection ${ connection_id }`); - return await this.useScimClient('create', [ { id: connection_id }, { user_id_attribute, mapping } ]); + async createScimConfiguration( + { id }: ScimRequestParams, + // eslint-disable-next-line camelcase + { user_id_attribute, mapping }: ScimBodyParams + ): Promise { + log.debug(`Creating SCIM configuration on connection ${id}`); + + return this.withErrorHandling( + async () => + this.connectionsManager.createScimConfiguration({ id }, { user_id_attribute, mapping }), + 'create', + id + ); } /** * Retrieves `SCIM` configuration of an enterprise connection. */ - async getScimConfiguration({ id: connection_id }: ScimRequestParams): Promise { - log.debug(`Getting SCIM configuration from connection ${ connection_id }`); - return await this.useScimClient('get', [ { id: connection_id } ]); + async getScimConfiguration({ id }: ScimRequestParams): Promise { + log.debug(`Getting SCIM configuration from connection ${id}`); + + return this.withErrorHandling( + async () => this.connectionsManager.getScimConfiguration({ id }), + 'get', + id + ); } /** * Updates an existing `SCIM` configuration. */ - async updateScimConfiguration({ id: connection_id }: ScimRequestParams, { user_id_attribute, mapping }: ScimBodyParams): Promise { - log.debug(`Updating SCIM configuration on connection ${ connection_id }`); - return await this.useScimClient('patch', [ { id: connection_id }, { user_id_attribute, mapping } ]); + async updateScimConfiguration( + { id }: ScimRequestParams, + // eslint-disable-next-line camelcase + { user_id_attribute, mapping }: ScimBodyParams + ): Promise { + log.debug(`Updating SCIM configuration on connection ${id}`); + + return this.withErrorHandling( + async () => + this.connectionsManager.updateScimConfiguration({ id }, { user_id_attribute, mapping }), + 'patch', + id + ); } /** * Deletes an existing `SCIM` configuration. */ - async deleteScimConfiguration({ id: connection_id }: ScimRequestParams): Promise { - log.debug(`Deleting SCIM configuration on connection ${ connection_id }`); - return await this.useScimClient('delete', [ { id: connection_id } ]); + async deleteScimConfiguration({ id }: ScimRequestParams): Promise { + log.debug(`Deleting SCIM configuration on connection ${id}`); + + return this.withErrorHandling( + async () => this.connectionsManager.deleteScimConfiguration({ id }), + 'delete', + id + ); } - + async updateOverride(requestParams: ScimRequestParams, bodyParams: Asset) { // Extract `scim_configuration` from `bodyParams`. // Remove `scim_configuration` from `bodyParams`, because `connections.update` doesn't accept it. @@ -224,20 +295,20 @@ export default class ScimHandler { if (this.scimScopes.update) { await this.updateScimConfiguration(requestParams, scimBodyParams); } - } else { - if (this.config('AUTH0_ALLOW_DELETE')) { - if (this.scimScopes.delete) { - await this.deleteScimConfiguration(requestParams); - } - } else { - log.warn(`Skipping DELETE scim_configuration on \"${ requestParams.id }\". Enable deletes by setting \"AUTH0_ALLOW_DELETE\" to true in your config.`); + } else if (this.config('AUTH0_ALLOW_DELETE')) { + if (this.scimScopes.delete) { + await this.deleteScimConfiguration(requestParams); } + } else { + log.warn( + `Skipping DELETE scim_configuration on \"${requestParams.id}\". Enable deletes by setting \"AUTH0_ALLOW_DELETE\" to true in your config.` + ); } } else if (scimBodyParams && this.scimScopes.create) { await this.createScimConfiguration(requestParams, scimBodyParams); } - // Return response from connections.update(...). + // Return response from connections.update(...). return updated; } @@ -248,15 +319,14 @@ export default class ScimHandler { delete bodyParams.scim_configuration; // First, create the new `connection`. - const created = await this.connectionsManager.create(bodyParams); + const { data } = await this.connectionsManager.create(bodyParams as ConnectionCreate); if (scimBodyParams && this.scimScopes.create) { // Now, create the `scim_configuration` for newly created `connection`. - await this.createScimConfiguration({id: created.id}, scimBodyParams); + await this.createScimConfiguration({ id: data.id }, scimBodyParams); } - // Return response from connections.create(...). - return created; + // Return response from connections.create(...). + return data; } } - diff --git a/src/tools/auth0/handlers/tenant.ts b/src/tools/auth0/handlers/tenant.ts index 941ce5d04..e8b619199 100644 --- a/src/tools/auth0/handlers/tenant.ts +++ b/src/tools/auth0/handlers/tenant.ts @@ -1,16 +1,21 @@ +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), @@ -18,76 +23,9 @@ const blockPageKeys = [ ...supportedPages, ]; -export default class TenantHandler extends DefaultHandler { - existing: Tenant; - - constructor(options: DefaultHandler) { - super({ - ...options, - type: 'tenant', - }); - } - - async getType(): Promise { - const tenant = await this.client.tenant.getSettings(); - - tenant.flags = removeUnallowedTenantFlags(tenant.flags); - - this.existing = tenant; - - blockPageKeys.forEach((key) => { - if (tenant[key]) delete tenant[key]; - }); - - return tenant; - } - - async validate(assets: Assets): Promise { - const { tenant } = assets; - - // Nothing to validate? - if (!tenant) return; - - const pageKeys = Object.keys(tenant).filter((k) => blockPageKeys.includes(k)); - if (pageKeys.length > 0) { - throw new ValidationError( - `The following pages ${convertJsonToString( - pageKeys - )} were found in tenant settings. Pages should be set separately. Please refer to the documentation.` - ); - } - } - - // Run after other updates so objected can be referenced such as default directory - @order('100') - async processChanges(assets: Assets): Promise { - const { tenant } = assets; - - // Do nothing if not set - if (!tenant) return; - - const updatedTenant: Partial = { - ...tenant, - }; - - if ('flags' in updatedTenant) { - updatedTenant.flags = removeUnallowedTenantFlags(tenant.flags); - if (Object.keys(updatedTenant.flags).length === 0) { - delete updatedTenant.flags; - } - } - - if (updatedTenant && Object.keys(updatedTenant).length > 0) { - await this.client.tenant.updateSettings(updatedTenant); - this.updated += 1; - this.didUpdate(updatedTenant); - } - } -} - /* 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 +60,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 +77,7 @@ export const removeUnallowedTenantFlags = ( [proposedKey]: proposedFlags[proposedKey], }; }, - {} + {} as unknown as TenantSettingsFlags ); if (removedFlags.length > 0) { @@ -155,3 +93,72 @@ export const removeUnallowedTenantFlags = ( return filteredFlags; }; + +export default class TenantHandler extends DefaultHandler { + existing: Tenant; + + constructor(options: DefaultHandler) { + super({ + ...options, + type: 'tenant', + }); + } + + async getType(): Promise { + const { data: tenant } = await this.client.tenants.getSettings(); + + tenant.flags = removeUnallowedTenantFlags(tenant.flags); + + this.existing = tenant; + + blockPageKeys.forEach((key) => { + if (tenant[key]) delete tenant[key]; + }); + + return tenant; + } + + async validate(assets: Assets): Promise { + const { tenant } = assets; + + // Nothing to validate? + if (!tenant) return; + + const pageKeys = Object.keys(tenant).filter((k) => blockPageKeys.includes(k)); + if (pageKeys.length > 0) { + throw new ValidationError( + `The following pages ${convertJsonToString( + pageKeys + )} were found in tenant settings. Pages should be set separately. Please refer to the documentation.` + ); + } + } + + // Run after other updates so objected can be referenced such as default directory + @order('100') + async processChanges(assets: Assets): Promise { + const { tenant } = assets; + + // Do nothing if not set + if (!tenant) return; + + const updatedTenant: TenantSettingsUpdate = { + ...tenant, + flags: tenant.flags + ? (removeUnallowedTenantFlags(tenant.flags) as TenantSettingsUpdateFlags) + : undefined, + }; + + if ('flags' in updatedTenant) { + if (updatedTenant.flags === undefined || Object.keys(updatedTenant.flags).length === 0) { + delete updatedTenant.flags; + } + } + + if (updatedTenant && Object.keys(updatedTenant).length > 0) { + await this.client.tenants.updateSettings(updatedTenant); + this.updated += 1; + this.didUpdate(updatedTenant); + } + } +} diff --git a/src/tools/auth0/handlers/themes.ts b/src/tools/auth0/handlers/themes.ts index 6812160a2..e4e149ce3 100644 --- a/src/tools/auth0/handlers/themes.ts +++ b/src/tools/auth0/handlers/themes.ts @@ -1,7 +1,9 @@ +import { PostBrandingTheme200Response } from 'auth0'; import { Assets } from '../../../types'; import log from '../../../logger'; import DefaultHandler, { order } from './default'; +export type Theme = PostBrandingTheme200Response; export default class ThemesHandler extends DefaultHandler { existing: Theme[] | null; @@ -54,7 +56,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 +83,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 +92,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 []; @@ -512,95 +514,3 @@ export const schema = { type: 'object', }, }; - -/** - * Utility types - */ - -export interface Colors { - primary_button: string; - primary_button_label: string; - secondary_button_border: string; - secondary_button_label: string; - links_focused_components: string; - header: string; - body_text: string; - captcha_widget_theme: string; - widget_background: string; - widget_border: string; - input_labels_placeholders: string; - input_filled_text: string; - input_border: string; - input_background: string; - icons: string; - error: string; - success: string; - base_focus_color?: string; - base_hover_color?: string; -} - -export interface Fonts { - font_url: string; - reference_text_size: number; - title: { - size: number; - bold: boolean; - }; - subtitle: { - size: number; - bold: boolean; - }; - body_text: { - size: number; - bold: boolean; - }; - buttons_text: { - size: number; - bold: boolean; - }; - input_labels: { - size: number; - bold: boolean; - }; - links: { - size: number; - bold: boolean; - }; - links_style: 'normal' | 'underlined'; -} - -export interface Borders { - button_border_weight: number; - buttons_style: 'sharp' | 'pill' | 'rounded'; - button_border_radius: number; - input_border_weight: number; - inputs_style: 'sharp' | 'pill' | 'rounded'; - input_border_radius: number; - widget_corner_radius: number; - widget_border_weight: number; - show_widget_shadow: boolean; -} - -export interface Widget { - logo_position: 'left' | 'center' | 'right' | 'none'; - logo_url: string; - logo_height: number; - header_text_alignment: 'left' | 'center' | 'right'; - social_buttons_layout: 'top' | 'bottom'; -} - -export interface PageBackground { - page_layout: 'left' | 'center' | 'right'; - background_color: string; - background_image_url: string; -} - -export interface Theme { - colors: Colors; - fonts: Fonts; - borders: Borders; - widget: Widget; - page_background: PageBackground; - themeId: string; - displayName?: string; -} diff --git a/src/tools/auth0/handlers/triggers.ts b/src/tools/auth0/handlers/triggers.ts index 55f84c160..f2726cc9f 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/auth0/index.ts b/src/tools/auth0/index.ts index 02c470734..ffde3487a 100644 --- a/src/tools/auth0/index.ts +++ b/src/tools/auth0/index.ts @@ -4,7 +4,7 @@ import pagedClient from './client'; import schema from './schema'; import handlers from './handlers'; -import { Assets, AssetTypes, Auth0APIClient, BaseAuth0APIClient } from '../../types'; +import { Assets, AssetTypes, Auth0APIClient } from '../../types'; import APIHandler from './handlers/default'; import { ConfigFunction } from '../../configFactory'; @@ -32,7 +32,7 @@ export default class Auth0 { assets: Assets; handlers: APIHandler[]; - constructor(client: BaseAuth0APIClient, assets: Assets, config: ConfigFunction) { + constructor(client: Auth0APIClient, assets: Assets, config: ConfigFunction) { this.client = pagedClient(client); this.config = config; this.assets = assets; diff --git a/src/tools/constants.ts b/src/tools/constants.ts index 357e2fc91..0093b1248 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', @@ -61,7 +63,7 @@ const constants = { 'post-user-registration', 'post-change-password', 'send-phone-message', - 'password-reset-post-challenge' + 'password-reset-post-challenge', ], EMAIL_TEMPLATES_DIRECTORY: 'emails', EMAIL_VERIFY, diff --git a/src/types.ts b/src/types.ts index 34e985b94..942d0cfc2 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,19 +1,13 @@ +import { GetConnectionsStrategyEnum, ManagementClient, ResourceServer } from 'auth0'; import { PromisePoolExecutor } from 'promise-pool-executor'; import { Action } from './tools/auth0/handlers/actions'; -import { - PromptTypes, - ScreenTypes, - Prompts, - PromptsCustomText, - PromptSettings, -} from './tools/auth0/handlers/prompts'; +import { Prompts } from './tools/auth0/handlers/prompts'; import { Tenant } from './tools/auth0/handlers/tenant'; -import { Theme } from './tools/auth0/handlers/themes'; 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 { Theme } from './tools/auth0/handlers/themes'; type SharedPaginationParams = { checkpoint?: boolean; @@ -21,7 +15,7 @@ type SharedPaginationParams = { is_global?: boolean; include_totals?: boolean; id?: string; - strategy?: 'auth0'; + strategy?: GetConnectionsStrategyEnum[]; }; export type CheckpointPaginationParams = SharedPaginationParams & { @@ -30,15 +24,8 @@ export type CheckpointPaginationParams = SharedPaginationParams & { }; export type PagePaginationParams = SharedPaginationParams & { - page: number; - per_page: number; -}; - -type APIClientBaseFunctions = { - getAll: (arg0: SharedPaginationParams) => Promise; - create: (arg0: { id: string }) => Promise; - update: (arg0: {}, arg1: Asset) => Promise; - delete: (arg0: Asset) => Promise; + page?: number; + per_page?: number; }; export type ApiResponse = { @@ -48,151 +35,9 @@ 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; - create: (arg0: Asset) => 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: { - _getRestClient: (arg0: string) => { - get: (arg0: string) => Promise; - invoke: (arg0: string, arg1: any) => Promise; - }; - 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 & { +export type Auth0APIClient = ManagementClient & { pool: PromisePoolExecutor; }; @@ -237,10 +82,10 @@ export type Assets = Partial<{ actions: Action[] | null; attackProtection: Asset | null; branding: - | (Asset & { - templates?: { template: string; body: string }[] | null; - }) - | null; + | (Asset & { + templates?: { template: string; body: string }[] | null; + }) + | null; clients: Client[] | null; clientGrants: ClientGrant[] | null; connections: Asset[] | null; @@ -256,11 +101,10 @@ 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; - migrations: Asset[] | null; organizations: Asset[] | null; pages: Page[] | null; prompts: Prompts | null; @@ -301,7 +145,6 @@ export type AssetTypes = | 'guardianFactors' | 'guardianFactorProviders' | 'guardianFactorTemplates' - | 'migrations' | 'guardianPhoneFactorMessageTypes' | 'guardianPhoneFactorSelectedProvider' | 'guardianPolicies' diff --git a/src/utils.ts b/src/utils.ts index 97561159b..d9aae2896 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -222,7 +222,7 @@ export function nomalizedYAMLPath(filePath: string): string[] { let pathSplit = normalizedPath.split('/'); // Remove empty components resulting from leading or redundant slashes - pathSplit = pathSplit.filter(component => component !== ''); + pathSplit = pathSplit.filter((component) => component !== ''); // Remove the first '.' if it's the first component if (pathSplit.length > 0 && pathSplit[0] === '.') { diff --git a/test/context/context.test.js b/test/context/context.test.js index fcf9264e1..dd4560bf0 100644 --- a/test/context/context.test.js +++ b/test/context/context.test.js @@ -1,4 +1,5 @@ import path from 'path'; +import { ResponseError } from 'auth0'; import fs from 'fs-extra'; import chai, { expect } from 'chai'; import sinon from 'sinon'; @@ -20,6 +21,35 @@ const config = { AUTH0_ACCESS_TOKEN: 'fake', }; +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(ResponseError); - expect(result).to.be.an('object').that.has.property('name').which.eq('access_denied'); + expect(result).to.be.an('error').that.has.property('statusCode').which.eq(404); }); 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,9 @@ 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 () => { @@ -154,8 +186,7 @@ describe('#context loader validation', async () => { const loaded = await setupContext({ ...config, AUTH0_INPUT_FILE: yaml }, 'import'); expect(loaded).to.be.an.instanceof(yamlContext); - const userAgent = - loaded.mgmtClient.rules.resource.restClient.restClient.options.headers['User-agent']; + const userAgent = loaded.mgmtClient.configuration.headers['User-agent']; expect(userAgent).to.contain('deploy-cli'); expect(userAgent).to.contain('node.js'); diff --git a/test/context/directory/actions.test.js b/test/context/directory/actions.test.js index 64a0760e2..5a51d0c77 100644 --- a/test/context/directory/actions.test.js +++ b/test/context/directory/actions.test.js @@ -283,7 +283,7 @@ describe('#directory context actions', () => { const target = [ { name: 'action-one', - secrets: { name: 'SECRETNAME', value: 'SECRETVALUE' } + secrets: { name: 'SECRETNAME', value: 'SECRETVALUE' }, }, ]; diff --git a/test/context/directory/clientGrants.test.js b/test/context/directory/clientGrants.test.js index 023e128c4..14892c847 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 8da928db2..99d97dc2a 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 93006fb60..000000000 --- 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/directory/organizations.test.js b/test/context/directory/organizations.test.js index 367a65dac..e7b210040 100644 --- a/test/context/directory/organizations.test.js +++ b/test/context/directory/organizations.test.js @@ -77,7 +77,7 @@ describe('#directory context organizations', () => { assign_membership_on_login: true, show_as_button: true, is_signup_enabled: true, - } + }, ], }, ]; diff --git a/test/context/yaml/clientGrants.test.js b/test/context/yaml/clientGrants.test.js index 43d9fb4eb..90f5ebbb1 100644 --- a/test/context/yaml/clientGrants.test.js +++ b/test/context/yaml/clientGrants.test.js @@ -4,7 +4,7 @@ import { expect } from 'chai'; import Context from '../../../src/context/yaml'; import handler from '../../../src/context/yaml/handlers/clientGrants'; -import { cleanThenMkdir, testDataDir, mockMgmtClient } from '../../utils'; +import { cleanThenMkdir, testDataDir, mockMgmtClient, mockPagedData } from '../../utils'; describe('#YAML context client grants', () => { it('should process client grants', async () => { @@ -75,7 +75,16 @@ describe('#YAML context client grants', () => { it('should dump client grants and replace client ID with client name even if clients not in assets', async () => { const mockMgmt = mockMgmtClient(); - mockMgmt.clients.getAll = () => [[{ client_id: 'client-id-1', name: 'Client 1' }]]; + + mockMgmt.clients.getAll = (params) => { + const client = { + client_id: 'client-id-1', + name: 'Client 1', + }; + + return mockPagedData(params, 'clients', [client]); + }; + const context = new Context({ AUTH0_INPUT_FILE: './test.yml' }, mockMgmt); const clientGrants = [ { diff --git a/test/context/yaml/context.test.js b/test/context/yaml/context.test.js index 2ef092330..faf475afb 100644 --- a/test/context/yaml/context.test.js +++ b/test/context/yaml/context.test.js @@ -5,7 +5,7 @@ import { expect } from 'chai'; import sinon from 'sinon'; import handlers from '../../../src/tools/auth0/handlers'; import Context from '../../../src/context/yaml'; -import { cleanThenMkdir, testDataDir, mockMgmtClient } from '../../utils'; +import { cleanThenMkdir, testDataDir, mockMgmtClient, mockPagedData } from '../../utils'; import ScimHandler from '../../../src/tools/auth0/handlers/scimHandler'; describe('#YAML context validation', () => { @@ -257,7 +257,6 @@ describe('#YAML context validation', () => { guardianFactors: [], guardianFactorProviders: [], guardianFactorTemplates: [], - migrations: {}, guardianPhoneFactorMessageTypes: { message_types: ['sms'] }, guardianPhoneFactorSelectedProvider: { provider: 'twilio' }, guardianPolicies: { policies: [] }, @@ -289,11 +288,11 @@ describe('#YAML context validation', () => { bruteForceProtection: {}, suspiciousIpThrottling: {}, }, + logStreams: [], prompts: { customText: {}, partials: {}, }, - logStreams: [], customDomains: [], themes: [], }); @@ -370,7 +369,6 @@ describe('#YAML context validation', () => { guardianFactors: [], guardianFactorProviders: [], guardianFactorTemplates: [], - migrations: {}, guardianPhoneFactorMessageTypes: { message_types: ['sms'] }, guardianPhoneFactorSelectedProvider: { provider: 'twilio' }, guardianPolicies: { policies: [] }, @@ -402,11 +400,11 @@ describe('#YAML context validation', () => { bruteForceProtection: {}, suspiciousIpThrottling: {}, }, + logStreams: [], prompts: { customText: {}, partials: {}, }, - logStreams: [], customDomains: [], themes: [], }); @@ -484,7 +482,6 @@ describe('#YAML context validation', () => { guardianFactors: [], guardianFactorProviders: [], guardianFactorTemplates: [], - migrations: {}, guardianPhoneFactorMessageTypes: { message_types: ['sms'] }, guardianPhoneFactorSelectedProvider: { provider: 'twilio' }, guardianPolicies: { policies: [] }, @@ -581,18 +578,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', @@ -600,9 +599,8 @@ describe('#YAML context validation', () => { tenant_domain: 'travel0.com', }, }, - ], - }), - _getRestClient: () => ({}) + ]), + _getRestClient: () => ({}), }, prompts: { _getRestClient: (endpoint) => ({ diff --git a/test/context/yaml/migrations.test.js b/test/context/yaml/migrations.test.js deleted file mode 100644 index 41b2c727d..000000000 --- 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/context/yaml/organizations.test.js b/test/context/yaml/organizations.test.js index 5a67fa516..5eff820c2 100644 --- a/test/context/yaml/organizations.test.js +++ b/test/context/yaml/organizations.test.js @@ -53,7 +53,7 @@ describe('#YAML context organizations', () => { connection_id: 'con_123', assign_membership_on_login: false, show_as_button: false, - is_signup_enabled: false + is_signup_enabled: false, }, ], }, @@ -71,7 +71,7 @@ describe('#YAML context organizations', () => { connection_id: 'con_456', assign_membership_on_login: true, show_as_button: true, - is_signup_enabled: true + is_signup_enabled: true, }, ], }, diff --git a/test/e2e/e2e.test.ts b/test/e2e/e2e.test.ts index 0beb90fcb..a5212b918 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 @@ -36,7 +40,7 @@ describe('#end-to-end dump', function () { const files = getFiles(workDirectory, ['.yaml']); expect(files).to.have.length(1); expect(files[0]).to.equal(path.join(workDirectory, 'tenant.yaml')); - ['emailTemplates', 'hooks', 'pages', 'rules'].forEach((dirName) => { + ['emailTemplates', 'pages'].forEach((dirName) => { const directory = path.join(workDirectory, dirName); expect(existsMustBeDir(directory)).to.equal(true); expect(getFiles(directory, ['.yaml'])).to.have.length(0); @@ -201,8 +205,7 @@ describe('#end-to-end deploy', function () { const yaml = yamlLoad(fs.readFileSync(files[0])); - expect(yaml.rules).to.have.length(0); - expect(yaml.clients).to.have.length(2); // Accounting for Deploy CLI and Default App client + expect(yaml.clients).to.have.length(2); //Accounting for Deploy CLI and Default App client expect(yaml.databases).to.have.length(1); // Default user database expect(yaml.connections).to.have.length(0); expect(yaml.roles).to.have.length(0); diff --git a/test/e2e/recordings/should-deploy-directory-(JSON)-config-with-keyword-replacements.json b/test/e2e/recordings/should-deploy-directory-(JSON)-config-with-keyword-replacements.json index 4cc8d9103..1ddf8d2b4 100644 --- a/test/e2e/recordings/should-deploy-directory-(JSON)-config-with-keyword-replacements.json +++ b/test/e2e/recordings/should-deploy-directory-(JSON)-config-with-keyword-replacements.json @@ -12,9 +12,6 @@ }, "status": 200, "response": { - "allowed_logout_urls": [ - "https://mycompany.org/logoutCallback" - ], "change_password": { "enabled": true, "html": "Change Password\n" @@ -32,37 +29,31 @@ "allow_legacy_delegation_grant_types": true, "allow_legacy_ro_grant_types": true, "cannot_change_enforce_client_authentication_on_passwordless_start": true, - "change_pwd_flow_v1": false, "disable_impersonation": true, - "enable_apis_section": false, - "enable_client_connections": false, - "enable_custom_domain_in_emails": false, - "enable_dynamic_client_registration": false, - "enable_legacy_logs_search_v2": false, - "enable_public_signup_user_exists_error": true, + "enable_dynamic_client_registration": true, "enable_sso": true, "enforce_client_authentication_on_passwordless_start": true, "new_universal_login_experience_enabled": true, "universal_login": true, - "use_scope_descriptions_for_consent": false, "revoke_refresh_token_grant": false, - "disable_clickjack_protection_headers": false, - "enable_pipeline2": false + "dashboard_new_onboarding": false, + "mfa_show_factor_list_on_enrollment": false, + "disable_clickjack_protection_headers": false }, "friendly_name": "This is the ##COMPANY_NAME## Tenant", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" }, - "idle_session_lifetime": 1, - "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", - "sandbox_version": "12", - "session_lifetime": 3.0166666666666666, - "support_email": "support@mycompany.org", - "support_url": "https://mycompany.org/support", - "universal_login": {}, - "session_cookie": { - "mode": "non-persistent" + "picture_url": "https://cdn.auth0.com/manhattan/versions/1.3935.0/assets/badge.png", + "sandbox_version": "18", + "oidc_logout": { + "rp_logout_end_session_endpoint_discovery": true + }, + "universal_login": { + "is_custom_theme_set": true, + "is_custom_template_set": true, + "identifier_first": true } }, "rawHeaders": [], @@ -81,9 +72,6 @@ }, "status": 200, "response": { - "allowed_logout_urls": [ - "https://mycompany.org/logoutCallback" - ], "change_password": { "enabled": true, "html": "Change Password\n" @@ -101,37 +89,31 @@ "allow_legacy_delegation_grant_types": true, "allow_legacy_ro_grant_types": true, "cannot_change_enforce_client_authentication_on_passwordless_start": true, - "change_pwd_flow_v1": false, "disable_impersonation": true, - "enable_apis_section": false, - "enable_client_connections": false, - "enable_custom_domain_in_emails": false, - "enable_dynamic_client_registration": false, - "enable_legacy_logs_search_v2": false, - "enable_public_signup_user_exists_error": true, + "enable_dynamic_client_registration": true, "enable_sso": true, "enforce_client_authentication_on_passwordless_start": true, "new_universal_login_experience_enabled": true, "universal_login": true, - "use_scope_descriptions_for_consent": false, "revoke_refresh_token_grant": false, - "disable_clickjack_protection_headers": false, - "enable_pipeline2": false + "dashboard_new_onboarding": false, + "mfa_show_factor_list_on_enrollment": false, + "disable_clickjack_protection_headers": false }, "friendly_name": "This is the Travel0 Tenant", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" }, - "idle_session_lifetime": 1, - "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", - "sandbox_version": "12", - "session_lifetime": 3.0166666666666666, - "support_email": "support@mycompany.org", - "support_url": "https://mycompany.org/support", - "universal_login": {}, - "session_cookie": { - "mode": "non-persistent" + "picture_url": "https://cdn.auth0.com/manhattan/versions/1.3935.0/assets/badge.png", + "sandbox_version": "18", + "oidc_logout": { + "rp_logout_end_session_endpoint_discovery": true + }, + "universal_login": { + "is_custom_theme_set": true, + "is_custom_template_set": true, + "identifier_first": true } }, "rawHeaders": [], @@ -144,9 +126,6 @@ "body": "", "status": 200, "response": { - "allowed_logout_urls": [ - "https://mycompany.org/logoutCallback" - ], "change_password": { "enabled": true, "html": "Change Password\n" @@ -163,41 +142,30 @@ "allow_changing_enable_sso": false, "allow_legacy_delegation_grant_types": true, "allow_legacy_ro_grant_types": true, - "change_pwd_flow_v1": false, "disable_impersonation": true, - "enable_apis_section": false, - "enable_client_connections": false, - "enable_custom_domain_in_emails": false, - "enable_dynamic_client_registration": false, - "enable_legacy_logs_search_v2": false, - "enable_public_signup_user_exists_error": true, + "enable_dynamic_client_registration": true, "enable_sso": true, "new_universal_login_experience_enabled": true, "universal_login": true, - "use_scope_descriptions_for_consent": false, "revoke_refresh_token_grant": false, - "disable_clickjack_protection_headers": false, - "enable_pipeline2": false + "dashboard_new_onboarding": false, + "mfa_show_factor_list_on_enrollment": false, + "disable_clickjack_protection_headers": false }, "friendly_name": "This is the Travel0 Tenant", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" }, - "idle_session_lifetime": 1, - "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", - "sandbox_version": "12", - "session_lifetime": 3.0166666666666666, - "support_email": "support@mycompany.org", - "support_url": "https://mycompany.org/support", - "universal_login": {}, - "session_cookie": { - "mode": "non-persistent" + "picture_url": "https://cdn.auth0.com/manhattan/versions/1.3935.0/assets/badge.png", + "sandbox_version": "18", + "oidc_logout": { + "rp_logout_end_session_endpoint_discovery": true }, + "universal_login": {}, "sandbox_versions_available": [ "18", - "16", - "12" + "16" ] }, "rawHeaders": [], 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 73164aa50..58925fb1c 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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -11,7 +11,7 @@ "limit": 100, "rules": [ { - "id": "rul_KPxS2cPV6d0ZfCE3", + "id": "rul_9MtEttom2x3G0KZP", "enabled": true, "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", "name": "my-rule", @@ -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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -35,7 +35,7 @@ "limit": 100, "rules": [ { - "id": "rul_KPxS2cPV6d0ZfCE3", + "id": "rul_9MtEttom2x3G0KZP", "enabled": true, "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", "name": "my-rule", @@ -50,7 +50,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/rules/rul_KPxS2cPV6d0ZfCE3", + "path": "/api/v2/rules/rul_9MtEttom2x3G0KZP", "body": { "name": "my-rule", "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", @@ -59,7 +59,7 @@ }, "status": 200, "response": { - "id": "rul_KPxS2cPV6d0ZfCE3", + "id": "rul_9MtEttom2x3G0KZP", "enabled": true, "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", "name": "my-rule", @@ -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?page=0&per_page=100&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?page=0&per_page=100&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?page=0&per_page=100&include_totals=true&is_global=true", "body": "", "status": 200, "response": { @@ -283,7 +283,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -1056,11 +1056,11 @@ { "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?page=0&per_page=100&include_totals=true&is_global=false", "body": "", "status": 200, "response": { - "total": 10, + "total": 9, "start": 0, "limit": 100, "clients": [ @@ -1131,7 +1131,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1183,7 +1183,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1203,21 +1203,12 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -1236,8 +1227,7 @@ "subject": "deprecated" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1245,25 +1235,32 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -1282,7 +1279,8 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "allowed_origins": [], + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1290,21 +1288,23 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, @@ -1325,7 +1325,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1377,7 +1377,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1436,7 +1436,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1493,59 +1493,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1569,18 +1517,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "body": {}, - "status": 204, - "response": "", - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "DELETE", - "path": "/api/v2/clients/STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", - "body": {}, + "path": "/api/v2/clients/HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", + "body": "", "status": 204, "response": "", "rawHeaders": [], @@ -1589,22 +1527,17 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/clients/e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "path": "/api/v2/clients/jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "body": { - "name": "Node App", + "name": "API Explorer Application", "allowed_clients": [], - "allowed_logout_urls": [], - "allowed_origins": [], - "app_type": "regular_web", + "app_type": "non_interactive", "callbacks": [], "client_aliases": [], "client_metadata": {}, "cross_origin_auth": false, "custom_login_page_on": true, "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], "is_first_party": true, @@ -1632,17 +1565,15 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, - "token_endpoint_auth_method": "client_secret_post", - "web_origins": [] + "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": "Node App", + "name": "API Explorer Application", "allowed_clients": [], - "allowed_logout_urls": [], "callbacks": [], "client_metadata": {}, "cross_origin_auth": false, @@ -1673,8 +1604,7 @@ "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1684,14 +1614,10 @@ }, "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true }, "rawHeaders": [], @@ -1700,7 +1626,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/clients/Cbs29sl8S2G7zgo97erymb8t59IG6its", + "path": "/api/v2/clients/j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "body": { "name": "Quickstarts API (Test Application)", "app_type": "non_interactive", @@ -1760,7 +1686,7 @@ "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1781,17 +1707,22 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/clients/780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "path": "/api/v2/clients/RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "body": { - "name": "API Explorer Application", + "name": "Node App", "allowed_clients": [], - "app_type": "non_interactive", + "allowed_logout_urls": [], + "allowed_origins": [], + "app_type": "regular_web", "callbacks": [], "client_aliases": [], "client_metadata": {}, "cross_origin_auth": false, "custom_login_page_on": true, "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], "is_first_party": true, @@ -1819,15 +1750,17 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, - "token_endpoint_auth_method": "client_secret_post" + "token_endpoint_auth_method": "client_secret_post", + "web_origins": [] }, "status": 200, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "API Explorer Application", + "name": "Node App", "allowed_clients": [], + "allowed_logout_urls": [], "callbacks": [], "client_metadata": {}, "cross_origin_auth": false, @@ -1858,7 +1791,8 @@ "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "allowed_origins": [], + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1868,10 +1802,14 @@ }, "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, "rawHeaders": [], @@ -1880,19 +1818,13 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/clients/RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "path": "/api/v2/clients/CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "body": { - "name": "The Default App", - "allowed_clients": [], - "callbacks": [], - "client_aliases": [], - "client_metadata": {}, + "name": "Terraform Provider", + "app_type": "non_interactive", "cross_origin_auth": false, "custom_login_page_on": true, "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], "is_first_party": true, @@ -1901,25 +1833,16 @@ "alg": "RS256", "lifetime_in_seconds": 36000 }, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": false, + "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, "infinite_token_lifetime": true, "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, - "sso": false, "sso_disabled": false, "token_endpoint_auth_method": "client_secret_post" }, @@ -1928,31 +1851,19 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "The Default App", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": false, + "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, "infinite_token_lifetime": true, "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, - "sso": false, "sso_disabled": false, "signing_keys": [ { @@ -1961,7 +1872,7 @@ "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1969,12 +1880,9 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], "custom_login_page_on": true @@ -1985,13 +1893,19 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/clients/Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "path": "/api/v2/clients/XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "body": { - "name": "Terraform Provider", - "app_type": "non_interactive", + "name": "The Default App", + "allowed_clients": [], + "callbacks": [], + "client_aliases": [], + "client_metadata": {}, "cross_origin_auth": false, "custom_login_page_on": true, "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], "is_first_party": true, @@ -2000,16 +1914,25 @@ "alg": "RS256", "lifetime_in_seconds": 36000 }, - "oidc_conformant": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": 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, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, "rotation_type": "non-rotating" }, + "sso": false, "sso_disabled": false, "token_endpoint_auth_method": "client_secret_post" }, @@ -2018,19 +1941,31 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", + "name": "The Default App", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, - "oidc_conformant": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": 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, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, "rotation_type": "non-rotating" }, + "sso": false, "sso_disabled": false, "signing_keys": [ { @@ -2039,7 +1974,7 @@ "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2047,9 +1982,12 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], "custom_login_page_on": true @@ -2060,7 +1998,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/clients/11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "path": "/api/v2/clients/s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "body": { "name": "Test SPA", "allowed_clients": [], @@ -2152,7 +2090,7 @@ "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2179,7 +2117,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/clients/oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "path": "/api/v2/clients/Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "body": { "name": "auth0-deploy-cli-extension", "allowed_clients": [], @@ -2256,7 +2194,7 @@ "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2278,7 +2216,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/emails/provider?include_fields=true&fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address", + "path": "/api/v2/emails/provider?fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address&include_fields=true", "body": "", "status": 200, "response": { @@ -2293,7 +2231,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": { @@ -2315,13 +2253,13 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/push-notification", + "path": "/api/v2/guardian/factors/email", "body": { - "enabled": true + "enabled": false }, "status": 200, "response": { - "enabled": true + "enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -2329,7 +2267,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/duo", + "path": "/api/v2/guardian/factors/otp", "body": { "enabled": false }, @@ -2343,7 +2281,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/recovery-code", + "path": "/api/v2/guardian/factors/duo", "body": { "enabled": false }, @@ -2357,7 +2295,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/sms", + "path": "/api/v2/guardian/factors/webauthn-platform", "body": { "enabled": false }, @@ -2371,7 +2309,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/webauthn-platform", + "path": "/api/v2/guardian/factors/sms", "body": { "enabled": false }, @@ -2385,7 +2323,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/otp", + "path": "/api/v2/guardian/factors/recovery-code", "body": { "enabled": false }, @@ -2399,7 +2337,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/email", + "path": "/api/v2/guardian/factors/webauthn-roaming", "body": { "enabled": false }, @@ -2413,13 +2351,13 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/webauthn-roaming", + "path": "/api/v2/guardian/factors/push-notification", "body": { - "enabled": false + "enabled": true }, "status": 200, "response": { - "enabled": false + "enabled": true }, "rawHeaders": [], "responseIsBinary": false @@ -2441,7 +2379,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" }, @@ -2485,27 +2423,24 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/attack-protection/brute-force-protection", + "path": "/api/v2/attack-protection/breached-password-detection", "body": { - "enabled": true, - "shields": [ - "block", - "user_notification" - ], - "mode": "count_per_identifier_and_ip", - "allowlist": [], - "max_attempts": 66 + "enabled": false, + "shields": [], + "admin_notification_frequency": [], + "method": "standard" }, "status": 200, "response": { - "enabled": true, - "shields": [ - "block", - "user_notification" - ], - "mode": "count_per_identifier_and_ip", - "allowlist": [], - "max_attempts": 66 + "enabled": false, + "shields": [], + "admin_notification_frequency": [], + "method": "standard", + "stage": { + "pre-user-registration": { + "shields": [] + } + } }, "rawHeaders": [], "responseIsBinary": false @@ -2559,24 +2494,27 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/attack-protection/breached-password-detection", + "path": "/api/v2/attack-protection/brute-force-protection", "body": { - "enabled": false, - "shields": [], - "admin_notification_frequency": [], - "method": "standard" + "enabled": true, + "shields": [ + "block", + "user_notification" + ], + "mode": "count_per_identifier_and_ip", + "allowlist": [], + "max_attempts": 66 }, "status": 200, "response": { - "enabled": false, - "shields": [], - "admin_notification_frequency": [], - "method": "standard", - "stage": { - "pre-user-registration": { - "shields": [] - } - } + "enabled": true, + "shields": [ + "block", + "user_notification" + ], + "mode": "count_per_identifier_and_ip", + "allowlist": [], + "max_attempts": 66 }, "rawHeaders": [], "responseIsBinary": false @@ -2584,30 +2522,19 @@ { "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": [ { - "id": "lst_0000000000017950", - "name": "Suspended DD Log Stream", - "type": "datadog", - "status": "active", - "sink": { - "datadogApiKey": "some-sensitive-api-key", - "datadogRegion": "us" - }, - "isPriority": false - }, - { - "id": "lst_0000000000017951", + "id": "lst_0000000000018117", "name": "Amazon EventBridge", "type": "eventbridge", "status": "active", "sink": { "awsAccountId": "123456789012", "awsRegion": "us-east-2", - "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-11b6995b-a49b-4a0f-bfaf-88cefc5ba0b3/auth0.logs" + "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-47282268-18be-4aaf-8b22-08fe19e10bdf/auth0.logs" }, "filters": [ { @@ -2648,41 +2575,26 @@ } ], "isPriority": false - } - ], - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/log-streams/lst_0000000000017950", - "body": { - "name": "Suspended DD Log Stream", - "sink": { - "datadogApiKey": "some-sensitive-api-key", - "datadogRegion": "us" - } - }, - "status": 200, - "response": { - "id": "lst_0000000000017950", - "name": "Suspended DD Log Stream", - "type": "datadog", - "status": "active", - "sink": { - "datadogApiKey": "some-sensitive-api-key", - "datadogRegion": "us" }, - "isPriority": false - }, + { + "id": "lst_0000000000018116", + "name": "Suspended DD Log Stream", + "type": "datadog", + "status": "active", + "sink": { + "datadogApiKey": "some-sensitive-api-key", + "datadogRegion": "us" + }, + "isPriority": false + } + ], "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/log-streams/lst_0000000000017951", + "path": "/api/v2/log-streams/lst_0000000000018117", "body": { "name": "Amazon EventBridge", "filters": [ @@ -2727,14 +2639,14 @@ }, "status": 200, "response": { - "id": "lst_0000000000017951", + "id": "lst_0000000000018117", "name": "Amazon EventBridge", "type": "eventbridge", "status": "active", "sink": { "awsAccountId": "123456789012", "awsRegion": "us-east-2", - "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-11b6995b-a49b-4a0f-bfaf-88cefc5ba0b3/auth0.logs" + "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-47282268-18be-4aaf-8b22-08fe19e10bdf/auth0.logs" }, "filters": [ { @@ -2779,10 +2691,36 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/log-streams/lst_0000000000018116", + "body": { + "name": "Suspended DD Log Stream", + "sink": { + "datadogApiKey": "some-sensitive-api-key", + "datadogRegion": "us" + } + }, + "status": 200, + "response": { + "id": "lst_0000000000018116", + "name": "Suspended DD Log Stream", + "type": "datadog", + "status": "active", + "sink": { + "datadogApiKey": "some-sensitive-api-key", + "datadogRegion": "us" + }, + "isPriority": false + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -2867,7 +2805,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2887,21 +2825,12 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -2920,8 +2849,7 @@ "subject": "deprecated" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2929,25 +2857,32 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -2966,7 +2901,8 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "allowed_origins": [], + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2974,21 +2910,23 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, @@ -3009,7 +2947,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3061,7 +2999,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3120,7 +3058,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3177,7 +3115,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3236,7 +3174,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?per_page=100&page=0&include_totals=true&strategy=auth0", "body": "", "status": 200, "response": { @@ -3245,7 +3183,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -3301,12 +3239,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -3347,7 +3285,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?per_page=100&page=0&include_totals=true&strategy=auth0", "body": "", "status": 200, "response": { @@ -3356,7 +3294,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -3412,12 +3350,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -3458,11 +3396,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/connections/con_orWZyMv2k9PgOd3x", - "body": {}, + "path": "/api/v2/connections/con_nH4AIKkSAzWLnzAk", + "body": "", "status": 202, "response": { - "deleted_at": "2024-10-14T09:10:06.328Z" + "deleted_at": "2024-10-18T10:24:02.892Z" }, "rawHeaders": [], "responseIsBinary": false @@ -3470,11 +3408,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_cvOdQDkXpKvaMNSh", + "path": "/api/v2/connections/con_pxPok67zc0pXzFtU", "body": "", "status": 200, "response": { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -3527,8 +3465,8 @@ "name": "boo-baz-db-connection-test", "is_domain_connection": false, "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ], "realms": [ "boo-baz-db-connection-test" @@ -3540,11 +3478,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/connections/con_cvOdQDkXpKvaMNSh", + "path": "/api/v2/connections/con_pxPok67zc0pXzFtU", "body": { "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI" ], "is_domain_connection": false, "options": { @@ -3601,7 +3539,7 @@ }, "status": 200, "response": { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -3654,8 +3592,8 @@ "name": "boo-baz-db-connection-test", "is_domain_connection": false, "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI" ], "realms": [ "boo-baz-db-connection-test" @@ -3667,7 +3605,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -3752,7 +3690,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3772,21 +3710,12 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -3805,8 +3734,7 @@ "subject": "deprecated" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3814,25 +3742,32 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -3851,7 +3786,8 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "allowed_origins": [], + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3859,21 +3795,23 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, @@ -3894,7 +3832,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3946,7 +3884,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4005,7 +3943,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4062,7 +4000,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4121,7 +4059,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -4130,7 +4068,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -4186,12 +4124,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_SXIEWGYv5QzGSoqq", + "id": "con_vF5B2QiM1bTdpSsO", "options": { "email": true, "scope": [ @@ -4207,8 +4145,8 @@ "google-oauth2" ], "enabled_clients": [ - "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J" ] } ] @@ -4219,7 +4157,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -4228,7 +4166,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -4284,12 +4222,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_SXIEWGYv5QzGSoqq", + "id": "con_vF5B2QiM1bTdpSsO", "options": { "email": true, "scope": [ @@ -4305,8 +4243,8 @@ "google-oauth2" ], "enabled_clients": [ - "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J" ] } ] @@ -4317,11 +4255,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/connections/con_SXIEWGYv5QzGSoqq", + "path": "/api/v2/connections/con_vF5B2QiM1bTdpSsO", "body": { "enabled_clients": [ - "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI" ], "is_domain_connection": false, "options": { @@ -4335,7 +4273,7 @@ }, "status": 200, "response": { - "id": "con_SXIEWGYv5QzGSoqq", + "id": "con_vF5B2QiM1bTdpSsO", "options": { "email": true, "scope": [ @@ -4348,8 +4286,8 @@ "name": "google-oauth2", "is_domain_connection": false, "enabled_clients": [ - "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI" ], "realms": [ "google-oauth2" @@ -4415,7 +4353,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -4500,7 +4438,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4520,21 +4458,12 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -4553,8 +4482,7 @@ "subject": "deprecated" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4562,25 +4490,32 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -4599,7 +4534,8 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "allowed_origins": [], + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4607,21 +4543,23 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, @@ -4642,7 +4580,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4694,7 +4632,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4753,7 +4691,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4810,7 +4748,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4869,7 +4807,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -4878,8 +4816,8 @@ "limit": 100, "client_grants": [ { - "id": "cgr_P3XzavTQSyFaV8mr", - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "id": "cgr_Oh0iZTSJFWrcHIi0", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -5015,8 +4953,8 @@ ] }, { - "id": "cgr_SDgpXDXvWBtO3KEi", - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "id": "cgr_qa1o0c61YQyNQp0V", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -5324,7 +5262,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/client-grants/cgr_P3XzavTQSyFaV8mr", + "path": "/api/v2/client-grants/cgr_Oh0iZTSJFWrcHIi0", "body": { "scope": [ "read:client_grants", @@ -5461,8 +5399,8 @@ }, "status": 200, "response": { - "id": "cgr_P3XzavTQSyFaV8mr", - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "id": "cgr_Oh0iZTSJFWrcHIi0", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -5603,7 +5541,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/client-grants/cgr_SDgpXDXvWBtO3KEi", + "path": "/api/v2/client-grants/cgr_qa1o0c61YQyNQp0V", "body": { "scope": [ "read:client_grants", @@ -5740,8 +5678,8 @@ }, "status": 200, "response": { - "id": "cgr_SDgpXDXvWBtO3KEi", - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "id": "cgr_qa1o0c61YQyNQp0V", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -5882,28 +5820,28 @@ { "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { "roles": [ { - "id": "rol_hRGDQmEBYbZsC8sZ", + "id": "rol_ZJKlfo79sK6K1lHd", "name": "Admin", "description": "Can read and write things" }, { - "id": "rol_oT9S2f9KYqFyYR2j", + "id": "rol_bL4bPRxC5sA93SOl", "name": "Reader", "description": "Can only read things" }, { - "id": "rol_ZNeuVHhKZTaZaGwq", + "id": "rol_oqgV8nN5JuxVGYCv", "name": "read_only", "description": "Read Only" }, { - "id": "rol_1DwrDRZ26bdvfKxL", + "id": "rol_x0vZAmiZ04hdMdD1", "name": "read_osnly", "description": "Readz Only" } @@ -5918,7 +5856,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_hRGDQmEBYbZsC8sZ/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_ZJKlfo79sK6K1lHd/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -5933,7 +5871,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_oT9S2f9KYqFyYR2j/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_bL4bPRxC5sA93SOl/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -5948,7 +5886,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_ZNeuVHhKZTaZaGwq/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_oqgV8nN5JuxVGYCv/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -5963,7 +5901,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_1DwrDRZ26bdvfKxL/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_x0vZAmiZ04hdMdD1/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -5978,16 +5916,16 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/roles/rol_hRGDQmEBYbZsC8sZ", + "path": "/api/v2/roles/rol_bL4bPRxC5sA93SOl", "body": { - "name": "Admin", - "description": "Can read and write things" + "name": "Reader", + "description": "Can only read things" }, "status": 200, "response": { - "id": "rol_hRGDQmEBYbZsC8sZ", - "name": "Admin", - "description": "Can read and write things" + "id": "rol_bL4bPRxC5sA93SOl", + "name": "Reader", + "description": "Can only read things" }, "rawHeaders": [], "responseIsBinary": false @@ -5995,16 +5933,16 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/roles/rol_ZNeuVHhKZTaZaGwq", + "path": "/api/v2/roles/rol_ZJKlfo79sK6K1lHd", "body": { - "name": "read_only", - "description": "Read Only" + "name": "Admin", + "description": "Can read and write things" }, "status": 200, "response": { - "id": "rol_ZNeuVHhKZTaZaGwq", - "name": "read_only", - "description": "Read Only" + "id": "rol_ZJKlfo79sK6K1lHd", + "name": "Admin", + "description": "Can read and write things" }, "rawHeaders": [], "responseIsBinary": false @@ -6012,16 +5950,16 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/roles/rol_oT9S2f9KYqFyYR2j", + "path": "/api/v2/roles/rol_oqgV8nN5JuxVGYCv", "body": { - "name": "Reader", - "description": "Can only read things" + "name": "read_only", + "description": "Read Only" }, "status": 200, "response": { - "id": "rol_oT9S2f9KYqFyYR2j", - "name": "Reader", - "description": "Can only read things" + "id": "rol_oqgV8nN5JuxVGYCv", + "name": "read_only", + "description": "Read Only" }, "rawHeaders": [], "responseIsBinary": false @@ -6029,14 +5967,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/roles/rol_1DwrDRZ26bdvfKxL", + "path": "/api/v2/roles/rol_x0vZAmiZ04hdMdD1", "body": { "name": "read_osnly", "description": "Readz Only" }, "status": 200, "response": { - "id": "rol_1DwrDRZ26bdvfKxL", + "id": "rol_x0vZAmiZ04hdMdD1", "name": "read_osnly", "description": "Readz Only" }, @@ -6052,7 +5990,7 @@ "response": { "actions": [ { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", + "id": "1d9d9961-1241-4715-9c06-ebebe824dd0c", "name": "My Custom Action", "supported_triggers": [ { @@ -6060,34 +5998,34 @@ "version": "v2" } ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:07:56.282435062Z", + "created_at": "2024-10-18T10:22:46.504691389Z", + "updated_at": "2024-10-18T10:22:46.512429033Z", "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", "dependencies": [], "runtime": "node16", "status": "built", "secrets": [], "current_version": { - "id": "133e8fe8-52b5-44ee-8837-9cbcf0fbe8d6", + "id": "eb8aabf7-062a-4695-ad5b-42eca34b0f7d", "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", "runtime": "node16", "status": "BUILT", - "number": 4, - "build_time": "2024-10-14T09:07:57.447777891Z", - "created_at": "2024-10-14T09:07:57.345467497Z", - "updated_at": "2024-10-14T09:07:57.448078558Z" + "number": 1, + "build_time": "2024-10-18T10:22:47.323089940Z", + "created_at": "2024-10-18T10:22:47.241953841Z", + "updated_at": "2024-10-18T10:22:47.324336487Z" }, "deployed_version": { "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", "dependencies": [], - "id": "133e8fe8-52b5-44ee-8837-9cbcf0fbe8d6", + "id": "eb8aabf7-062a-4695-ad5b-42eca34b0f7d", "deployed": true, - "number": 4, - "built_at": "2024-10-14T09:07:57.447777891Z", + "number": 1, + "built_at": "2024-10-18T10:22:47.323089940Z", "secrets": [], "status": "built", - "created_at": "2024-10-14T09:07:57.345467497Z", - "updated_at": "2024-10-14T09:07:57.448078558Z", + "created_at": "2024-10-18T10:22:47.241953841Z", + "updated_at": "2024-10-18T10:22:47.324336487Z", "runtime": "node16", "supported_triggers": [ { @@ -6108,7 +6046,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/actions/actions/ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", + "path": "/api/v2/actions/actions/1d9d9961-1241-4715-9c06-ebebe824dd0c", "body": { "name": "My Custom Action", "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", @@ -6124,7 +6062,7 @@ }, "status": 200, "response": { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", + "id": "1d9d9961-1241-4715-9c06-ebebe824dd0c", "name": "My Custom Action", "supported_triggers": [ { @@ -6132,34 +6070,34 @@ "version": "v2" } ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:10:16.315626907Z", + "created_at": "2024-10-18T10:22:46.504691389Z", + "updated_at": "2024-10-18T10:24:10.494523684Z", "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", "dependencies": [], "runtime": "node16", "status": "pending", "secrets": [], "current_version": { - "id": "133e8fe8-52b5-44ee-8837-9cbcf0fbe8d6", + "id": "eb8aabf7-062a-4695-ad5b-42eca34b0f7d", "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", "runtime": "node16", "status": "BUILT", - "number": 4, - "build_time": "2024-10-14T09:07:57.447777891Z", - "created_at": "2024-10-14T09:07:57.345467497Z", - "updated_at": "2024-10-14T09:07:57.448078558Z" + "number": 1, + "build_time": "2024-10-18T10:22:47.323089940Z", + "created_at": "2024-10-18T10:22:47.241953841Z", + "updated_at": "2024-10-18T10:22:47.324336487Z" }, "deployed_version": { "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", "dependencies": [], - "id": "133e8fe8-52b5-44ee-8837-9cbcf0fbe8d6", + "id": "eb8aabf7-062a-4695-ad5b-42eca34b0f7d", "deployed": true, - "number": 4, - "built_at": "2024-10-14T09:07:57.447777891Z", + "number": 1, + "built_at": "2024-10-18T10:22:47.323089940Z", "secrets": [], "status": "built", - "created_at": "2024-10-14T09:07:57.345467497Z", - "updated_at": "2024-10-14T09:07:57.448078558Z", + "created_at": "2024-10-18T10:22:47.241953841Z", + "updated_at": "2024-10-18T10:22:47.324336487Z", "runtime": "node16", "supported_triggers": [ { @@ -6182,7 +6120,7 @@ "response": { "actions": [ { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", + "id": "1d9d9961-1241-4715-9c06-ebebe824dd0c", "name": "My Custom Action", "supported_triggers": [ { @@ -6190,34 +6128,34 @@ "version": "v2" } ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:10:16.315626907Z", + "created_at": "2024-10-18T10:22:46.504691389Z", + "updated_at": "2024-10-18T10:24:10.494523684Z", "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", "dependencies": [], "runtime": "node16", "status": "built", "secrets": [], "current_version": { - "id": "133e8fe8-52b5-44ee-8837-9cbcf0fbe8d6", + "id": "eb8aabf7-062a-4695-ad5b-42eca34b0f7d", "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", "runtime": "node16", "status": "BUILT", - "number": 4, - "build_time": "2024-10-14T09:07:57.447777891Z", - "created_at": "2024-10-14T09:07:57.345467497Z", - "updated_at": "2024-10-14T09:07:57.448078558Z" + "number": 1, + "build_time": "2024-10-18T10:22:47.323089940Z", + "created_at": "2024-10-18T10:22:47.241953841Z", + "updated_at": "2024-10-18T10:22:47.324336487Z" }, "deployed_version": { "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", "dependencies": [], - "id": "133e8fe8-52b5-44ee-8837-9cbcf0fbe8d6", + "id": "eb8aabf7-062a-4695-ad5b-42eca34b0f7d", "deployed": true, - "number": 4, - "built_at": "2024-10-14T09:07:57.447777891Z", + "number": 1, + "built_at": "2024-10-18T10:22:47.323089940Z", "secrets": [], "status": "built", - "created_at": "2024-10-14T09:07:57.345467497Z", - "updated_at": "2024-10-14T09:07:57.448078558Z", + "created_at": "2024-10-18T10:22:47.241953841Z", + "updated_at": "2024-10-18T10:22:47.324336487Z", "runtime": "node16", "supported_triggers": [ { @@ -6238,71 +6176,39 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "POST", - "path": "/api/v2/actions/actions/ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f/deploy", - "body": {}, + "path": "/api/v2/actions/actions/1d9d9961-1241-4715-9c06-ebebe824dd0c/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", "dependencies": [], - "id": "46996b0a-4603-48a8-9848-fdf9746077b3", + "id": "3383b6a4-c2a6-4b19-bf95-807fc199cf54", "deployed": false, - "number": 5, + "number": 2, "secrets": [], "status": "built", - "created_at": "2024-10-14T09:10:17.307518476Z", - "updated_at": "2024-10-14T09:10:17.307518476Z", + "created_at": "2024-10-18T10:24:11.228980101Z", + "updated_at": "2024-10-18T10:24:11.228980101Z", "runtime": "node16", "supported_triggers": [ { "id": "post-login", - "version": "v2" - } - ], - "action": { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", - "name": "My Custom Action", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:10:16.304162837Z", - "all_changes_deployed": false - } - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/organizations?include_totals=true", - "body": "", - "status": 200, - "response": { - "organizations": [ - { - "id": "org_knGmCqfHxLD0V9YB", - "name": "org1", - "display_name": "Organization", - "branding": { - "colors": { - "page_background": "#fff5f5", - "primary": "#57ddff" - } - } - }, - { - "id": "org_haOYEECGVpZwU9Tc", - "name": "org2", - "display_name": "Organization2" + "version": "v2" } ], - "start": 0, - "limit": 50, - "total": 2 + "action": { + "id": "1d9d9961-1241-4715-9c06-ebebe824dd0c", + "name": "My Custom Action", + "supported_triggers": [ + { + "id": "post-login", + "version": "v2" + } + ], + "created_at": "2024-10-18T10:22:46.504691389Z", + "updated_at": "2024-10-18T10:24:10.485296733Z", + "all_changes_deployed": false + } }, "rawHeaders": [], "responseIsBinary": false @@ -6310,13 +6216,13 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true&take=50", + "path": "/api/v2/organizations?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { "organizations": [ { - "id": "org_knGmCqfHxLD0V9YB", + "id": "org_kyzlkLpxZLx5jUv4", "name": "org1", "display_name": "Organization", "branding": { @@ -6327,11 +6233,14 @@ } }, { - "id": "org_haOYEECGVpZwU9Tc", + "id": "org_gqen5Wo1XmlD46eC", "name": "org2", "display_name": "Organization2" } - ] + ], + "start": 0, + "limit": 100, + "total": 2 }, "rawHeaders": [], "responseIsBinary": false @@ -6339,7 +6248,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_knGmCqfHxLD0V9YB/enabled_connections", + "path": "/api/v2/organizations/org_kyzlkLpxZLx5jUv4/enabled_connections", "body": "", "status": 200, "response": [], @@ -6349,7 +6258,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_haOYEECGVpZwU9Tc/enabled_connections", + "path": "/api/v2/organizations/org_gqen5Wo1XmlD46eC/enabled_connections", "body": "", "status": 200, "response": [], @@ -6359,7 +6268,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -6368,7 +6277,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -6424,12 +6333,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_SXIEWGYv5QzGSoqq", + "id": "con_vF5B2QiM1bTdpSsO", "options": { "email": true, "scope": [ @@ -6445,8 +6354,8 @@ "google-oauth2" ], "enabled_clients": [ - "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J" ] } ] @@ -6457,7 +6366,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/organizations/org_knGmCqfHxLD0V9YB", + "path": "/api/v2/organizations/org_kyzlkLpxZLx5jUv4", "body": { "branding": { "colors": { @@ -6475,7 +6384,7 @@ "primary": "#57ddff" } }, - "id": "org_knGmCqfHxLD0V9YB", + "id": "org_kyzlkLpxZLx5jUv4", "display_name": "Organization", "name": "org1" }, @@ -6485,13 +6394,13 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/organizations/org_haOYEECGVpZwU9Tc", + "path": "/api/v2/organizations/org_gqen5Wo1XmlD46eC", "body": { "display_name": "Organization2" }, "status": 200, "response": { - "id": "org_haOYEECGVpZwU9Tc", + "id": "org_gqen5Wo1XmlD46eC", "display_name": "Organization2", "name": "org2" }, @@ -6603,7 +6512,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -6612,7 +6521,7 @@ "limit": 100, "rules": [ { - "id": "rul_KPxS2cPV6d0ZfCE3", + "id": "rul_9MtEttom2x3G0KZP", "enabled": true, "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", "name": "my-rule", @@ -6627,7 +6536,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -6636,7 +6545,7 @@ "limit": 100, "rules": [ { - "id": "rul_KPxS2cPV6d0ZfCE3", + "id": "rul_9MtEttom2x3G0KZP", "enabled": true, "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", "name": "my-rule", @@ -6651,8 +6560,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/rules/rul_KPxS2cPV6d0ZfCE3", - "body": {}, + "path": "/api/v2/rules/rul_9MtEttom2x3G0KZP", + "body": "", "status": 204, "response": "", "rawHeaders": [], @@ -6661,7 +6570,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -6676,7 +6585,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -6691,7 +6600,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -7464,7 +7373,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?page=0&per_page=100&include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -7549,7 +7458,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7569,21 +7478,12 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -7602,8 +7502,7 @@ "subject": "deprecated" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7611,25 +7510,32 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -7648,7 +7554,8 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "allowed_origins": [], + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7656,21 +7563,23 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, @@ -7691,7 +7600,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7743,7 +7652,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7802,7 +7711,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7859,7 +7768,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7883,8 +7792,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "body": {}, + "path": "/api/v2/clients/jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", + "body": "", "status": 204, "response": "", "rawHeaders": [], @@ -7893,8 +7802,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "body": {}, + "path": "/api/v2/clients/RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", + "body": "", "status": 204, "response": "", "rawHeaders": [], @@ -7903,8 +7812,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", - "body": {}, + "path": "/api/v2/clients/j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", + "body": "", "status": 204, "response": "", "rawHeaders": [], @@ -7913,8 +7822,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/Cbs29sl8S2G7zgo97erymb8t59IG6its", - "body": {}, + "path": "/api/v2/clients/CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", + "body": "", "status": 204, "response": "", "rawHeaders": [], @@ -7923,8 +7832,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "body": {}, + "path": "/api/v2/clients/s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", + "body": "", "status": 204, "response": "", "rawHeaders": [], @@ -7933,8 +7842,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/11CR1JJoz35mJP5HPekYuwloHZQrg6bT", - "body": {}, + "path": "/api/v2/clients/XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", + "body": "", "status": 204, "response": "", "rawHeaders": [], @@ -7943,8 +7852,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "body": {}, + "path": "/api/v2/clients/Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "body": "", "status": 204, "response": "", "rawHeaders": [], @@ -8013,7 +7922,7 @@ "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "nKwjGNoBqCdmAZhH744OhOFjqveMMZ7W", + "client_id": "a7x8ODABNyKsRrQdgkjgNampU8vadtpO", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -8035,7 +7944,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/emails/provider?include_fields=true&fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address", + "path": "/api/v2/emails/provider?fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address&include_fields=true", "body": "", "status": 200, "response": { @@ -8049,18 +7958,27 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "DELETE", + "method": "PATCH", "path": "/api/v2/emails/provider", - "body": {}, - "status": 204, - "response": "", + "body": { + "name": "mandrill", + "default_from_address": "auth0-user@auth0.com", + "enabled": false + }, + "status": 200, + "response": { + "name": "mandrill", + "credentials": {}, + "default_from_address": "auth0-user@auth0.com", + "enabled": false + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/duo", + "path": "/api/v2/guardian/factors/otp", "body": { "enabled": false }, @@ -8074,7 +7992,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/recovery-code", + "path": "/api/v2/guardian/factors/email", "body": { "enabled": false }, @@ -8088,7 +8006,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/otp", + "path": "/api/v2/guardian/factors/duo", "body": { "enabled": false }, @@ -8102,7 +8020,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/email", + "path": "/api/v2/guardian/factors/push-notification", "body": { "enabled": false }, @@ -8130,7 +8048,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/sms", + "path": "/api/v2/guardian/factors/recovery-code", "body": { "enabled": false }, @@ -8158,7 +8076,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/push-notification", + "path": "/api/v2/guardian/factors/sms", "body": { "enabled": false }, @@ -8182,7 +8100,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" }, @@ -8222,6 +8140,50 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/attack-protection/suspicious-ip-throttling", + "body": { + "enabled": true, + "shields": [ + "admin_notification", + "block" + ], + "allowlist": [], + "stage": { + "pre-login": { + "max_attempts": 100, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 50, + "rate": 1200 + } + } + }, + "status": 200, + "response": { + "enabled": true, + "shields": [ + "admin_notification", + "block" + ], + "allowlist": [], + "stage": { + "pre-login": { + "max_attempts": 100, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 50, + "rate": 1200 + } + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", @@ -8278,30 +8240,19 @@ { "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": [ { - "id": "lst_0000000000017950", - "name": "Suspended DD Log Stream", - "type": "datadog", - "status": "active", - "sink": { - "datadogApiKey": "some-sensitive-api-key", - "datadogRegion": "us" - }, - "isPriority": false - }, - { - "id": "lst_0000000000017951", + "id": "lst_0000000000018117", "name": "Amazon EventBridge", "type": "eventbridge", "status": "active", "sink": { "awsAccountId": "123456789012", "awsRegion": "us-east-2", - "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-11b6995b-a49b-4a0f-bfaf-88cefc5ba0b3/auth0.logs" + "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-47282268-18be-4aaf-8b22-08fe19e10bdf/auth0.logs" }, "filters": [ { @@ -8342,60 +8293,27 @@ } ], "isPriority": false - } - ], - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/attack-protection/suspicious-ip-throttling", - "body": { - "enabled": true, - "shields": [ - "admin_notification", - "block" - ], - "allowlist": [], - "stage": { - "pre-login": { - "max_attempts": 100, - "rate": 864000 - }, - "pre-user-registration": { - "max_attempts": 50, - "rate": 1200 - } - } - }, - "status": 200, - "response": { - "enabled": true, - "shields": [ - "admin_notification", - "block" - ], - "allowlist": [], - "stage": { - "pre-login": { - "max_attempts": 100, - "rate": 864000 + }, + { + "id": "lst_0000000000018116", + "name": "Suspended DD Log Stream", + "type": "datadog", + "status": "active", + "sink": { + "datadogApiKey": "some-sensitive-api-key", + "datadogRegion": "us" }, - "pre-user-registration": { - "max_attempts": 50, - "rate": 1200 - } + "isPriority": false } - }, + ], "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/log-streams/lst_0000000000017950", - "body": {}, + "path": "/api/v2/log-streams/lst_0000000000018116", + "body": "", "status": 204, "response": "", "rawHeaders": [], @@ -8404,8 +8322,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/log-streams/lst_0000000000017951", - "body": {}, + "path": "/api/v2/log-streams/lst_0000000000018117", + "body": "", "status": 204, "response": "", "rawHeaders": [], @@ -8414,7 +8332,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -8489,7 +8407,7 @@ "subject": "deprecated" } ], - "client_id": "nKwjGNoBqCdmAZhH744OhOFjqveMMZ7W", + "client_id": "a7x8ODABNyKsRrQdgkjgNampU8vadtpO", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -8548,7 +8466,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?per_page=100&page=0&include_totals=true&strategy=auth0", "body": "", "status": 200, "response": { @@ -8557,7 +8475,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -8622,7 +8540,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?per_page=100&page=0&include_totals=true&strategy=auth0", "body": "", "status": 200, "response": { @@ -8631,7 +8549,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -8696,11 +8614,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/connections/con_cvOdQDkXpKvaMNSh", - "body": {}, + "path": "/api/v2/connections/con_pxPok67zc0pXzFtU", + "body": "", "status": 202, "response": { - "deleted_at": "2024-10-14T09:10:36.659Z" + "deleted_at": "2024-10-18T10:24:28.584Z" }, "rawHeaders": [], "responseIsBinary": false @@ -8714,7 +8632,7 @@ "strategy": "auth0", "enabled_clients": [ "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "nKwjGNoBqCdmAZhH744OhOFjqveMMZ7W" + "a7x8ODABNyKsRrQdgkjgNampU8vadtpO" ], "is_domain_connection": false, "options": { @@ -8732,7 +8650,7 @@ }, "status": 201, "response": { - "id": "con_cp1GQaWW1rc0U9o9", + "id": "con_JMsZyNNbFr4PDt4B", "options": { "mfa": { "active": true, @@ -8760,7 +8678,7 @@ "is_domain_connection": false, "enabled_clients": [ "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "nKwjGNoBqCdmAZhH744OhOFjqveMMZ7W" + "a7x8ODABNyKsRrQdgkjgNampU8vadtpO" ], "realms": [ "Username-Password-Authentication" @@ -8772,7 +8690,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -8847,7 +8765,7 @@ "subject": "deprecated" } ], - "client_id": "nKwjGNoBqCdmAZhH744OhOFjqveMMZ7W", + "client_id": "a7x8ODABNyKsRrQdgkjgNampU8vadtpO", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -8906,7 +8824,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -8915,7 +8833,7 @@ "limit": 100, "connections": [ { - "id": "con_SXIEWGYv5QzGSoqq", + "id": "con_vF5B2QiM1bTdpSsO", "options": { "email": true, "scope": [ @@ -8933,7 +8851,7 @@ "enabled_clients": [] }, { - "id": "con_cp1GQaWW1rc0U9o9", + "id": "con_JMsZyNNbFr4PDt4B", "options": { "mfa": { "active": true, @@ -8964,7 +8882,7 @@ ], "enabled_clients": [ "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "nKwjGNoBqCdmAZhH744OhOFjqveMMZ7W" + "a7x8ODABNyKsRrQdgkjgNampU8vadtpO" ] } ] @@ -8975,7 +8893,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -8984,7 +8902,7 @@ "limit": 100, "connections": [ { - "id": "con_SXIEWGYv5QzGSoqq", + "id": "con_vF5B2QiM1bTdpSsO", "options": { "email": true, "scope": [ @@ -9002,7 +8920,7 @@ "enabled_clients": [] }, { - "id": "con_cp1GQaWW1rc0U9o9", + "id": "con_JMsZyNNbFr4PDt4B", "options": { "mfa": { "active": true, @@ -9033,7 +8951,7 @@ ], "enabled_clients": [ "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "nKwjGNoBqCdmAZhH744OhOFjqveMMZ7W" + "a7x8ODABNyKsRrQdgkjgNampU8vadtpO" ] } ] @@ -9044,11 +8962,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/connections/con_SXIEWGYv5QzGSoqq", - "body": {}, + "path": "/api/v2/connections/con_vF5B2QiM1bTdpSsO", + "body": "", "status": 202, "response": { - "deleted_at": "2024-10-14T09:10:39.306Z" + "deleted_at": "2024-10-18T10:24:30.484Z" }, "rawHeaders": [], "responseIsBinary": false @@ -9056,7 +8974,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -9131,7 +9049,7 @@ "subject": "deprecated" } ], - "client_id": "nKwjGNoBqCdmAZhH744OhOFjqveMMZ7W", + "client_id": "a7x8ODABNyKsRrQdgkjgNampU8vadtpO", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9190,7 +9108,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -9371,28 +9289,28 @@ { "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { "roles": [ { - "id": "rol_hRGDQmEBYbZsC8sZ", + "id": "rol_ZJKlfo79sK6K1lHd", "name": "Admin", "description": "Can read and write things" }, { - "id": "rol_oT9S2f9KYqFyYR2j", + "id": "rol_bL4bPRxC5sA93SOl", "name": "Reader", "description": "Can only read things" }, { - "id": "rol_ZNeuVHhKZTaZaGwq", + "id": "rol_oqgV8nN5JuxVGYCv", "name": "read_only", "description": "Read Only" }, { - "id": "rol_1DwrDRZ26bdvfKxL", + "id": "rol_x0vZAmiZ04hdMdD1", "name": "read_osnly", "description": "Readz Only" } @@ -9407,7 +9325,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_hRGDQmEBYbZsC8sZ/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_ZJKlfo79sK6K1lHd/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -9422,7 +9340,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_oT9S2f9KYqFyYR2j/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_bL4bPRxC5sA93SOl/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -9437,7 +9355,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_ZNeuVHhKZTaZaGwq/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_oqgV8nN5JuxVGYCv/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -9452,7 +9370,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_1DwrDRZ26bdvfKxL/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_x0vZAmiZ04hdMdD1/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -9467,8 +9385,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/roles/rol_hRGDQmEBYbZsC8sZ", - "body": {}, + "path": "/api/v2/roles/rol_ZJKlfo79sK6K1lHd", + "body": "", "status": 200, "response": {}, "rawHeaders": [], @@ -9477,8 +9395,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/roles/rol_oT9S2f9KYqFyYR2j", - "body": {}, + "path": "/api/v2/roles/rol_oqgV8nN5JuxVGYCv", + "body": "", "status": 200, "response": {}, "rawHeaders": [], @@ -9487,8 +9405,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/roles/rol_ZNeuVHhKZTaZaGwq", - "body": {}, + "path": "/api/v2/roles/rol_bL4bPRxC5sA93SOl", + "body": "", "status": 200, "response": {}, "rawHeaders": [], @@ -9497,8 +9415,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/roles/rol_1DwrDRZ26bdvfKxL", - "body": {}, + "path": "/api/v2/roles/rol_x0vZAmiZ04hdMdD1", + "body": "", "status": 200, "response": {}, "rawHeaders": [], @@ -9513,7 +9431,7 @@ "response": { "actions": [ { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", + "id": "1d9d9961-1241-4715-9c06-ebebe824dd0c", "name": "My Custom Action", "supported_triggers": [ { @@ -9521,34 +9439,34 @@ "version": "v2" } ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:10:16.315626907Z", + "created_at": "2024-10-18T10:22:46.504691389Z", + "updated_at": "2024-10-18T10:24:10.494523684Z", "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", "dependencies": [], "runtime": "node16", "status": "built", "secrets": [], "current_version": { - "id": "46996b0a-4603-48a8-9848-fdf9746077b3", + "id": "3383b6a4-c2a6-4b19-bf95-807fc199cf54", "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", "runtime": "node16", "status": "BUILT", - "number": 5, - "build_time": "2024-10-14T09:10:17.401854888Z", - "created_at": "2024-10-14T09:10:17.307518476Z", - "updated_at": "2024-10-14T09:10:17.404041863Z" + "number": 2, + "build_time": "2024-10-18T10:24:11.312524564Z", + "created_at": "2024-10-18T10:24:11.228980101Z", + "updated_at": "2024-10-18T10:24:11.313524207Z" }, "deployed_version": { "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", "dependencies": [], - "id": "46996b0a-4603-48a8-9848-fdf9746077b3", + "id": "3383b6a4-c2a6-4b19-bf95-807fc199cf54", "deployed": true, - "number": 5, - "built_at": "2024-10-14T09:10:17.401854888Z", + "number": 2, + "built_at": "2024-10-18T10:24:11.312524564Z", "secrets": [], "status": "built", - "created_at": "2024-10-14T09:10:17.307518476Z", - "updated_at": "2024-10-14T09:10:17.404041863Z", + "created_at": "2024-10-18T10:24:11.228980101Z", + "updated_at": "2024-10-18T10:24:11.313524207Z", "runtime": "node16", "supported_triggers": [ { @@ -9569,8 +9487,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/actions/actions/ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f?force=true", - "body": {}, + "path": "/api/v2/actions/actions/1d9d9961-1241-4715-9c06-ebebe824dd0c?force=true", + "body": "", "status": 204, "response": "", "rawHeaders": [], @@ -9580,43 +9498,11 @@ "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", "path": "/api/v2/actions/actions?page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "actions": [], - "per_page": 100 - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/organizations?include_totals=true", - "body": "", - "status": 200, - "response": { - "organizations": [ - { - "id": "org_knGmCqfHxLD0V9YB", - "name": "org1", - "display_name": "Organization", - "branding": { - "colors": { - "page_background": "#fff5f5", - "primary": "#57ddff" - } - } - }, - { - "id": "org_haOYEECGVpZwU9Tc", - "name": "org2", - "display_name": "Organization2" - } - ], - "start": 0, - "limit": 50, - "total": 2 + "body": "", + "status": 200, + "response": { + "actions": [], + "per_page": 100 }, "rawHeaders": [], "responseIsBinary": false @@ -9624,13 +9510,13 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true&take=50", + "path": "/api/v2/organizations?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { "organizations": [ { - "id": "org_knGmCqfHxLD0V9YB", + "id": "org_kyzlkLpxZLx5jUv4", "name": "org1", "display_name": "Organization", "branding": { @@ -9641,11 +9527,14 @@ } }, { - "id": "org_haOYEECGVpZwU9Tc", + "id": "org_gqen5Wo1XmlD46eC", "name": "org2", "display_name": "Organization2" } - ] + ], + "start": 0, + "limit": 100, + "total": 2 }, "rawHeaders": [], "responseIsBinary": false @@ -9653,7 +9542,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_knGmCqfHxLD0V9YB/enabled_connections", + "path": "/api/v2/organizations/org_kyzlkLpxZLx5jUv4/enabled_connections", "body": "", "status": 200, "response": [], @@ -9663,7 +9552,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_haOYEECGVpZwU9Tc/enabled_connections", + "path": "/api/v2/organizations/org_gqen5Wo1XmlD46eC/enabled_connections", "body": "", "status": 200, "response": [], @@ -9673,7 +9562,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -9682,7 +9571,7 @@ "limit": 100, "connections": [ { - "id": "con_cp1GQaWW1rc0U9o9", + "id": "con_JMsZyNNbFr4PDt4B", "options": { "mfa": { "active": true, @@ -9713,7 +9602,7 @@ ], "enabled_clients": [ "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "nKwjGNoBqCdmAZhH744OhOFjqveMMZ7W" + "a7x8ODABNyKsRrQdgkjgNampU8vadtpO" ] } ] @@ -9724,8 +9613,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/organizations/org_haOYEECGVpZwU9Tc", - "body": {}, + "path": "/api/v2/organizations/org_kyzlkLpxZLx5jUv4", + "body": "", "status": 204, "response": "", "rawHeaders": [], @@ -9734,8 +9623,8 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/organizations/org_knGmCqfHxLD0V9YB", - "body": {}, + "path": "/api/v2/organizations/org_gqen5Wo1XmlD46eC", + "body": "", "status": 204, "response": "", "rawHeaders": [], @@ -9821,7 +9710,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -9846,7 +9735,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -9861,7 +9750,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?page=0&per_page=100&include_totals=true&is_global=true", "body": "", "status": 200, "response": { @@ -9983,7 +9872,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -10756,7 +10645,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?page=0&per_page=100&include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -10831,7 +10720,7 @@ "subject": "deprecated" } ], - "client_id": "nKwjGNoBqCdmAZhH744OhOFjqveMMZ7W", + "client_id": "a7x8ODABNyKsRrQdgkjgNampU8vadtpO", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -10855,7 +10744,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?per_page=100&page=0&include_totals=true&strategy=auth0", "body": "", "status": 200, "response": { @@ -10864,7 +10753,7 @@ "limit": 100, "connections": [ { - "id": "con_cp1GQaWW1rc0U9o9", + "id": "con_JMsZyNNbFr4PDt4B", "options": { "mfa": { "active": true, @@ -10895,7 +10784,7 @@ ], "enabled_clients": [ "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "nKwjGNoBqCdmAZhH744OhOFjqveMMZ7W" + "a7x8ODABNyKsRrQdgkjgNampU8vadtpO" ] } ] @@ -10906,7 +10795,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -10915,7 +10804,7 @@ "limit": 100, "connections": [ { - "id": "con_cp1GQaWW1rc0U9o9", + "id": "con_JMsZyNNbFr4PDt4B", "options": { "mfa": { "active": true, @@ -10946,7 +10835,7 @@ ], "enabled_clients": [ "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "nKwjGNoBqCdmAZhH744OhOFjqveMMZ7W" + "a7x8ODABNyKsRrQdgkjgNampU8vadtpO" ] } ] @@ -11028,29 +10917,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/emails/provider?include_fields=true&fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address", - "body": "", - "status": 404, - "response": { - "statusCode": 404, - "error": "Not Found", - "message": "There is not a configured email provider", - "errorCode": "inexistent_email_provider" - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/email-templates/password_reset", + "path": "/api/v2/emails/provider?fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address&include_fields=true", "body": "", - "status": 404, + "status": 200, "response": { - "statusCode": 404, - "error": "Not Found", - "message": "The template does not exist.", - "errorCode": "inexistent_email_template" + "name": "mandrill", + "credentials": {}, + "default_from_address": "auth0-user@auth0.com", + "enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -11076,7 +10950,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/reset_email", + "path": "/api/v2/email-templates/mfa_oob_code", "body": "", "status": 404, "response": { @@ -11091,7 +10965,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/user_invitation", + "path": "/api/v2/email-templates/enrollment_email", "body": "", "status": 404, "response": { @@ -11106,18 +10980,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/welcome_email", + "path": "/api/v2/email-templates/verify_email_by_code", "body": "", - "status": 200, + "status": 404, "response": { - "template": "welcome_email", - "body": "\n \n

Welcome!

\n \n\n", - "from": "", - "resultUrl": "https://example.com/welcome", - "subject": "Welcome", - "syntax": "liquid", - "urlLifetimeInSeconds": 3600, - "enabled": false + "statusCode": 404, + "error": "Not Found", + "message": "The template does not exist.", + "errorCode": "inexistent_email_template" }, "rawHeaders": [], "responseIsBinary": false @@ -11125,7 +10995,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/enrollment_email", + "path": "/api/v2/email-templates/change_password", "body": "", "status": 404, "response": { @@ -11140,7 +11010,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/change_password", + "path": "/api/v2/email-templates/blocked_account", "body": "", "status": 404, "response": { @@ -11155,7 +11025,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/mfa_oob_code", + "path": "/api/v2/email-templates/user_invitation", "body": "", "status": 404, "response": { @@ -11170,7 +11040,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/verify_email_by_code", + "path": "/api/v2/email-templates/reset_email", "body": "", "status": 404, "response": { @@ -11185,7 +11055,26 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/blocked_account", + "path": "/api/v2/email-templates/welcome_email", + "body": "", + "status": 200, + "response": { + "template": "welcome_email", + "body": "\n \n

Welcome!

\n \n\n", + "from": "", + "resultUrl": "https://example.com/welcome", + "subject": "Welcome", + "syntax": "liquid", + "urlLifetimeInSeconds": 3600, + "enabled": false + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/email-templates/password_reset", "body": "", "status": 404, "response": { @@ -11215,7 +11104,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11447,25 +11336,25 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/guardian/factors/sms/providers/twilio", + "path": "/api/v2/guardian/factors/push-notification/providers/sns", "body": "", "status": 200, - "response": { - "auth_token": "bar", - "sid": "foo", - "from": "from bar", - "messaging_service_sid": "foo" - }, + "response": {}, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/guardian/factors/push-notification/providers/sns", + "path": "/api/v2/guardian/factors/sms/providers/twilio", "body": "", "status": 200, - "response": {}, + "response": { + "auth_token": "bar", + "sid": "foo", + "from": "from bar", + "messaging_service_sid": "foo" + }, "rawHeaders": [], "responseIsBinary": false }, @@ -11495,7 +11384,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": { @@ -11519,7 +11408,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11644,7 +11533,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login/custom-text/en", + "path": "/api/v2/prompts/login-password/custom-text/en", "body": "", "status": 200, "response": {}, @@ -11654,7 +11543,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-id/custom-text/en", + "path": "/api/v2/prompts/login/custom-text/en", "body": "", "status": 200, "response": {}, @@ -11664,7 +11553,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-password/custom-text/en", + "path": "/api/v2/prompts/login-id/custom-text/en", "body": "", "status": 200, "response": {}, @@ -11674,7 +11563,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup/custom-text/en", + "path": "/api/v2/prompts/login-email-verification/custom-text/en", "body": "", "status": 200, "response": {}, @@ -11684,7 +11573,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-email-verification/custom-text/en", + "path": "/api/v2/prompts/signup-id/custom-text/en", "body": "", "status": 200, "response": {}, @@ -11694,7 +11583,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup-id/custom-text/en", + "path": "/api/v2/prompts/signup/custom-text/en", "body": "", "status": 200, "response": {}, @@ -11754,7 +11643,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-voice/custom-text/en", + "path": "/api/v2/prompts/mfa-phone/custom-text/en", "body": "", "status": 200, "response": {}, @@ -11764,7 +11653,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-phone/custom-text/en", + "path": "/api/v2/prompts/mfa-voice/custom-text/en", "body": "", "status": 200, "response": {}, @@ -11894,7 +11783,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-password/partials", + "path": "/api/v2/prompts/login/partials", "body": "", "status": 200, "response": {}, @@ -11904,7 +11793,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-id/partials", + "path": "/api/v2/prompts/login-password/partials", "body": "", "status": 200, "response": {}, @@ -11914,7 +11803,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login/partials", + "path": "/api/v2/prompts/login-id/partials", "body": "", "status": 200, "response": {}, @@ -11924,7 +11813,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-passwordless/partials", + "path": "/api/v2/prompts/signup-id/partials", "body": "", "status": 200, "response": {}, @@ -11934,7 +11823,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup/partials", + "path": "/api/v2/prompts/login-passwordless/partials", "body": "", "status": 200, "response": {}, @@ -11944,7 +11833,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup-id/partials", + "path": "/api/v2/prompts/signup/partials", "body": "", "status": 200, "response": {}, @@ -11961,18 +11850,6 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/migrations", - "body": "", - "status": 200, - "response": { - "flags": {} - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -11994,6 +11871,18 @@ "status": 200, "response": { "triggers": [ + { + "id": "post-login", + "version": "v2", + "status": "DEPRECATED", + "runtimes": [ + "node12", + "node16" + ], + "default_runtime": "node16", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, { "id": "post-login", "version": "v3", @@ -12014,18 +11903,17 @@ }, { "id": "post-login", - "version": "v2", + "version": "v1", "status": "DEPRECATED", "runtimes": [ - "node12", - "node16" + "node12" ], - "default_runtime": "node16", + "default_runtime": "node12", "binding_policy": "trigger-bound", "compatible_triggers": [] }, { - "id": "post-login", + "id": "credentials-exchange", "version": "v1", "status": "DEPRECATED", "runtimes": [ @@ -12048,17 +11936,6 @@ "binding_policy": "trigger-bound", "compatible_triggers": [] }, - { - "id": "credentials-exchange", - "version": "v1", - "status": "DEPRECATED", - "runtimes": [ - "node12" - ], - "default_runtime": "node12", - "binding_policy": "trigger-bound", - "compatible_triggers": [] - }, { "id": "pre-user-registration", "version": "v2", @@ -12133,24 +12010,24 @@ }, { "id": "send-phone-message", - "version": "v1", - "status": "DEPRECATED", + "version": "v2", + "status": "CURRENT", "runtimes": [ - "node12" + "node12", + "node16", + "node18-actions" ], + "default_runtime": "node18-actions", "binding_policy": "trigger-bound", "compatible_triggers": [] }, { "id": "send-phone-message", - "version": "v2", - "status": "CURRENT", + "version": "v1", + "status": "DEPRECATED", "runtimes": [ - "node12", - "node16", - "node18-actions" + "node12" ], - "default_runtime": "node18-actions", "binding_policy": "trigger-bound", "compatible_triggers": [] }, @@ -12353,57 +12230,18 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true", + "path": "/api/v2/organizations?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { "organizations": [], "start": 0, - "limit": 50, + "limit": 100, "total": 0 }, "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/organizations?include_totals=true&take=50", - "body": "", - "status": 200, - "response": { - "organizations": [] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/attack-protection/suspicious-ip-throttling", - "body": "", - "status": 200, - "response": { - "enabled": true, - "shields": [ - "admin_notification", - "block" - ], - "allowlist": [], - "stage": { - "pre-login": { - "max_attempts": 100, - "rate": 864000 - }, - "pre-user-registration": { - "max_attempts": 50, - "rate": 1200 - } - } - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -12446,7 +12284,34 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/log-streams?paginate=false", + "path": "/api/v2/attack-protection/suspicious-ip-throttling", + "body": "", + "status": 200, + "response": { + "enabled": true, + "shields": [ + "admin_notification", + "block" + ], + "allowlist": [], + "stage": { + "pre-login": { + "max_attempts": 100, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 50, + "rate": 1200 + } + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/log-streams", "body": "", "status": 200, "response": [], @@ -12456,7 +12321,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": [], 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 4480bae57..6bad37118 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,23 +2,14 @@ { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 1, + "total": 0, "start": 0, "limit": 100, - "rules": [ - { - "id": "rul_KPxS2cPV6d0ZfCE3", - "enabled": true, - "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", - "name": "my-rule", - "order": 2, - "stage": "login_success" - } - ] + "rules": [] }, "rawHeaders": [], "responseIsBinary": false @@ -26,40 +17,32 @@ { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 1, + "total": 0, "start": 0, "limit": 100, - "rules": [ - { - "id": "rul_KPxS2cPV6d0ZfCE3", - "enabled": true, - "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", - "name": "my-rule", - "order": 2, - "stage": "login_success" - } - ] + "rules": [] }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/rules/rul_KPxS2cPV6d0ZfCE3", + "method": "POST", + "path": "/api/v2/rules", "body": { "name": "my-rule", "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", + "stage": "login_success", "enabled": true, "order": 2 }, - "status": 200, + "status": 201, "response": { - "id": "rul_KPxS2cPV6d0ZfCE3", + "id": "rul_9MtEttom2x3G0KZP", "enabled": true, "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", "name": "my-rule", @@ -72,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -87,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -102,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?page=0&per_page=100&include_totals=true&is_global=true", "body": "", "status": 200, "response": { @@ -219,7 +202,7 @@ "status": 200, "response": { "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" + "https://mycompany.org/logoutCallback" ], "change_password": { "enabled": true, @@ -255,7 +238,7 @@ "disable_clickjack_protection_headers": false, "enable_pipeline2": false }, - "friendly_name": "This tenant name should be preserved", + "friendly_name": "My Test Tenant", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" @@ -264,8 +247,8 @@ "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", "sandbox_version": "12", "session_lifetime": 3.0166666666666666, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", + "support_email": "support@mycompany.org", + "support_url": "https://mycompany.org/support", "universal_login": { "colors": { "primary": "#F8F8F2", @@ -283,7 +266,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -1056,11 +1039,11 @@ { "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?page=0&per_page=100&include_totals=true&is_global=false", "body": "", "status": 200, "response": { - "total": 10, + "total": 2, "start": 0, "limit": 100, "clients": [ @@ -1131,113 +1114,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "API Explorer Application", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1245,331 +1122,125 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", "grant_types": [ "authorization_code", "implicit", "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "POST", + "path": "/api/v2/clients", + "body": { + "name": "API Explorer Application", + "allowed_clients": [], + "app_type": "non_interactive", + "callbacks": [], + "client_aliases": [], + "client_metadata": {}, + "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, + "secret_encoded": false + }, + "native_social_login": { + "apple": { + "enabled": false }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", - "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 + "facebook": { + "enabled": false + } + }, + "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": 201, + "response": { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "API Explorer Application", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false }, + "facebook": { + "enabled": false + } + }, + "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, + "encrypted": true, + "signing_keys": [ { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", - "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 - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "The Default App", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": false, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso": false, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Test SPA", - "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], - "callbacks": [ - "http://localhost:3000" - ], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": true, - "refresh_token": { - "expiration_type": "expiring", - "leeway": 0, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "infinite_token_lifetime": false, - "infinite_idle_token_lifetime": false, - "rotation_type": "rotating" - }, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "none", - "app_type": "spa", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token" - ], - "web_origins": [ - "http://localhost:3000" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "auth0-deploy-cli-extension", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true + "cert": "[REDACTED]", + "key": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } - ] + ], + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "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", - "path": "/api/v2/clients/Cbs29sl8S2G7zgo97erymb8t59IG6its", + "method": "POST", + "path": "/api/v2/clients", "body": { "name": "Quickstarts API (Test Application)", "app_type": "non_interactive", @@ -1585,7 +1256,8 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000 + "lifetime_in_seconds": 36000, + "secret_encoded": false }, "oidc_conformant": true, "refresh_token": { @@ -1600,7 +1272,7 @@ "sso_disabled": false, "token_endpoint_auth_method": "client_secret_post" }, - "status": 200, + "status": 201, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, @@ -1622,14 +1294,16 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, + "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", + "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1649,8 +1323,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/clients/e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "method": "POST", + "path": "/api/v2/clients", "body": { "name": "Node App", "allowed_clients": [], @@ -1672,7 +1346,8 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000 + "lifetime_in_seconds": 36000, + "secret_encoded": false }, "native_social_login": { "apple": { @@ -1696,7 +1371,7 @@ "token_endpoint_auth_method": "client_secret_post", "web_origins": [] }, - "status": 200, + "status": 201, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, @@ -1727,15 +1402,17 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, + "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", + "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1760,15 +1437,11 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/clients/780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "method": "POST", + "path": "/api/v2/clients", "body": { - "name": "API Explorer Application", - "allowed_clients": [], + "name": "Terraform Provider", "app_type": "non_interactive", - "callbacks": [], - "client_aliases": [], - "client_metadata": {}, "cross_origin_auth": false, "custom_login_page_on": true, "grant_types": [ @@ -1778,15 +1451,8 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000 - }, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } + "lifetime_in_seconds": 36000, + "secret_encoded": false }, "oidc_conformant": true, "refresh_token": { @@ -1801,25 +1467,14 @@ "sso_disabled": false, "token_endpoint_auth_method": "client_secret_post" }, - "status": 200, + "status": 201, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "API Explorer Application", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -1831,14 +1486,16 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, + "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", + "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1846,7 +1503,6 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", "app_type": "non_interactive", "grant_types": [ @@ -1859,8 +1515,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/clients/RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "method": "POST", + "path": "/api/v2/clients", "body": { "name": "The Default App", "allowed_clients": [], @@ -1879,7 +1535,8 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000 + "lifetime_in_seconds": 36000, + "secret_encoded": false }, "native_social_login": { "apple": { @@ -1903,123 +1560,47 @@ "sso_disabled": false, "token_endpoint_auth_method": "client_secret_post" }, - "status": 200, + "status": 201, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, "name": "The Default App", "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": false, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso": false, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" - } - ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/clients/Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", - "body": { - "name": "Terraform Provider", - "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": "Terraform Provider", + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, - "oidc_conformant": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": 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, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, "rotation_type": "non-rotating" }, + "sso": false, "sso_disabled": false, + "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", + "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2027,9 +1608,12 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], "custom_login_page_on": true @@ -2039,8 +1623,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/clients/11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "method": "POST", + "path": "/api/v2/clients", "body": { "name": "Test SPA", "allowed_clients": [], @@ -2064,7 +1648,8 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000 + "lifetime_in_seconds": 36000, + "secret_encoded": false }, "native_social_login": { "apple": { @@ -2090,7 +1675,7 @@ "http://localhost:3000" ] }, - "status": 200, + "status": 201, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, @@ -2125,14 +1710,16 @@ "rotation_type": "rotating" }, "sso_disabled": false, + "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", + "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2158,8 +1745,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/clients/oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "method": "POST", + "path": "/api/v2/clients", "body": { "name": "auth0-deploy-cli-extension", "allowed_clients": [], @@ -2176,7 +1763,8 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000 + "lifetime_in_seconds": 36000, + "secret_encoded": false }, "native_social_login": { "apple": { @@ -2199,7 +1787,7 @@ "sso_disabled": false, "token_endpoint_auth_method": "client_secret_post" }, - "status": 200, + "status": 201, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, @@ -2229,14 +1817,16 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, + "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", + "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2258,7 +1848,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/emails/provider?include_fields=true&fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address", + "path": "/api/v2/emails/provider?fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address&include_fields=true", "body": "", "status": 200, "response": { @@ -2273,7 +1863,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": { @@ -2295,7 +1885,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/webauthn-roaming", + "path": "/api/v2/guardian/factors/email", "body": { "enabled": false }, @@ -2309,7 +1899,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/email", + "path": "/api/v2/guardian/factors/otp", "body": { "enabled": false }, @@ -2323,7 +1913,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/recovery-code", + "path": "/api/v2/guardian/factors/duo", "body": { "enabled": false }, @@ -2337,7 +1927,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/otp", + "path": "/api/v2/guardian/factors/sms", "body": { "enabled": false }, @@ -2351,7 +1941,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/sms", + "path": "/api/v2/guardian/factors/recovery-code", "body": { "enabled": false }, @@ -2365,13 +1955,13 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/push-notification", + "path": "/api/v2/guardian/factors/webauthn-platform", "body": { - "enabled": true + "enabled": false }, "status": 200, "response": { - "enabled": true + "enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -2379,13 +1969,13 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/duo", + "path": "/api/v2/guardian/factors/push-notification", "body": { - "enabled": false + "enabled": true }, "status": 200, "response": { - "enabled": false + "enabled": true }, "rawHeaders": [], "responseIsBinary": false @@ -2393,7 +1983,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/webauthn-platform", + "path": "/api/v2/guardian/factors/webauthn-roaming", "body": { "enabled": false }, @@ -2421,7 +2011,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" }, @@ -2490,6 +2080,31 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/attack-protection/breached-password-detection", + "body": { + "enabled": false, + "shields": [], + "admin_notification_frequency": [], + "method": "standard" + }, + "status": 200, + "response": { + "enabled": false, + "shields": [], + "admin_notification_frequency": [], + "method": "standard", + "stage": { + "pre-user-registration": { + "shields": [] + } + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", @@ -2539,104 +2154,44 @@ { "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": [ - { - "id": "lst_0000000000017950", - "name": "Suspended DD Log Stream", - "type": "datadog", - "status": "active", - "sink": { - "datadogApiKey": "some-sensitive-api-key", - "datadogRegion": "us" - }, - "isPriority": false - }, - { - "id": "lst_0000000000017951", - "name": "Amazon EventBridge", - "type": "eventbridge", - "status": "active", - "sink": { - "awsAccountId": "123456789012", - "awsRegion": "us-east-2", - "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-11b6995b-a49b-4a0f-bfaf-88cefc5ba0b3/auth0.logs" - }, - "filters": [ - { - "type": "category", - "name": "auth.login.success" - }, - { - "type": "category", - "name": "auth.login.notification" - }, - { - "type": "category", - "name": "auth.login.fail" - }, - { - "type": "category", - "name": "auth.signup.success" - }, - { - "type": "category", - "name": "auth.logout.success" - }, - { - "type": "category", - "name": "auth.logout.fail" - }, - { - "type": "category", - "name": "auth.silent_auth.fail" - }, - { - "type": "category", - "name": "auth.silent_auth.success" - }, - { - "type": "category", - "name": "auth.token_exchange.fail" - } - ], - "isPriority": false - } - ], + "response": [], "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/attack-protection/breached-password-detection", + "method": "POST", + "path": "/api/v2/log-streams", "body": { - "enabled": false, - "shields": [], - "admin_notification_frequency": [], - "method": "standard" + "name": "Suspended DD Log Stream", + "sink": { + "datadogApiKey": "some-sensitive-api-key", + "datadogRegion": "us" + }, + "type": "datadog" }, "status": 200, "response": { - "enabled": false, - "shields": [], - "admin_notification_frequency": [], - "method": "standard", - "stage": { - "pre-user-registration": { - "shields": [] - } - } + "id": "lst_0000000000018116", + "name": "Suspended DD Log Stream", + "type": "datadog", + "status": "active", + "sink": { + "datadogApiKey": "some-sensitive-api-key", + "datadogRegion": "us" + }, + "isPriority": false }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/log-streams/lst_0000000000017951", + "method": "POST", + "path": "/api/v2/log-streams", "body": { "name": "Amazon EventBridge", "filters": [ @@ -2677,18 +2232,22 @@ "name": "auth.token_exchange.fail" } ], - "status": "active" + "sink": { + "awsAccountId": "123456789012", + "awsRegion": "us-east-2" + }, + "type": "eventbridge" }, "status": 200, "response": { - "id": "lst_0000000000017951", + "id": "lst_0000000000018117", "name": "Amazon EventBridge", "type": "eventbridge", "status": "active", "sink": { "awsAccountId": "123456789012", "awsRegion": "us-east-2", - "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-11b6995b-a49b-4a0f-bfaf-88cefc5ba0b3/auth0.logs" + "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-47282268-18be-4aaf-8b22-08fe19e10bdf/auth0.logs" }, "filters": [ { @@ -2733,40 +2292,14 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/log-streams/lst_0000000000017950", - "body": { - "name": "Suspended DD Log Stream", - "sink": { - "datadogApiKey": "some-sensitive-api-key", - "datadogRegion": "us" - } - }, - "status": 200, - "response": { - "id": "lst_0000000000017950", - "name": "Suspended DD Log Stream", - "type": "datadog", - "status": "active", - "sink": { - "datadogApiKey": "some-sensitive-api-key", - "datadogRegion": "us" - }, - "isPriority": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 11, + "total": 10, "start": 0, "limit": 100, "clients": [ @@ -2837,7 +2370,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2889,7 +2422,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2909,21 +2442,12 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -2942,8 +2466,7 @@ "subject": "deprecated" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2951,25 +2474,32 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -2988,7 +2518,8 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "allowed_origins": [], + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2996,21 +2527,23 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, @@ -3031,7 +2564,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3083,7 +2616,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3142,7 +2675,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3199,59 +2732,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3310,77 +2791,16 @@ { "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?per_page=100&page=0&include_totals=true&strategy=auth0", "body": "", "status": 200, "response": { - "total": 2, + "total": 1, "start": 0, "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "import_mode": false, - "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "password_history": { - "size": 5, - "enable": false - }, - "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true - }, - "strategy": "auth0", - "name": "boo-baz-db-connection-test", - "is_domain_connection": false, - "realms": [ - "boo-baz-db-connection-test" - ], - "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] - }, - { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -3410,7 +2830,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -3422,77 +2842,16 @@ { "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?per_page=100&page=0&include_totals=true&strategy=auth0", "body": "", "status": 200, "response": { - "total": 2, + "total": 1, "start": 0, "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "import_mode": false, - "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "password_history": { - "size": 5, - "enable": false - }, - "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true - }, - "strategy": "auth0", - "name": "boo-baz-db-connection-test", - "is_domain_connection": false, - "realms": [ - "boo-baz-db-connection-test" - ], - "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] - }, - { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -3505,97 +2864,27 @@ "progressive_enrollment_enabled": true }, "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true - }, - "strategy": "auth0", - "name": "Username-Password-Authentication", - "is_domain_connection": false, - "realms": [ - "Username-Password-Authentication" - ], - "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" - ] - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/connections/con_cvOdQDkXpKvaMNSh", - "body": "", - "status": 200, - "response": { - "id": "con_cvOdQDkXpKvaMNSh", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "import_mode": false, - "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "password_history": { - "size": 5, - "enable": false - }, - "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true - }, - "strategy": "auth0", - "name": "boo-baz-db-connection-test", - "is_domain_connection": false, - "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ], - "realms": [ - "boo-baz-db-connection-test" + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true + }, + "strategy": "auth0", + "name": "Username-Password-Authentication", + "is_domain_connection": false, + "realms": [ + "Username-Password-Authentication" + ], + "enabled_clients": [ + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + ] + } ] }, "rawHeaders": [], @@ -3603,12 +2892,14 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/connections/con_cvOdQDkXpKvaMNSh", + "method": "POST", + "path": "/api/v2/connections", "body": { + "name": "boo-baz-db-connection-test", + "strategy": "auth0", "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI" ], "is_domain_connection": false, "options": { @@ -3627,11 +2918,6 @@ }, "disable_signup": false, "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, "password_history": { "size": 5, "enable": false @@ -3642,14 +2928,6 @@ "enable": true, "dictionary": [] }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, "brute_force_protection": true, "password_no_personal_info": { "enable": true @@ -3663,30 +2941,25 @@ "boo-baz-db-connection-test" ] }, - "status": 200, + "status": 201, "response": { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, "return_enroll_settings": true }, + "passwordPolicy": "low", "import_mode": false, "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" + "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" }, "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, "password_history": { "size": 5, "enable": false @@ -3697,14 +2970,6 @@ "enable": true, "dictionary": [] }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, "brute_force_protection": true, "password_no_personal_info": { "enable": true @@ -3712,14 +2977,27 @@ "password_complexity_options": { "min_length": 8 }, - "enabledDatabaseCustomization": true + "enabledDatabaseCustomization": true, + "authentication_methods": { + "password": { + "enabled": true + }, + "passkey": { + "enabled": false + } + }, + "passkey_options": { + "challenge_ui": "both", + "progressive_enrollment_enabled": true, + "local_enrollment_enabled": true + } }, "strategy": "auth0", "name": "boo-baz-db-connection-test", "is_domain_connection": false, "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ], "realms": [ "boo-baz-db-connection-test" @@ -3731,11 +3009,11 @@ { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 11, + "total": 10, "start": 0, "limit": 100, "clients": [ @@ -3806,7 +3084,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3858,7 +3136,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3878,21 +3156,12 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -3911,8 +3180,7 @@ "subject": "deprecated" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3920,25 +3188,32 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -3957,7 +3232,8 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "allowed_origins": [], + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3965,21 +3241,23 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, @@ -4000,7 +3278,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4052,7 +3330,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4111,7 +3389,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4168,59 +3446,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4279,16 +3505,16 @@ { "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "total": 3, + "total": 2, "start": 0, "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -4344,33 +3570,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] - }, - { - "id": "con_SXIEWGYv5QzGSoqq", - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true - }, - "strategy": "google-oauth2", - "name": "google-oauth2", - "is_domain_connection": false, - "realms": [ - "google-oauth2" - ], - "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -4400,7 +3605,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -4412,16 +3617,16 @@ { "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "total": 3, + "total": 2, "start": 0, "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -4477,33 +3682,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] - }, - { - "id": "con_SXIEWGYv5QzGSoqq", - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true - }, - "strategy": "google-oauth2", - "name": "google-oauth2", - "is_domain_connection": false, - "realms": [ - "google-oauth2" - ], - "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -4533,7 +3717,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -4544,12 +3728,14 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/connections/con_SXIEWGYv5QzGSoqq", + "method": "POST", + "path": "/api/v2/connections", "body": { + "name": "google-oauth2", + "strategy": "google-oauth2", "enabled_clients": [ - "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI" ], "is_domain_connection": false, "options": { @@ -4561,9 +3747,9 @@ "profile": true } }, - "status": 200, + "status": 201, "response": { - "id": "con_SXIEWGYv5QzGSoqq", + "id": "con_vF5B2QiM1bTdpSsO", "options": { "email": true, "scope": [ @@ -4576,8 +3762,8 @@ "name": "google-oauth2", "is_domain_connection": false, "enabled_clients": [ - "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J" ], "realms": [ "google-oauth2" @@ -4589,27 +3775,25 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/email-templates/welcome_email", + "path": "/api/v2/email-templates/verify_email", "body": { - "template": "welcome_email", - "body": "\n \n

Welcome!

\n \n\n", - "enabled": false, + "template": "verify_email", + "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", + "enabled": true, "from": "", - "resultUrl": "https://example.com/welcome", - "subject": "Welcome", + "subject": "", "syntax": "liquid", - "urlLifetimeInSeconds": 3600 + "urlLifetimeInSeconds": 432000 }, "status": 200, "response": { - "template": "welcome_email", - "body": "\n \n

Welcome!

\n \n\n", + "template": "verify_email", + "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", "from": "", - "resultUrl": "https://example.com/welcome", - "subject": "Welcome", + "subject": "", "syntax": "liquid", - "urlLifetimeInSeconds": 3600, - "enabled": false + "urlLifetimeInSeconds": 432000, + "enabled": true }, "rawHeaders": [], "responseIsBinary": false @@ -4617,25 +3801,27 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/email-templates/verify_email", + "path": "/api/v2/email-templates/welcome_email", "body": { - "template": "verify_email", - "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", - "enabled": true, + "template": "welcome_email", + "body": "\n \n

Welcome!

\n \n\n", + "enabled": false, "from": "", - "subject": "", + "resultUrl": "https://example.com/welcome", + "subject": "Welcome", "syntax": "liquid", - "urlLifetimeInSeconds": 432000 + "urlLifetimeInSeconds": 3600 }, "status": 200, "response": { - "template": "verify_email", - "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", + "template": "welcome_email", + "body": "\n \n

Welcome!

\n \n\n", "from": "", - "subject": "", + "resultUrl": "https://example.com/welcome", + "subject": "Welcome", "syntax": "liquid", - "urlLifetimeInSeconds": 432000, - "enabled": true + "urlLifetimeInSeconds": 3600, + "enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -4643,11 +3829,11 @@ { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 11, + "total": 10, "start": 0, "limit": 100, "clients": [ @@ -4694,258 +3880,13 @@ }, { "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Default App", - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "oidc_conformant": true, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "API Explorer Application", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "web_origins": [], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", - "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 - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", - "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 - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "The Default App", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": false, + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Default App", + "callbacks": [], + "cross_origin_auth": false, + "is_first_party": true, + "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -4955,7 +3896,6 @@ "idle_token_lifetime": 1296000, "rotation_type": "non-rotating" }, - "sso": false, "sso_disabled": false, "signing_keys": [ { @@ -4964,7 +3904,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4972,8 +3912,6 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", "grant_types": [ "authorization_code", "implicit", @@ -4986,14 +3924,9 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Test SPA", + "name": "API Explorer Application", "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], - "callbacks": [ - "http://localhost:3000" - ], + "callbacks": [], "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, @@ -5007,13 +3940,13 @@ }, "oidc_conformant": true, "refresh_token": { - "expiration_type": "expiring", + "expiration_type": "non-expiring", "leeway": 0, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "infinite_token_lifetime": false, - "infinite_idle_token_lifetime": false, - "rotation_type": "rotating" + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, + "rotation_type": "non-rotating" }, "sso_disabled": false, "signing_keys": [ @@ -5023,7 +3956,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -5032,15 +3965,10 @@ "secret_encoded": false }, "client_aliases": [], - "token_endpoint_auth_method": "none", - "app_type": "spa", + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token" - ], - "web_origins": [ - "http://localhost:3000" + "client_credentials" ], "custom_login_page_on": true }, @@ -5048,20 +3976,12 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "auth0-deploy-cli-extension", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -5080,7 +4000,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -5088,7 +4008,6 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", "app_type": "non_interactive", "grant_types": [ @@ -5100,12 +4019,13 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", + "name": "Node App", "allowed_clients": [], + "allowed_logout_urls": [], "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", "native_social_login": { "apple": { "enabled": false @@ -5114,6 +4034,7 @@ "enabled": false } }, + "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -5124,7 +4045,6 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, - "oidc_conformant": false, "signing_keys": [ { "cert": "[REDACTED]", @@ -5132,7 +4052,8 @@ "subject": "deprecated" } ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "allowed_origins": [], + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -5142,337 +4063,276 @@ }, "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", - "global": true, - "callbacks": [], - "is_first_party": true, - "name": "All Applications", - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "owners": [ - "mr|samlp|okta|will.vedder@auth0.com", - "mr|google-oauth2|102002633619863830825", - "mr|samlp|okta|frederik.prijck@auth0.com", - "mr|google-oauth2|109614534713742077035", - "mr|google-oauth2|116771660953104383819" - ], - "custom_login_page": "TEST123\n", - "cross_origin_authentication": true, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Isi93ibGHIGwmdYjsLwTOn7Gu7nwxU3V", - "client_secret": "[REDACTED]", - "custom_login_page_on": true - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/client-grants?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "total": 3, - "start": 0, - "limit": 100, - "client_grants": [ - { - "id": "cgr_P3XzavTQSyFaV8mr", - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", - "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" - ] - }, - { - "id": "cgr_SDgpXDXvWBtO3KEi", - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", - "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" - ] + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Terraform Provider", + "cross_origin_auth": false, + "is_first_party": true, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "The Default App", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": false, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso": false, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Test SPA", + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000" + ], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "expiring", + "leeway": 0, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "infinite_token_lifetime": false, + "infinite_idle_token_lifetime": false, + "rotation_type": "rotating" + }, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "none", + "app_type": "spa", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "auth0-deploy-cli-extension", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": true, + "callbacks": [], + "is_first_party": true, + "name": "All Applications", + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "owners": [ + "mr|samlp|okta|will.vedder@auth0.com", + "mr|google-oauth2|102002633619863830825", + "mr|samlp|okta|frederik.prijck@auth0.com", + "mr|google-oauth2|109614534713742077035", + "mr|google-oauth2|116771660953104383819" + ], + "custom_login_page": "TEST123\n", + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Isi93ibGHIGwmdYjsLwTOn7Gu7nwxU3V", + "client_secret": "[REDACTED]", + "custom_login_page_on": true + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/client-grants?per_page=100&page=0&include_totals=true", + "body": "", + "status": 200, + "response": { + "total": 1, + "start": 0, + "limit": 100, + "client_grants": [ { "id": "cgr_t3j1isctGZmOVylt", "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", @@ -5645,9 +4505,11 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/client-grants/cgr_P3XzavTQSyFaV8mr", + "method": "POST", + "path": "/api/v2/client-grants", "body": { + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", + "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", "create:client_grants", @@ -5781,10 +4643,10 @@ "delete:organization_invitations" ] }, - "status": 200, + "status": 201, "response": { - "id": "cgr_P3XzavTQSyFaV8mr", - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "id": "cgr_qa1o0c61YQyNQp0V", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -5924,9 +4786,11 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/client-grants/cgr_SDgpXDXvWBtO3KEi", + "method": "POST", + "path": "/api/v2/client-grants", "body": { + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", + "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", "create:client_grants", @@ -6060,10 +4924,10 @@ "delete:organization_invitations" ] }, - "status": 200, + "status": 201, "response": { - "id": "cgr_SDgpXDXvWBtO3KEi", - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "id": "cgr_Oh0iZTSJFWrcHIi0", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -6152,132 +5016,51 @@ "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" - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/roles?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "roles": [ - { - "id": "rol_hRGDQmEBYbZsC8sZ", - "name": "Admin", - "description": "Can read and write things" - }, - { - "id": "rol_oT9S2f9KYqFyYR2j", - "name": "Reader", - "description": "Can only read things" - }, - { - "id": "rol_ZNeuVHhKZTaZaGwq", - "name": "read_only", - "description": "Read Only" - }, - { - "id": "rol_1DwrDRZ26bdvfKxL", - "name": "read_osnly", - "description": "Readz Only" - } - ], - "start": 0, - "limit": 100, - "total": 4 - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/roles/rol_hRGDQmEBYbZsC8sZ/permissions?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "permissions": [], - "start": 0, - "limit": 100, - "total": 0 - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/roles/rol_oT9S2f9KYqFyYR2j/permissions?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "permissions": [], - "start": 0, - "limit": 100, - "total": 0 - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/roles/rol_ZNeuVHhKZTaZaGwq/permissions?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "permissions": [], - "start": 0, - "limit": 100, - "total": 0 + "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" + ] }, "rawHeaders": [], "responseIsBinary": false @@ -6285,11 +5068,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_1DwrDRZ26bdvfKxL/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "permissions": [], + "roles": [], "start": 0, "limit": 100, "total": 0 @@ -6299,15 +5082,15 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/roles/rol_oT9S2f9KYqFyYR2j", + "method": "POST", + "path": "/api/v2/roles", "body": { "name": "Reader", "description": "Can only read things" }, "status": 200, "response": { - "id": "rol_oT9S2f9KYqFyYR2j", + "id": "rol_bL4bPRxC5sA93SOl", "name": "Reader", "description": "Can only read things" }, @@ -6316,49 +5099,49 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/roles/rol_ZNeuVHhKZTaZaGwq", + "method": "POST", + "path": "/api/v2/roles", "body": { - "name": "read_only", - "description": "Read Only" + "name": "Admin", + "description": "Can read and write things" }, "status": 200, "response": { - "id": "rol_ZNeuVHhKZTaZaGwq", - "name": "read_only", - "description": "Read Only" + "id": "rol_ZJKlfo79sK6K1lHd", + "name": "Admin", + "description": "Can read and write things" }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/roles/rol_hRGDQmEBYbZsC8sZ", + "method": "POST", + "path": "/api/v2/roles", "body": { - "name": "Admin", - "description": "Can read and write things" + "name": "read_only", + "description": "Read Only" }, "status": 200, "response": { - "id": "rol_hRGDQmEBYbZsC8sZ", - "name": "Admin", - "description": "Can read and write things" + "id": "rol_oqgV8nN5JuxVGYCv", + "name": "read_only", + "description": "Read Only" }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/roles/rol_1DwrDRZ26bdvfKxL", + "method": "POST", + "path": "/api/v2/roles", "body": { "name": "read_osnly", "description": "Readz Only" }, "status": 200, "response": { - "id": "rol_1DwrDRZ26bdvfKxL", + "id": "rol_x0vZAmiZ04hdMdD1", "name": "read_osnly", "description": "Readz Only" }, @@ -6372,56 +5155,7 @@ "body": "", "status": 200, "response": { - "actions": [ - { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", - "name": "My Custom Action", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:07:08.590000474Z", - "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", - "dependencies": [], - "runtime": "node16", - "status": "built", - "secrets": [], - "current_version": { - "id": "17c5aa54-9fe1-4255-bfdb-89a8640a0820", - "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", - "runtime": "node16", - "status": "BUILT", - "number": 3, - "build_time": "2024-10-14T09:07:09.727164016Z", - "created_at": "2024-10-14T09:07:09.656359071Z", - "updated_at": "2024-10-14T09:07:09.728334663Z" - }, - "deployed_version": { - "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", - "dependencies": [], - "id": "17c5aa54-9fe1-4255-bfdb-89a8640a0820", - "deployed": true, - "number": 3, - "built_at": "2024-10-14T09:07:09.727164016Z", - "secrets": [], - "status": "built", - "created_at": "2024-10-14T09:07:09.656359071Z", - "updated_at": "2024-10-14T09:07:09.728334663Z", - "runtime": "node16", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ] - }, - "all_changes_deployed": true - } - ], - "total": 1, + "actions": [], "per_page": 100 }, "rawHeaders": [], @@ -6429,8 +5163,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/actions/actions/ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", + "method": "POST", + "path": "/api/v2/actions/actions", "body": { "name": "My Custom Action", "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", @@ -6444,9 +5178,9 @@ } ] }, - "status": 200, + "status": 201, "response": { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", + "id": "1d9d9961-1241-4715-9c06-ebebe824dd0c", "name": "My Custom Action", "supported_triggers": [ { @@ -6454,43 +5188,14 @@ "version": "v2" } ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:07:56.282435062Z", + "created_at": "2024-10-18T10:22:46.504691389Z", + "updated_at": "2024-10-18T10:22:46.512429033Z", "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", "dependencies": [], "runtime": "node16", "status": "pending", "secrets": [], - "current_version": { - "id": "17c5aa54-9fe1-4255-bfdb-89a8640a0820", - "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", - "runtime": "node16", - "status": "BUILT", - "number": 3, - "build_time": "2024-10-14T09:07:09.727164016Z", - "created_at": "2024-10-14T09:07:09.656359071Z", - "updated_at": "2024-10-14T09:07:09.728334663Z" - }, - "deployed_version": { - "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", - "dependencies": [], - "id": "17c5aa54-9fe1-4255-bfdb-89a8640a0820", - "deployed": true, - "number": 3, - "built_at": "2024-10-14T09:07:09.727164016Z", - "secrets": [], - "status": "built", - "created_at": "2024-10-14T09:07:09.656359071Z", - "updated_at": "2024-10-14T09:07:09.728334663Z", - "runtime": "node16", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ] - }, - "all_changes_deployed": true + "all_changes_deployed": false }, "rawHeaders": [], "responseIsBinary": false @@ -6504,7 +5209,7 @@ "response": { "actions": [ { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", + "id": "1d9d9961-1241-4715-9c06-ebebe824dd0c", "name": "My Custom Action", "supported_triggers": [ { @@ -6512,43 +5217,14 @@ "version": "v2" } ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:07:56.282435062Z", + "created_at": "2024-10-18T10:22:46.504691389Z", + "updated_at": "2024-10-18T10:22:46.512429033Z", "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", "dependencies": [], "runtime": "node16", "status": "built", "secrets": [], - "current_version": { - "id": "17c5aa54-9fe1-4255-bfdb-89a8640a0820", - "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", - "runtime": "node16", - "status": "BUILT", - "number": 3, - "build_time": "2024-10-14T09:07:09.727164016Z", - "created_at": "2024-10-14T09:07:09.656359071Z", - "updated_at": "2024-10-14T09:07:09.728334663Z" - }, - "deployed_version": { - "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", - "dependencies": [], - "id": "17c5aa54-9fe1-4255-bfdb-89a8640a0820", - "deployed": true, - "number": 3, - "built_at": "2024-10-14T09:07:09.727164016Z", - "secrets": [], - "status": "built", - "created_at": "2024-10-14T09:07:09.656359071Z", - "updated_at": "2024-10-14T09:07:09.728334663Z", - "runtime": "node16", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ] - }, - "all_changes_deployed": true + "all_changes_deployed": false } ], "total": 1, @@ -6560,19 +5236,19 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "POST", - "path": "/api/v2/actions/actions/ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f/deploy", - "body": {}, + "path": "/api/v2/actions/actions/1d9d9961-1241-4715-9c06-ebebe824dd0c/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", "dependencies": [], - "id": "133e8fe8-52b5-44ee-8837-9cbcf0fbe8d6", + "id": "eb8aabf7-062a-4695-ad5b-42eca34b0f7d", "deployed": false, - "number": 4, + "number": 1, "secrets": [], "status": "built", - "created_at": "2024-10-14T09:07:57.345467497Z", - "updated_at": "2024-10-14T09:07:57.345467497Z", + "created_at": "2024-10-18T10:22:47.241953841Z", + "updated_at": "2024-10-18T10:22:47.241953841Z", "runtime": "node16", "supported_triggers": [ { @@ -6581,7 +5257,7 @@ } ], "action": { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", + "id": "1d9d9961-1241-4715-9c06-ebebe824dd0c", "name": "My Custom Action", "supported_triggers": [ { @@ -6589,8 +5265,8 @@ "version": "v2" } ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:07:56.275891028Z", + "created_at": "2024-10-18T10:22:46.504691389Z", + "updated_at": "2024-10-18T10:22:46.504691389Z", "all_changes_deployed": false } }, @@ -6600,60 +5276,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true", + "path": "/api/v2/organizations?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "organizations": [ - { - "id": "org_knGmCqfHxLD0V9YB", - "name": "org1", - "display_name": "Organization", - "branding": { - "colors": { - "page_background": "#fff5f5", - "primary": "#57ddff" - } - } - }, - { - "id": "org_haOYEECGVpZwU9Tc", - "name": "org2", - "display_name": "Organization2" - } - ], + "organizations": [], "start": 0, - "limit": 50, - "total": 2 - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/organizations?include_totals=true&take=50", - "body": "", - "status": 200, - "response": { - "organizations": [ - { - "id": "org_knGmCqfHxLD0V9YB", - "name": "org1", - "display_name": "Organization", - "branding": { - "colors": { - "page_background": "#fff5f5", - "primary": "#57ddff" - } - } - }, - { - "id": "org_haOYEECGVpZwU9Tc", - "name": "org2", - "display_name": "Organization2" - } - ] + "limit": 100, + "total": 0 }, "rawHeaders": [], "responseIsBinary": false @@ -6661,27 +5291,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_knGmCqfHxLD0V9YB/enabled_connections", - "body": "", - "status": 200, - "response": [], - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/organizations/org_haOYEECGVpZwU9Tc/enabled_connections", - "body": "", - "status": 200, - "response": [], - "rawHeaders": [], - "responseIsBinary": false - }, - { - "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -6690,7 +5300,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -6746,12 +5356,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_SXIEWGYv5QzGSoqq", + "id": "con_vF5B2QiM1bTdpSsO", "options": { "email": true, "scope": [ @@ -6767,12 +5377,12 @@ "google-oauth2" ], "enabled_clients": [ - "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J" ] }, { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -6802,7 +5412,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -6813,9 +5423,27 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/organizations/org_knGmCqfHxLD0V9YB", + "method": "POST", + "path": "/api/v2/organizations", + "body": { + "name": "org2", + "display_name": "Organization2" + }, + "status": 201, + "response": { + "id": "org_gqen5Wo1XmlD46eC", + "display_name": "Organization2", + "name": "org2" + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "POST", + "path": "/api/v2/organizations", "body": { + "name": "org1", "branding": { "colors": { "page_background": "#fff5f5", @@ -6824,7 +5452,7 @@ }, "display_name": "Organization" }, - "status": 200, + "status": 201, "response": { "branding": { "colors": { @@ -6832,29 +5460,13 @@ "primary": "#57ddff" } }, - "id": "org_knGmCqfHxLD0V9YB", + "id": "org_kyzlkLpxZLx5jUv4", "display_name": "Organization", "name": "org1" }, "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/organizations/org_haOYEECGVpZwU9Tc", - "body": { - "display_name": "Organization2" - }, - "status": 200, - "response": { - "id": "org_haOYEECGVpZwU9Tc", - "display_name": "Organization2", - "name": "org2" - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", @@ -6960,7 +5572,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -6969,7 +5581,7 @@ "limit": 100, "rules": [ { - "id": "rul_KPxS2cPV6d0ZfCE3", + "id": "rul_9MtEttom2x3G0KZP", "enabled": true, "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", "name": "my-rule", @@ -6984,7 +5596,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -6993,7 +5605,7 @@ "limit": 100, "rules": [ { - "id": "rul_KPxS2cPV6d0ZfCE3", + "id": "rul_9MtEttom2x3G0KZP", "enabled": true, "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", "name": "my-rule", @@ -7008,7 +5620,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -7023,7 +5635,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -7038,7 +5650,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -7811,11 +6423,11 @@ { "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?page=0&per_page=100&include_totals=true&is_global=false", "body": "", "status": 200, "response": { - "total": 10, + "total": 9, "start": 0, "limit": 100, "clients": [ @@ -7886,7 +6498,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7938,7 +6550,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7958,21 +6570,12 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -7991,8 +6594,7 @@ "subject": "deprecated" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -8000,25 +6602,32 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -8037,7 +6646,8 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "allowed_origins": [], + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -8045,21 +6655,23 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, @@ -8080,7 +6692,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -8132,7 +6744,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -8191,7 +6803,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -8248,59 +6860,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -8324,7 +6884,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/clients/OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "path": "/api/v2/clients/HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "body": { "name": "Default App", "callbacks": [], @@ -8381,7 +6941,7 @@ "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -8403,7 +6963,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/emails/provider?include_fields=true&fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address", + "path": "/api/v2/emails/provider?fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address&include_fields=true", "body": "", "status": 200, "response": { @@ -8418,7 +6978,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/sms", + "path": "/api/v2/guardian/factors/duo", "body": { "enabled": false }, @@ -8432,7 +6992,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/webauthn-roaming", + "path": "/api/v2/guardian/factors/webauthn-platform", "body": { "enabled": false }, @@ -8446,7 +7006,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/duo", + "path": "/api/v2/guardian/factors/email", "body": { "enabled": false }, @@ -8460,7 +7020,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/email", + "path": "/api/v2/guardian/factors/push-notification", "body": { "enabled": false }, @@ -8474,7 +7034,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/recovery-code", + "path": "/api/v2/guardian/factors/otp", "body": { "enabled": false }, @@ -8488,7 +7048,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/webauthn-platform", + "path": "/api/v2/guardian/factors/recovery-code", "body": { "enabled": false }, @@ -8502,7 +7062,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/push-notification", + "path": "/api/v2/guardian/factors/sms", "body": { "enabled": false }, @@ -8516,7 +7076,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/otp", + "path": "/api/v2/guardian/factors/webauthn-roaming", "body": { "enabled": false }, @@ -8540,7 +7100,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" }, @@ -8580,6 +7140,75 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/attack-protection/breached-password-detection", + "body": { + "enabled": false, + "shields": [], + "admin_notification_frequency": [], + "method": "standard" + }, + "status": 200, + "response": { + "enabled": false, + "shields": [], + "admin_notification_frequency": [], + "method": "standard", + "stage": { + "pre-user-registration": { + "shields": [] + } + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/attack-protection/suspicious-ip-throttling", + "body": { + "enabled": true, + "shields": [ + "admin_notification", + "block" + ], + "allowlist": [], + "stage": { + "pre-login": { + "max_attempts": 100, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 50, + "rate": 1200 + } + } + }, + "status": 200, + "response": { + "enabled": true, + "shields": [ + "admin_notification", + "block" + ], + "allowlist": [], + "stage": { + "pre-login": { + "max_attempts": 100, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 50, + "rate": 1200 + } + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", @@ -8611,30 +7240,19 @@ { "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": [ { - "id": "lst_0000000000017950", - "name": "Suspended DD Log Stream", - "type": "datadog", - "status": "active", - "sink": { - "datadogApiKey": "some-sensitive-api-key", - "datadogRegion": "us" - }, - "isPriority": false - }, - { - "id": "lst_0000000000017951", + "id": "lst_0000000000018117", "name": "Amazon EventBridge", "type": "eventbridge", "status": "active", "sink": { "awsAccountId": "123456789012", "awsRegion": "us-east-2", - "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-11b6995b-a49b-4a0f-bfaf-88cefc5ba0b3/auth0.logs" + "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-47282268-18be-4aaf-8b22-08fe19e10bdf/auth0.logs" }, "filters": [ { @@ -8660,103 +7278,45 @@ { "type": "category", "name": "auth.logout.fail" - }, - { - "type": "category", - "name": "auth.silent_auth.fail" - }, - { - "type": "category", - "name": "auth.silent_auth.success" - }, - { - "type": "category", - "name": "auth.token_exchange.fail" - } - ], - "isPriority": false - } - ], - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/attack-protection/suspicious-ip-throttling", - "body": { - "enabled": true, - "shields": [ - "admin_notification", - "block" - ], - "allowlist": [], - "stage": { - "pre-login": { - "max_attempts": 100, - "rate": 864000 - }, - "pre-user-registration": { - "max_attempts": 50, - "rate": 1200 - } - } - }, - "status": 200, - "response": { - "enabled": true, - "shields": [ - "admin_notification", - "block" - ], - "allowlist": [], - "stage": { - "pre-login": { - "max_attempts": 100, - "rate": 864000 - }, - "pre-user-registration": { - "max_attempts": 50, - "rate": 1200 - } - } - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/attack-protection/breached-password-detection", - "body": { - "enabled": false, - "shields": [], - "admin_notification_frequency": [], - "method": "standard" - }, - "status": 200, - "response": { - "enabled": false, - "shields": [], - "admin_notification_frequency": [], - "method": "standard", - "stage": { - "pre-user-registration": { - "shields": [] - } + }, + { + "type": "category", + "name": "auth.silent_auth.fail" + }, + { + "type": "category", + "name": "auth.silent_auth.success" + }, + { + "type": "category", + "name": "auth.token_exchange.fail" + } + ], + "isPriority": false + }, + { + "id": "lst_0000000000018116", + "name": "Suspended DD Log Stream", + "type": "datadog", + "status": "active", + "sink": { + "datadogApiKey": "some-sensitive-api-key", + "datadogRegion": "us" + }, + "isPriority": false } - }, + ], "rawHeaders": [], "responseIsBinary": false }, { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 11, + "total": 10, "start": 0, "limit": 100, "clients": [ @@ -8827,7 +7387,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -8879,7 +7439,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -8899,21 +7459,12 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -8932,8 +7483,7 @@ "subject": "deprecated" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -8941,25 +7491,32 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -8978,7 +7535,8 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "allowed_origins": [], + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -8986,21 +7544,23 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, @@ -9021,7 +7581,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9073,7 +7633,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9132,7 +7692,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9189,59 +7749,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9300,7 +7808,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?per_page=100&page=0&include_totals=true&strategy=auth0", "body": "", "status": 200, "response": { @@ -9309,7 +7817,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -9365,12 +7873,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -9400,7 +7908,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -9412,7 +7920,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?per_page=100&page=0&include_totals=true&strategy=auth0", "body": "", "status": 200, "response": { @@ -9421,7 +7929,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -9477,12 +7985,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -9512,7 +8020,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -9524,11 +8032,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_orWZyMv2k9PgOd3x", + "path": "/api/v2/connections/con_nH4AIKkSAzWLnzAk", "body": "", "status": 200, "response": { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -9555,7 +8063,7 @@ "name": "Username-Password-Authentication", "is_domain_connection": false, "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ], "realms": [ @@ -9568,11 +8076,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/connections/con_orWZyMv2k9PgOd3x", + "path": "/api/v2/connections/con_nH4AIKkSAzWLnzAk", "body": { "enabled_clients": [ "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE" ], "is_domain_connection": false, "options": { @@ -9603,7 +8111,7 @@ }, "status": 200, "response": { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -9631,7 +8139,7 @@ "is_domain_connection": false, "enabled_clients": [ "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE" ], "realms": [ "Username-Password-Authentication" @@ -9643,11 +8151,11 @@ { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 11, + "total": 10, "start": 0, "limit": 100, "clients": [ @@ -9718,7 +8226,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9770,7 +8278,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9790,21 +8298,12 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -9823,8 +8322,7 @@ "subject": "deprecated" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9832,25 +8330,32 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -9869,7 +8374,8 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "allowed_origins": [], + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9877,21 +8383,23 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, @@ -9912,7 +8420,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9964,7 +8472,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -10023,7 +8531,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -10080,59 +8588,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -10191,7 +8647,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -10200,7 +8656,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -10256,12 +8712,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_SXIEWGYv5QzGSoqq", + "id": "con_vF5B2QiM1bTdpSsO", "options": { "email": true, "scope": [ @@ -10277,12 +8733,12 @@ "google-oauth2" ], "enabled_clients": [ - "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J" ] }, { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -10312,7 +8768,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -10324,7 +8780,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -10333,7 +8789,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -10389,12 +8845,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_SXIEWGYv5QzGSoqq", + "id": "con_vF5B2QiM1bTdpSsO", "options": { "email": true, "scope": [ @@ -10410,12 +8866,12 @@ "google-oauth2" ], "enabled_clients": [ - "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J" ] }, { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -10445,7 +8901,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -10457,11 +8913,11 @@ { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 11, + "total": 10, "start": 0, "limit": 100, "clients": [ @@ -10532,7 +8988,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -10584,7 +9040,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -10604,21 +9060,12 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -10637,8 +9084,7 @@ "subject": "deprecated" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -10646,25 +9092,32 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -10683,7 +9136,8 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "allowed_origins": [], + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -10691,21 +9145,23 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, @@ -10726,7 +9182,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -10778,7 +9234,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -10837,7 +9293,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -10894,59 +9350,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -11005,7 +9409,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11014,8 +9418,8 @@ "limit": 100, "client_grants": [ { - "id": "cgr_P3XzavTQSyFaV8mr", - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "id": "cgr_Oh0iZTSJFWrcHIi0", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -11151,8 +9555,8 @@ ] }, { - "id": "cgr_SDgpXDXvWBtO3KEi", - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "id": "cgr_qa1o0c61YQyNQp0V", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -11460,28 +9864,28 @@ { "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { "roles": [ { - "id": "rol_hRGDQmEBYbZsC8sZ", + "id": "rol_ZJKlfo79sK6K1lHd", "name": "Admin", "description": "Can read and write things" }, { - "id": "rol_oT9S2f9KYqFyYR2j", + "id": "rol_bL4bPRxC5sA93SOl", "name": "Reader", "description": "Can only read things" }, { - "id": "rol_ZNeuVHhKZTaZaGwq", + "id": "rol_oqgV8nN5JuxVGYCv", "name": "read_only", "description": "Read Only" }, { - "id": "rol_1DwrDRZ26bdvfKxL", + "id": "rol_x0vZAmiZ04hdMdD1", "name": "read_osnly", "description": "Readz Only" } @@ -11496,7 +9900,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_hRGDQmEBYbZsC8sZ/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_ZJKlfo79sK6K1lHd/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11511,7 +9915,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_oT9S2f9KYqFyYR2j/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_bL4bPRxC5sA93SOl/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11526,7 +9930,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_ZNeuVHhKZTaZaGwq/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_oqgV8nN5JuxVGYCv/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11541,7 +9945,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_1DwrDRZ26bdvfKxL/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_x0vZAmiZ04hdMdD1/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11562,7 +9966,7 @@ "response": { "actions": [ { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", + "id": "1d9d9961-1241-4715-9c06-ebebe824dd0c", "name": "My Custom Action", "supported_triggers": [ { @@ -11570,34 +9974,34 @@ "version": "v2" } ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:07:56.282435062Z", + "created_at": "2024-10-18T10:22:46.504691389Z", + "updated_at": "2024-10-18T10:22:46.512429033Z", "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", "dependencies": [], "runtime": "node16", "status": "built", "secrets": [], "current_version": { - "id": "133e8fe8-52b5-44ee-8837-9cbcf0fbe8d6", + "id": "eb8aabf7-062a-4695-ad5b-42eca34b0f7d", "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", "runtime": "node16", "status": "BUILT", - "number": 4, - "build_time": "2024-10-14T09:07:57.447777891Z", - "created_at": "2024-10-14T09:07:57.345467497Z", - "updated_at": "2024-10-14T09:07:57.448078558Z" + "number": 1, + "build_time": "2024-10-18T10:22:47.323089940Z", + "created_at": "2024-10-18T10:22:47.241953841Z", + "updated_at": "2024-10-18T10:22:47.324336487Z" }, "deployed_version": { "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", "dependencies": [], - "id": "133e8fe8-52b5-44ee-8837-9cbcf0fbe8d6", + "id": "eb8aabf7-062a-4695-ad5b-42eca34b0f7d", "deployed": true, - "number": 4, - "built_at": "2024-10-14T09:07:57.447777891Z", + "number": 1, + "built_at": "2024-10-18T10:22:47.323089940Z", "secrets": [], "status": "built", - "created_at": "2024-10-14T09:07:57.345467497Z", - "updated_at": "2024-10-14T09:07:57.448078558Z", + "created_at": "2024-10-18T10:22:47.241953841Z", + "updated_at": "2024-10-18T10:22:47.324336487Z", "runtime": "node16", "supported_triggers": [ { @@ -11624,7 +10028,7 @@ "response": { "actions": [ { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", + "id": "1d9d9961-1241-4715-9c06-ebebe824dd0c", "name": "My Custom Action", "supported_triggers": [ { @@ -11632,34 +10036,34 @@ "version": "v2" } ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:07:56.282435062Z", + "created_at": "2024-10-18T10:22:46.504691389Z", + "updated_at": "2024-10-18T10:22:46.512429033Z", "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", "dependencies": [], "runtime": "node16", "status": "built", "secrets": [], "current_version": { - "id": "133e8fe8-52b5-44ee-8837-9cbcf0fbe8d6", + "id": "eb8aabf7-062a-4695-ad5b-42eca34b0f7d", "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", "runtime": "node16", "status": "BUILT", - "number": 4, - "build_time": "2024-10-14T09:07:57.447777891Z", - "created_at": "2024-10-14T09:07:57.345467497Z", - "updated_at": "2024-10-14T09:07:57.448078558Z" + "number": 1, + "build_time": "2024-10-18T10:22:47.323089940Z", + "created_at": "2024-10-18T10:22:47.241953841Z", + "updated_at": "2024-10-18T10:22:47.324336487Z" }, "deployed_version": { "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", "dependencies": [], - "id": "133e8fe8-52b5-44ee-8837-9cbcf0fbe8d6", + "id": "eb8aabf7-062a-4695-ad5b-42eca34b0f7d", "deployed": true, - "number": 4, - "built_at": "2024-10-14T09:07:57.447777891Z", + "number": 1, + "built_at": "2024-10-18T10:22:47.323089940Z", "secrets": [], "status": "built", - "created_at": "2024-10-14T09:07:57.345467497Z", - "updated_at": "2024-10-14T09:07:57.448078558Z", + "created_at": "2024-10-18T10:22:47.241953841Z", + "updated_at": "2024-10-18T10:22:47.324336487Z", "runtime": "node16", "supported_triggers": [ { @@ -11680,13 +10084,13 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true", + "path": "/api/v2/organizations?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { "organizations": [ { - "id": "org_knGmCqfHxLD0V9YB", + "id": "org_kyzlkLpxZLx5jUv4", "name": "org1", "display_name": "Organization", "branding": { @@ -11697,13 +10101,13 @@ } }, { - "id": "org_haOYEECGVpZwU9Tc", + "id": "org_gqen5Wo1XmlD46eC", "name": "org2", "display_name": "Organization2" } ], "start": 0, - "limit": 50, + "limit": 100, "total": 2 }, "rawHeaders": [], @@ -11712,36 +10116,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true&take=50", - "body": "", - "status": 200, - "response": { - "organizations": [ - { - "id": "org_knGmCqfHxLD0V9YB", - "name": "org1", - "display_name": "Organization", - "branding": { - "colors": { - "page_background": "#fff5f5", - "primary": "#57ddff" - } - } - }, - { - "id": "org_haOYEECGVpZwU9Tc", - "name": "org2", - "display_name": "Organization2" - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/organizations/org_knGmCqfHxLD0V9YB/enabled_connections", + "path": "/api/v2/organizations/org_kyzlkLpxZLx5jUv4/enabled_connections", "body": "", "status": 200, "response": [], @@ -11751,7 +10126,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_haOYEECGVpZwU9Tc/enabled_connections", + "path": "/api/v2/organizations/org_gqen5Wo1XmlD46eC/enabled_connections", "body": "", "status": 200, "response": [], @@ -11761,7 +10136,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11770,7 +10145,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -11826,12 +10201,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_SXIEWGYv5QzGSoqq", + "id": "con_vF5B2QiM1bTdpSsO", "options": { "email": true, "scope": [ @@ -11847,12 +10222,12 @@ "google-oauth2" ], "enabled_clients": [ - "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J" ] }, { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -11882,7 +10257,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -11971,7 +10346,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -11980,7 +10355,7 @@ "limit": 100, "rules": [ { - "id": "rul_KPxS2cPV6d0ZfCE3", + "id": "rul_9MtEttom2x3G0KZP", "enabled": true, "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", "name": "my-rule", @@ -12005,7 +10380,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -12020,7 +10395,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?page=0&per_page=100&include_totals=true&is_global=true", "body": "", "status": 200, "response": { @@ -12142,7 +10517,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -12915,11 +11290,11 @@ { "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?page=0&per_page=100&include_totals=true&is_global=false", "body": "", "status": 200, "response": { - "total": 10, + "total": 9, "start": 0, "limit": 100, "clients": [ @@ -12990,7 +11365,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -13042,7 +11417,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -13062,21 +11437,12 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -13095,8 +11461,7 @@ "subject": "deprecated" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "j8XHYvJ9b931CrttWKmIdS0qyS2TJgBT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -13104,25 +11469,32 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -13141,7 +11513,8 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "allowed_origins": [], + "client_id": "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -13149,21 +11522,23 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, @@ -13184,7 +11559,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -13236,7 +11611,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -13295,7 +11670,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "s2MDEQWV0fRprRBLcEoi3QSpN5219Q4d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -13352,59 +11727,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "client_id": "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -13428,7 +11751,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?per_page=100&page=0&include_totals=true&strategy=auth0", "body": "", "status": 200, "response": { @@ -13437,7 +11760,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -13493,12 +11816,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -13528,7 +11851,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -13540,7 +11863,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -13549,7 +11872,7 @@ "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_pxPok67zc0pXzFtU", "options": { "mfa": { "active": true, @@ -13605,12 +11928,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "RbBnpJYUxNxlw2uyoSafRsoGf5tJ0gm3" ] }, { - "id": "con_SXIEWGYv5QzGSoqq", + "id": "con_vF5B2QiM1bTdpSsO", "options": { "email": true, "scope": [ @@ -13626,12 +11949,12 @@ "google-oauth2" ], "enabled_clients": [ - "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "Ch2ixKKXLYdPiY4QBkdBSVck6I7CQHHI", + "XuxoUwripgr8oWdWIb7ncBfolu8jYe5J" ] }, { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -13661,7 +11984,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -13744,7 +12067,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/emails/provider?include_fields=true&fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address", + "path": "/api/v2/emails/provider?fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address&include_fields=true", "body": "", "status": 200, "response": { @@ -13759,14 +12082,17 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/verify_email_by_code", + "path": "/api/v2/email-templates/verify_email", "body": "", - "status": 404, + "status": 200, "response": { - "statusCode": 404, - "error": "Not Found", - "message": "The template does not exist.", - "errorCode": "inexistent_email_template" + "template": "verify_email", + "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", + "from": "", + "subject": "", + "syntax": "liquid", + "urlLifetimeInSeconds": 432000, + "enabled": true }, "rawHeaders": [], "responseIsBinary": false @@ -13774,7 +12100,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/blocked_account", + "path": "/api/v2/email-templates/verify_email_by_code", "body": "", "status": 404, "response": { @@ -13789,7 +12115,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/user_invitation", + "path": "/api/v2/email-templates/reset_email", "body": "", "status": 404, "response": { @@ -13804,14 +12130,18 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/change_password", + "path": "/api/v2/email-templates/welcome_email", "body": "", - "status": 404, + "status": 200, "response": { - "statusCode": 404, - "error": "Not Found", - "message": "The template does not exist.", - "errorCode": "inexistent_email_template" + "template": "welcome_email", + "body": "\n \n

Welcome!

\n \n\n", + "from": "", + "resultUrl": "https://example.com/welcome", + "subject": "Welcome", + "syntax": "liquid", + "urlLifetimeInSeconds": 3600, + "enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -13819,7 +12149,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/enrollment_email", + "path": "/api/v2/email-templates/password_reset", "body": "", "status": 404, "response": { @@ -13834,7 +12164,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/stolen_credentials", + "path": "/api/v2/email-templates/change_password", "body": "", "status": 404, "response": { @@ -13849,17 +12179,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/verify_email", - "body": "", - "status": 200, - "response": { - "template": "verify_email", - "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", - "from": "", - "subject": "", - "syntax": "liquid", - "urlLifetimeInSeconds": 432000, - "enabled": true + "path": "/api/v2/email-templates/user_invitation", + "body": "", + "status": 404, + "response": { + "statusCode": 404, + "error": "Not Found", + "message": "The template does not exist.", + "errorCode": "inexistent_email_template" }, "rawHeaders": [], "responseIsBinary": false @@ -13867,7 +12194,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/reset_email", + "path": "/api/v2/email-templates/stolen_credentials", "body": "", "status": 404, "response": { @@ -13882,18 +12209,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/welcome_email", + "path": "/api/v2/email-templates/blocked_account", "body": "", - "status": 200, + "status": 404, "response": { - "template": "welcome_email", - "body": "\n \n

Welcome!

\n \n\n", - "from": "", - "resultUrl": "https://example.com/welcome", - "subject": "Welcome", - "syntax": "liquid", - "urlLifetimeInSeconds": 3600, - "enabled": false + "statusCode": 404, + "error": "Not Found", + "message": "The template does not exist.", + "errorCode": "inexistent_email_template" }, "rawHeaders": [], "responseIsBinary": false @@ -13901,7 +12224,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/password_reset", + "path": "/api/v2/email-templates/enrollment_email", "body": "", "status": 404, "response": { @@ -13931,7 +12254,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -13940,8 +12263,8 @@ "limit": 100, "client_grants": [ { - "id": "cgr_P3XzavTQSyFaV8mr", - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "id": "cgr_Oh0iZTSJFWrcHIi0", + "client_id": "jH38OFDGWJdIbGtMWP1nmhXWyJ289P2U", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -14077,8 +12400,8 @@ ] }, { - "id": "cgr_SDgpXDXvWBtO3KEi", - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "id": "cgr_qa1o0c61YQyNQp0V", + "client_id": "CWX3s3TyYYlusLaVmTiRTXbfPs6hV3DF", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -14437,25 +12760,25 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/guardian/factors/push-notification/providers/sns", + "path": "/api/v2/guardian/factors/sms/providers/twilio", "body": "", "status": 200, - "response": {}, + "response": { + "auth_token": "bar", + "sid": "foo", + "from": "from bar", + "messaging_service_sid": "foo" + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/guardian/factors/sms/providers/twilio", + "path": "/api/v2/guardian/factors/push-notification/providers/sns", "body": "", "status": 200, - "response": { - "auth_token": "bar", - "sid": "foo", - "from": "from bar", - "messaging_service_sid": "foo" - }, + "response": {}, "rawHeaders": [], "responseIsBinary": false }, @@ -14485,7 +12808,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": { @@ -14509,28 +12832,28 @@ { "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { "roles": [ { - "id": "rol_hRGDQmEBYbZsC8sZ", + "id": "rol_ZJKlfo79sK6K1lHd", "name": "Admin", "description": "Can read and write things" }, { - "id": "rol_oT9S2f9KYqFyYR2j", + "id": "rol_bL4bPRxC5sA93SOl", "name": "Reader", "description": "Can only read things" }, { - "id": "rol_ZNeuVHhKZTaZaGwq", + "id": "rol_oqgV8nN5JuxVGYCv", "name": "read_only", "description": "Read Only" }, { - "id": "rol_1DwrDRZ26bdvfKxL", + "id": "rol_x0vZAmiZ04hdMdD1", "name": "read_osnly", "description": "Readz Only" } @@ -14545,7 +12868,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_hRGDQmEBYbZsC8sZ/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_ZJKlfo79sK6K1lHd/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -14560,7 +12883,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_oT9S2f9KYqFyYR2j/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_bL4bPRxC5sA93SOl/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -14575,7 +12898,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_ZNeuVHhKZTaZaGwq/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_oqgV8nN5JuxVGYCv/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -14590,7 +12913,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_1DwrDRZ26bdvfKxL/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_x0vZAmiZ04hdMdD1/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -14715,7 +13038,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-id/custom-text/en", + "path": "/api/v2/prompts/login/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14725,7 +13048,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login/custom-text/en", + "path": "/api/v2/prompts/login-id/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14745,7 +13068,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup/custom-text/en", + "path": "/api/v2/prompts/login-email-verification/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14755,7 +13078,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-email-verification/custom-text/en", + "path": "/api/v2/prompts/signup/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14795,7 +13118,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/consent/custom-text/en", + "path": "/api/v2/prompts/mfa-push/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14805,7 +13128,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-otp/custom-text/en", + "path": "/api/v2/prompts/consent/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14815,7 +13138,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-push/custom-text/en", + "path": "/api/v2/prompts/mfa-otp/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14825,7 +13148,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-voice/custom-text/en", + "path": "/api/v2/prompts/mfa-phone/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14835,7 +13158,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-phone/custom-text/en", + "path": "/api/v2/prompts/mfa-voice/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14875,17 +13198,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-recovery-code/custom-text/en", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/status/custom-text/en", + "path": "/api/v2/prompts/mfa/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14895,7 +13208,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/device-flow/custom-text/en", + "path": "/api/v2/prompts/mfa-recovery-code/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14905,7 +13218,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa/custom-text/en", + "path": "/api/v2/prompts/status/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14915,7 +13228,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/organizations/custom-text/en", + "path": "/api/v2/prompts/device-flow/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14955,7 +13268,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/common/custom-text/en", + "path": "/api/v2/prompts/organizations/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14965,7 +13278,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-id/partials", + "path": "/api/v2/prompts/common/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14975,7 +13288,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-password/partials", + "path": "/api/v2/prompts/login/partials", "body": "", "status": 200, "response": {}, @@ -14985,7 +13298,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login/partials", + "path": "/api/v2/prompts/login-id/partials", "body": "", "status": 200, "response": {}, @@ -14995,7 +13308,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup-id/partials", + "path": "/api/v2/prompts/login-password/partials", "body": "", "status": 200, "response": {}, @@ -15005,7 +13318,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup/partials", + "path": "/api/v2/prompts/login-passwordless/partials", "body": "", "status": 200, "response": {}, @@ -15015,7 +13328,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-passwordless/partials", + "path": "/api/v2/prompts/signup-id/partials", "body": "", "status": 200, "response": {}, @@ -15025,7 +13338,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup-password/partials", + "path": "/api/v2/prompts/signup/partials", "body": "", "status": 200, "response": {}, @@ -15035,12 +13348,10 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/migrations", + "path": "/api/v2/prompts/signup-password/partials", "body": "", "status": 200, - "response": { - "flags": {} - }, + "response": {}, "rawHeaders": [], "responseIsBinary": false }, @@ -15053,7 +13364,7 @@ "response": { "actions": [ { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", + "id": "1d9d9961-1241-4715-9c06-ebebe824dd0c", "name": "My Custom Action", "supported_triggers": [ { @@ -15061,34 +13372,34 @@ "version": "v2" } ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:07:56.282435062Z", + "created_at": "2024-10-18T10:22:46.504691389Z", + "updated_at": "2024-10-18T10:22:46.512429033Z", "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", "dependencies": [], "runtime": "node16", "status": "built", "secrets": [], "current_version": { - "id": "133e8fe8-52b5-44ee-8837-9cbcf0fbe8d6", + "id": "eb8aabf7-062a-4695-ad5b-42eca34b0f7d", "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", "runtime": "node16", "status": "BUILT", - "number": 4, - "build_time": "2024-10-14T09:07:57.447777891Z", - "created_at": "2024-10-14T09:07:57.345467497Z", - "updated_at": "2024-10-14T09:07:57.448078558Z" + "number": 1, + "build_time": "2024-10-18T10:22:47.323089940Z", + "created_at": "2024-10-18T10:22:47.241953841Z", + "updated_at": "2024-10-18T10:22:47.324336487Z" }, "deployed_version": { "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", "dependencies": [], - "id": "133e8fe8-52b5-44ee-8837-9cbcf0fbe8d6", + "id": "eb8aabf7-062a-4695-ad5b-42eca34b0f7d", "deployed": true, - "number": 4, - "built_at": "2024-10-14T09:07:57.447777891Z", + "number": 1, + "built_at": "2024-10-18T10:22:47.323089940Z", "secrets": [], "status": "built", - "created_at": "2024-10-14T09:07:57.345467497Z", - "updated_at": "2024-10-14T09:07:57.448078558Z", + "created_at": "2024-10-18T10:22:47.241953841Z", + "updated_at": "2024-10-18T10:22:47.324336487Z", "runtime": "node16", "supported_triggers": [ { @@ -15134,29 +13445,6 @@ }, { "id": "post-login", - "version": "v2", - "status": "DEPRECATED", - "runtimes": [ - "node12", - "node16" - ], - "default_runtime": "node16", - "binding_policy": "trigger-bound", - "compatible_triggers": [] - }, - { - "id": "post-login", - "version": "v1", - "status": "DEPRECATED", - "runtimes": [ - "node12" - ], - "default_runtime": "node12", - "binding_policy": "trigger-bound", - "compatible_triggers": [] - }, - { - "id": "credentials-exchange", "version": "v1", "status": "DEPRECATED", "runtimes": [ @@ -15167,20 +13455,19 @@ "compatible_triggers": [] }, { - "id": "credentials-exchange", + "id": "post-login", "version": "v2", - "status": "CURRENT", + "status": "DEPRECATED", "runtimes": [ "node12", - "node16", - "node18-actions" + "node16" ], - "default_runtime": "node18-actions", + "default_runtime": "node16", "binding_policy": "trigger-bound", "compatible_triggers": [] }, { - "id": "pre-user-registration", + "id": "credentials-exchange", "version": "v2", "status": "CURRENT", "runtimes": [ @@ -15193,7 +13480,7 @@ "compatible_triggers": [] }, { - "id": "pre-user-registration", + "id": "credentials-exchange", "version": "v1", "status": "DEPRECATED", "runtimes": [ @@ -15204,7 +13491,7 @@ "compatible_triggers": [] }, { - "id": "post-user-registration", + "id": "pre-user-registration", "version": "v1", "status": "DEPRECATED", "runtimes": [ @@ -15215,7 +13502,7 @@ "compatible_triggers": [] }, { - "id": "post-user-registration", + "id": "pre-user-registration", "version": "v2", "status": "CURRENT", "runtimes": [ @@ -15228,7 +13515,18 @@ "compatible_triggers": [] }, { - "id": "post-change-password", + "id": "post-user-registration", + "version": "v1", + "status": "DEPRECATED", + "runtimes": [ + "node12" + ], + "default_runtime": "node12", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, + { + "id": "post-user-registration", "version": "v2", "status": "CURRENT", "runtimes": [ @@ -15252,7 +13550,7 @@ "compatible_triggers": [] }, { - "id": "send-phone-message", + "id": "post-change-password", "version": "v2", "status": "CURRENT", "runtimes": [ @@ -15274,6 +13572,19 @@ "binding_policy": "trigger-bound", "compatible_triggers": [] }, + { + "id": "send-phone-message", + "version": "v2", + "status": "CURRENT", + "runtimes": [ + "node12", + "node16", + "node18-actions" + ], + "default_runtime": "node18-actions", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, { "id": "password-reset-post-challenge", "version": "v1", @@ -15473,13 +13784,13 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true", + "path": "/api/v2/organizations?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { "organizations": [ { - "id": "org_knGmCqfHxLD0V9YB", + "id": "org_kyzlkLpxZLx5jUv4", "name": "org1", "display_name": "Organization", "branding": { @@ -15490,13 +13801,13 @@ } }, { - "id": "org_haOYEECGVpZwU9Tc", + "id": "org_gqen5Wo1XmlD46eC", "name": "org2", "display_name": "Organization2" } ], "start": 0, - "limit": 50, + "limit": 100, "total": 2 }, "rawHeaders": [], @@ -15505,36 +13816,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true&take=50", - "body": "", - "status": 200, - "response": { - "organizations": [ - { - "id": "org_knGmCqfHxLD0V9YB", - "name": "org1", - "display_name": "Organization", - "branding": { - "colors": { - "page_background": "#fff5f5", - "primary": "#57ddff" - } - } - }, - { - "id": "org_haOYEECGVpZwU9Tc", - "name": "org2", - "display_name": "Organization2" - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/organizations/org_knGmCqfHxLD0V9YB/enabled_connections", + "path": "/api/v2/organizations/org_kyzlkLpxZLx5jUv4/enabled_connections", "body": "", "status": 200, "response": [], @@ -15544,32 +13826,13 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_haOYEECGVpZwU9Tc/enabled_connections", + "path": "/api/v2/organizations/org_gqen5Wo1XmlD46eC/enabled_connections", "body": "", "status": 200, "response": [], "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/attack-protection/brute-force-protection", - "body": "", - "status": 200, - "response": { - "enabled": true, - "shields": [ - "block", - "user_notification" - ], - "mode": "count_per_identifier_and_ip", - "allowlist": [], - "max_attempts": 10 - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -15620,30 +13883,38 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/log-streams?paginate=false", + "path": "/api/v2/attack-protection/brute-force-protection", + "body": "", + "status": 200, + "response": { + "enabled": true, + "shields": [ + "block", + "user_notification" + ], + "mode": "count_per_identifier_and_ip", + "allowlist": [], + "max_attempts": 10 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/log-streams", "body": "", "status": 200, "response": [ { - "id": "lst_0000000000017950", - "name": "Suspended DD Log Stream", - "type": "datadog", - "status": "active", - "sink": { - "datadogApiKey": "some-sensitive-api-key", - "datadogRegion": "us" - }, - "isPriority": false - }, - { - "id": "lst_0000000000017951", + "id": "lst_0000000000018117", "name": "Amazon EventBridge", "type": "eventbridge", "status": "active", "sink": { "awsAccountId": "123456789012", "awsRegion": "us-east-2", - "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-11b6995b-a49b-4a0f-bfaf-88cefc5ba0b3/auth0.logs" + "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-47282268-18be-4aaf-8b22-08fe19e10bdf/auth0.logs" }, "filters": [ { @@ -15684,6 +13955,17 @@ } ], "isPriority": false + }, + { + "id": "lst_0000000000018116", + "name": "Suspended DD Log Stream", + "type": "datadog", + "status": "active", + "sink": { + "datadogApiKey": "some-sensitive-api-key", + "datadogRegion": "us" + }, + "isPriority": false } ], "rawHeaders": [], @@ -15692,7 +13974,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": [], 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 2821fcc48..88fffdddb 100644 --- a/test/e2e/recordings/should-deploy-without-throwing-an-error.json +++ b/test/e2e/recordings/should-deploy-without-throwing-an-error.json @@ -2,96 +2,18 @@ { "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/resource-servers?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 1, - "start": 0, - "limit": 100, - "rules": [ - { - "id": "rul_KPxS2cPV6d0ZfCE3", - "enabled": true, - "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", - "name": "my-rule", - "order": 2, - "stage": "login_success" - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/rules?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "total": 1, - "start": 0, - "limit": 100, - "rules": [ - { - "id": "rul_KPxS2cPV6d0ZfCE3", - "enabled": true, - "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", - "name": "my-rule", - "order": 2, - "stage": "login_success" - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "total": 0, - "start": 0, - "limit": 100, - "hooks": [] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/hooks?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "total": 0, - "start": 0, - "limit": 100, - "hooks": [] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/resource-servers?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "total": 1, + "total": 2, "start": 0, "limit": 100, "resource_servers": [ { - "id": "62debacc54b4171c0378ea1f", + "id": "6698c226535e13b0f1b2a3c1", "name": "Auth0 Management API", - "identifier": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", + "identifier": "https://kushal-dev.eu.auth0.com/api/v2/", "allow_offline_access": false, "skip_consent_for_verifiable_first_party_clients": false, "token_lifetime": 86400, @@ -818,14 +740,6 @@ "description": "Update Connections Options", "value": "update:connections_options" }, - { - "description": "Read Self Service Profile Custom Texts", - "value": "read:self_service_profile_custom_texts" - }, - { - "description": "Update Self Service Profile Custom Texts", - "value": "update:self_service_profile_custom_texts" - }, { "value": "read:client_credentials", "description": "Read Client Credentials" @@ -844,6 +758,59 @@ } ], "is_system": true + }, + { + "id": "66b2fc64e8c5ef8d40a0fe10", + "name": "Role test API", + "identifier": "role-test", + "allow_offline_access": false, + "skip_consent_for_verifiable_first_party_clients": true, + "token_lifetime": 86400, + "token_lifetime_for_web": 7200, + "signing_alg": "RS256", + "scopes": [ + { + "value": "read:doc", + "description": "doc read permission" + }, + { + "value": "update:doc", + "description": "doc update permission" + }, + { + "value": "read:user", + "description": "user read permission" + }, + { + "value": "update:user", + "description": "user update permission" + }, + { + "value": "read:api", + "description": "api read permission" + }, + { + "value": "update:api", + "description": "api update permission" + }, + { + "value": "read:post", + "description": "post read permission" + }, + { + "value": "update:post", + "description": "post update permission" + }, + { + "value": "read:comment ", + "description": "comment read permission" + }, + { + "value": "update:comment", + "description": "comment update permission" + } + ], + "token_dialect": "access_token" } ] }, @@ -853,19 +820,19 @@ { "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?page=0&per_page=100&include_totals=true&is_global=false", "body": "", "status": 200, "response": { - "total": 10, + "total": 16, "start": 0, "limit": 100, "clients": [ { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Deploy CLI", + "name": "DeployCLI-Dev", "is_first_party": true, "oidc_conformant": true, "sso_disabled": false, @@ -879,6 +846,7 @@ "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, + "custom_login_page_preview": "\n\n\n \n \n Sign In with Auth0\n \n\n\n\n \n\n \n\n \n \n\n ", "cross_origin_authentication": true, "signing_keys": [ { @@ -887,7 +855,7 @@ "subject": "deprecated" } ], - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "client_id": "Ku5wNRXVrQbnITFA9yCr9b9SlCukFN8L", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -903,24 +871,36 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Default App", - "callbacks": [], - "cross_origin_auth": false, + "name": "API Explorer Application", "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": 2592000, - "idle_token_lifetime": 1296000, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, - "sso_disabled": false, + "custom_login_page_preview": "\n\n\n \n \n Sign In with Auth0\n \n\n\n\n \n\n \n\n \n \n\n ", + "cross_origin_authentication": true, + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "signing_keys": [ { "cert": "[REDACTED]", @@ -928,7 +908,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "client_id": "tSJqoA0wpptageIV7f1D2bq3WgSgaPob", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -936,43 +916,50 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "API Explorer Application", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, + "name": "Org test App", + "callbacks": [ + "http://localhost:3000" + ], "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "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, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, "rotation_type": "non-rotating" }, "sso_disabled": false, + "cross_origin_authentication": true, + "allowed_clients": [], + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "organization_require_behavior": "post_login_prompt", + "organization_usage": "allow", + "allowed_logout_urls": [ + "http://localhost:3000" + ], "signing_keys": [ { "cert": "[REDACTED]", @@ -980,7 +967,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "NVZw2D4EQ99E4yIPEj2hE9kZJfyPTz89", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -990,22 +977,33 @@ }, "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "spa", "grant_types": [ - "client_credentials" + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" ], "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", + "name": "Go test app kushal", "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, + "allowed_logout_urls": [ + "http://localhost:4002/", + "localhost:4002/logout" + ], + "callbacks": [ + "http://localhost:4002/", + "http://localhost:4002/callback" + ], "cross_origin_auth": false, + "cross_origin_authentication": true, "is_first_party": true, "native_social_login": { "apple": { @@ -1026,6 +1024,7 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, + "organization_require_behavior": "no_prompt", "signing_keys": [ { "cert": "[REDACTED]", @@ -1033,8 +1032,7 @@ "subject": "deprecated" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "PxFLsPRVvz3wQrRQNI1dgQCESIDjiv8e", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1051,17 +1049,17 @@ "refresh_token", "client_credentials" ], - "web_origins": [], "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", - "cross_origin_auth": false, + "name": "Role test API (Test Application)", "is_first_party": true, "oidc_conformant": true, + "sso_disabled": false, + "cross_origin_auth": false, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -1071,7 +1069,7 @@ "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, - "sso_disabled": false, + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -1079,7 +1077,7 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "client_id": "nz0xcpycpcsyEzZ9gBlQkJ47e6GPeXQB", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1095,13 +1093,10 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, + "name": "DeployCLI-E2E", "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, @@ -1115,6 +1110,7 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -1122,7 +1118,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "36TEM2e0l4GPf0LM8aH1lcJEZBp2DzvY", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1138,24 +1134,14 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "The Default App", - "allowed_clients": [], + "name": "Default App", "callbacks": [], - "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": false, + "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -1165,8 +1151,8 @@ "idle_token_lifetime": 1296000, "rotation_type": "non-rotating" }, - "sso": false, "sso_disabled": false, + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -1174,7 +1160,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1182,8 +1168,6 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", "grant_types": [ "authorization_code", "implicit", @@ -1193,39 +1177,24 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Test SPA", - "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], - "callbacks": [ - "http://localhost:3000" - ], - "client_metadata": {}, + "name": "Deploy CLI", "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { - "expiration_type": "expiring", + "expiration_type": "non-expiring", "leeway": 0, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "infinite_token_lifetime": false, - "infinite_idle_token_lifetime": false, - "rotation_type": "rotating" + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, + "rotation_type": "non-rotating" }, "sso_disabled": false, + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -1233,7 +1202,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1241,38 +1210,22 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], - "token_endpoint_auth_method": "none", - "app_type": "spa", + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token" - ], - "web_origins": [ - "http://localhost:3000" + "client_credentials" ], "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "auth0-deploy-cli-extension", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, + "name": "Auth0-CLI", "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, + "sso_disabled": false, + "cross_origin_auth": false, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -1282,7 +1235,7 @@ "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, - "sso_disabled": false, + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -1290,7 +1243,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "client_id": "gdpNdEa0sdFOX1VZJ4xtycnNR1G5TlRg", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1298,7 +1251,6 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", "app_type": "non_interactive", "grant_types": [ @@ -1307,15 +1259,79 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Dev_DAY_APP", + "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" + }, + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000/api/auth/callback", + "http://localhost:3000" + ], + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "ep5F5NHBlHlfjE1ijeuHepR3HUrdYpyv", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "regular_web", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "web_origins": [ + "http://localhost:3000" + ], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", + "name": "Node App", "allowed_clients": [], + "allowed_logout_urls": [], "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", "native_social_login": { "apple": { "enabled": false @@ -1324,6 +1340,7 @@ "enabled": false } }, + "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -1334,7 +1351,6 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, - "oidc_conformant": false, "signing_keys": [ { "cert": "[REDACTED]", @@ -1342,7 +1358,8 @@ "subject": "deprecated" } ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "allowed_origins": [], + "client_id": "ltna78HqWdPRiEHoLy119Dfs1iRMyR1w", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1352,199 +1369,448 @@ }, "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", + "app_type": "regular_web", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "web_origins": [], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Terraform Provider", + "cross_origin_auth": false, + "is_first_party": true, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "3ykmF4bLMigp4Zbsznqj9uCPqLB7e95d", + "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", - "path": "/api/v2/clients/OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "body": { - "name": "Default App", - "callbacks": [], - "cross_origin_auth": false, - "custom_login_page_on": true, - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "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": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso_disabled": false - }, - "status": 200, - "response": { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Default App", - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "oidc_conformant": true, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso_disabled": false, - "signing_keys": [ + }, { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" - } - ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/emails/provider?include_fields=true&fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address", - "body": "", - "status": 200, - "response": { - "name": "mandrill", - "credentials": {}, - "default_from_address": "auth0-user@auth0.com", - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/duo", - "body": { - "enabled": false - }, - "status": 200, - "response": { - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/webauthn-roaming", - "body": { - "enabled": false - }, - "status": 200, - "response": { - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/email", - "body": { - "enabled": false - }, - "status": 200, - "response": { - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/webauthn-platform", - "body": { - "enabled": false - }, - "status": 200, - "response": { - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/otp", - "body": { - "enabled": false - }, - "status": 200, - "response": { - "enabled": false + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, + "cross_origin_auth": false, + "is_first_party": true, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "ixEERdhSidh32R6y7f1pzavjtho1mQoV", + "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 + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "The Default App", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": false, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso": false, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "1v0GKWhDqqo1jgK2agXhuOarWC45wra6", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "auth0-deploy-cli-extension", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "4mEZRv7D0zLfbSSWbsibdwaoYIVlRP0M", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Test SPA", + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000" + ], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "expiring", + "leeway": 0, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "infinite_token_lifetime": false, + "infinite_idle_token_lifetime": false, + "rotation_type": "rotating" + }, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "u6vM7mQRWqavasw69Fye6E5mMduHlfOX", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "none", + "app_type": "spa", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" + ], + "custom_login_page_on": true + } + ] }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/push-notification", + "method": "PATCH", + "path": "/api/v2/clients/AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX", "body": { - "enabled": false + "name": "Default App", + "callbacks": [], + "cross_origin_auth": false, + "custom_login_page_on": true, + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "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": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false }, "status": 200, "response": { - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/sms", + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Default App", + "callbacks": [], + "cross_origin_auth": false, + "is_first_party": true, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "/CN=kushal-dev.eu.auth0.com" + } + ], + "client_id": "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/clients/sVMh2iWlCw44yRUt88rEO5cnDA6pvm48", + "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": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Deploy CLI", + "cross_origin_auth": false, + "is_first_party": true, + "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, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "/CN=kushal-dev.eu.auth0.com" + } + ], + "client_id": "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48", + "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": "GET", + "path": "/api/v2/emails/provider?fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address&include_fields=true", + "body": "", + "status": 200, + "response": { + "enabled": false, + "credentials": {}, + "name": "mandrill", + "default_from_address": "auth0-user@auth0.com" + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PUT", + "path": "/api/v2/guardian/factors/duo", "body": { "enabled": false }, @@ -1569,6 +1835,90 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PUT", + "path": "/api/v2/guardian/factors/webauthn-platform", + "body": { + "enabled": false + }, + "status": 200, + "response": { + "enabled": false + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PUT", + "path": "/api/v2/guardian/factors/email", + "body": { + "enabled": false + }, + "status": 200, + "response": { + "enabled": false + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PUT", + "path": "/api/v2/guardian/factors/webauthn-roaming", + "body": { + "enabled": false + }, + "status": 200, + "response": { + "enabled": false + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PUT", + "path": "/api/v2/guardian/factors/push-notification", + "body": { + "enabled": false + }, + "status": 200, + "response": { + "enabled": false + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PUT", + "path": "/api/v2/guardian/factors/otp", + "body": { + "enabled": false + }, + "status": 200, + "response": { + "enabled": false + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PUT", + "path": "/api/v2/guardian/factors/sms", + "body": { + "enabled": false + }, + "status": 200, + "response": { + "enabled": false + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", @@ -1582,7 +1932,75 @@ { "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": 429, + "response": { + "statusCode": 429, + "error": "Too Many Requests", + "message": "Global limit has been reached", + "errorCode": "too_many_requests" + }, + "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" + }, + "status": 429, + "response": { + "statusCode": 429, + "error": "Too Many Requests", + "message": "Global limit has been reached", + "errorCode": "too_many_requests" + }, + "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" + }, + "status": 429, + "response": { + "statusCode": 429, + "error": "Too Many Requests", + "message": "Global limit has been reached", + "errorCode": "too_many_requests" + }, + "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" + }, + "status": 429, + "response": { + "statusCode": 429, + "error": "Too Many Requests", + "message": "Global limit has been reached", + "errorCode": "too_many_requests" + }, + "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" }, @@ -1617,38 +2035,136 @@ "status": 200, "response": { "universal_login_experience": "new", - "identifier_first": true + "identifier_first": true, + "enable_ulp_wcag_compliance": false }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/log-streams?paginate=false", - "body": "", - "status": 200, - "response": [ - { - "id": "lst_0000000000017950", - "name": "Suspended DD Log Stream", - "type": "datadog", - "status": "active", - "sink": { + "method": "PATCH", + "path": "/api/v2/attack-protection/breached-password-detection", + "body": { + "enabled": false, + "shields": [], + "admin_notification_frequency": [], + "method": "standard" + }, + "status": 200, + "response": { + "enabled": false, + "shields": [], + "admin_notification_frequency": [], + "method": "standard", + "stage": { + "pre-user-registration": { + "shields": [] + } + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/attack-protection/brute-force-protection", + "body": { + "enabled": true, + "shields": [ + "block", + "user_notification" + ], + "mode": "count_per_identifier_and_ip", + "allowlist": [], + "max_attempts": 10 + }, + "status": 200, + "response": { + "enabled": true, + "shields": [ + "block", + "user_notification" + ], + "mode": "count_per_identifier_and_ip", + "allowlist": [], + "max_attempts": 10 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/attack-protection/suspicious-ip-throttling", + "body": { + "enabled": true, + "shields": [ + "admin_notification", + "block" + ], + "allowlist": [], + "stage": { + "pre-login": { + "max_attempts": 100, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 50, + "rate": 1200 + } + } + }, + "status": 200, + "response": { + "enabled": true, + "shields": [ + "admin_notification", + "block" + ], + "allowlist": [], + "stage": { + "pre-login": { + "max_attempts": 100, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 50, + "rate": 1200 + } + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/log-streams", + "body": "", + "status": 200, + "response": [ + { + "id": "lst_0000000000004837", + "name": "Suspended DD Log Stream", + "type": "datadog", + "status": "active", + "sink": { "datadogApiKey": "some-sensitive-api-key", "datadogRegion": "us" }, "isPriority": false }, { - "id": "lst_0000000000017951", + "id": "lst_0000000000004838", "name": "Amazon EventBridge", "type": "eventbridge", "status": "active", "sink": { "awsAccountId": "123456789012", "awsRegion": "us-east-2", - "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-11b6995b-a49b-4a0f-bfaf-88cefc5ba0b3/auth0.logs" + "awsPartnerEventSource": "aws.partner/auth0.com/kushal-dev-a9c1f0a1-c9ad-45ea-9e7f-21df517bb0a9/auth0.logs" }, "filters": [ { @@ -1667,156 +2183,1638 @@ "type": "category", "name": "auth.signup.success" }, - { - "type": "category", - "name": "auth.logout.success" + { + "type": "category", + "name": "auth.logout.success" + }, + { + "type": "category", + "name": "auth.logout.fail" + }, + { + "type": "category", + "name": "auth.silent_auth.fail" + }, + { + "type": "category", + "name": "auth.silent_auth.success" + }, + { + "type": "category", + "name": "auth.token_exchange.fail" + } + ], + "isPriority": false + } + ], + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/custom-domains", + "body": "", + "status": 200, + "response": [ + { + "custom_domain_id": "cd_eD0HsFcthsQON2V3", + "domain": "kushal-cli-test.acmetest.org", + "primary": true, + "status": "ready", + "type": "auth0_managed_certs", + "verification": { + "methods": [ + { + "name": "CNAME", + "record": "kushal-dev-cd-ed0hsfcthsqon2v3.edge.tenants.eu.auth0.com", + "domain": "kushal-cli-test.acmetest.org" + } + ] + }, + "tls_policy": "recommended" + } + ], + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/clients?page=0&per_page=100&include_totals=true", + "body": "", + "status": 200, + "response": { + "total": 17, + "start": 0, + "limit": 100, + "clients": [ + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "DeployCLI-Dev", + "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" + }, + "custom_login_page_preview": "\n\n\n \n \n Sign In with Auth0\n \n\n\n\n \n\n \n\n \n \n\n ", + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Ku5wNRXVrQbnITFA9yCr9b9SlCukFN8L", + "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 + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "API Explorer Application", + "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" + }, + "custom_login_page_preview": "\n\n\n \n \n Sign In with Auth0\n \n\n\n\n \n\n \n\n \n \n\n ", + "cross_origin_authentication": true, + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "tSJqoA0wpptageIV7f1D2bq3WgSgaPob", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Org test App", + "callbacks": [ + "http://localhost:3000" + ], + "cross_origin_auth": false, + "is_first_party": true, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false, + "cross_origin_authentication": true, + "allowed_clients": [], + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "organization_require_behavior": "post_login_prompt", + "organization_usage": "allow", + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "NVZw2D4EQ99E4yIPEj2hE9kZJfyPTz89", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "spa", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" + ], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Go test app kushal", + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:4002/", + "localhost:4002/logout" + ], + "callbacks": [ + "http://localhost:4002/", + "http://localhost:4002/callback" + ], + "cross_origin_auth": false, + "cross_origin_authentication": true, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "organization_require_behavior": "no_prompt", + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "PxFLsPRVvz3wQrRQNI1dgQCESIDjiv8e", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "regular_web", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Role test API (Test Application)", + "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" + }, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "nz0xcpycpcsyEzZ9gBlQkJ47e6GPeXQB", + "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 + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "DeployCLI-E2E", + "cross_origin_auth": false, + "is_first_party": true, + "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, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "36TEM2e0l4GPf0LM8aH1lcJEZBp2DzvY", + "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 + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Default App", + "callbacks": [], + "cross_origin_auth": false, + "is_first_party": true, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Deploy CLI", + "cross_origin_auth": false, + "is_first_party": true, + "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, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48", + "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 + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Auth0-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" + }, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "gdpNdEa0sdFOX1VZJ4xtycnNR1G5TlRg", + "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 + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Dev_DAY_APP", + "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" + }, + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000/api/auth/callback", + "http://localhost:3000" + ], + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "ep5F5NHBlHlfjE1ijeuHepR3HUrdYpyv", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "regular_web", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "web_origins": [ + "http://localhost:3000" + ], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "allowed_origins": [], + "client_id": "ltna78HqWdPRiEHoLy119Dfs1iRMyR1w", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "regular_web", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "web_origins": [], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Terraform Provider", + "cross_origin_auth": false, + "is_first_party": true, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "3ykmF4bLMigp4Zbsznqj9uCPqLB7e95d", + "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 + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, + "cross_origin_auth": false, + "is_first_party": true, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "ixEERdhSidh32R6y7f1pzavjtho1mQoV", + "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 + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "The Default App", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": false, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso": false, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "1v0GKWhDqqo1jgK2agXhuOarWC45wra6", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "auth0-deploy-cli-extension", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "4mEZRv7D0zLfbSSWbsibdwaoYIVlRP0M", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Test SPA", + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000" + ], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } }, - { - "type": "category", - "name": "auth.logout.fail" + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "expiring", + "leeway": 0, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "infinite_token_lifetime": false, + "infinite_idle_token_lifetime": false, + "rotation_type": "rotating" }, - { - "type": "category", - "name": "auth.silent_auth.fail" + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "u6vM7mQRWqavasw69Fye6E5mMduHlfOX", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false }, - { - "type": "category", - "name": "auth.silent_auth.success" + "client_aliases": [], + "token_endpoint_auth_method": "none", + "app_type": "spa", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" + ], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", + "global": true, + "callbacks": [], + "is_first_party": true, + "name": "All Applications", + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" }, - { - "type": "category", - "name": "auth.token_exchange.fail" - } - ], - "isPriority": false - } - ], + "owners": [ + "mr|google-oauth2|109614534713742077035" + ], + "custom_login_page": "TEST123\n", + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "2Mlaa9rTwG8PJkTuRLXoeNOy8MibpSPn", + "client_secret": "[REDACTED]", + "custom_login_page_on": true + } + ] + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/attack-protection/brute-force-protection", - "body": { - "enabled": true, - "shields": [ - "block", - "user_notification" - ], - "mode": "count_per_identifier_and_ip", - "allowlist": [], - "max_attempts": 10 - }, + "method": "GET", + "path": "/api/v2/connections?per_page=100&page=0&include_totals=true&strategy=auth0", + "body": "", "status": 200, "response": { - "enabled": true, - "shields": [ - "block", - "user_notification" - ], - "mode": "count_per_identifier_and_ip", - "allowlist": [], - "max_attempts": 10 + "total": 3, + "start": 0, + "limit": 100, + "connections": [ + { + "id": "con_1phMfGakxwdqWmih", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true + }, + "import_mode": false, + "customScripts": { + "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" + }, + "disable_signup": false, + "passwordPolicy": "low", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "password_history": { + "size": 5, + "enable": false + }, + "strategy_version": 2, + "requires_username": true, + "password_dictionary": { + "enable": true, + "dictionary": [] + }, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true, + "password_no_personal_info": { + "enable": true + }, + "password_complexity_options": { + "min_length": 8 + }, + "enabledDatabaseCustomization": true + }, + "strategy": "auth0", + "name": "boo-baz-db-connection-test", + "is_domain_connection": false, + "realms": [ + "boo-baz-db-connection-test" + ], + "enabled_clients": [ + "4mEZRv7D0zLfbSSWbsibdwaoYIVlRP0M", + "ltna78HqWdPRiEHoLy119Dfs1iRMyR1w" + ] + }, + { + "id": "con_hvEjcU2lcs9383To", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true + }, + "import_mode": false, + "configuration": {}, + "customScripts": { + "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n //\n // Note: Passing no arguments or a falsey first argument to\n // `WrongUsernameOrPasswordError` will result in the error being logged as\n // an `fu` event (invalid username/email) with an empty string for a user_id.\n // Providing a truthy first argument will result in the error being logged\n // as an `fp` event (the user exists, but the password is invalid) with a\n // user_id value of \"auth0|\". See the `Log Event Type Codes`\n // documentation for more information about these event types:\n // https://auth0.com/docs/deploy-monitor/logs/log-event-type-codes\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n\n const msg = 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database/';\n\n const testURL = \"https://kushal-dev.eu.auth0.com/api\";\n console.log(\"testURL: \", testURL);\n\n return callback(new Error(msg));\n}\n", + "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg = 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg = 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" + }, + "disable_signup": false, + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "password_history": { + "size": 5, + "enable": false + }, + "strategy_version": 2, + "requires_username": true, + "password_dictionary": { + "enable": false, + "dictionary": [] + }, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true, + "password_no_personal_info": { + "enable": false + }, + "password_complexity_options": { + "min_length": 8 + }, + "enabledDatabaseCustomization": true + }, + "strategy": "auth0", + "name": "DB-connection-Two", + "is_domain_connection": false, + "realms": [ + "DB-connection-Two" + ], + "enabled_clients": [] + }, + { + "id": "con_0wl0dLTgEBQTMRrK", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true + }, + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true + }, + "strategy": "auth0", + "name": "Username-Password-Authentication", + "is_domain_connection": false, + "realms": [ + "Username-Password-Authentication" + ], + "enabled_clients": [ + "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48", + "gdpNdEa0sdFOX1VZJ4xtycnNR1G5TlRg", + "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX", + "NVZw2D4EQ99E4yIPEj2hE9kZJfyPTz89", + "ep5F5NHBlHlfjE1ijeuHepR3HUrdYpyv", + "ltna78HqWdPRiEHoLy119Dfs1iRMyR1w", + "ixEERdhSidh32R6y7f1pzavjtho1mQoV", + "1v0GKWhDqqo1jgK2agXhuOarWC45wra6", + "u6vM7mQRWqavasw69Fye6E5mMduHlfOX", + "3ykmF4bLMigp4Zbsznqj9uCPqLB7e95d", + "4mEZRv7D0zLfbSSWbsibdwaoYIVlRP0M" + ] + } + ] }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/attack-protection/suspicious-ip-throttling", - "body": { - "enabled": true, - "shields": [ - "admin_notification", - "block" - ], - "allowlist": [], - "stage": { - "pre-login": { - "max_attempts": 100, - "rate": 864000 - }, - "pre-user-registration": { - "max_attempts": 50, - "rate": 1200 - } - } - }, + "method": "GET", + "path": "/api/v2/connections?per_page=100&page=0&include_totals=true&strategy=auth0", + "body": "", "status": 200, "response": { - "enabled": true, - "shields": [ - "admin_notification", - "block" - ], - "allowlist": [], - "stage": { - "pre-login": { - "max_attempts": 100, - "rate": 864000 + "total": 3, + "start": 0, + "limit": 100, + "connections": [ + { + "id": "con_1phMfGakxwdqWmih", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true + }, + "import_mode": false, + "customScripts": { + "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" + }, + "disable_signup": false, + "passwordPolicy": "low", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "password_history": { + "size": 5, + "enable": false + }, + "strategy_version": 2, + "requires_username": true, + "password_dictionary": { + "enable": true, + "dictionary": [] + }, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true, + "password_no_personal_info": { + "enable": true + }, + "password_complexity_options": { + "min_length": 8 + }, + "enabledDatabaseCustomization": true + }, + "strategy": "auth0", + "name": "boo-baz-db-connection-test", + "is_domain_connection": false, + "realms": [ + "boo-baz-db-connection-test" + ], + "enabled_clients": [ + "4mEZRv7D0zLfbSSWbsibdwaoYIVlRP0M", + "ltna78HqWdPRiEHoLy119Dfs1iRMyR1w" + ] }, - "pre-user-registration": { - "max_attempts": 50, - "rate": 1200 + { + "id": "con_hvEjcU2lcs9383To", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true + }, + "import_mode": false, + "configuration": {}, + "customScripts": { + "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n //\n // Note: Passing no arguments or a falsey first argument to\n // `WrongUsernameOrPasswordError` will result in the error being logged as\n // an `fu` event (invalid username/email) with an empty string for a user_id.\n // Providing a truthy first argument will result in the error being logged\n // as an `fp` event (the user exists, but the password is invalid) with a\n // user_id value of \"auth0|\". See the `Log Event Type Codes`\n // documentation for more information about these event types:\n // https://auth0.com/docs/deploy-monitor/logs/log-event-type-codes\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n\n const msg = 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database/';\n\n const testURL = \"https://kushal-dev.eu.auth0.com/api\";\n console.log(\"testURL: \", testURL);\n\n return callback(new Error(msg));\n}\n", + "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg = 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg = 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" + }, + "disable_signup": false, + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "password_history": { + "size": 5, + "enable": false + }, + "strategy_version": 2, + "requires_username": true, + "password_dictionary": { + "enable": false, + "dictionary": [] + }, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true, + "password_no_personal_info": { + "enable": false + }, + "password_complexity_options": { + "min_length": 8 + }, + "enabledDatabaseCustomization": true + }, + "strategy": "auth0", + "name": "DB-connection-Two", + "is_domain_connection": false, + "realms": [ + "DB-connection-Two" + ], + "enabled_clients": [] + }, + { + "id": "con_0wl0dLTgEBQTMRrK", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true + }, + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true + }, + "strategy": "auth0", + "name": "Username-Password-Authentication", + "is_domain_connection": false, + "realms": [ + "Username-Password-Authentication" + ], + "enabled_clients": [ + "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48", + "gdpNdEa0sdFOX1VZJ4xtycnNR1G5TlRg", + "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX", + "NVZw2D4EQ99E4yIPEj2hE9kZJfyPTz89", + "ep5F5NHBlHlfjE1ijeuHepR3HUrdYpyv", + "ltna78HqWdPRiEHoLy119Dfs1iRMyR1w", + "ixEERdhSidh32R6y7f1pzavjtho1mQoV", + "1v0GKWhDqqo1jgK2agXhuOarWC45wra6", + "u6vM7mQRWqavasw69Fye6E5mMduHlfOX", + "3ykmF4bLMigp4Zbsznqj9uCPqLB7e95d", + "4mEZRv7D0zLfbSSWbsibdwaoYIVlRP0M" + ] } - } + ] }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/attack-protection/breached-password-detection", - "body": { - "enabled": false, - "shields": [], - "admin_notification_frequency": [], - "method": "standard" - }, + "method": "GET", + "path": "/api/v2/connections/con_0wl0dLTgEBQTMRrK", + "body": "", "status": 200, "response": { - "enabled": false, - "shields": [], - "admin_notification_frequency": [], - "method": "standard", - "stage": { - "pre-user-registration": { - "shields": [] - } - } + "id": "con_0wl0dLTgEBQTMRrK", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true + }, + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true + }, + "strategy": "auth0", + "name": "Username-Password-Authentication", + "is_domain_connection": false, + "enabled_clients": [ + "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48", + "gdpNdEa0sdFOX1VZJ4xtycnNR1G5TlRg", + "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX", + "NVZw2D4EQ99E4yIPEj2hE9kZJfyPTz89", + "ep5F5NHBlHlfjE1ijeuHepR3HUrdYpyv", + "ltna78HqWdPRiEHoLy119Dfs1iRMyR1w", + "ixEERdhSidh32R6y7f1pzavjtho1mQoV", + "1v0GKWhDqqo1jgK2agXhuOarWC45wra6", + "u6vM7mQRWqavasw69Fye6E5mMduHlfOX", + "3ykmF4bLMigp4Zbsznqj9uCPqLB7e95d", + "4mEZRv7D0zLfbSSWbsibdwaoYIVlRP0M" + ], + "realms": [ + "Username-Password-Authentication" + ] }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/custom-domains?paginate=false", - "body": "", + "method": "PATCH", + "path": "/api/v2/connections/con_0wl0dLTgEBQTMRrK", + "body": { + "enabled_clients": [ + "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX", + "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48" + ], + "is_domain_connection": false, + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true + }, + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true + }, + "realms": [ + "Username-Password-Authentication" + ] + }, "status": 200, - "response": [], + "response": { + "id": "con_0wl0dLTgEBQTMRrK", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true + }, + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true + }, + "strategy": "auth0", + "name": "Username-Password-Authentication", + "is_domain_connection": false, + "enabled_clients": [ + "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX", + "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48" + ], + "realms": [ + "Username-Password-Authentication" + ] + }, "rawHeaders": [], "responseIsBinary": false }, { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 11, + "total": 17, "start": 0, "limit": 100, "clients": [ { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "DeployCLI-Dev", + "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" + }, + "custom_login_page_preview": "\n\n\n \n \n Sign In with Auth0\n \n\n\n\n \n\n \n\n \n \n\n ", + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Ku5wNRXVrQbnITFA9yCr9b9SlCukFN8L", + "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 + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "API Explorer Application", + "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" + }, + "custom_login_page_preview": "\n\n\n \n \n Sign In with Auth0\n \n\n\n\n \n\n \n\n \n \n\n ", + "cross_origin_authentication": true, + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "tSJqoA0wpptageIV7f1D2bq3WgSgaPob", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Org test App", + "callbacks": [ + "http://localhost:3000" + ], + "cross_origin_auth": false, + "is_first_party": true, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false, + "cross_origin_authentication": true, + "allowed_clients": [], + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "organization_require_behavior": "post_login_prompt", + "organization_usage": "allow", + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "NVZw2D4EQ99E4yIPEj2hE9kZJfyPTz89", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "spa", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" + ], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Go test app kushal", + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:4002/", + "localhost:4002/logout" + ], + "callbacks": [ + "http://localhost:4002/", + "http://localhost:4002/callback" + ], + "cross_origin_auth": false, + "cross_origin_authentication": true, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "organization_require_behavior": "no_prompt", + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "PxFLsPRVvz3wQrRQNI1dgQCESIDjiv8e", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "regular_web", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Deploy CLI", + "name": "Role test API (Test Application)", "is_first_party": true, "oidc_conformant": true, "sso_disabled": false, @@ -1838,7 +3836,48 @@ "subject": "deprecated" } ], - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "client_id": "nz0xcpycpcsyEzZ9gBlQkJ47e6GPeXQB", + "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 + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "DeployCLI-E2E", + "cross_origin_auth": false, + "is_first_party": true, + "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, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "36TEM2e0l4GPf0LM8aH1lcJEZBp2DzvY", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1854,7 +3893,7 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, "name": "Default App", @@ -1872,6 +3911,7 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -1879,7 +3919,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "client_id": "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1896,24 +3936,55 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "API Explorer Application", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, + "name": "Deploy CLI", "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false + "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, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" } + ], + "client_id": "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48", + "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 + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Auth0-CLI", + "is_first_party": true, "oidc_conformant": true, + "sso_disabled": false, + "cross_origin_auth": false, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -1923,7 +3994,63 @@ "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "gdpNdEa0sdFOX1VZJ4xtycnNR1G5TlRg", + "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 + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Dev_DAY_APP", + "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" + }, + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000/api/auth/callback", + "http://localhost:3000" + ], + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "signing_keys": [ { "cert": "[REDACTED]", @@ -1931,7 +4058,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "ep5F5NHBlHlfjE1ijeuHepR3HUrdYpyv", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1941,14 +4068,20 @@ }, "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [ + "http://localhost:3000" + ], "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, "name": "Node App", @@ -1985,7 +4118,7 @@ } ], "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "ltna78HqWdPRiEHoLy119Dfs1iRMyR1w", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2006,7 +4139,7 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, "name": "Terraform Provider", @@ -2030,7 +4163,7 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "client_id": "3ykmF4bLMigp4Zbsznqj9uCPqLB7e95d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2046,7 +4179,7 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, "name": "Quickstarts API (Test Application)", @@ -2073,7 +4206,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "ixEERdhSidh32R6y7f1pzavjtho1mQoV", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2089,7 +4222,7 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, "name": "The Default App", @@ -2125,7 +4258,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "1v0GKWhDqqo1jgK2agXhuOarWC45wra6", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2144,69 +4277,7 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Test SPA", - "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], - "callbacks": [ - "http://localhost:3000" - ], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": true, - "refresh_token": { - "expiration_type": "expiring", - "leeway": 0, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "infinite_token_lifetime": false, - "infinite_idle_token_lifetime": false, - "rotation_type": "rotating" - }, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "none", - "app_type": "spa", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token" - ], - "web_origins": [ - "http://localhost:3000" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, "name": "auth0-deploy-cli-extension", @@ -2241,7 +4312,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "client_id": "4mEZRv7D0zLfbSSWbsibdwaoYIVlRP0M", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2258,15 +4329,20 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", + "name": "Test SPA", "allowed_clients": [], - "callbacks": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000" + ], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", "native_social_login": { "apple": { "enabled": false @@ -2275,17 +4351,17 @@ "enabled": false } }, + "oidc_conformant": true, "refresh_token": { - "expiration_type": "non-expiring", + "expiration_type": "expiring", "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 31557600, - "idle_token_lifetime": 2592000, - "rotation_type": "non-rotating" + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "infinite_token_lifetime": false, + "infinite_idle_token_lifetime": false, + "rotation_type": "rotating" }, "sso_disabled": false, - "oidc_conformant": false, "signing_keys": [ { "cert": "[REDACTED]", @@ -2293,7 +4369,7 @@ "subject": "deprecated" } ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "client_id": "u6vM7mQRWqavasw69Fye6E5mMduHlfOX", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2302,15 +4378,20 @@ "secret_encoded": false }, "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "token_endpoint_auth_method": "none", + "app_type": "spa", "grant_types": [ - "client_credentials" + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" ], "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": true, "callbacks": [], "is_first_party": true, @@ -2325,11 +4406,7 @@ "rotation_type": "non-rotating" }, "owners": [ - "mr|samlp|okta|will.vedder@auth0.com", - "mr|google-oauth2|102002633619863830825", - "mr|samlp|okta|frederik.prijck@auth0.com", - "mr|google-oauth2|109614534713742077035", - "mr|google-oauth2|116771660953104383819" + "mr|google-oauth2|109614534713742077035" ], "custom_login_page": "TEST123\n", "cross_origin_authentication": true, @@ -2340,7 +4417,7 @@ "subject": "deprecated" } ], - "client_id": "Isi93ibGHIGwmdYjsLwTOn7Gu7nwxU3V", + "client_id": "2Mlaa9rTwG8PJkTuRLXoeNOy8MibpSPn", "client_secret": "[REDACTED]", "custom_login_page_on": true } @@ -2352,16 +4429,16 @@ { "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "total": 2, + "total": 5, "start": 0, "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_1phMfGakxwdqWmih", "options": { "mfa": { "active": true, @@ -2417,79 +4494,29 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "4mEZRv7D0zLfbSSWbsibdwaoYIVlRP0M", + "ltna78HqWdPRiEHoLy119Dfs1iRMyR1w" ] }, { - "id": "con_orWZyMv2k9PgOd3x", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "passwordPolicy": "good", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true - }, - "strategy": "auth0", - "name": "Username-Password-Authentication", - "is_domain_connection": false, - "realms": [ - "Username-Password-Authentication" - ], - "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" - ] - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "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", - "body": "", - "status": 200, - "response": { - "total": 2, - "start": 0, - "limit": 100, - "connections": [ - { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_hvEjcU2lcs9383To", "options": { "mfa": { "active": true, "return_enroll_settings": true }, "import_mode": false, + "configuration": {}, "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" + "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n //\n // Note: Passing no arguments or a falsey first argument to\n // `WrongUsernameOrPasswordError` will result in the error being logged as\n // an `fu` event (invalid username/email) with an empty string for a user_id.\n // Providing a truthy first argument will result in the error being logged\n // as an `fp` event (the user exists, but the password is invalid) with a\n // user_id value of \"auth0|\". See the `Log Event Type Codes`\n // documentation for more information about these event types:\n // https://auth0.com/docs/deploy-monitor/logs/log-event-type-codes\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n\n const msg = 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database/';\n\n const testURL = \"https://kushal-dev.eu.auth0.com/api\";\n console.log(\"testURL: \", testURL);\n\n return callback(new Error(msg));\n}\n", + "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg = 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg = 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" }, "disable_signup": false, - "passwordPolicy": "low", + "passwordPolicy": "good", "passkey_options": { "challenge_ui": "both", "local_enrollment_enabled": true, @@ -2502,7 +4529,7 @@ "strategy_version": 2, "requires_username": true, "password_dictionary": { - "enable": true, + "enable": false, "dictionary": [] }, "authentication_methods": { @@ -2515,7 +4542,7 @@ }, "brute_force_protection": true, "password_no_personal_info": { - "enable": true + "enable": false }, "password_complexity_options": { "min_length": 8 @@ -2523,18 +4550,195 @@ "enabledDatabaseCustomization": true }, "strategy": "auth0", - "name": "boo-baz-db-connection-test", + "name": "DB-connection-Two", "is_domain_connection": false, "realms": [ - "boo-baz-db-connection-test" + "DB-connection-Two" + ], + "enabled_clients": [] + }, + { + "id": "con_mqMWaGAUUOvPX3Ej", + "options": { + "email": true, + "scope": [ + "email", + "profile" + ], + "profile": true + }, + "strategy": "google-oauth2", + "name": "google-oauth2", + "is_domain_connection": false, + "realms": [ + "google-oauth2" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "1v0GKWhDqqo1jgK2agXhuOarWC45wra6", + "4mEZRv7D0zLfbSSWbsibdwaoYIVlRP0M" ] }, { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_iYlZ1DESGzYFLzgc", + "options": { + "type": "back_channel", + "scope": "openid profile email", + "domain": "domain.okta.com", + "issuer": "https://domain.okta.com", + "jwks_uri": "https://domain.okta.com/oauth2/v1/keys", + "client_id": "qwqwqwqw", + "attribute_map": { + "mapping_mode": "basic_profile" + }, + "client_secret": "[REDACTED]", + "oidc_metadata": { + "issuer": "https://domain.okta.com", + "jwks_uri": "https://domain.okta.com/oauth2/v1/keys", + "token_endpoint": "https://domain.okta.com/oauth2/v1/token", + "claims_supported": [ + "iss", + "ver", + "sub", + "aud", + "iat", + "exp", + "jti", + "auth_time", + "amr", + "idp", + "nonce", + "name", + "nickname", + "preferred_username", + "given_name", + "middle_name", + "family_name", + "email", + "email_verified", + "profile", + "zoneinfo", + "locale", + "address", + "phone_number", + "picture", + "website", + "gender", + "birthdate", + "updated_at", + "at_hash", + "c_hash" + ], + "scopes_supported": [ + "openid", + "email", + "profile", + "address", + "phone", + "offline_access", + "groups" + ], + "userinfo_endpoint": "https://domain.okta.com/oauth2/v1/userinfo", + "revocation_endpoint": "https://domain.okta.com/oauth2/v1/revoke", + "end_session_endpoint": "https://domain.okta.com/oauth2/v1/logout", + "grant_types_supported": [ + "authorization_code", + "implicit", + "refresh_token", + "password", + "urn:ietf:params:oauth:grant-type:device_code" + ], + "registration_endpoint": "https://domain.okta.com/oauth2/v1/clients", + "authorization_endpoint": "https://domain.okta.com/oauth2/v1/authorize", + "introspection_endpoint": "https://domain.okta.com/oauth2/v1/introspect", + "subject_types_supported": [ + "public" + ], + "response_modes_supported": [ + "query", + "fragment", + "form_post", + "okta_post_message" + ], + "response_types_supported": [ + "code", + "id_token", + "code id_token", + "code token", + "id_token token", + "code id_token token" + ], + "claims_parameter_supported": false, + "request_parameter_supported": true, + "device_authorization_endpoint": "https://domain.okta.com/oauth2/v1/device/authorize", + "request_uri_parameter_supported": false, + "code_challenge_methods_supported": [ + "S256" + ], + "require_request_uri_registration": false, + "dpop_signing_alg_values_supported": [ + "RS256", + "RS384", + "RS512", + "ES256", + "ES384", + "ES512" + ], + "id_token_signing_alg_values_supported": [ + "RS256" + ], + "token_endpoint_auth_methods_supported": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ], + "revocation_endpoint_auth_methods_supported": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ], + "request_object_signing_alg_values_supported": [ + "HS256", + "HS384", + "HS512", + "RS256", + "RS384", + "RS512", + "ES256", + "ES384", + "ES512" + ], + "introspection_endpoint_auth_methods_supported": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ] + }, + "schema_version": "oidc-V4", + "token_endpoint": "https://domain.okta.com/oauth2/v1/token", + "userinfo_endpoint": "https://domain.okta.com/oauth2/v1/userinfo", + "connection_settings": { + "pkce": "auto" + }, + "authorization_endpoint": "https://domain.okta.com/oauth2/v1/authorize" + }, + "strategy": "okta", + "name": "test-scim-con", + "is_domain_connection": false, + "show_as_button": false, + "display_name": "test-scim-con", + "realms": [ + "test-scim-con" + ], + "enabled_clients": [] + }, + { + "id": "con_0wl0dLTgEBQTMRrK", "options": { "mfa": { "active": true, @@ -2564,8 +4768,8 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48", + "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX" ] } ] @@ -2576,118 +4780,207 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_orWZyMv2k9PgOd3x", + "path": "/api/v2/connections/con_iYlZ1DESGzYFLzgc/scim-configuration", "body": "", "status": 200, "response": { - "id": "con_orWZyMv2k9PgOd3x", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true + "tenant_name": "kushal-dev", + "connection_id": "con_iYlZ1DESGzYFLzgc", + "connection_name": "test-scim-con", + "strategy": "okta", + "mapping": [ + { + "scim": "user_Name", + "auth0": "preferred_username" }, - "passwordPolicy": "good", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true + { + "scim": "emails[primary eq true].value", + "auth0": "email" }, - "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } + { + "scim": "externalId", + "auth0": "app_metadata.external_id" }, - "brute_force_protection": true - }, - "strategy": "auth0", - "name": "Username-Password-Authentication", - "is_domain_connection": false, - "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + { + "scim": "active", + "auth0": "blocked" + }, + { + "scim": "displayName", + "auth0": "name" + }, + { + "scim": "name.givenName", + "auth0": "given_name" + }, + { + "scim": "name.familyName", + "auth0": "family_name" + }, + { + "scim": "name.middleName", + "auth0": "app_metadata.middle_name" + }, + { + "scim": "name.honorificPrefix", + "auth0": "app_metadata.honorific_prefix" + }, + { + "scim": "name.honorificSuffix", + "auth0": "app_metadata.honorific_suffix" + }, + { + "scim": "nickName", + "auth0": "nickname" + }, + { + "scim": "photos[type eq \"photo\"].value", + "auth0": "picture" + }, + { + "scim": "phoneNumbers[primary eq true].value", + "auth0": "app_metadata.primary_phone_number" + }, + { + "scim": "phoneNumbers[type eq \"mobile\"].value", + "auth0": "app_metadata.mobile_phone_number" + }, + { + "scim": "addresses[type eq \"work\"].streetAddress", + "auth0": "app_metadata.street_address" + }, + { + "scim": "addresses[type eq \"work\"].locality", + "auth0": "app_metadata.city" + }, + { + "scim": "addresses[type eq \"work\"].region", + "auth0": "app_metadata.state" + }, + { + "scim": "addresses[type eq \"work\"].postalCode", + "auth0": "app_metadata.postal_code" + }, + { + "scim": "addresses[type eq \"work\"].formatted", + "auth0": "app_metadata.postal_address" + }, + { + "scim": "addresses[type eq \"work\"].country", + "auth0": "app_metadata.country" + }, + { + "scim": "profileUrl", + "auth0": "app_metadata.profile_url" + }, + { + "scim": "userType", + "auth0": "app_metadata.user_type" + }, + { + "scim": "title", + "auth0": "app_metadata.title" + }, + { + "scim": "preferredLanguage", + "auth0": "app_metadata.language" + }, + { + "scim": "locale", + "auth0": "app_metadata.locale" + }, + { + "scim": "timezone", + "auth0": "app_metadata.timezone" + }, + { + "scim": "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User.employeeNumber", + "auth0": "app_metadata.employee_id" + }, + { + "scim": "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User.costCenter", + "auth0": "app_metadata.cost_center" + }, + { + "scim": "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User.organization", + "auth0": "app_metadata.organization" + }, + { + "scim": "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User.division", + "auth0": "app_metadata.division" + }, + { + "scim": "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User.department", + "auth0": "app_metadata.department" + }, + { + "scim": "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User.manager", + "auth0": "app_metadata.manager" + } ], - "realms": [ - "Username-Password-Authentication" - ] + "updated_on": "2024-09-26T07:32:32.925Z", + "created_at": "2024-09-24T11:32:46.187Z", + "user_id_attribute": "externalId" }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/connections/con_orWZyMv2k9PgOd3x", - "body": { - "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" - ], - "is_domain_connection": false, - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "passwordPolicy": "good", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true - }, - "realms": [ - "Username-Password-Authentication" - ] + "method": "GET", + "path": "/api/v2/connections?per_page=100&page=0&include_totals=true", + "body": "", + "status": 429, + "response": { + "statusCode": 429, + "error": "Too Many Requests", + "message": "Global limit has been reached", + "errorCode": "too_many_requests" }, - "status": 200, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections?per_page=100&page=0&include_totals=true", + "body": "", + "status": 429, "response": { - "id": "con_orWZyMv2k9PgOd3x", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "passwordPolicy": "good", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true - }, - "strategy": "auth0", - "name": "Username-Password-Authentication", - "is_domain_connection": false, - "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" - ], - "realms": [ - "Username-Password-Authentication" - ] + "statusCode": 429, + "error": "Too Many Requests", + "message": "Global limit has been reached", + "errorCode": "too_many_requests" + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections?per_page=100&page=0&include_totals=true", + "body": "", + "status": 429, + "response": { + "statusCode": 429, + "error": "Too Many Requests", + "message": "Global limit has been reached", + "errorCode": "too_many_requests" + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections?per_page=100&page=0&include_totals=true", + "body": "", + "status": 429, + "response": { + "statusCode": 429, + "error": "Too Many Requests", + "message": "Global limit has been reached", + "errorCode": "too_many_requests" }, "rawHeaders": [], "responseIsBinary": false @@ -2695,215 +4988,418 @@ { "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/connections?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "total": 11, + "total": 5, "start": 0, "limit": 100, - "clients": [ - { - "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" - }, - "cross_origin_authentication": true, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "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 - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Default App", - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "oidc_conformant": true, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true - }, + "connections": [ { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "API Explorer Application", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false + "id": "con_1phMfGakxwdqWmih", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "import_mode": false, + "customScripts": { + "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" + }, + "disable_signup": false, + "passwordPolicy": "low", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "password_history": { + "size": 5, + "enable": false + }, + "strategy_version": 2, + "requires_username": true, + "password_dictionary": { + "enable": true, + "dictionary": [] + }, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true, + "password_no_personal_info": { + "enable": true + }, + "password_complexity_options": { + "min_length": 8 + }, + "enabledDatabaseCustomization": true }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" + "strategy": "auth0", + "name": "boo-baz-db-connection-test", + "is_domain_connection": false, + "realms": [ + "boo-baz-db-connection-test" ], - "custom_login_page_on": true + "enabled_clients": [ + "4mEZRv7D0zLfbSSWbsibdwaoYIVlRP0M", + "ltna78HqWdPRiEHoLy119Dfs1iRMyR1w" + ] }, { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false + "id": "con_hvEjcU2lcs9383To", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true }, - "facebook": { - "enabled": false - } - }, - "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" + "import_mode": false, + "configuration": {}, + "customScripts": { + "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n //\n // Note: Passing no arguments or a falsey first argument to\n // `WrongUsernameOrPasswordError` will result in the error being logged as\n // an `fu` event (invalid username/email) with an empty string for a user_id.\n // Providing a truthy first argument will result in the error being logged\n // as an `fp` event (the user exists, but the password is invalid) with a\n // user_id value of \"auth0|\". See the `Log Event Type Codes`\n // documentation for more information about these event types:\n // https://auth0.com/docs/deploy-monitor/logs/log-event-type-codes\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n\n const msg = 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database/';\n\n const testURL = \"https://kushal-dev.eu.auth0.com/api\";\n console.log(\"testURL: \", testURL);\n\n return callback(new Error(msg));\n}\n", + "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg = 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg = 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" + }, + "disable_signup": false, + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "password_history": { + "size": 5, + "enable": false + }, + "strategy_version": 2, + "requires_username": true, + "password_dictionary": { + "enable": false, + "dictionary": [] + }, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true, + "password_no_personal_info": { + "enable": false + }, + "password_complexity_options": { + "min_length": 8 + }, + "enabledDatabaseCustomization": true }, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } + "strategy": "auth0", + "name": "DB-connection-Two", + "is_domain_connection": false, + "realms": [ + "DB-connection-Two" ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "enabled_clients": [] + }, + { + "id": "con_mqMWaGAUUOvPX3Ej", + "options": { + "email": true, + "scope": [ + "email", + "profile" + ], + "profile": true }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" + "strategy": "google-oauth2", + "name": "google-oauth2", + "is_domain_connection": false, + "realms": [ + "google-oauth2" ], - "web_origins": [], - "custom_login_page_on": true + "enabled_clients": [ + "1v0GKWhDqqo1jgK2agXhuOarWC45wra6", + "4mEZRv7D0zLfbSSWbsibdwaoYIVlRP0M" + ] + }, + { + "id": "con_iYlZ1DESGzYFLzgc", + "options": { + "type": "back_channel", + "scope": "openid profile email", + "domain": "domain.okta.com", + "issuer": "https://domain.okta.com", + "jwks_uri": "https://domain.okta.com/oauth2/v1/keys", + "client_id": "qwqwqwqw", + "attribute_map": { + "mapping_mode": "basic_profile" + }, + "client_secret": "[REDACTED]", + "oidc_metadata": { + "issuer": "https://domain.okta.com", + "jwks_uri": "https://domain.okta.com/oauth2/v1/keys", + "token_endpoint": "https://domain.okta.com/oauth2/v1/token", + "claims_supported": [ + "iss", + "ver", + "sub", + "aud", + "iat", + "exp", + "jti", + "auth_time", + "amr", + "idp", + "nonce", + "name", + "nickname", + "preferred_username", + "given_name", + "middle_name", + "family_name", + "email", + "email_verified", + "profile", + "zoneinfo", + "locale", + "address", + "phone_number", + "picture", + "website", + "gender", + "birthdate", + "updated_at", + "at_hash", + "c_hash" + ], + "scopes_supported": [ + "openid", + "email", + "profile", + "address", + "phone", + "offline_access", + "groups" + ], + "userinfo_endpoint": "https://domain.okta.com/oauth2/v1/userinfo", + "revocation_endpoint": "https://domain.okta.com/oauth2/v1/revoke", + "end_session_endpoint": "https://domain.okta.com/oauth2/v1/logout", + "grant_types_supported": [ + "authorization_code", + "implicit", + "refresh_token", + "password", + "urn:ietf:params:oauth:grant-type:device_code" + ], + "registration_endpoint": "https://domain.okta.com/oauth2/v1/clients", + "authorization_endpoint": "https://domain.okta.com/oauth2/v1/authorize", + "introspection_endpoint": "https://domain.okta.com/oauth2/v1/introspect", + "subject_types_supported": [ + "public" + ], + "response_modes_supported": [ + "query", + "fragment", + "form_post", + "okta_post_message" + ], + "response_types_supported": [ + "code", + "id_token", + "code id_token", + "code token", + "id_token token", + "code id_token token" + ], + "claims_parameter_supported": false, + "request_parameter_supported": true, + "device_authorization_endpoint": "https://domain.okta.com/oauth2/v1/device/authorize", + "request_uri_parameter_supported": false, + "code_challenge_methods_supported": [ + "S256" + ], + "require_request_uri_registration": false, + "dpop_signing_alg_values_supported": [ + "RS256", + "RS384", + "RS512", + "ES256", + "ES384", + "ES512" + ], + "id_token_signing_alg_values_supported": [ + "RS256" + ], + "token_endpoint_auth_methods_supported": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ], + "revocation_endpoint_auth_methods_supported": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ], + "request_object_signing_alg_values_supported": [ + "HS256", + "HS384", + "HS512", + "RS256", + "RS384", + "RS512", + "ES256", + "ES384", + "ES512" + ], + "introspection_endpoint_auth_methods_supported": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ] + }, + "schema_version": "oidc-V4", + "token_endpoint": "https://domain.okta.com/oauth2/v1/token", + "userinfo_endpoint": "https://domain.okta.com/oauth2/v1/userinfo", + "connection_settings": { + "pkce": "auto" + }, + "authorization_endpoint": "https://domain.okta.com/oauth2/v1/authorize" + }, + "strategy": "okta", + "name": "test-scim-con", + "is_domain_connection": false, + "show_as_button": false, + "display_name": "test-scim-con", + "realms": [ + "test-scim-con" + ], + "enabled_clients": [] }, { - "tenant": "auth0-deploy-cli-e2e", + "id": "con_0wl0dLTgEBQTMRrK", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true + }, + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true + }, + "strategy": "auth0", + "name": "Username-Password-Authentication", + "is_domain_connection": false, + "realms": [ + "Username-Password-Authentication" + ], + "enabled_clients": [ + "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48", + "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX" + ] + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/connections/con_mqMWaGAUUOvPX3Ej", + "body": { + "enabled_clients": [ + "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX", + "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48" + ], + "is_domain_connection": false, + "options": { + "email": true, + "scope": [ + "email", + "profile" + ], + "profile": true + } + }, + "status": 200, + "response": { + "id": "con_mqMWaGAUUOvPX3Ej", + "options": { + "email": true, + "scope": [ + "email", + "profile" + ], + "profile": true + }, + "strategy": "google-oauth2", + "name": "google-oauth2", + "is_domain_connection": false, + "enabled_clients": [ + "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX", + "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48" + ], + "realms": [ + "google-oauth2" + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/clients?page=0&per_page=100&include_totals=true", + "body": "", + "status": 200, + "response": { + "total": 17, + "start": 0, + "limit": 100, + "clients": [ + { + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", - "cross_origin_auth": false, + "name": "DeployCLI-Dev", "is_first_party": true, "oidc_conformant": true, + "sso_disabled": false, + "cross_origin_auth": false, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -2913,7 +5409,8 @@ "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, - "sso_disabled": false, + "custom_login_page_preview": "\n\n\n \n \n Sign In with Auth0\n \n\n\n\n \n\n \n\n \n \n\n ", + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -2921,7 +5418,7 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "client_id": "Ku5wNRXVrQbnITFA9yCr9b9SlCukFN8L", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2937,16 +5434,14 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, - "cross_origin_auth": false, + "name": "API Explorer Application", "is_first_party": true, "oidc_conformant": true, + "sso_disabled": false, + "cross_origin_auth": false, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -2956,39 +5451,11 @@ "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", - "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 - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "The Default App", + "custom_login_page_preview": "\n\n\n \n \n Sign In with Auth0\n \n\n\n\n \n\n \n\n \n \n\n ", + "cross_origin_authentication": true, "allowed_clients": [], "callbacks": [], "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, "native_social_login": { "apple": { "enabled": false @@ -2997,18 +5464,6 @@ "enabled": false } }, - "oidc_conformant": false, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso": false, - "sso_disabled": false, "signing_keys": [ { "cert": "[REDACTED]", @@ -3016,7 +5471,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "tSJqoA0wpptageIV7f1D2bq3WgSgaPob", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3026,105 +5481,48 @@ }, "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Test SPA", - "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], + "name": "Org test App", "callbacks": [ "http://localhost:3000" ], - "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { - "expiration_type": "expiring", + "expiration_type": "non-expiring", "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, "token_lifetime": 2592000, "idle_token_lifetime": 1296000, - "infinite_token_lifetime": false, - "infinite_idle_token_lifetime": false, - "rotation_type": "rotating" + "rotation_type": "non-rotating" }, "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "none", - "app_type": "spa", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token" - ], - "web_origins": [ - "http://localhost:3000" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "auth0-deploy-cli-extension", + "cross_origin_authentication": true, "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, "native_social_login": { "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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" + "enabled": false + }, + "facebook": { + "enabled": false + } }, - "sso_disabled": false, + "organization_require_behavior": "post_login_prompt", + "organization_usage": "allow", + "allowed_logout_urls": [ + "http://localhost:3000" + ], "signing_keys": [ { "cert": "[REDACTED]", @@ -3132,7 +5530,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "client_id": "NVZw2D4EQ99E4yIPEj2hE9kZJfyPTz89", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3142,22 +5540,34 @@ }, "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "spa", "grant_types": [ - "client_credentials" + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" ], "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", + "name": "Go test app kushal", "allowed_clients": [], - "callbacks": [], + "allowed_logout_urls": [ + "http://localhost:4002/", + "localhost:4002/logout" + ], + "callbacks": [ + "http://localhost:4002/", + "http://localhost:4002/callback" + ], "cross_origin_auth": false, + "cross_origin_authentication": true, "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", "native_social_login": { "apple": { "enabled": false @@ -3166,6 +5576,7 @@ "enabled": false } }, + "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -3176,7 +5587,7 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, - "oidc_conformant": false, + "organization_require_behavior": "no_prompt", "signing_keys": [ { "cert": "[REDACTED]", @@ -3184,7 +5595,7 @@ "subject": "deprecated" } ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "client_id": "PxFLsPRVvz3wQrRQNI1dgQCESIDjiv8e", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3194,382 +5605,64 @@ }, "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": true, - "callbacks": [], - "is_first_party": true, - "name": "All Applications", - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "owners": [ - "mr|samlp|okta|will.vedder@auth0.com", - "mr|google-oauth2|102002633619863830825", - "mr|samlp|okta|frederik.prijck@auth0.com", - "mr|google-oauth2|109614534713742077035", - "mr|google-oauth2|116771660953104383819" - ], - "custom_login_page": "TEST123\n", - "cross_origin_authentication": true, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Isi93ibGHIGwmdYjsLwTOn7Gu7nwxU3V", - "client_secret": "[REDACTED]", - "custom_login_page_on": true - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "total": 3, - "start": 0, - "limit": 100, - "connections": [ - { - "id": "con_cvOdQDkXpKvaMNSh", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "import_mode": false, - "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "password_history": { - "size": 5, - "enable": false - }, - "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true - }, - "strategy": "auth0", - "name": "boo-baz-db-connection-test", - "is_domain_connection": false, - "realms": [ - "boo-baz-db-connection-test" - ], - "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] - }, - { - "id": "con_SXIEWGYv5QzGSoqq", - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true - }, - "strategy": "google-oauth2", - "name": "google-oauth2", - "is_domain_connection": false, - "realms": [ - "google-oauth2" - ], - "enabled_clients": [ - "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] - }, - { - "id": "con_orWZyMv2k9PgOd3x", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "passwordPolicy": "good", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true - }, - "strategy": "auth0", - "name": "Username-Password-Authentication", - "is_domain_connection": false, - "realms": [ - "Username-Password-Authentication" - ], - "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" - ] - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "total": 3, - "start": 0, - "limit": 100, - "connections": [ - { - "id": "con_cvOdQDkXpKvaMNSh", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "import_mode": false, - "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "password_history": { - "size": 5, - "enable": false - }, - "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true - }, - "strategy": "auth0", - "name": "boo-baz-db-connection-test", - "is_domain_connection": false, - "realms": [ - "boo-baz-db-connection-test" - ], - "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] + "custom_login_page_on": true }, { - "id": "con_SXIEWGYv5QzGSoqq", - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Role test API (Test Application)", + "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" }, - "strategy": "google-oauth2", - "name": "google-oauth2", - "is_domain_connection": false, - "realms": [ - "google-oauth2" + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } ], - "enabled_clients": [ - "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] - }, - { - "id": "con_orWZyMv2k9PgOd3x", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "passwordPolicy": "good", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true + "client_id": "nz0xcpycpcsyEzZ9gBlQkJ47e6GPeXQB", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false }, - "strategy": "auth0", - "name": "Username-Password-Authentication", - "is_domain_connection": false, - "realms": [ - "Username-Password-Authentication" + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" ], - "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" - ] - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/connections/con_SXIEWGYv5QzGSoqq", - "body": { - "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" - ], - "is_domain_connection": false, - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true - } - }, - "status": 200, - "response": { - "id": "con_SXIEWGYv5QzGSoqq", - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true - }, - "strategy": "google-oauth2", - "name": "google-oauth2", - "is_domain_connection": false, - "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" - ], - "realms": [ - "google-oauth2" - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "total": 11, - "start": 0, - "limit": 100, - "clients": [ + "custom_login_page_on": true + }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Deploy CLI", + "name": "DeployCLI-E2E", + "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, - "sso_disabled": false, - "cross_origin_auth": false, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -3579,6 +5672,7 @@ "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, + "sso_disabled": false, "cross_origin_authentication": true, "signing_keys": [ { @@ -3587,7 +5681,7 @@ "subject": "deprecated" } ], - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "client_id": "36TEM2e0l4GPf0LM8aH1lcJEZBp2DzvY", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3603,7 +5697,7 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, "name": "Default App", @@ -3621,6 +5715,7 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -3628,7 +5723,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "client_id": "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3645,23 +5740,12 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "API Explorer Application", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, + "name": "Deploy CLI", "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -3673,6 +5757,7 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -3680,7 +5765,7 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3688,7 +5773,6 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", "app_type": "non_interactive", "grant_types": [ @@ -3697,25 +5781,55 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, + "name": "Auth0-CLI", "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false + "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" + }, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" } + ], + "client_id": "gdpNdEa0sdFOX1VZJ4xtycnNR1G5TlRg", + "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 + }, + { + "tenant": "kushal-dev", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Dev_DAY_APP", + "is_first_party": true, "oidc_conformant": true, + "sso_disabled": false, + "cross_origin_auth": false, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -3725,7 +5839,22 @@ "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, - "sso_disabled": false, + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000/api/auth/callback", + "http://localhost:3000" + ], + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "signing_keys": [ { "cert": "[REDACTED]", @@ -3733,8 +5862,7 @@ "subject": "deprecated" } ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "ep5F5NHBlHlfjE1ijeuHepR3HUrdYpyv", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3751,16 +5879,30 @@ "refresh_token", "client_credentials" ], - "web_origins": [], + "web_origins": [ + "http://localhost:3000" + ], "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", @@ -3779,7 +5921,8 @@ "subject": "deprecated" } ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "allowed_origins": [], + "client_id": "ltna78HqWdPRiEHoLy119Dfs1iRMyR1w", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3787,21 +5930,23 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "app_type": "regular_web", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], + "web_origins": [], "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, + "name": "Terraform Provider", "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, @@ -3822,7 +5967,7 @@ "subject": "deprecated" } ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "client_id": "3ykmF4bLMigp4Zbsznqj9uCPqLB7e95d", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3838,34 +5983,25 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "The Default App", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": false, + "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, "infinite_token_lifetime": true, "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, - "sso": false, "sso_disabled": false, "signing_keys": [ { @@ -3874,7 +6010,7 @@ "subject": "deprecated" } ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "client_id": "ixEERdhSidh32R6y7f1pzavjtho1mQoV", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3882,28 +6018,20 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Test SPA", + "name": "The Default App", "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], - "callbacks": [ - "http://localhost:3000" - ], + "callbacks": [], "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, @@ -3915,16 +6043,17 @@ "enabled": false } }, - "oidc_conformant": true, + "oidc_conformant": false, "refresh_token": { - "expiration_type": "expiring", + "expiration_type": "non-expiring", "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, "token_lifetime": 2592000, "idle_token_lifetime": 1296000, - "infinite_token_lifetime": false, - "infinite_idle_token_lifetime": false, - "rotation_type": "rotating" + "rotation_type": "non-rotating" }, + "sso": false, "sso_disabled": false, "signing_keys": [ { @@ -3933,7 +6062,7 @@ "subject": "deprecated" } ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "client_id": "1v0GKWhDqqo1jgK2agXhuOarWC45wra6", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3942,20 +6071,17 @@ "secret_encoded": false }, "client_aliases": [], - "token_endpoint_auth_method": "none", - "app_type": "spa", + "token_endpoint_auth_method": "client_secret_post", "grant_types": [ "authorization_code", "implicit", - "refresh_token" - ], - "web_origins": [ - "http://localhost:3000" + "refresh_token", + "client_credentials" ], "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, "name": "auth0-deploy-cli-extension", @@ -3990,7 +6116,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "client_id": "4mEZRv7D0zLfbSSWbsibdwaoYIVlRP0M", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4007,15 +6133,20 @@ "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", + "name": "Test SPA", "allowed_clients": [], - "callbacks": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000" + ], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", "native_social_login": { "apple": { "enabled": false @@ -4024,17 +6155,17 @@ "enabled": false } }, + "oidc_conformant": true, "refresh_token": { - "expiration_type": "non-expiring", + "expiration_type": "expiring", "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 31557600, - "idle_token_lifetime": 2592000, - "rotation_type": "non-rotating" + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "infinite_token_lifetime": false, + "infinite_idle_token_lifetime": false, + "rotation_type": "rotating" }, "sso_disabled": false, - "oidc_conformant": false, "signing_keys": [ { "cert": "[REDACTED]", @@ -4042,7 +6173,7 @@ "subject": "deprecated" } ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "client_id": "u6vM7mQRWqavasw69Fye6E5mMduHlfOX", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4051,15 +6182,20 @@ "secret_encoded": false }, "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "token_endpoint_auth_method": "none", + "app_type": "spa", "grant_types": [ - "client_credentials" + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" ], "custom_login_page_on": true }, { - "tenant": "auth0-deploy-cli-e2e", + "tenant": "kushal-dev", "global": true, "callbacks": [], "is_first_party": true, @@ -4074,11 +6210,7 @@ "rotation_type": "non-rotating" }, "owners": [ - "mr|samlp|okta|will.vedder@auth0.com", - "mr|google-oauth2|102002633619863830825", - "mr|samlp|okta|frederik.prijck@auth0.com", - "mr|google-oauth2|109614534713742077035", - "mr|google-oauth2|116771660953104383819" + "mr|google-oauth2|109614534713742077035" ], "custom_login_page": "TEST123\n", "cross_origin_authentication": true, @@ -4089,7 +6221,7 @@ "subject": "deprecated" } ], - "client_id": "Isi93ibGHIGwmdYjsLwTOn7Gu7nwxU3V", + "client_id": "2Mlaa9rTwG8PJkTuRLXoeNOy8MibpSPn", "client_secret": "[REDACTED]", "custom_login_page_on": true } @@ -4101,18 +6233,18 @@ { "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "total": 3, + "total": 5, "start": 0, "limit": 100, "client_grants": [ { - "id": "cgr_P3XzavTQSyFaV8mr", - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", + "id": "cgr_PBDulb2RDmVsaV8K", + "client_id": "gdpNdEa0sdFOX1VZJ4xtycnNR1G5TlRg", + "audience": "https://kushal-dev.eu.auth0.com/api/v2/", "scope": [ "read:client_grants", "create:client_grants", @@ -4227,6 +6359,11 @@ "read:entitlements", "read:attack_protection", "update:attack_protection", + "read:organizations_summary", + "create:authentication_methods", + "read:authentication_methods", + "update:authentication_methods", + "delete:authentication_methods", "read:organizations", "update:organizations", "create:organizations", @@ -4243,13 +6380,62 @@ "delete:organization_member_roles", "create:organization_invitations", "read:organization_invitations", - "delete:organization_invitations" + "delete:organization_invitations", + "read:scim_config", + "create:scim_config", + "update:scim_config", + "delete:scim_config", + "create:scim_token", + "read:scim_token", + "delete:scim_token", + "delete:phone_providers", + "create:phone_providers", + "read:phone_providers", + "update:phone_providers", + "delete:phone_templates", + "create:phone_templates", + "read:phone_templates", + "update:phone_templates", + "create:encryption_keys", + "read:encryption_keys", + "update:encryption_keys", + "delete:encryption_keys", + "read:sessions", + "delete:sessions", + "read:refresh_tokens", + "delete:refresh_tokens", + "create:self_service_profiles", + "read:self_service_profiles", + "update:self_service_profiles", + "delete:self_service_profiles", + "create:sso_access_tickets", + "read:forms", + "update:forms", + "delete:forms", + "create:forms", + "read:flows", + "update:flows", + "delete:flows", + "create:flows", + "read:flows_vault", + "read:flows_vault_connections", + "update:flows_vault_connections", + "delete:flows_vault_connections", + "create:flows_vault_connections", + "read:flows_executions", + "delete:flows_executions", + "read:connections_options", + "update:connections_options", + "read:client_credentials", + "create:client_credentials", + "update:client_credentials", + "delete:client_credentials" ] }, { - "id": "cgr_SDgpXDXvWBtO3KEi", - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", + "id": "cgr_lQdgqLzk48XJMaLd", + "client_id": "tSJqoA0wpptageIV7f1D2bq3WgSgaPob", + "audience": "https://kushal-dev.eu.auth0.com/api/v2/", "scope": [ "read:client_grants", "create:client_grants", @@ -4348,10 +6534,178 @@ "update:prompts", "read:branding", "update:branding", - "delete: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_summary", + "create:authentication_methods", + "read:authentication_methods", + "update:authentication_methods", + "delete:authentication_methods", + "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:scim_config", + "create:scim_config", + "update:scim_config", + "delete:scim_config", + "create:scim_token", + "read:scim_token", + "delete:scim_token", + "delete:phone_providers", + "create:phone_providers", + "read:phone_providers", + "update:phone_providers", + "delete:phone_templates", + "create:phone_templates", + "read:phone_templates", + "update:phone_templates", + "create:encryption_keys", + "read:encryption_keys", + "update:encryption_keys", + "delete:encryption_keys", + "read:sessions", + "delete:sessions", + "read:refresh_tokens", + "delete:refresh_tokens", + "create:self_service_profiles", + "read:self_service_profiles", + "update:self_service_profiles", + "delete:self_service_profiles", + "create:sso_access_tickets", + "read:forms", + "update:forms", + "delete:forms", + "create:forms", + "read:flows", + "update:flows", + "delete:flows", + "create:flows", + "read:flows_vault", + "read:flows_vault_connections", + "update:flows_vault_connections", + "delete:flows_vault_connections", + "create:flows_vault_connections", + "read:flows_executions", + "delete:flows_executions", + "read:connections_options", + "update:connections_options", + "read:client_credentials", + "create:client_credentials", + "update:client_credentials", + "delete:client_credentials" + ] + }, + { + "id": "cgr_lfkNuD4NKfoMoL30", + "client_id": "36TEM2e0l4GPf0LM8aH1lcJEZBp2DzvY", + "audience": "https://kushal-dev.eu.auth0.com/api/v2/", + "scope": [ + "read:client_grants", + "create:client_grants", + "update:client_grants", + "read:users", + "update:users", + "create:users", + "read:users_app_metadata", + "update:users_app_metadata", + "create:users_app_metadata", + "read:user_custom_blocks", + "create:user_custom_blocks", + "create:user_tickets", + "read:clients", + "update:clients", + "create:clients", + "read:client_keys", + "update:client_keys", + "create:client_keys", + "read:connections", + "update:connections", + "create:connections", + "read:resource_servers", + "update:resource_servers", + "create:resource_servers", + "read:device_credentials", + "update:device_credentials", + "create:device_credentials", + "read:rules", + "update:rules", + "create:rules", + "read:rules_configs", + "update:rules_configs", + "read:hooks", + "update:hooks", + "create:hooks", + "read:actions", + "update:actions", + "create:actions", + "read:email_provider", + "update: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", + "read:anomaly_blocks", + "update:triggers", + "read:triggers", + "read:grants", + "read:guardian_factors", + "update:guardian_factors", + "read:guardian_enrollments", + "create:guardian_enrollment_tickets", + "read:user_idp_tokens", + "create:passwords_checking_job", + "read: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", + "update:roles", + "read:prompts", + "update:prompts", + "read:branding", + "update:branding", "read:log_streams", "create:log_streams", - "delete:log_streams", "update:log_streams", "create:signing_keys", "read:signing_keys", @@ -4360,33 +6714,65 @@ "update:limits", "create:role_members", "read:role_members", - "delete:role_members", "read:entitlements", "read:attack_protection", "update:attack_protection", + "read:organizations_summary", + "create:authentication_methods", + "read:authentication_methods", + "update:authentication_methods", "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:scim_config", + "create:scim_config", + "update:scim_config", + "create:scim_token", + "read:scim_token", + "create:phone_providers", + "read:phone_providers", + "update:phone_providers", + "create:phone_templates", + "read:phone_templates", + "update:phone_templates", + "create:encryption_keys", + "read:encryption_keys", + "update:encryption_keys", + "read:sessions", + "read:refresh_tokens", + "create:self_service_profiles", + "read:self_service_profiles", + "update:self_service_profiles", + "create:sso_access_tickets", + "read:forms", + "update:forms", + "create:forms", + "read:flows", + "update:flows", + "create:flows", + "read:flows_vault", + "update:flows_vault", + "create:flows_vault", + "read:flows_executions", + "read:client_credentials", + "create:client_credentials", + "update:client_credentials", + "delete:flows_vault" ] }, { - "id": "cgr_t3j1isctGZmOVylt", - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", + "id": "cgr_nJtazvkmfkXNtMM8", + "client_id": "Ku5wNRXVrQbnITFA9yCr9b9SlCukFN8L", + "audience": "https://kushal-dev.eu.auth0.com/api/v2/", "scope": [ "read:client_grants", "create:client_grants", @@ -4542,11 +6928,43 @@ "read:encryption_keys", "update:encryption_keys", "delete:encryption_keys", + "read:sessions", + "delete:sessions", + "read:refresh_tokens", + "delete:refresh_tokens", + "create:self_service_profiles", + "read:self_service_profiles", + "update:self_service_profiles", + "delete:self_service_profiles", + "create:sso_access_tickets", + "read:forms", + "update:forms", + "delete:forms", + "create:forms", + "read:flows", + "update:flows", + "delete:flows", + "create:flows", + "read:flows_vault", + "read:flows_vault_connections", + "update:flows_vault_connections", + "delete:flows_vault_connections", + "create:flows_vault_connections", + "read:flows_executions", + "delete:flows_executions", + "read:connections_options", + "update:connections_options", "read:client_credentials", "create:client_credentials", "update:client_credentials", "delete:client_credentials" ] + }, + { + "id": "cgr_qIYNlHVE26JcxZPs", + "client_id": "nz0xcpycpcsyEzZ9gBlQkJ47e6GPeXQB", + "audience": "role-test", + "scope": [] } ] }, @@ -4556,80 +6974,20 @@ { "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { "roles": [ { - "id": "rol_hRGDQmEBYbZsC8sZ", - "name": "Admin", - "description": "Can read and write things" - }, - { - "id": "rol_oT9S2f9KYqFyYR2j", - "name": "Reader", - "description": "Can only read things" - }, - { - "id": "rol_ZNeuVHhKZTaZaGwq", - "name": "read_only", - "description": "Read Only" - }, - { - "id": "rol_1DwrDRZ26bdvfKxL", - "name": "read_osnly", - "description": "Readz Only" + "id": "rol_gq08I4FPXNktjm65", + "name": "dev-int", + "description": "internal developer " } ], "start": 0, "limit": 100, - "total": 4 - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/roles/rol_hRGDQmEBYbZsC8sZ/permissions?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "permissions": [], - "start": 0, - "limit": 100, - "total": 0 - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/roles/rol_oT9S2f9KYqFyYR2j/permissions?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "permissions": [], - "start": 0, - "limit": 100, - "total": 0 - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/roles/rol_ZNeuVHhKZTaZaGwq/permissions?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "permissions": [], - "start": 0, - "limit": 100, - "total": 0 + "total": 1 }, "rawHeaders": [], "responseIsBinary": false @@ -4637,14 +6995,75 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_1DwrDRZ26bdvfKxL/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles/rol_gq08I4FPXNktjm65/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "permissions": [], + "permissions": [ + { + "permission_name": "read:api", + "description": "api read permission", + "resource_server_name": "Role test API", + "resource_server_identifier": "role-test" + }, + { + "permission_name": "read:comment ", + "description": "comment read permission", + "resource_server_name": "Role test API", + "resource_server_identifier": "role-test" + }, + { + "permission_name": "read:doc", + "description": "doc read permission", + "resource_server_name": "Role test API", + "resource_server_identifier": "role-test" + }, + { + "permission_name": "read:post", + "description": "post read permission", + "resource_server_name": "Role test API", + "resource_server_identifier": "role-test" + }, + { + "permission_name": "read:user", + "description": "user read permission", + "resource_server_name": "Role test API", + "resource_server_identifier": "role-test" + }, + { + "permission_name": "update:api", + "description": "api update permission", + "resource_server_name": "Role test API", + "resource_server_identifier": "role-test" + }, + { + "permission_name": "update:comment", + "description": "comment update permission", + "resource_server_name": "Role test API", + "resource_server_identifier": "role-test" + }, + { + "permission_name": "update:doc", + "description": "doc update permission", + "resource_server_name": "Role test API", + "resource_server_identifier": "role-test" + }, + { + "permission_name": "update:post", + "description": "post update permission", + "resource_server_name": "Role test API", + "resource_server_identifier": "role-test" + }, + { + "permission_name": "update:user", + "description": "user update permission", + "resource_server_name": "Role test API", + "resource_server_identifier": "role-test" + } + ], "start": 0, "limit": 100, - "total": 0 + "total": 10 }, "rawHeaders": [], "responseIsBinary": false @@ -4658,54 +7077,119 @@ "response": { "actions": [ { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", - "name": "My Custom Action", + "id": "e105b5a8-cdea-4292-b588-383cb12bdbcc", + "name": "k-flow", + "supported_triggers": [ + { + "id": "post-login", + "version": "v3" + } + ], + "created_at": "2024-08-11T18:43:54.559933482Z", + "updated_at": "2024-09-26T07:32:36.751347258Z", + "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(event.secrets)\n // if (event.user.nickname != \"kushal.shit\"){\n // api.access.deny(\"Unknown user!!\")\n // }\n};\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", + "dependencies": [], + "runtime": "node18-actions", + "status": "built", + "secrets": [ + { + "name": "my_secret_url", + "updated_at": "2024-09-18T09:55:00.423293831Z" + }, + { + "name": "sec_1", + "updated_at": "2024-09-18T09:55:00.423293831Z" + } + ], + "current_version": { + "id": "44dd594d-c57d-490f-b22b-5fb499b81afd", + "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(event.secrets)\n // if (event.user.nickname != \"kushal.shit\"){\n // api.access.deny(\"Unknown user!!\")\n // }\n};\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", + "runtime": "node18-actions", + "status": "BUILT", + "number": 51, + "build_time": "2024-09-26T07:32:46.544296361Z", + "created_at": "2024-09-26T07:32:46.472453906Z", + "updated_at": "2024-09-26T07:32:46.544910189Z" + }, + "deployed_version": { + "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(event.secrets)\n // if (event.user.nickname != \"kushal.shit\"){\n // api.access.deny(\"Unknown user!!\")\n // }\n};\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", + "dependencies": [], + "id": "44dd594d-c57d-490f-b22b-5fb499b81afd", + "deployed": true, + "number": 51, + "built_at": "2024-09-26T07:32:46.544296361Z", + "secrets": [ + { + "name": "my_secret_url", + "updated_at": "2024-09-18T09:55:00.423293831Z" + }, + { + "name": "sec_1", + "updated_at": "2024-09-18T09:55:00.423293831Z" + } + ], + "status": "built", + "created_at": "2024-09-26T07:32:46.472453906Z", + "updated_at": "2024-09-26T07:32:46.544910189Z", + "runtime": "node18-actions", + "supported_triggers": [ + { + "id": "post-login", + "version": "v3" + } + ] + }, + "all_changes_deployed": true + }, + { + "id": "4301ffb3-fc3f-40cb-9b0b-2bb23f090327", + "name": "post-login-onbording", "supported_triggers": [ { "id": "post-login", - "version": "v2" + "version": "v3" } ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-09T13:36:40.436910946Z", - "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", + "created_at": "2024-08-12T11:09:42.970451051Z", + "updated_at": "2024-09-26T07:32:37.762276179Z", + "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 const FORM_ID = 'ap_vHcEKGZJ5oaTYTePwe2W1T';\n\n api.prompt.render(FORM_ID);\n};\nexports.onContinuePostLogin = async (event, api) => {}\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", "dependencies": [], - "runtime": "node16", + "runtime": "node18-actions", "status": "built", "secrets": [], "current_version": { - "id": "3d2b275c-8b1f-46ac-baf0-d0dec2cb1ce8", - "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", - "runtime": "node16", + "id": "7a9f26f0-d5d7-45e5-b9a0-eaa9a6430299", + "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 const FORM_ID = 'ap_vHcEKGZJ5oaTYTePwe2W1T';\n\n api.prompt.render(FORM_ID);\n};\nexports.onContinuePostLogin = async (event, api) => {}\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", + "runtime": "node18-actions", "status": "BUILT", - "number": 2, - "build_time": "2024-10-09T13:36:41.550114510Z", - "created_at": "2024-10-09T13:36:41.424992733Z", - "updated_at": "2024-10-09T13:36:41.551127670Z" + "number": 46, + "build_time": "2024-09-26T07:32:38.298040484Z", + "created_at": "2024-09-26T07:32:38.223235246Z", + "updated_at": "2024-09-26T07:32:38.299546854Z" }, "deployed_version": { - "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", + "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 const FORM_ID = 'ap_vHcEKGZJ5oaTYTePwe2W1T';\n\n api.prompt.render(FORM_ID);\n};\nexports.onContinuePostLogin = async (event, api) => {}\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", "dependencies": [], - "id": "3d2b275c-8b1f-46ac-baf0-d0dec2cb1ce8", + "id": "7a9f26f0-d5d7-45e5-b9a0-eaa9a6430299", "deployed": true, - "number": 2, - "built_at": "2024-10-09T13:36:41.550114510Z", + "number": 46, + "built_at": "2024-09-26T07:32:38.298040484Z", "secrets": [], "status": "built", - "created_at": "2024-10-09T13:36:41.424992733Z", - "updated_at": "2024-10-09T13:36:41.551127670Z", - "runtime": "node16", + "created_at": "2024-09-26T07:32:38.223235246Z", + "updated_at": "2024-09-26T07:32:38.299546854Z", + "runtime": "node18-actions", "supported_triggers": [ { "id": "post-login", - "version": "v2" + "version": "v3" } ] }, "all_changes_deployed": true } ], - "total": 1, + "total": 2, "per_page": 100 }, "rawHeaders": [], @@ -4720,54 +7204,119 @@ "response": { "actions": [ { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", - "name": "My Custom Action", + "id": "e105b5a8-cdea-4292-b588-383cb12bdbcc", + "name": "k-flow", + "supported_triggers": [ + { + "id": "post-login", + "version": "v3" + } + ], + "created_at": "2024-08-11T18:43:54.559933482Z", + "updated_at": "2024-09-26T07:32:36.751347258Z", + "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(event.secrets)\n // if (event.user.nickname != \"kushal.shit\"){\n // api.access.deny(\"Unknown user!!\")\n // }\n};\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", + "dependencies": [], + "runtime": "node18-actions", + "status": "built", + "secrets": [ + { + "name": "my_secret_url", + "updated_at": "2024-09-18T09:55:00.423293831Z" + }, + { + "name": "sec_1", + "updated_at": "2024-09-18T09:55:00.423293831Z" + } + ], + "current_version": { + "id": "44dd594d-c57d-490f-b22b-5fb499b81afd", + "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(event.secrets)\n // if (event.user.nickname != \"kushal.shit\"){\n // api.access.deny(\"Unknown user!!\")\n // }\n};\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", + "runtime": "node18-actions", + "status": "BUILT", + "number": 51, + "build_time": "2024-09-26T07:32:46.544296361Z", + "created_at": "2024-09-26T07:32:46.472453906Z", + "updated_at": "2024-09-26T07:32:46.544910189Z" + }, + "deployed_version": { + "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(event.secrets)\n // if (event.user.nickname != \"kushal.shit\"){\n // api.access.deny(\"Unknown user!!\")\n // }\n};\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", + "dependencies": [], + "id": "44dd594d-c57d-490f-b22b-5fb499b81afd", + "deployed": true, + "number": 51, + "built_at": "2024-09-26T07:32:46.544296361Z", + "secrets": [ + { + "name": "my_secret_url", + "updated_at": "2024-09-18T09:55:00.423293831Z" + }, + { + "name": "sec_1", + "updated_at": "2024-09-18T09:55:00.423293831Z" + } + ], + "status": "built", + "created_at": "2024-09-26T07:32:46.472453906Z", + "updated_at": "2024-09-26T07:32:46.544910189Z", + "runtime": "node18-actions", + "supported_triggers": [ + { + "id": "post-login", + "version": "v3" + } + ] + }, + "all_changes_deployed": true + }, + { + "id": "4301ffb3-fc3f-40cb-9b0b-2bb23f090327", + "name": "post-login-onbording", "supported_triggers": [ { "id": "post-login", - "version": "v2" + "version": "v3" } ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-09T13:36:40.436910946Z", - "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", + "created_at": "2024-08-12T11:09:42.970451051Z", + "updated_at": "2024-09-26T07:32:37.762276179Z", + "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 const FORM_ID = 'ap_vHcEKGZJ5oaTYTePwe2W1T';\n\n api.prompt.render(FORM_ID);\n};\nexports.onContinuePostLogin = async (event, api) => {}\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", "dependencies": [], - "runtime": "node16", + "runtime": "node18-actions", "status": "built", "secrets": [], "current_version": { - "id": "3d2b275c-8b1f-46ac-baf0-d0dec2cb1ce8", - "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", - "runtime": "node16", + "id": "7a9f26f0-d5d7-45e5-b9a0-eaa9a6430299", + "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 const FORM_ID = 'ap_vHcEKGZJ5oaTYTePwe2W1T';\n\n api.prompt.render(FORM_ID);\n};\nexports.onContinuePostLogin = async (event, api) => {}\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", + "runtime": "node18-actions", "status": "BUILT", - "number": 2, - "build_time": "2024-10-09T13:36:41.550114510Z", - "created_at": "2024-10-09T13:36:41.424992733Z", - "updated_at": "2024-10-09T13:36:41.551127670Z" + "number": 46, + "build_time": "2024-09-26T07:32:38.298040484Z", + "created_at": "2024-09-26T07:32:38.223235246Z", + "updated_at": "2024-09-26T07:32:38.299546854Z" }, "deployed_version": { - "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", + "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 const FORM_ID = 'ap_vHcEKGZJ5oaTYTePwe2W1T';\n\n api.prompt.render(FORM_ID);\n};\nexports.onContinuePostLogin = async (event, api) => {}\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", "dependencies": [], - "id": "3d2b275c-8b1f-46ac-baf0-d0dec2cb1ce8", + "id": "7a9f26f0-d5d7-45e5-b9a0-eaa9a6430299", "deployed": true, - "number": 2, - "built_at": "2024-10-09T13:36:41.550114510Z", + "number": 46, + "built_at": "2024-09-26T07:32:38.298040484Z", "secrets": [], "status": "built", - "created_at": "2024-10-09T13:36:41.424992733Z", - "updated_at": "2024-10-09T13:36:41.551127670Z", - "runtime": "node16", + "created_at": "2024-09-26T07:32:38.223235246Z", + "updated_at": "2024-09-26T07:32:38.299546854Z", + "runtime": "node18-actions", "supported_triggers": [ { "id": "post-login", - "version": "v2" + "version": "v3" } ] }, "all_changes_deployed": true } ], - "total": 1, + "total": 2, "per_page": 100 }, "rawHeaders": [], @@ -4776,31 +7325,20 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true", + "path": "/api/v2/organizations?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { "organizations": [ { - "id": "org_knGmCqfHxLD0V9YB", - "name": "org1", - "display_name": "Organization", - "branding": { - "colors": { - "page_background": "#fff5f5", - "primary": "#57ddff" - } - } - }, - { - "id": "org_haOYEECGVpZwU9Tc", - "name": "org2", - "display_name": "Organization2" + "id": "org_6GeloXhZx6QpiCMz", + "name": "kushal-dev-org", + "display_name": "kushal-dev Organization" } ], "start": 0, - "limit": 50, - "total": 2 + "limit": 100, + "total": 1 }, "rawHeaders": [], "responseIsBinary": false @@ -4808,65 +7346,37 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true&take=50", + "path": "/api/v2/organizations/org_6GeloXhZx6QpiCMz/enabled_connections", "body": "", "status": 200, - "response": { - "organizations": [ - { - "id": "org_knGmCqfHxLD0V9YB", - "name": "org1", - "display_name": "Organization", - "branding": { - "colors": { - "page_background": "#fff5f5", - "primary": "#57ddff" - } - } - }, - { - "id": "org_haOYEECGVpZwU9Tc", - "name": "org2", - "display_name": "Organization2" + "response": [ + { + "connection_id": "con_0wl0dLTgEBQTMRrK", + "assign_membership_on_login": true, + "is_signup_enabled": true, + "show_as_button": true, + "connection": { + "name": "Username-Password-Authentication", + "strategy": "auth0" } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/organizations/org_knGmCqfHxLD0V9YB/enabled_connections", - "body": "", - "status": 200, - "response": [], - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/organizations/org_haOYEECGVpZwU9Tc/enabled_connections", - "body": "", - "status": 200, - "response": [], + } + ], "rawHeaders": [], "responseIsBinary": false }, { "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "total": 3, + "total": 5, "start": 0, "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_1phMfGakxwdqWmih", "options": { "mfa": { "active": true, @@ -4922,12 +7432,71 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" + "4mEZRv7D0zLfbSSWbsibdwaoYIVlRP0M", + "ltna78HqWdPRiEHoLy119Dfs1iRMyR1w" ] }, { - "id": "con_SXIEWGYv5QzGSoqq", + "id": "con_hvEjcU2lcs9383To", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true + }, + "import_mode": false, + "configuration": {}, + "customScripts": { + "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n //\n // Note: Passing no arguments or a falsey first argument to\n // `WrongUsernameOrPasswordError` will result in the error being logged as\n // an `fu` event (invalid username/email) with an empty string for a user_id.\n // Providing a truthy first argument will result in the error being logged\n // as an `fp` event (the user exists, but the password is invalid) with a\n // user_id value of \"auth0|\". See the `Log Event Type Codes`\n // documentation for more information about these event types:\n // https://auth0.com/docs/deploy-monitor/logs/log-event-type-codes\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n\n const msg = 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database/';\n\n const testURL = \"https://kushal-dev.eu.auth0.com/api\";\n console.log(\"testURL: \", testURL);\n\n return callback(new Error(msg));\n}\n", + "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg = 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg = 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", + "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg = 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" + }, + "disable_signup": false, + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "password_history": { + "size": 5, + "enable": false + }, + "strategy_version": 2, + "requires_username": true, + "password_dictionary": { + "enable": false, + "dictionary": [] + }, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true, + "password_no_personal_info": { + "enable": false + }, + "password_complexity_options": { + "min_length": 8 + }, + "enabledDatabaseCustomization": true + }, + "strategy": "auth0", + "name": "DB-connection-Two", + "is_domain_connection": false, + "realms": [ + "DB-connection-Two" + ], + "enabled_clients": [] + }, + { + "id": "con_mqMWaGAUUOvPX3Ej", "options": { "email": true, "scope": [ @@ -4943,12 +7512,171 @@ "google-oauth2" ], "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" + "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX", + "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48" ] }, { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_iYlZ1DESGzYFLzgc", + "options": { + "type": "back_channel", + "scope": "openid profile email", + "domain": "domain.okta.com", + "issuer": "https://domain.okta.com", + "jwks_uri": "https://domain.okta.com/oauth2/v1/keys", + "client_id": "qwqwqwqw", + "attribute_map": { + "mapping_mode": "basic_profile" + }, + "client_secret": "[REDACTED]", + "oidc_metadata": { + "issuer": "https://domain.okta.com", + "jwks_uri": "https://domain.okta.com/oauth2/v1/keys", + "token_endpoint": "https://domain.okta.com/oauth2/v1/token", + "claims_supported": [ + "iss", + "ver", + "sub", + "aud", + "iat", + "exp", + "jti", + "auth_time", + "amr", + "idp", + "nonce", + "name", + "nickname", + "preferred_username", + "given_name", + "middle_name", + "family_name", + "email", + "email_verified", + "profile", + "zoneinfo", + "locale", + "address", + "phone_number", + "picture", + "website", + "gender", + "birthdate", + "updated_at", + "at_hash", + "c_hash" + ], + "scopes_supported": [ + "openid", + "email", + "profile", + "address", + "phone", + "offline_access", + "groups" + ], + "userinfo_endpoint": "https://domain.okta.com/oauth2/v1/userinfo", + "revocation_endpoint": "https://domain.okta.com/oauth2/v1/revoke", + "end_session_endpoint": "https://domain.okta.com/oauth2/v1/logout", + "grant_types_supported": [ + "authorization_code", + "implicit", + "refresh_token", + "password", + "urn:ietf:params:oauth:grant-type:device_code" + ], + "registration_endpoint": "https://domain.okta.com/oauth2/v1/clients", + "authorization_endpoint": "https://domain.okta.com/oauth2/v1/authorize", + "introspection_endpoint": "https://domain.okta.com/oauth2/v1/introspect", + "subject_types_supported": [ + "public" + ], + "response_modes_supported": [ + "query", + "fragment", + "form_post", + "okta_post_message" + ], + "response_types_supported": [ + "code", + "id_token", + "code id_token", + "code token", + "id_token token", + "code id_token token" + ], + "claims_parameter_supported": false, + "request_parameter_supported": true, + "device_authorization_endpoint": "https://domain.okta.com/oauth2/v1/device/authorize", + "request_uri_parameter_supported": false, + "code_challenge_methods_supported": [ + "S256" + ], + "require_request_uri_registration": false, + "dpop_signing_alg_values_supported": [ + "RS256", + "RS384", + "RS512", + "ES256", + "ES384", + "ES512" + ], + "id_token_signing_alg_values_supported": [ + "RS256" + ], + "token_endpoint_auth_methods_supported": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ], + "revocation_endpoint_auth_methods_supported": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ], + "request_object_signing_alg_values_supported": [ + "HS256", + "HS384", + "HS512", + "RS256", + "RS384", + "RS512", + "ES256", + "ES384", + "ES512" + ], + "introspection_endpoint_auth_methods_supported": [ + "client_secret_basic", + "client_secret_post", + "client_secret_jwt", + "private_key_jwt", + "none" + ] + }, + "schema_version": "oidc-V4", + "token_endpoint": "https://domain.okta.com/oauth2/v1/token", + "userinfo_endpoint": "https://domain.okta.com/oauth2/v1/userinfo", + "connection_settings": { + "pkce": "auto" + }, + "authorization_endpoint": "https://domain.okta.com/oauth2/v1/authorize" + }, + "strategy": "okta", + "name": "test-scim-con", + "is_domain_connection": false, + "show_as_button": false, + "display_name": "test-scim-con", + "realms": [ + "test-scim-con" + ], + "enabled_clients": [] + }, + { + "id": "con_0wl0dLTgEBQTMRrK", "options": { "mfa": { "active": true, @@ -4978,8 +7706,8 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + "sVMh2iWlCw44yRUt88rEO5cnDA6pvm48", + "AF2fEsiqxQ0uGNdrs8J26ibOnmXs3jEX" ] } ] @@ -5004,9 +7732,6 @@ }, "status": 200, "response": { - "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" - ], "change_password": { "enabled": true, "html": "Change Password\n" @@ -5024,46 +7749,37 @@ "allow_legacy_delegation_grant_types": true, "allow_legacy_ro_grant_types": true, "cannot_change_enforce_client_authentication_on_passwordless_start": true, - "change_pwd_flow_v1": false, "disable_impersonation": true, - "enable_apis_section": false, - "enable_client_connections": false, - "enable_custom_domain_in_emails": false, - "enable_dynamic_client_registration": false, - "enable_legacy_logs_search_v2": false, - "enable_public_signup_user_exists_error": true, + "enable_dynamic_client_registration": true, "enable_sso": true, "enforce_client_authentication_on_passwordless_start": true, "new_universal_login_experience_enabled": true, "universal_login": true, - "use_scope_descriptions_for_consent": false, "revoke_refresh_token_grant": false, - "disable_clickjack_protection_headers": false, - "enable_pipeline2": false + "dashboard_new_onboarding": false, + "mfa_show_factor_list_on_enrollment": false, + "disable_clickjack_protection_headers": false }, - "friendly_name": "This tenant name should be preserved", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" }, - "idle_session_lifetime": 1, - "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", - "sandbox_version": "12", - "session_lifetime": 3.0166666666666666, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", + "picture_url": "https://cdn.auth0.com/manhattan/versions/1.3935.0/assets/badge.png", + "sandbox_version": "18", + "oidc_logout": { + "rp_logout_end_session_endpoint_discovery": true + }, "universal_login": { "colors": { - "primary": "#F8F8F2", - "page_background": "#222221" + "page_background": "#000000", + "primary": "#5ce4ff" }, + "is_custom_theme_set": true, + "is_custom_template_set": true, "identifier_first": true - }, - "session_cookie": { - "mode": "non-persistent" } }, "rawHeaders": [], "responseIsBinary": false } -] \ No newline at end of file +] diff --git a/test/e2e/recordings/should-deploy-yaml-config-with-keyword-replacements.json b/test/e2e/recordings/should-deploy-yaml-config-with-keyword-replacements.json index c9dad85a8..c5756a2f8 100644 --- a/test/e2e/recordings/should-deploy-yaml-config-with-keyword-replacements.json +++ b/test/e2e/recordings/should-deploy-yaml-config-with-keyword-replacements.json @@ -11,9 +11,6 @@ }, "status": 200, "response": { - "allowed_logout_urls": [ - "https://mycompany.org/logoutCallback" - ], "change_password": { "enabled": true, "html": "Change Password\n" @@ -31,42 +28,35 @@ "allow_legacy_delegation_grant_types": true, "allow_legacy_ro_grant_types": true, "cannot_change_enforce_client_authentication_on_passwordless_start": true, - "change_pwd_flow_v1": false, "disable_impersonation": true, - "enable_apis_section": false, - "enable_client_connections": false, - "enable_custom_domain_in_emails": false, - "enable_dynamic_client_registration": false, - "enable_legacy_logs_search_v2": false, - "enable_public_signup_user_exists_error": true, + "enable_dynamic_client_registration": true, "enable_sso": true, "enforce_client_authentication_on_passwordless_start": true, "new_universal_login_experience_enabled": true, "universal_login": true, - "use_scope_descriptions_for_consent": false, "revoke_refresh_token_grant": false, - "disable_clickjack_protection_headers": false, - "enable_pipeline2": false + "dashboard_new_onboarding": false, + "mfa_show_factor_list_on_enrollment": false, + "disable_clickjack_protection_headers": false }, "friendly_name": "Tenant friendly name", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" }, - "idle_session_lifetime": 1, - "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", - "sandbox_version": "12", - "session_lifetime": 3.0166666666666666, - "support_email": "support@mycompany.org", - "support_url": "https://mycompany.org/support", + "picture_url": "https://cdn.auth0.com/manhattan/versions/1.3935.0/assets/badge.png", + "sandbox_version": "18", + "oidc_logout": { + "rp_logout_end_session_endpoint_discovery": true + }, "universal_login": { "colors": { - "primary": "#F8F8F2", - "page_background": "#222221" - } - }, - "session_cookie": { - "mode": "non-persistent" + "page_background": "#000000", + "primary": "#5ce4ff" + }, + "is_custom_theme_set": true, + "is_custom_template_set": true, + "identifier_first": true } }, "rawHeaders": [], @@ -85,9 +75,6 @@ }, "status": 200, "response": { - "allowed_logout_urls": [ - "https://mycompany.org/logoutCallback" - ], "change_password": { "enabled": true, "html": "Change Password\n" @@ -106,42 +93,35 @@ "allow_legacy_delegation_grant_types": true, "allow_legacy_ro_grant_types": true, "cannot_change_enforce_client_authentication_on_passwordless_start": true, - "change_pwd_flow_v1": false, "disable_impersonation": true, - "enable_apis_section": false, - "enable_client_connections": false, - "enable_custom_domain_in_emails": false, - "enable_dynamic_client_registration": false, - "enable_legacy_logs_search_v2": false, - "enable_public_signup_user_exists_error": true, + "enable_dynamic_client_registration": true, "enable_sso": true, "enforce_client_authentication_on_passwordless_start": true, "new_universal_login_experience_enabled": true, "universal_login": true, - "use_scope_descriptions_for_consent": false, "revoke_refresh_token_grant": false, - "disable_clickjack_protection_headers": false, - "enable_pipeline2": false + "dashboard_new_onboarding": false, + "mfa_show_factor_list_on_enrollment": false, + "disable_clickjack_protection_headers": false }, "friendly_name": "This is the Travel0 Tenant", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" }, - "idle_session_lifetime": 1, - "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", - "sandbox_version": "12", - "session_lifetime": 3.0166666666666666, - "support_email": "support@mycompany.org", - "support_url": "https://mycompany.org/support", + "picture_url": "https://cdn.auth0.com/manhattan/versions/1.3935.0/assets/badge.png", + "sandbox_version": "18", + "oidc_logout": { + "rp_logout_end_session_endpoint_discovery": true + }, "universal_login": { "colors": { - "primary": "#F8F8F2", - "page_background": "#222221" - } - }, - "session_cookie": { - "mode": "non-persistent" + "page_background": "#000000", + "primary": "#5ce4ff" + }, + "is_custom_theme_set": true, + "is_custom_template_set": true, + "identifier_first": true } }, "rawHeaders": [], @@ -154,9 +134,6 @@ "body": "", "status": 200, "response": { - "allowed_logout_urls": [ - "https://mycompany.org/logoutCallback" - ], "change_password": { "enabled": true, "html": "Change Password\n" @@ -174,46 +151,35 @@ "allow_changing_enable_sso": false, "allow_legacy_delegation_grant_types": true, "allow_legacy_ro_grant_types": true, - "change_pwd_flow_v1": false, "disable_impersonation": true, - "enable_apis_section": false, - "enable_client_connections": false, - "enable_custom_domain_in_emails": false, - "enable_dynamic_client_registration": false, - "enable_legacy_logs_search_v2": false, - "enable_public_signup_user_exists_error": true, + "enable_dynamic_client_registration": true, "enable_sso": true, "new_universal_login_experience_enabled": true, "universal_login": true, - "use_scope_descriptions_for_consent": false, "revoke_refresh_token_grant": false, - "disable_clickjack_protection_headers": false, - "enable_pipeline2": false + "dashboard_new_onboarding": false, + "mfa_show_factor_list_on_enrollment": false, + "disable_clickjack_protection_headers": false }, "friendly_name": "This is the Travel0 Tenant", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" }, - "idle_session_lifetime": 1, - "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", - "sandbox_version": "12", - "session_lifetime": 3.0166666666666666, - "support_email": "support@mycompany.org", - "support_url": "https://mycompany.org/support", + "picture_url": "https://cdn.auth0.com/manhattan/versions/1.3935.0/assets/badge.png", + "sandbox_version": "18", + "oidc_logout": { + "rp_logout_end_session_endpoint_discovery": true + }, "universal_login": { "colors": { - "primary": "#F8F8F2", - "page_background": "#222221" + "page_background": "#000000", + "primary": "#5ce4ff" } }, - "session_cookie": { - "mode": "non-persistent" - }, "sandbox_versions_available": [ "18", - "16", - "12" + "16" ] }, "rawHeaders": [], 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 262e75611..f794a2459 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,23 +2,14 @@ { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 1, + "total": 0, "start": 0, "limit": 100, - "rules": [ - { - "id": "rul_KPxS2cPV6d0ZfCE3", - "enabled": true, - "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", - "name": "my-rule", - "order": 2, - "stage": "login_success" - } - ] + "rules": [] }, "rawHeaders": [], "responseIsBinary": false @@ -36,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -51,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?page=0&per_page=100&include_totals=true&is_global=true", "body": "", "status": 200, "response": { @@ -107,7 +98,7 @@ "status": 200, "response": { "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" + "https://mycompany.org/logoutCallback" ], "change_password": { "enabled": true, @@ -141,7 +132,7 @@ "disable_clickjack_protection_headers": false, "enable_pipeline2": false }, - "friendly_name": "This tenant name should be preserved", + "friendly_name": "My Test Tenant", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" @@ -150,8 +141,8 @@ "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", "sandbox_version": "12", "session_lifetime": 3.0166666666666666, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", + "support_email": "support@mycompany.org", + "support_url": "https://mycompany.org/support", "universal_login": { "colors": { "primary": "#F8F8F2", @@ -173,7 +164,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -946,11 +937,11 @@ { "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?page=0&per_page=100&include_totals=true&is_global=false", "body": "", "status": 200, "response": { - "total": 10, + "total": 2, "start": 0, "limit": 100, "clients": [ @@ -1021,7 +1012,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1036,521 +1027,97 @@ "client_credentials" ], "custom_login_page_on": true - }, + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections?per_page=100&page=0&include_totals=true&strategy=auth0", + "body": "", + "status": 200, + "response": { + "total": 1, + "start": 0, + "limit": 100, + "connections": [ { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "API Explorer Application", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false + "id": "con_nH4AIKkSAzWLnzAk", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "web_origins": [], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", - "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 - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true }, - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" + "strategy": "auth0", + "name": "Username-Password-Authentication", + "is_domain_connection": false, + "realms": [ + "Username-Password-Authentication" ], - "custom_login_page_on": true - }, + "enabled_clients": [ + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + ] + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections?per_page=100&page=0&include_totals=true", + "body": "", + "status": 200, + "response": { + "total": 1, + "start": 0, + "limit": 100, + "connections": [ { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "The Default App", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false + "id": "con_nH4AIKkSAzWLnzAk", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": false, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso": false, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Test SPA", - "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], - "callbacks": [ - "http://localhost:3000" - ], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": true, - "refresh_token": { - "expiration_type": "expiring", - "leeway": 0, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "infinite_token_lifetime": false, - "infinite_idle_token_lifetime": false, - "rotation_type": "rotating" - }, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "none", - "app_type": "spa", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token" - ], - "web_origins": [ - "http://localhost:3000" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "auth0-deploy-cli-extension", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "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": "GET", - "path": "/api/v2/connections?strategy=auth0&include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "total": 2, - "start": 0, - "limit": 100, - "connections": [ - { - "id": "con_cvOdQDkXpKvaMNSh", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "import_mode": false, - "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "password_history": { - "size": 5, - "enable": false - }, - "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true - }, - "strategy": "auth0", - "name": "boo-baz-db-connection-test", - "is_domain_connection": false, - "realms": [ - "boo-baz-db-connection-test" - ], - "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] - }, - { - "id": "con_orWZyMv2k9PgOd3x", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "passwordPolicy": "good", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true }, "strategy": "auth0", "name": "Username-Password-Authentication", @@ -1559,7 +1126,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -1571,145 +1138,12 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "total": 3, - "start": 0, - "limit": 100, - "connections": [ - { - "id": "con_cvOdQDkXpKvaMNSh", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "import_mode": false, - "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "password_history": { - "size": 5, - "enable": false - }, - "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true - }, - "strategy": "auth0", - "name": "boo-baz-db-connection-test", - "is_domain_connection": false, - "realms": [ - "boo-baz-db-connection-test" - ], - "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] - }, - { - "id": "con_SXIEWGYv5QzGSoqq", - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true - }, - "strategy": "google-oauth2", - "name": "google-oauth2", - "is_domain_connection": false, - "realms": [ - "google-oauth2" - ], - "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" - ] - }, - { - "id": "con_orWZyMv2k9PgOd3x", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "passwordPolicy": "good", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true - }, - "strategy": "auth0", - "name": "Username-Password-Authentication", - "is_domain_connection": false, - "realms": [ - "Username-Password-Authentication" - ], - "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" - ] - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/tenants/settings", + "path": "/api/v2/tenants/settings", "body": "", "status": 200, "response": { "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" + "https://mycompany.org/logoutCallback" ], "change_password": { "enabled": true, @@ -1743,7 +1177,7 @@ "disable_clickjack_protection_headers": false, "enable_pipeline2": false }, - "friendly_name": "This tenant name should be preserved", + "friendly_name": "My Test Tenant", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" @@ -1752,8 +1186,8 @@ "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", "sandbox_version": "12", "session_lifetime": 3.0166666666666666, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", + "support_email": "support@mycompany.org", + "support_url": "https://mycompany.org/support", "universal_login": { "colors": { "primary": "#F8F8F2", @@ -1775,7 +1209,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/emails/provider?include_fields=true&fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address", + "path": "/api/v2/emails/provider?fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address&include_fields=true", "body": "", "status": 200, "response": { @@ -1790,14 +1224,17 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/blocked_account", + "path": "/api/v2/email-templates/verify_email", "body": "", - "status": 404, + "status": 200, "response": { - "statusCode": 404, - "error": "Not Found", - "message": "The template does not exist.", - "errorCode": "inexistent_email_template" + "template": "verify_email", + "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", + "from": "", + "subject": "", + "syntax": "liquid", + "urlLifetimeInSeconds": 432000, + "enabled": true }, "rawHeaders": [], "responseIsBinary": false @@ -1805,7 +1242,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/mfa_oob_code", + "path": "/api/v2/email-templates/user_invitation", "body": "", "status": 404, "response": { @@ -1820,7 +1257,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/stolen_credentials", + "path": "/api/v2/email-templates/verify_email_by_code", "body": "", "status": 404, "response": { @@ -1835,7 +1272,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/password_reset", + "path": "/api/v2/email-templates/enrollment_email", "body": "", "status": 404, "response": { @@ -1850,14 +1287,18 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/verify_email_by_code", + "path": "/api/v2/email-templates/welcome_email", "body": "", - "status": 404, + "status": 200, "response": { - "statusCode": 404, - "error": "Not Found", - "message": "The template does not exist.", - "errorCode": "inexistent_email_template" + "template": "welcome_email", + "body": "\n \n

Welcome!

\n \n\n", + "from": "", + "resultUrl": "https://example.com/welcome", + "subject": "Welcome", + "syntax": "liquid", + "urlLifetimeInSeconds": 3600, + "enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -1865,7 +1306,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/user_invitation", + "path": "/api/v2/email-templates/stolen_credentials", "body": "", "status": 404, "response": { @@ -1880,18 +1321,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/welcome_email", + "path": "/api/v2/email-templates/password_reset", "body": "", - "status": 200, + "status": 404, "response": { - "template": "welcome_email", - "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", - "from": "", - "resultUrl": "https://travel0.com/welcome", - "subject": "Welcome", - "syntax": "liquid", - "urlLifetimeInSeconds": 3600, - "enabled": false + "statusCode": 404, + "error": "Not Found", + "message": "The template does not exist.", + "errorCode": "inexistent_email_template" }, "rawHeaders": [], "responseIsBinary": false @@ -1899,17 +1336,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/verify_email", + "path": "/api/v2/email-templates/mfa_oob_code", "body": "", - "status": 200, + "status": 404, "response": { - "template": "verify_email", - "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", - "from": "", - "subject": "", - "syntax": "liquid", - "urlLifetimeInSeconds": 432000, - "enabled": true + "statusCode": 404, + "error": "Not Found", + "message": "The template does not exist.", + "errorCode": "inexistent_email_template" }, "rawHeaders": [], "responseIsBinary": false @@ -1932,7 +1366,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/reset_email", + "path": "/api/v2/email-templates/blocked_account", "body": "", "status": 404, "response": { @@ -1947,7 +1381,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/enrollment_email", + "path": "/api/v2/email-templates/reset_email", "body": "", "status": 404, "response": { @@ -1962,17 +1396,17 @@ { "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "total": 3, + "total": 1, "start": 0, "limit": 100, "client_grants": [ { - "id": "cgr_P3XzavTQSyFaV8mr", - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "id": "cgr_t3j1isctGZmOVylt", + "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -2088,6 +1522,11 @@ "read:entitlements", "read:attack_protection", "update:attack_protection", + "read:organizations_summary", + "create:authentication_methods", + "read:authentication_methods", + "update:authentication_methods", + "delete:authentication_methods", "read:organizations", "update:organizations", "create:organizations", @@ -2104,309 +1543,30 @@ "delete:organization_member_roles", "create:organization_invitations", "read:organization_invitations", - "delete:organization_invitations" - ] - }, - { - "id": "cgr_SDgpXDXvWBtO3KEi", - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", - "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" - ] - }, - { - "id": "cgr_t3j1isctGZmOVylt", - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", - "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_summary", - "create:authentication_methods", - "read:authentication_methods", - "update:authentication_methods", - "delete:authentication_methods", - "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:scim_config", - "create:scim_config", - "update:scim_config", - "delete:scim_config", - "create:scim_token", - "read:scim_token", - "delete:scim_token", - "delete:phone_providers", - "create:phone_providers", - "read:phone_providers", - "update:phone_providers", - "delete:phone_templates", - "create:phone_templates", - "read:phone_templates", - "update:phone_templates", - "create:encryption_keys", - "read:encryption_keys", - "update:encryption_keys", - "delete:encryption_keys", - "read:client_credentials", - "create:client_credentials", - "update:client_credentials", - "delete:client_credentials" + "delete:organization_invitations", + "read:scim_config", + "create:scim_config", + "update:scim_config", + "delete:scim_config", + "create:scim_token", + "read:scim_token", + "delete:scim_token", + "delete:phone_providers", + "create:phone_providers", + "read:phone_providers", + "update:phone_providers", + "delete:phone_templates", + "create:phone_templates", + "read:phone_templates", + "update:phone_templates", + "create:encryption_keys", + "read:encryption_keys", + "update:encryption_keys", + "delete:encryption_keys", + "read:client_credentials", + "create:client_credentials", + "update:client_credentials", + "delete:client_credentials" ] } ] @@ -2516,7 +1676,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": { @@ -2540,47 +1700,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "roles": [ - { - "id": "rol_hRGDQmEBYbZsC8sZ", - "name": "Admin", - "description": "Can read and write things" - }, - { - "id": "rol_oT9S2f9KYqFyYR2j", - "name": "Reader", - "description": "Can only read things" - }, - { - "id": "rol_ZNeuVHhKZTaZaGwq", - "name": "read_only", - "description": "Read Only" - }, - { - "id": "rol_1DwrDRZ26bdvfKxL", - "name": "read_osnly", - "description": "Readz Only" - } - ], - "start": 0, - "limit": 100, - "total": 4 - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/roles/rol_hRGDQmEBYbZsC8sZ/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "permissions": [], + "roles": [], "start": 0, "limit": 100, "total": 0 @@ -2591,14 +1715,15 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_oT9S2f9KYqFyYR2j/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/branding", "body": "", "status": 200, "response": { - "permissions": [], - "start": 0, - "limit": 100, - "total": 0 + "colors": { + "primary": "#F8F8F2", + "page_background": "#222221" + }, + "logo_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png" }, "rawHeaders": [], "responseIsBinary": false @@ -2606,29 +1731,22 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_ZNeuVHhKZTaZaGwq/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/custom-domains", "body": "", "status": 200, - "response": { - "permissions": [], - "start": 0, - "limit": 100, - "total": 0 - }, + "response": [], "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_1DwrDRZ26bdvfKxL/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/prompts", "body": "", "status": 200, "response": { - "permissions": [], - "start": 0, - "limit": 100, - "total": 0 + "universal_login_experience": "new", + "identifier_first": true }, "rawHeaders": [], "responseIsBinary": false @@ -2636,55 +1754,16 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/branding", + "path": "/api/v2/tenants/settings", "body": "", "status": 200, "response": { - "colors": { - "primary": "#F8F8F2", - "page_background": "#222221" - }, - "logo_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png" - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/custom-domains", - "body": "", - "status": 200, - "response": [], - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts", - "body": "", - "status": 200, - "response": { - "universal_login_experience": "new", - "identifier_first": true - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/tenants/settings", - "body": "", - "status": 200, - "response": { - "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" - ], - "change_password": { - "enabled": true, - "html": "Change Password\n" + "allowed_logout_urls": [ + "https://mycompany.org/logoutCallback" + ], + "change_password": { + "enabled": true, + "html": "Change Password\n" }, "enabled_locales": [ "en" @@ -2714,7 +1793,7 @@ "disable_clickjack_protection_headers": false, "enable_pipeline2": false }, - "friendly_name": "This tenant name should be preserved", + "friendly_name": "My Test Tenant", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" @@ -2723,8 +1802,8 @@ "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", "sandbox_version": "12", "session_lifetime": 3.0166666666666666, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", + "support_email": "support@mycompany.org", + "support_url": "https://mycompany.org/support", "universal_login": { "colors": { "primary": "#F8F8F2", @@ -2746,7 +1825,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login/custom-text/en", + "path": "/api/v2/prompts/login-id/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2756,7 +1835,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-password/custom-text/en", + "path": "/api/v2/prompts/login/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2766,7 +1845,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-id/custom-text/en", + "path": "/api/v2/prompts/login-password/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2776,7 +1855,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-email-verification/custom-text/en", + "path": "/api/v2/prompts/signup-id/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2786,7 +1865,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup/custom-text/en", + "path": "/api/v2/prompts/login-email-verification/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2796,7 +1875,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup-id/custom-text/en", + "path": "/api/v2/prompts/signup/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2806,7 +1885,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup-password/custom-text/en", + "path": "/api/v2/prompts/reset-password/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2816,7 +1895,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/consent/custom-text/en", + "path": "/api/v2/prompts/signup-password/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2826,7 +1905,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/reset-password/custom-text/en", + "path": "/api/v2/prompts/consent/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2846,7 +1925,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-voice/custom-text/en", + "path": "/api/v2/prompts/mfa-push/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2856,7 +1935,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-push/custom-text/en", + "path": "/api/v2/prompts/mfa-voice/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2866,7 +1945,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-webauthn/custom-text/en", + "path": "/api/v2/prompts/mfa-phone/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2876,7 +1955,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-phone/custom-text/en", + "path": "/api/v2/prompts/mfa-webauthn/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2916,7 +1995,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa/custom-text/en", + "path": "/api/v2/prompts/status/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2926,7 +2005,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/status/custom-text/en", + "path": "/api/v2/prompts/mfa/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2996,7 +2075,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-id/partials", + "path": "/api/v2/prompts/login/partials", "body": "", "status": 200, "response": {}, @@ -3016,7 +2095,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login/partials", + "path": "/api/v2/prompts/login-id/partials", "body": "", "status": 200, "response": {}, @@ -3026,7 +2105,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup/partials", + "path": "/api/v2/prompts/login-passwordless/partials", "body": "", "status": 200, "response": {}, @@ -3036,7 +2115,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-passwordless/partials", + "path": "/api/v2/prompts/signup/partials", "body": "", "status": 200, "response": {}, @@ -3063,18 +2142,6 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/migrations", - "body": "", - "status": 200, - "response": { - "flags": {} - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -3082,56 +2149,7 @@ "body": "", "status": 200, "response": { - "actions": [ - { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", - "name": "My Custom Action", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-09T13:36:40.436910946Z", - "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", - "dependencies": [], - "runtime": "node16", - "status": "built", - "secrets": [], - "current_version": { - "id": "3d2b275c-8b1f-46ac-baf0-d0dec2cb1ce8", - "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", - "runtime": "node16", - "status": "BUILT", - "number": 2, - "build_time": "2024-10-09T13:36:41.550114510Z", - "created_at": "2024-10-09T13:36:41.424992733Z", - "updated_at": "2024-10-09T13:36:41.551127670Z" - }, - "deployed_version": { - "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", - "dependencies": [], - "id": "3d2b275c-8b1f-46ac-baf0-d0dec2cb1ce8", - "deployed": true, - "number": 2, - "built_at": "2024-10-09T13:36:41.550114510Z", - "secrets": [], - "status": "built", - "created_at": "2024-10-09T13:36:41.424992733Z", - "updated_at": "2024-10-09T13:36:41.551127670Z", - "runtime": "node16", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ] - }, - "all_changes_deployed": true - } - ], - "total": 1, + "actions": [], "per_page": 100 }, "rawHeaders": [], @@ -3156,6 +2174,18 @@ "binding_policy": "trigger-bound", "compatible_triggers": [] }, + { + "id": "post-login", + "version": "v2", + "status": "DEPRECATED", + "runtimes": [ + "node12", + "node16" + ], + "default_runtime": "node16", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, { "id": "post-login", "version": "v3", @@ -3175,14 +2205,15 @@ ] }, { - "id": "post-login", + "id": "credentials-exchange", "version": "v2", - "status": "DEPRECATED", + "status": "CURRENT", "runtimes": [ "node12", - "node16" + "node16", + "node18-actions" ], - "default_runtime": "node16", + "default_runtime": "node18-actions", "binding_policy": "trigger-bound", "compatible_triggers": [] }, @@ -3198,15 +2229,13 @@ "compatible_triggers": [] }, { - "id": "credentials-exchange", - "version": "v2", - "status": "CURRENT", + "id": "pre-user-registration", + "version": "v1", + "status": "DEPRECATED", "runtimes": [ - "node12", - "node16", - "node18-actions" + "node12" ], - "default_runtime": "node18-actions", + "default_runtime": "node12", "binding_policy": "trigger-bound", "compatible_triggers": [] }, @@ -3224,7 +2253,7 @@ "compatible_triggers": [] }, { - "id": "pre-user-registration", + "id": "post-user-registration", "version": "v1", "status": "DEPRECATED", "runtimes": [ @@ -3248,7 +2277,7 @@ "compatible_triggers": [] }, { - "id": "post-user-registration", + "id": "post-change-password", "version": "v1", "status": "DEPRECATED", "runtimes": [ @@ -3272,13 +2301,15 @@ "compatible_triggers": [] }, { - "id": "post-change-password", - "version": "v1", - "status": "DEPRECATED", + "id": "send-phone-message", + "version": "v2", + "status": "CURRENT", "runtimes": [ - "node12" + "node12", + "node16", + "node18-actions" ], - "default_runtime": "node12", + "default_runtime": "node18-actions", "binding_policy": "trigger-bound", "compatible_triggers": [] }, @@ -3292,19 +2323,6 @@ "binding_policy": "trigger-bound", "compatible_triggers": [] }, - { - "id": "send-phone-message", - "version": "v2", - "status": "CURRENT", - "runtimes": [ - "node12", - "node16", - "node18-actions" - ], - "default_runtime": "node18-actions", - "binding_policy": "trigger-bound", - "compatible_triggers": [] - }, { "id": "password-reset-post-challenge", "version": "v1", @@ -3504,31 +2522,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true", + "path": "/api/v2/organizations?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "organizations": [ - { - "id": "org_knGmCqfHxLD0V9YB", - "name": "org1", - "display_name": "Organization", - "branding": { - "colors": { - "page_background": "#fff5f5", - "primary": "#57ddff" - } - } - }, - { - "id": "org_haOYEECGVpZwU9Tc", - "name": "org2", - "display_name": "Organization2" - } - ], + "organizations": [], "start": 0, - "limit": 50, - "total": 2 + "limit": 100, + "total": 0 }, "rawHeaders": [], "responseIsBinary": false @@ -3536,52 +2537,23 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true&take=50", + "path": "/api/v2/attack-protection/breached-password-detection", "body": "", "status": 200, "response": { - "organizations": [ - { - "id": "org_knGmCqfHxLD0V9YB", - "name": "org1", - "display_name": "Organization", - "branding": { - "colors": { - "page_background": "#fff5f5", - "primary": "#57ddff" - } - } - }, - { - "id": "org_haOYEECGVpZwU9Tc", - "name": "org2", - "display_name": "Organization2" + "enabled": false, + "shields": [], + "admin_notification_frequency": [], + "method": "standard", + "stage": { + "pre-user-registration": { + "shields": [] } - ] + } }, "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/organizations/org_knGmCqfHxLD0V9YB/enabled_connections", - "body": "", - "status": 200, - "response": [], - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/organizations/org_haOYEECGVpZwU9Tc/enabled_connections", - "body": "", - "status": 200, - "response": [], - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -3601,26 +2573,6 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/attack-protection/breached-password-detection", - "body": "", - "status": 200, - "response": { - "enabled": false, - "shields": [], - "admin_notification_frequency": [], - "method": "standard", - "stage": { - "pre-user-registration": { - "shields": [] - } - } - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -3651,79 +2603,17 @@ { "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": [ - { - "id": "lst_0000000000017950", - "name": "Suspended DD Log Stream", - "type": "datadog", - "status": "active", - "sink": { - "datadogApiKey": "some-sensitive-api-key", - "datadogRegion": "us" - }, - "isPriority": false - }, - { - "id": "lst_0000000000017951", - "name": "Amazon EventBridge", - "type": "eventbridge", - "status": "active", - "sink": { - "awsAccountId": "123456789012", - "awsRegion": "us-east-2", - "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-11b6995b-a49b-4a0f-bfaf-88cefc5ba0b3/auth0.logs" - }, - "filters": [ - { - "type": "category", - "name": "auth.login.success" - }, - { - "type": "category", - "name": "auth.login.notification" - }, - { - "type": "category", - "name": "auth.login.fail" - }, - { - "type": "category", - "name": "auth.signup.success" - }, - { - "type": "category", - "name": "auth.logout.success" - }, - { - "type": "category", - "name": "auth.logout.fail" - }, - { - "type": "category", - "name": "auth.silent_auth.fail" - }, - { - "type": "category", - "name": "auth.silent_auth.success" - }, - { - "type": "category", - "name": "auth.token_exchange.fail" - } - ], - "isPriority": false - } - ], + "response": [], "rawHeaders": [], "responseIsBinary": false }, { "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": [], @@ -3748,23 +2638,14 @@ { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 1, + "total": 0, "start": 0, "limit": 100, - "rules": [ - { - "id": "rul_KPxS2cPV6d0ZfCE3", - "enabled": true, - "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", - "name": "my-rule", - "order": 2, - "stage": "login_success" - } - ] + "rules": [] }, "rawHeaders": [], "responseIsBinary": false @@ -3772,45 +2653,14 @@ { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 1, + "total": 0, "start": 0, "limit": 100, - "rules": [ - { - "id": "rul_KPxS2cPV6d0ZfCE3", - "enabled": true, - "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", - "name": "my-rule", - "order": 2, - "stage": "login_success" - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/rules/rul_KPxS2cPV6d0ZfCE3", - "body": { - "name": "my-rule", - "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", - "enabled": true, - "order": 2 - }, - "status": 200, - "response": { - "id": "rul_KPxS2cPV6d0ZfCE3", - "enabled": true, - "script": "function (user, context, callback) {\n callback(null, user, context);\n}\n", - "name": "my-rule", - "order": 2, - "stage": "login_success" + "rules": [] }, "rawHeaders": [], "responseIsBinary": false @@ -3818,7 +2668,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -3833,7 +2683,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -3848,7 +2698,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?page=0&per_page=100&include_totals=true&is_global=true", "body": "", "status": 200, "response": { @@ -3965,7 +2815,7 @@ "status": 200, "response": { "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" + "https://mycompany.org/logoutCallback" ], "change_password": { "enabled": true, @@ -4001,7 +2851,7 @@ "disable_clickjack_protection_headers": false, "enable_pipeline2": false }, - "friendly_name": "This tenant name should be preserved", + "friendly_name": "My Test Tenant", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" @@ -4010,8 +2860,8 @@ "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", "sandbox_version": "12", "session_lifetime": 3.0166666666666666, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", + "support_email": "support@mycompany.org", + "support_url": "https://mycompany.org/support", "universal_login": { "colors": { "primary": "#F8F8F2", @@ -4029,7 +2879,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -4802,11 +3652,11 @@ { "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?page=0&per_page=100&include_totals=true&is_global=false", "body": "", "status": 200, "response": { - "total": 10, + "total": 2, "start": 0, "limit": 100, "clients": [ @@ -4877,113 +3727,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "API Explorer Application", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4991,408 +3735,80 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", "grant_types": [ "authorization_code", "implicit", "refresh_token", "client_credentials" ], - "web_origins": [], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", - "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 - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", - "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 - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "The Default App", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": false, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso": false, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Test SPA", - "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], - "callbacks": [ - "http://localhost:3000" - ], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": true, - "refresh_token": { - "expiration_type": "expiring", - "leeway": 0, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "infinite_token_lifetime": false, - "infinite_idle_token_lifetime": false, - "rotation_type": "rotating" - }, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "none", - "app_type": "spa", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token" - ], - "web_origins": [ - "http://localhost:3000" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "auth0-deploy-cli-extension", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "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", - "path": "/api/v2/clients/780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "body": { - "name": "API Explorer Application", - "allowed_clients": [], - "app_type": "non_interactive", - "callbacks": [], - "client_aliases": [], - "client_metadata": {}, - "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 - }, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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": "API Explorer Application", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/clients/HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", + "body": { + "name": "Default App", + "callbacks": [], + "cross_origin_auth": false, + "custom_login_page_on": true, + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "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": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false + }, + "status": 200, + "response": { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Default App", + "callbacks": [], + "cross_origin_auth": false, + "is_first_party": true, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false, + "signing_keys": [ { "cert": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -5400,10 +3816,10 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], "custom_login_page_on": true @@ -5411,784 +3827,136 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/emails/provider?fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address&include_fields=true", + "body": "", + "status": 200, + "response": { + "name": "mandrill", + "credentials": {}, + "default_from_address": "auth0-user@auth0.com", + "enabled": false + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/clients/STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "path": "/api/v2/emails/provider", "body": { - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "app_type": "non_interactive", - "callbacks": [], - "client_aliases": [], - "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 - }, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": 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" + "name": "mandrill", + "credentials": { + "api_key": "##MANDRILL_API_KEY##" }, - "sso_disabled": false, - "token_endpoint_auth_method": "client_secret_post" + "default_from_address": "auth0-user@auth0.com", + "enabled": false }, "status": 200, "response": { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" - } - ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true + "name": "mandrill", + "credentials": {}, + "default_from_address": "auth0-user@auth0.com", + "enabled": false }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/clients/OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "method": "PUT", + "path": "/api/v2/guardian/factors/duo", "body": { - "name": "Default App", - "callbacks": [], - "cross_origin_auth": false, - "custom_login_page_on": true, - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "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": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso_disabled": false + "enabled": false }, "status": 200, "response": { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Default App", - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "oidc_conformant": true, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" - } - ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true + "enabled": false }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/clients/e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "method": "PUT", + "path": "/api/v2/guardian/factors/sms", "body": { - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "allowed_origins": [], - "app_type": "regular_web", - "callbacks": [], - "client_aliases": [], - "client_metadata": {}, - "cross_origin_auth": false, - "custom_login_page_on": true, - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "is_first_party": true, - "is_token_endpoint_ip_header_trusted": false, - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000 - }, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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", - "web_origins": [] + "enabled": false }, "status": 200, "response": { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" - } - ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "web_origins": [], - "custom_login_page_on": true + "enabled": false }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/clients/Cbs29sl8S2G7zgo97erymb8t59IG6its", + "method": "PUT", + "path": "/api/v2/guardian/factors/webauthn-platform", "body": { - "name": "Quickstarts API (Test Application)", - "app_type": "non_interactive", - "client_metadata": { - "foo": "bar" - }, - "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" + "enabled": false }, "status": 200, "response": { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" - } - ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", - "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 + "enabled": false }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/clients/Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "method": "PUT", + "path": "/api/v2/guardian/factors/otp", "body": { - "name": "Terraform Provider", - "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" + "enabled": false }, "status": 200, "response": { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" - } - ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", - "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 + "enabled": false }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/clients/RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "method": "PUT", + "path": "/api/v2/guardian/factors/recovery-code", "body": { - "name": "The Default App", - "allowed_clients": [], - "callbacks": [], - "client_aliases": [], - "client_metadata": {}, - "cross_origin_auth": false, - "custom_login_page_on": true, - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "is_first_party": true, - "is_token_endpoint_ip_header_trusted": false, - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000 - }, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": false, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso": false, - "sso_disabled": false, - "token_endpoint_auth_method": "client_secret_post" + "enabled": false }, "status": 200, "response": { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "The Default App", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": false, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso": false, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" - } - ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true + "enabled": false }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/clients/oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "method": "PUT", + "path": "/api/v2/guardian/factors/webauthn-roaming", "body": { - "name": "auth0-deploy-cli-extension", - "allowed_clients": [], - "app_type": "non_interactive", - "callbacks": [], - "client_aliases": [], - "client_metadata": {}, - "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 - }, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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" + "enabled": false }, "status": 200, "response": { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "auth0-deploy-cli-extension", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" - } - ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true + "enabled": false }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/clients/11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "method": "PUT", + "path": "/api/v2/guardian/factors/push-notification", "body": { - "name": "Test SPA", - "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], - "app_type": "spa", - "callbacks": [ - "http://localhost:3000" - ], - "client_aliases": [], - "client_metadata": {}, - "cross_origin_auth": false, - "custom_login_page_on": true, - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token" - ], - "is_first_party": true, - "is_token_endpoint_ip_header_trusted": false, - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000 - }, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": true, - "refresh_token": { - "expiration_type": "expiring", - "leeway": 0, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "infinite_token_lifetime": false, - "infinite_idle_token_lifetime": false, - "rotation_type": "rotating" - }, - "sso_disabled": false, - "token_endpoint_auth_method": "none", - "web_origins": [ - "http://localhost:3000" - ] - }, - "status": 200, - "response": { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Test SPA", - "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], - "callbacks": [ - "http://localhost:3000" - ], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": true, - "refresh_token": { - "expiration_type": "expiring", - "leeway": 0, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "infinite_token_lifetime": false, - "infinite_idle_token_lifetime": false, - "rotation_type": "rotating" - }, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" - } - ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "none", - "app_type": "spa", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token" - ], - "web_origins": [ - "http://localhost:3000" - ], - "custom_login_page_on": true + "enabled": false }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/emails/provider?include_fields=true&fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address", - "body": "", "status": 200, "response": { - "name": "mandrill", - "credentials": {}, - "default_from_address": "auth0-user@auth0.com", "enabled": false }, "rawHeaders": [], @@ -6196,158 +3964,18 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/emails/provider?enabled=false&name=mandrill", + "method": "PUT", + "path": "/api/v2/guardian/factors/email", "body": { - "name": "mandrill", - "credentials": { - "api_key": "##MANDRILL_API_KEY##" - }, - "default_from_address": "auth0-user@auth0.com", "enabled": false }, "status": 200, "response": { - "name": "mandrill", - "credentials": {}, - "default_from_address": "auth0-user@auth0.com", "enabled": false }, "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/email", - "body": { - "enabled": false - }, - "status": 200, - "response": { - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/sms", - "body": { - "enabled": false - }, - "status": 200, - "response": { - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/push-notification", - "body": { - "enabled": false - }, - "status": 200, - "response": { - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/recovery-code", - "body": { - "enabled": false - }, - "status": 200, - "response": { - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/webauthn-platform", - "body": { - "enabled": false - }, - "status": 200, - "response": { - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/webauthn-roaming", - "body": { - "enabled": false - }, - "status": 200, - "response": { - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/otp", - "body": { - "enabled": false - }, - "status": 200, - "response": { - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/duo", - "body": { - "enabled": false - }, - "status": 200, - "response": { - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PUT", - "path": "/api/v2/guardian/factors/sms/providers/twilio", - "body": { - "auth_token": "bar", - "from": "from bar", - "messaging_service_sid": "foo", - "sid": "foo" - }, - "status": 200, - "response": { - "auth_token": "bar", - "from": "from bar", - "messaging_service_sid": "foo", - "sid": "foo" - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", @@ -6377,7 +4005,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" }, @@ -6418,108 +4046,6 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/log-streams?paginate=false", - "body": "", - "status": 200, - "response": [ - { - "id": "lst_0000000000017950", - "name": "Suspended DD Log Stream", - "type": "datadog", - "status": "active", - "sink": { - "datadogApiKey": "some-sensitive-api-key", - "datadogRegion": "us" - }, - "isPriority": false - }, - { - "id": "lst_0000000000017951", - "name": "Amazon EventBridge", - "type": "eventbridge", - "status": "active", - "sink": { - "awsAccountId": "123456789012", - "awsRegion": "us-east-2", - "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-11b6995b-a49b-4a0f-bfaf-88cefc5ba0b3/auth0.logs" - }, - "filters": [ - { - "type": "category", - "name": "auth.login.success" - }, - { - "type": "category", - "name": "auth.login.notification" - }, - { - "type": "category", - "name": "auth.login.fail" - }, - { - "type": "category", - "name": "auth.signup.success" - }, - { - "type": "category", - "name": "auth.logout.success" - }, - { - "type": "category", - "name": "auth.logout.fail" - }, - { - "type": "category", - "name": "auth.silent_auth.fail" - }, - { - "type": "category", - "name": "auth.silent_auth.success" - }, - { - "type": "category", - "name": "auth.token_exchange.fail" - } - ], - "isPriority": false - } - ], - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/attack-protection/breached-password-detection", - "body": { - "enabled": false, - "shields": [], - "admin_notification_frequency": [], - "method": "standard", - "stage": { - "pre-user-registration": { - "shields": [] - } - } - }, - "status": 200, - "response": { - "enabled": false, - "shields": [], - "admin_notification_frequency": [], - "method": "standard", - "stage": { - "pre-user-registration": { - "shields": [] - } - } - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", @@ -6595,135 +4121,47 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/log-streams/lst_0000000000017951", + "path": "/api/v2/attack-protection/breached-password-detection", "body": { - "name": "Amazon EventBridge", - "filters": [ - { - "type": "category", - "name": "auth.login.success" - }, - { - "type": "category", - "name": "auth.login.notification" - }, - { - "type": "category", - "name": "auth.login.fail" - }, - { - "type": "category", - "name": "auth.signup.success" - }, - { - "type": "category", - "name": "auth.logout.success" - }, - { - "type": "category", - "name": "auth.logout.fail" - }, - { - "type": "category", - "name": "auth.silent_auth.fail" - }, - { - "type": "category", - "name": "auth.silent_auth.success" - }, - { - "type": "category", - "name": "auth.token_exchange.fail" + "enabled": false, + "shields": [], + "admin_notification_frequency": [], + "method": "standard", + "stage": { + "pre-user-registration": { + "shields": [] } - ], - "isPriority": false, - "status": "active" + } }, "status": 200, "response": { - "id": "lst_0000000000017951", - "name": "Amazon EventBridge", - "type": "eventbridge", - "status": "active", - "sink": { - "awsAccountId": "123456789012", - "awsRegion": "us-east-2", - "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-11b6995b-a49b-4a0f-bfaf-88cefc5ba0b3/auth0.logs" - }, - "filters": [ - { - "type": "category", - "name": "auth.login.success" - }, - { - "type": "category", - "name": "auth.login.notification" - }, - { - "type": "category", - "name": "auth.login.fail" - }, - { - "type": "category", - "name": "auth.signup.success" - }, - { - "type": "category", - "name": "auth.logout.success" - }, - { - "type": "category", - "name": "auth.logout.fail" - }, - { - "type": "category", - "name": "auth.silent_auth.fail" - }, - { - "type": "category", - "name": "auth.silent_auth.success" - }, - { - "type": "category", - "name": "auth.token_exchange.fail" + "enabled": false, + "shields": [], + "admin_notification_frequency": [], + "method": "standard", + "stage": { + "pre-user-registration": { + "shields": [] } - ], - "isPriority": false + } }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/log-streams/lst_0000000000017950", - "body": { - "name": "Suspended DD Log Stream", - "isPriority": false, - "sink": { - "datadogRegion": "us" - }, - "status": "active" - }, + "method": "GET", + "path": "/api/v2/log-streams", + "body": "", "status": 200, - "response": { - "id": "lst_0000000000017950", - "name": "Suspended DD Log Stream", - "type": "datadog", - "status": "active", - "sink": { - "datadogApiKey": "some-sensitive-api-key", - "datadogRegion": "us" - }, - "isPriority": false - }, + "response": [], "rawHeaders": [], "responseIsBinary": false }, { "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": [], @@ -6733,11 +4171,11 @@ { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 11, + "total": 3, "start": 0, "limit": 100, "clients": [ @@ -6808,7 +4246,7 @@ "subject": "deprecated" } ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -6826,33 +4264,28 @@ }, { "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "API Explorer Application", - "allowed_clients": [], + "global": true, "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": true, + "name": "All Applications", "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, "infinite_token_lifetime": true, "infinite_idle_token_lifetime": true, - "token_lifetime": 31557600, - "idle_token_lifetime": 2592000, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, "rotation_type": "non-rotating" }, - "sso_disabled": false, + "owners": [ + "mr|samlp|okta|will.vedder@auth0.com", + "mr|google-oauth2|102002633619863830825", + "mr|samlp|okta|frederik.prijck@auth0.com", + "mr|google-oauth2|109614534713742077035", + "mr|google-oauth2|116771660953104383819" + ], + "custom_login_page": "TEST123\n", + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -6860,299 +4293,256 @@ "subject": "deprecated" } ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "callback_url_template": false, + "client_id": "Isi93ibGHIGwmdYjsLwTOn7Gu7nwxU3V", "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "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": "GET", + "path": "/api/v2/connections?per_page=100&page=0&include_totals=true&strategy=auth0", + "body": "", + "status": 200, + "response": { + "total": 1, + "start": 0, + "limit": 100, + "connections": [ { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false + "id": "con_nH4AIKkSAzWLnzAk", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" + "strategy": "auth0", + "name": "Username-Password-Authentication", + "is_domain_connection": false, + "realms": [ + "Username-Password-Authentication" ], - "web_origins": [], - "custom_login_page_on": true - }, + "enabled_clients": [ + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + ] + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections?per_page=100&page=0&include_totals=true&strategy=auth0", + "body": "", + "status": 200, + "response": { + "total": 1, + "start": 0, + "limit": 100, + "connections": [ { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "id": "con_nH4AIKkSAzWLnzAk", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true + }, + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, + "brute_force_protection": true }, - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" + "strategy": "auth0", + "name": "Username-Password-Authentication", + "is_domain_connection": false, + "realms": [ + "Username-Password-Authentication" ], - "custom_login_page_on": true + "enabled_clients": [ + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + ] + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_nH4AIKkSAzWLnzAk", + "body": "", + "status": 200, + "response": { + "id": "con_nH4AIKkSAzWLnzAk", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", - "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 + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "The Default App", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } + "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false }, - "oidc_conformant": false, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" + "password": { + "enabled": true + } + }, + "brute_force_protection": true + }, + "strategy": "auth0", + "name": "Username-Password-Authentication", + "is_domain_connection": false, + "enabled_clients": [ + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + ], + "realms": [ + "Username-Password-Authentication" + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/connections/con_nH4AIKkSAzWLnzAk", + "body": { + "enabled_clients": [ + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE" + ], + "is_domain_connection": false, + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true + }, + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false }, - "sso": false, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "password": { + "enabled": true + } + }, + "brute_force_protection": true + }, + "realms": [ + "Username-Password-Authentication" + ] + }, + "status": 200, + "response": { + "id": "con_nH4AIKkSAzWLnzAk", + "options": { + "mfa": { + "active": true, + "return_enroll_settings": true + }, + "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, + "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true + "password": { + "enabled": true + } }, + "brute_force_protection": true + }, + "strategy": "auth0", + "name": "Username-Password-Authentication", + "is_domain_connection": false, + "enabled_clients": [ + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE" + ], + "realms": [ + "Username-Password-Authentication" + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/clients?page=0&per_page=100&include_totals=true", + "body": "", + "status": 200, + "response": { + "total": 3, + "start": 0, + "limit": 100, + "clients": [ { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Test SPA", - "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], - "callbacks": [ - "http://localhost:3000" - ], - "client_metadata": {}, - "cross_origin_auth": false, + "name": "Deploy CLI", "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, "oidc_conformant": true, - "refresh_token": { - "expiration_type": "expiring", - "leeway": 0, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "infinite_token_lifetime": false, - "infinite_idle_token_lifetime": false, - "rotation_type": "rotating" - }, "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "none", - "app_type": "spa", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token" - ], - "web_origins": [ - "http://localhost:3000" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "auth0-deploy-cli-extension", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -7162,7 +4552,7 @@ "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, - "sso_disabled": false, + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -7170,7 +4560,7 @@ "subject": "deprecated" } ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7178,7 +4568,6 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", "app_type": "non_interactive", "grant_types": [ @@ -7190,31 +4579,21 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], + "name": "Default App", "callbacks": [], "cross_origin_auth": false, "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, + "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, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, "rotation_type": "non-rotating" }, "sso_disabled": false, - "oidc_conformant": false, "signing_keys": [ { "cert": "[REDACTED]", @@ -7222,7 +4601,7 @@ "subject": "deprecated" } ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7230,10 +4609,10 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], "custom_login_page_on": true @@ -7281,77 +4660,16 @@ { "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "total": 2, + "total": 1, "start": 0, "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "import_mode": false, - "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "password_history": { - "size": 5, - "enable": false - }, - "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true - }, - "strategy": "auth0", - "name": "boo-baz-db-connection-test", - "is_domain_connection": false, - "realms": [ - "boo-baz-db-connection-test" - ], - "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] - }, - { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -7381,7 +4699,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -7393,47 +4711,28 @@ { "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "total": 2, + "total": 1, "start": 0, "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, "return_enroll_settings": true }, - "import_mode": false, - "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", + "passwordPolicy": "good", "passkey_options": { "challenge_ui": "both", "local_enrollment_enabled": true, "progressive_enrollment_enabled": true }, - "password_history": { - "size": 5, - "enable": false - }, "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, "authentication_methods": { "passkey": { "enabled": false @@ -7442,59 +4741,17 @@ "enabled": true } }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true + "brute_force_protection": true }, "strategy": "auth0", - "name": "boo-baz-db-connection-test", + "name": "Username-Password-Authentication", "is_domain_connection": false, "realms": [ - "boo-baz-db-connection-test" + "Username-Password-Authentication" ], "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] - }, - { - "id": "con_orWZyMv2k9PgOd3x", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "passwordPolicy": "good", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true - }, - "strategy": "auth0", - "name": "Username-Password-Authentication", - "is_domain_connection": false, - "realms": [ - "Username-Password-Authentication" - ], - "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } ] @@ -7502,243 +4759,30 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/connections/con_cvOdQDkXpKvaMNSh", - "body": "", - "status": 200, - "response": { - "id": "con_cvOdQDkXpKvaMNSh", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "import_mode": false, - "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "password_history": { - "size": 5, - "enable": false - }, - "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true - }, - "strategy": "auth0", - "name": "boo-baz-db-connection-test", - "is_domain_connection": false, - "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ], - "realms": [ - "boo-baz-db-connection-test" - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/connections/con_orWZyMv2k9PgOd3x", - "body": "", - "status": 200, - "response": { - "id": "con_orWZyMv2k9PgOd3x", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "passwordPolicy": "good", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true - }, - "strategy": "auth0", - "name": "Username-Password-Authentication", - "is_domain_connection": false, - "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" - ], - "realms": [ - "Username-Password-Authentication" - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/connections/con_cvOdQDkXpKvaMNSh", + "path": "/api/v2/email-templates/welcome_email", "body": { - "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ], - "is_domain_connection": false, - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "import_mode": false, - "customScripts": { - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "password_history": { - "size": 5, - "enable": false - }, - "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true - }, - "realms": [ - "boo-baz-db-connection-test" - ] + "template": "welcome_email", + "body": "\n \n

Welcome!

\n \n\n", + "enabled": false, + "from": "", + "resultUrl": "https://example.com/welcome", + "subject": "Welcome", + "syntax": "liquid", + "urlLifetimeInSeconds": 3600 }, "status": 200, "response": { - "id": "con_cvOdQDkXpKvaMNSh", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "import_mode": false, - "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "password_history": { - "size": 5, - "enable": false - }, - "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true - }, - "strategy": "auth0", - "name": "boo-baz-db-connection-test", - "is_domain_connection": false, - "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ], - "realms": [ - "boo-baz-db-connection-test" - ] + "template": "welcome_email", + "body": "\n \n

Welcome!

\n \n\n", + "from": "", + "resultUrl": "https://example.com/welcome", + "subject": "Welcome", + "syntax": "liquid", + "urlLifetimeInSeconds": 3600, + "enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -7746,74 +4790,25 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/connections/con_orWZyMv2k9PgOd3x", + "path": "/api/v2/email-templates/verify_email", "body": { - "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" - ], - "is_domain_connection": false, - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "passwordPolicy": "good", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true - }, - "realms": [ - "Username-Password-Authentication" - ] + "template": "verify_email", + "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", + "enabled": true, + "from": "", + "subject": "", + "syntax": "liquid", + "urlLifetimeInSeconds": 432000 }, "status": 200, "response": { - "id": "con_orWZyMv2k9PgOd3x", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "passwordPolicy": "good", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true - }, - "strategy": "auth0", - "name": "Username-Password-Authentication", - "is_domain_connection": false, - "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" - ], - "realms": [ - "Username-Password-Authentication" - ] + "template": "verify_email", + "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", + "from": "", + "subject": "", + "syntax": "liquid", + "urlLifetimeInSeconds": 432000, + "enabled": true }, "rawHeaders": [], "responseIsBinary": false @@ -7821,1748 +4816,148 @@ { "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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "total": 11, + "total": 3, "start": 0, - "limit": 100, - "clients": [ - { - "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" - }, - "cross_origin_authentication": true, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "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 - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Default App", - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "oidc_conformant": true, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "API Explorer Application", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "web_origins": [], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", - "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 - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", - "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 - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "The Default App", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": false, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso": false, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Test SPA", - "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], - "callbacks": [ - "http://localhost:3000" - ], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": true, - "refresh_token": { - "expiration_type": "expiring", - "leeway": 0, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "infinite_token_lifetime": false, - "infinite_idle_token_lifetime": false, - "rotation_type": "rotating" - }, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "none", - "app_type": "spa", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token" - ], - "web_origins": [ - "http://localhost:3000" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "auth0-deploy-cli-extension", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": true, - "callbacks": [], - "is_first_party": true, - "name": "All Applications", - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "owners": [ - "mr|samlp|okta|will.vedder@auth0.com", - "mr|google-oauth2|102002633619863830825", - "mr|samlp|okta|frederik.prijck@auth0.com", - "mr|google-oauth2|109614534713742077035", - "mr|google-oauth2|116771660953104383819" - ], - "custom_login_page": "TEST123\n", - "cross_origin_authentication": true, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Isi93ibGHIGwmdYjsLwTOn7Gu7nwxU3V", - "client_secret": "[REDACTED]", - "custom_login_page_on": true - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "total": 3, - "start": 0, - "limit": 100, - "connections": [ - { - "id": "con_cvOdQDkXpKvaMNSh", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "import_mode": false, - "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "password_history": { - "size": 5, - "enable": false - }, - "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true - }, - "strategy": "auth0", - "name": "boo-baz-db-connection-test", - "is_domain_connection": false, - "realms": [ - "boo-baz-db-connection-test" - ], - "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] - }, - { - "id": "con_SXIEWGYv5QzGSoqq", - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true - }, - "strategy": "google-oauth2", - "name": "google-oauth2", - "is_domain_connection": false, - "realms": [ - "google-oauth2" - ], - "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" - ] - }, - { - "id": "con_orWZyMv2k9PgOd3x", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "passwordPolicy": "good", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true - }, - "strategy": "auth0", - "name": "Username-Password-Authentication", - "is_domain_connection": false, - "realms": [ - "Username-Password-Authentication" - ], - "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" - ] - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/connections?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "total": 3, - "start": 0, - "limit": 100, - "connections": [ - { - "id": "con_cvOdQDkXpKvaMNSh", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "import_mode": false, - "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "password_history": { - "size": 5, - "enable": false - }, - "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true - }, - "strategy": "auth0", - "name": "boo-baz-db-connection-test", - "is_domain_connection": false, - "realms": [ - "boo-baz-db-connection-test" - ], - "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] - }, - { - "id": "con_SXIEWGYv5QzGSoqq", - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true - }, - "strategy": "google-oauth2", - "name": "google-oauth2", - "is_domain_connection": false, - "realms": [ - "google-oauth2" - ], - "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" - ] - }, - { - "id": "con_orWZyMv2k9PgOd3x", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "passwordPolicy": "good", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "strategy_version": 2, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true - }, - "strategy": "auth0", - "name": "Username-Password-Authentication", - "is_domain_connection": false, - "realms": [ - "Username-Password-Authentication" - ], - "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" - ] - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/connections/con_SXIEWGYv5QzGSoqq", - "body": { - "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" - ], - "is_domain_connection": false, - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true - } - }, - "status": 200, - "response": { - "id": "con_SXIEWGYv5QzGSoqq", - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true - }, - "strategy": "google-oauth2", - "name": "google-oauth2", - "is_domain_connection": false, - "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" - ], - "realms": [ - "google-oauth2" - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/email-templates/verify_email", - "body": { - "template": "verify_email", - "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", - "enabled": true, - "from": "", - "subject": "", - "syntax": "liquid", - "urlLifetimeInSeconds": 432000 - }, - "status": 200, - "response": { - "template": "verify_email", - "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", - "from": "", - "subject": "", - "syntax": "liquid", - "urlLifetimeInSeconds": 432000, - "enabled": true - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/email-templates/welcome_email", - "body": { - "template": "welcome_email", - "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", - "enabled": false, - "from": "", - "resultUrl": "https://travel0.com/welcome", - "subject": "Welcome", - "syntax": "liquid", - "urlLifetimeInSeconds": 3600 - }, - "status": 200, - "response": { - "template": "welcome_email", - "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", - "from": "", - "resultUrl": "https://travel0.com/welcome", - "subject": "Welcome", - "syntax": "liquid", - "urlLifetimeInSeconds": 3600, - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/clients?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "total": 11, - "start": 0, - "limit": 100, - "clients": [ - { - "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" - }, - "cross_origin_authentication": true, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "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 - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Default App", - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "oidc_conformant": true, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "API Explorer Application", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Node App", - "allowed_clients": [], - "allowed_logout_urls": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "allowed_origins": [], - "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "regular_web", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "web_origins": [], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Terraform Provider", - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", - "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 - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Quickstarts API (Test Application)", - "client_metadata": { - "foo": "bar" - }, - "cross_origin_auth": false, - "is_first_party": true, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", - "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 - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "The Default App", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": false, - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "sso": false, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Test SPA", - "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], - "callbacks": [ - "http://localhost:3000" - ], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "oidc_conformant": true, - "refresh_token": { - "expiration_type": "expiring", - "leeway": 0, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "infinite_token_lifetime": false, - "infinite_idle_token_lifetime": false, - "rotation_type": "rotating" - }, - "sso_disabled": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "none", - "app_type": "spa", - "grant_types": [ - "authorization_code", - "implicit", - "refresh_token" - ], - "web_origins": [ - "http://localhost:3000" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "auth0-deploy-cli-extension", - "allowed_clients": [], - "callbacks": [], - "client_metadata": {}, - "cross_origin_auth": false, - "is_first_party": true, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": true, - "callbacks": [], - "is_first_party": true, - "name": "All Applications", - "refresh_token": { - "expiration_type": "non-expiring", - "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, - "rotation_type": "non-rotating" - }, - "owners": [ - "mr|samlp|okta|will.vedder@auth0.com", - "mr|google-oauth2|102002633619863830825", - "mr|samlp|okta|frederik.prijck@auth0.com", - "mr|google-oauth2|109614534713742077035", - "mr|google-oauth2|116771660953104383819" - ], - "custom_login_page": "TEST123\n", - "cross_origin_authentication": true, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "Isi93ibGHIGwmdYjsLwTOn7Gu7nwxU3V", - "client_secret": "[REDACTED]", - "custom_login_page_on": true - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/client-grants?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "total": 3, - "start": 0, - "limit": 100, - "client_grants": [ - { - "id": "cgr_P3XzavTQSyFaV8mr", - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", - "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" - ] - }, - { - "id": "cgr_SDgpXDXvWBtO3KEi", - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", - "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" - ] + "limit": 100, + "clients": [ + { + "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" + }, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Default App", + "callbacks": [], + "cross_origin_auth": false, + "is_first_party": true, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": true, + "callbacks": [], + "is_first_party": true, + "name": "All Applications", + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "owners": [ + "mr|samlp|okta|will.vedder@auth0.com", + "mr|google-oauth2|102002633619863830825", + "mr|samlp|okta|frederik.prijck@auth0.com", + "mr|google-oauth2|109614534713742077035", + "mr|google-oauth2|116771660953104383819" + ], + "custom_login_page": "TEST123\n", + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Isi93ibGHIGwmdYjsLwTOn7Gu7nwxU3V", + "client_secret": "[REDACTED]", + "custom_login_page_on": true + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/client-grants?per_page=100&page=0&include_totals=true", + "body": "", + "status": 200, + "response": { + "total": 1, + "start": 0, + "limit": 100, + "client_grants": [ { "id": "cgr_t3j1isctGZmOVylt", "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", @@ -9692,682 +5087,43 @@ "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:scim_config", - "create:scim_config", - "update:scim_config", - "delete:scim_config", - "create:scim_token", - "read:scim_token", - "delete:scim_token", - "delete:phone_providers", - "create:phone_providers", - "read:phone_providers", - "update:phone_providers", - "delete:phone_templates", - "create:phone_templates", - "read:phone_templates", - "update:phone_templates", - "create:encryption_keys", - "read:encryption_keys", - "update:encryption_keys", - "delete:encryption_keys", - "read:client_credentials", - "create:client_credentials", - "update:client_credentials", - "delete:client_credentials" - ] - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/client-grants/cgr_SDgpXDXvWBtO3KEi", - "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" - ] - }, - "status": 200, - "response": { - "id": "cgr_SDgpXDXvWBtO3KEi", - "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", - "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" - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/client-grants/cgr_P3XzavTQSyFaV8mr", - "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" - ] - }, - "status": 200, - "response": { - "id": "cgr_P3XzavTQSyFaV8mr", - "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", - "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" - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/roles?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "roles": [ - { - "id": "rol_hRGDQmEBYbZsC8sZ", - "name": "Admin", - "description": "Can read and write things" - }, - { - "id": "rol_oT9S2f9KYqFyYR2j", - "name": "Reader", - "description": "Can only read things" - }, - { - "id": "rol_ZNeuVHhKZTaZaGwq", - "name": "read_only", - "description": "Read Only" - }, - { - "id": "rol_1DwrDRZ26bdvfKxL", - "name": "read_osnly", - "description": "Readz Only" - } - ], - "start": 0, - "limit": 100, - "total": 4 - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/roles/rol_hRGDQmEBYbZsC8sZ/permissions?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "permissions": [], - "start": 0, - "limit": 100, - "total": 0 - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/roles/rol_oT9S2f9KYqFyYR2j/permissions?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "permissions": [], - "start": 0, - "limit": 100, - "total": 0 - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/roles/rol_ZNeuVHhKZTaZaGwq/permissions?include_totals=true&page=0&per_page=100", - "body": "", - "status": 200, - "response": { - "permissions": [], - "start": 0, - "limit": 100, - "total": 0 + "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:scim_config", + "create:scim_config", + "update:scim_config", + "delete:scim_config", + "create:scim_token", + "read:scim_token", + "delete:scim_token", + "delete:phone_providers", + "create:phone_providers", + "read:phone_providers", + "update:phone_providers", + "delete:phone_templates", + "create:phone_templates", + "read:phone_templates", + "update:phone_templates", + "create:encryption_keys", + "read:encryption_keys", + "update:encryption_keys", + "delete:encryption_keys", + "read:client_credentials", + "create:client_credentials", + "update:client_credentials", + "delete:client_credentials" + ] + } + ] }, "rawHeaders": [], "responseIsBinary": false @@ -10375,11 +5131,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_1DwrDRZ26bdvfKxL/permissions?include_totals=true&page=0&per_page=100", + "path": "/api/v2/roles?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "permissions": [], + "roles": [], "start": 0, "limit": 100, "total": 0 @@ -10387,74 +5143,6 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/roles/rol_oT9S2f9KYqFyYR2j", - "body": { - "name": "Reader", - "description": "Can only read things" - }, - "status": 200, - "response": { - "id": "rol_oT9S2f9KYqFyYR2j", - "name": "Reader", - "description": "Can only read things" - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/roles/rol_ZNeuVHhKZTaZaGwq", - "body": { - "name": "read_only", - "description": "Read Only" - }, - "status": 200, - "response": { - "id": "rol_ZNeuVHhKZTaZaGwq", - "name": "read_only", - "description": "Read Only" - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/roles/rol_hRGDQmEBYbZsC8sZ", - "body": { - "name": "Admin", - "description": "Can read and write things" - }, - "status": 200, - "response": { - "id": "rol_hRGDQmEBYbZsC8sZ", - "name": "Admin", - "description": "Can read and write things" - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/roles/rol_1DwrDRZ26bdvfKxL", - "body": { - "name": "read_osnly", - "description": "Readz Only" - }, - "status": 200, - "response": { - "id": "rol_1DwrDRZ26bdvfKxL", - "name": "read_osnly", - "description": "Readz Only" - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -10462,129 +5150,12 @@ "body": "", "status": 200, "response": { - "actions": [ - { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", - "name": "My Custom Action", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-09T13:36:40.436910946Z", - "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", - "dependencies": [], - "runtime": "node16", - "status": "built", - "secrets": [], - "current_version": { - "id": "3d2b275c-8b1f-46ac-baf0-d0dec2cb1ce8", - "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", - "runtime": "node16", - "status": "BUILT", - "number": 2, - "build_time": "2024-10-09T13:36:41.550114510Z", - "created_at": "2024-10-09T13:36:41.424992733Z", - "updated_at": "2024-10-09T13:36:41.551127670Z" - }, - "deployed_version": { - "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", - "dependencies": [], - "id": "3d2b275c-8b1f-46ac-baf0-d0dec2cb1ce8", - "deployed": true, - "number": 2, - "built_at": "2024-10-09T13:36:41.550114510Z", - "secrets": [], - "status": "built", - "created_at": "2024-10-09T13:36:41.424992733Z", - "updated_at": "2024-10-09T13:36:41.551127670Z", - "runtime": "node16", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ] - }, - "all_changes_deployed": true - } - ], - "total": 1, + "actions": [], "per_page": 100 }, "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/actions/actions/ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", - "body": { - "name": "My Custom Action", - "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", - "dependencies": [], - "runtime": "node16", - "secrets": [], - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ] - }, - "status": 200, - "response": { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", - "name": "My Custom Action", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:07:08.590000474Z", - "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", - "dependencies": [], - "runtime": "node16", - "status": "pending", - "secrets": [], - "current_version": { - "id": "3d2b275c-8b1f-46ac-baf0-d0dec2cb1ce8", - "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", - "runtime": "node16", - "status": "BUILT", - "number": 2, - "build_time": "2024-10-09T13:36:41.550114510Z", - "created_at": "2024-10-09T13:36:41.424992733Z", - "updated_at": "2024-10-09T13:36:41.551127670Z" - }, - "deployed_version": { - "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", - "dependencies": [], - "id": "3d2b275c-8b1f-46ac-baf0-d0dec2cb1ce8", - "deployed": true, - "number": 2, - "built_at": "2024-10-09T13:36:41.550114510Z", - "secrets": [], - "status": "built", - "created_at": "2024-10-09T13:36:41.424992733Z", - "updated_at": "2024-10-09T13:36:41.551127670Z", - "runtime": "node16", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ] - }, - "all_changes_deployed": true - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -10592,101 +5163,12 @@ "body": "", "status": 200, "response": { - "actions": [ - { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", - "name": "My Custom Action", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:07:08.590000474Z", - "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", - "dependencies": [], - "runtime": "node16", - "status": "built", - "secrets": [], - "current_version": { - "id": "3d2b275c-8b1f-46ac-baf0-d0dec2cb1ce8", - "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", - "runtime": "node16", - "status": "BUILT", - "number": 2, - "build_time": "2024-10-09T13:36:41.550114510Z", - "created_at": "2024-10-09T13:36:41.424992733Z", - "updated_at": "2024-10-09T13:36:41.551127670Z" - }, - "deployed_version": { - "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", - "dependencies": [], - "id": "3d2b275c-8b1f-46ac-baf0-d0dec2cb1ce8", - "deployed": true, - "number": 2, - "built_at": "2024-10-09T13:36:41.550114510Z", - "secrets": [], - "status": "built", - "created_at": "2024-10-09T13:36:41.424992733Z", - "updated_at": "2024-10-09T13:36:41.551127670Z", - "runtime": "node16", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ] - }, - "all_changes_deployed": true - } - ], - "total": 1, + "actions": [], "per_page": 100 }, "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/actions/actions/ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f/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", - "dependencies": [], - "id": "17c5aa54-9fe1-4255-bfdb-89a8640a0820", - "deployed": false, - "number": 3, - "secrets": [], - "status": "built", - "created_at": "2024-10-14T09:07:09.656359071Z", - "updated_at": "2024-10-14T09:07:09.656359071Z", - "runtime": "node16", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ], - "action": { - "id": "ec86cbd0-ef6e-47c3-bbf3-bfc96f7fb55f", - "name": "My Custom Action", - "supported_triggers": [ - { - "id": "post-login", - "version": "v2" - } - ], - "created_at": "2024-10-09T13:34:16.553437433Z", - "updated_at": "2024-10-14T09:07:08.582721748Z", - "all_changes_deployed": false - } - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", @@ -10712,60 +5194,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true", + "path": "/api/v2/organizations?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "organizations": [ - { - "id": "org_knGmCqfHxLD0V9YB", - "name": "org1", - "display_name": "Organization", - "branding": { - "colors": { - "page_background": "#fff5f5", - "primary": "#57ddff" - } - } - }, - { - "id": "org_haOYEECGVpZwU9Tc", - "name": "org2", - "display_name": "Organization2" - } - ], + "organizations": [], "start": 0, - "limit": 50, - "total": 2 - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/organizations?include_totals=true&take=50", - "body": "", - "status": 200, - "response": { - "organizations": [ - { - "id": "org_knGmCqfHxLD0V9YB", - "name": "org1", - "display_name": "Organization", - "branding": { - "colors": { - "page_background": "#fff5f5", - "primary": "#57ddff" - } - } - }, - { - "id": "org_haOYEECGVpZwU9Tc", - "name": "org2", - "display_name": "Organization2" - } - ] + "limit": 100, + "total": 0 }, "rawHeaders": [], "responseIsBinary": false @@ -10773,118 +5209,16 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_knGmCqfHxLD0V9YB/enabled_connections", - "body": "", - "status": 200, - "response": [], - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/organizations/org_haOYEECGVpZwU9Tc/enabled_connections", - "body": "", - "status": 200, - "response": [], - "rawHeaders": [], - "responseIsBinary": false - }, - { - "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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "total": 3, + "total": 1, "start": 0, "limit": 100, "connections": [ { - "id": "con_cvOdQDkXpKvaMNSh", - "options": { - "mfa": { - "active": true, - "return_enroll_settings": true - }, - "import_mode": false, - "customScripts": { - "login": "function login(email, password, callback) {\n // This script should authenticate a user against the credentials stored in\n // your database.\n // It is executed when a user attempts to log in or immediately after signing\n // up (as a verification that the user was successfully signed up).\n //\n // Everything returned by this script will be set as part of the user profile\n // and will be visible by any of the tenant admins. Avoid adding attributes\n // with values such as passwords, keys, secrets, etc.\n //\n // The `password` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database. For example:\n //\n // var bcrypt = require('bcrypt@0.8.5');\n // bcrypt.compare(password, dbPasswordHash, function(err, res)) { ... }\n //\n // There are three ways this script can finish:\n // 1. The user's credentials are valid. The returned user profile should be in\n // the following format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema\n // var profile = {\n // user_id: ..., // user_id is mandatory\n // email: ...,\n // [...]\n // };\n // callback(null, profile);\n // 2. The user's credentials are invalid\n // callback(new WrongUsernameOrPasswordError(email, \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n //\n // A list of Node.js modules which can be referenced is available here:\n //\n // https://tehsis.github.io/webtaskio-canirequire/\n console.log('AYYYYYE');\n\n const msg =\n 'Please implement the Login script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "create": "function create(user, callback) {\n // This script should create a user entry in your existing database. It will\n // be executed when a user attempts to sign up, or when a user is created\n // through the Auth0 dashboard or API.\n // When this script has finished executing, the Login script will be\n // executed immediately afterwards, to verify that the user was created\n // successfully.\n //\n // The user object will always contain the following properties:\n // * email: the user's email\n // * password: the password entered by the user, in plain text\n // * tenant: the name of this Auth0 account\n // * client_id: the client ID of the application where the user signed up, or\n // API key if created through the API or Auth0 dashboard\n // * connection: the name of this database connection\n //\n // There are three ways this script can finish:\n // 1. A user was successfully created\n // callback(null);\n // 2. This user already exists in your database\n // callback(new ValidationError(\"user_exists\", \"my error message\"));\n // 3. Something went wrong while trying to reach your database\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Create script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "delete": "function remove(id, callback) {\n // This script remove a user from your existing database.\n // It is executed whenever a user is deleted from the API or Auth0 dashboard.\n //\n // There are two ways that this script can finish:\n // 1. The user was removed successfully:\n // callback(null);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Delete script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "verify": "function verify(email, callback) {\n // This script should mark the current user's email address as verified in\n // your database.\n // It is executed whenever a user clicks the verification link sent by email.\n // These emails can be customized at https://manage.auth0.com/#/emails.\n // It is safe to assume that the user's email already exists in your database,\n // because verification emails, if enabled, are sent immediately after a\n // successful signup.\n //\n // There are two ways that this script can finish:\n // 1. The user's email was verified successfully\n // callback(null, true);\n // 2. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the verification link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Verify script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "get_user": "function getByEmail(email, callback) {\n // This script should retrieve a user profile from your existing database,\n // without authenticating the user.\n // It is used to check if a user exists before executing flows that do not\n // require authentication (signup and password reset).\n //\n // There are three ways this script can finish:\n // 1. A user was successfully found. The profile should be in the following\n // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema.\n // callback(null, profile);\n // 2. A user was not found\n // callback(null);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n\n const msg =\n 'Please implement the Get User script for this database connection ' +\n 'at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n", - "change_password": "function changePassword(email, newPassword, callback) {\n // This script should change the password stored for the current user in your\n // database. It is executed when the user clicks on the confirmation link\n // after a reset password request.\n // The content and behavior of password confirmation emails can be customized\n // here: https://manage.auth0.com/#/emails\n // The `newPassword` parameter of this function is in plain text. It must be\n // hashed/salted to match whatever is stored in your database.\n //\n // There are three ways that this script can finish:\n // 1. The user's password was updated successfully:\n // callback(null, true);\n // 2. The user's password was not updated:\n // callback(null, false);\n // 3. Something went wrong while trying to reach your database:\n // callback(new Error(\"my error message\"));\n //\n // If an error is returned, it will be passed to the query string of the page\n // where the user is being redirected to after clicking the confirmation link.\n // For example, returning `callback(new Error(\"error\"))` and redirecting to\n // https://example.com would redirect to the following URL:\n // https://example.com?email=alice%40example.com&message=error&success=false\n\n const msg =\n 'Please implement the Change Password script for this database ' +\n 'connection at https://manage.auth0.com/#/connections/database';\n return callback(new Error(msg));\n}\n" - }, - "disable_signup": false, - "passwordPolicy": "low", - "passkey_options": { - "challenge_ui": "both", - "local_enrollment_enabled": true, - "progressive_enrollment_enabled": true - }, - "password_history": { - "size": 5, - "enable": false - }, - "strategy_version": 2, - "requires_username": true, - "password_dictionary": { - "enable": true, - "dictionary": [] - }, - "authentication_methods": { - "passkey": { - "enabled": false - }, - "password": { - "enabled": true - } - }, - "brute_force_protection": true, - "password_no_personal_info": { - "enable": true - }, - "password_complexity_options": { - "min_length": 8 - }, - "enabledDatabaseCustomization": true - }, - "strategy": "auth0", - "name": "boo-baz-db-connection-test", - "is_domain_connection": false, - "realms": [ - "boo-baz-db-connection-test" - ], - "enabled_clients": [ - "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", - "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ" - ] - }, - { - "id": "con_SXIEWGYv5QzGSoqq", - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true - }, - "strategy": "google-oauth2", - "name": "google-oauth2", - "is_domain_connection": false, - "realms": [ - "google-oauth2" - ], - "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3" - ] - }, - { - "id": "con_orWZyMv2k9PgOd3x", + "id": "con_nH4AIKkSAzWLnzAk", "options": { "mfa": { "active": true, @@ -10914,7 +5248,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "HBD4IJq84zfg3WfK9BIYdyP5kDqTyoqE", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -10923,57 +5257,13 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/organizations/org_haOYEECGVpZwU9Tc", - "body": { - "display_name": "Organization2" - }, - "status": 200, - "response": { - "id": "org_haOYEECGVpZwU9Tc", - "display_name": "Organization2", - "name": "org2" - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/organizations/org_knGmCqfHxLD0V9YB", - "body": { - "branding": { - "colors": { - "page_background": "#fff5f5", - "primary": "#57ddff" - } - }, - "display_name": "Organization" - }, - "status": 200, - "response": { - "branding": { - "colors": { - "page_background": "#fff5f5", - "primary": "#57ddff" - } - }, - "id": "org_knGmCqfHxLD0V9YB", - "display_name": "Organization", - "name": "org1" - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", "path": "/api/v2/tenants/settings", "body": { "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" + "https://mycompany.org/logoutCallback" ], "enabled_locales": [ "en" @@ -10991,14 +5281,14 @@ "disable_clickjack_protection_headers": false, "enable_pipeline2": false }, - "friendly_name": "This tenant name should be preserved", + "friendly_name": "My Test Tenant", "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", "sandbox_version": "12", "session_cookie": { "mode": "non-persistent" }, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", + "support_email": "support@mycompany.org", + "support_url": "https://mycompany.org/support", "universal_login": { "colors": { "primary": "#F8F8F2", @@ -11011,7 +5301,7 @@ "status": 200, "response": { "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" + "https://mycompany.org/logoutCallback" ], "change_password": { "enabled": true, @@ -11047,7 +5337,7 @@ "disable_clickjack_protection_headers": false, "enable_pipeline2": false }, - "friendly_name": "This tenant name should be preserved", + "friendly_name": "My Test Tenant", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" @@ -11056,8 +5346,8 @@ "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", "sandbox_version": "12", "session_lifetime": 3.0166666666666666, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", + "support_email": "support@mycompany.org", + "support_url": "https://mycompany.org/support", "universal_login": { "colors": { "primary": "#F8F8F2", 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 9d454f284..0a4a63466 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?page=0&per_page=100&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?page=0&per_page=100&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?page=0&per_page=100&include_totals=true&is_global=true", "body": "", "status": 200, "response": { @@ -68,9 +68,12 @@ "owners": [ "mr|samlp|okta|will.vedder@auth0.com", "mr|google-oauth2|102002633619863830825", - "mr|samlp|okta|frederik.prijck@auth0.com" + "mr|samlp|okta|frederik.prijck@auth0.com", + "mr|google-oauth2|109614534713742077035", + "mr|google-oauth2|116771660953104383819" ], "custom_login_page": "TEST123\n", + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -95,15 +98,14 @@ "status": 200, "response": { "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" + "https://mycompany.org/logoutCallback" ], "change_password": { "enabled": true, "html": "Change Password\n" }, "enabled_locales": [ - "en", - "es" + "en" ], "error_page": { "html": "Error Page\n", @@ -130,7 +132,7 @@ "disable_clickjack_protection_headers": false, "enable_pipeline2": false }, - "friendly_name": "This tenant name should be preserved", + "friendly_name": "My Test Tenant", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" @@ -139,8 +141,8 @@ "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", "sandbox_version": "12", "session_lifetime": 3.0166666666666666, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", + "support_email": "support@mycompany.org", + "support_url": "https://mycompany.org/support", "universal_login": { "colors": { "primary": "#F8F8F2", @@ -162,7 +164,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?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { @@ -796,6 +798,118 @@ "description": "Delete encryption keys", "value": "delete:encryption_keys" }, + { + "description": "Read Sessions", + "value": "read:sessions" + }, + { + "description": "Delete Sessions", + "value": "delete:sessions" + }, + { + "description": "Read Refresh Tokens", + "value": "read:refresh_tokens" + }, + { + "description": "Delete Refresh Tokens", + "value": "delete:refresh_tokens" + }, + { + "description": "Create Self Service Profiles", + "value": "create:self_service_profiles" + }, + { + "description": "Read Self Service Profiles", + "value": "read:self_service_profiles" + }, + { + "description": "Update Self Service Profiles", + "value": "update:self_service_profiles" + }, + { + "description": "Delete Self Service Profiles", + "value": "delete:self_service_profiles" + }, + { + "description": "Create SSO Access Tickets", + "value": "create:sso_access_tickets" + }, + { + "description": "Read Forms", + "value": "read:forms" + }, + { + "description": "Update Forms", + "value": "update:forms" + }, + { + "description": "Delete Forms", + "value": "delete:forms" + }, + { + "description": "Create Forms", + "value": "create:forms" + }, + { + "description": "Read Flows", + "value": "read:flows" + }, + { + "description": "Update Flows", + "value": "update:flows" + }, + { + "description": "Delete Flows", + "value": "delete:flows" + }, + { + "description": "Create Flows", + "value": "create:flows" + }, + { + "description": "Read Flows Vault items", + "value": "read:flows_vault" + }, + { + "description": "Read Flows Vault connections", + "value": "read:flows_vault_connections" + }, + { + "description": "Update Flows Vault connections", + "value": "update:flows_vault_connections" + }, + { + "description": "Delete Flows Vault connections", + "value": "delete:flows_vault_connections" + }, + { + "description": "Create Flows Vault connections", + "value": "create:flows_vault_connections" + }, + { + "description": "Read Flows Executions", + "value": "read:flows_executions" + }, + { + "description": "Delete Flows Executions", + "value": "delete:flows_executions" + }, + { + "description": "Read Connections Options", + "value": "read:connections_options" + }, + { + "description": "Update Connections Options", + "value": "update:connections_options" + }, + { + "description": "Read Self Service Profile Custom Texts", + "value": "read:self_service_profile_custom_texts" + }, + { + "description": "Update Self Service Profile Custom Texts", + "value": "update:self_service_profile_custom_texts" + }, { "value": "read:client_credentials", "description": "Read Client Credentials" @@ -823,7 +937,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?page=0&per_page=100&include_totals=true&is_global=false", "body": "", "status": 200, "response": { @@ -835,21 +949,21 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Default App", - "callbacks": [], - "cross_origin_auth": 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": 2592000, - "idle_token_lifetime": 1296000, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, - "sso_disabled": false, + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -857,7 +971,7 @@ "subject": "deprecated" } ], - "client_id": "WM31waMImeHDtQnjVLPzg2uvu00vgdim", + "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -865,10 +979,9 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], "custom_login_page_on": true @@ -877,20 +990,21 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Deploy CLI", + "name": "Default App", + "callbacks": [], + "cross_origin_auth": false, "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, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, "rotation_type": "non-rotating" }, + "sso_disabled": false, "signing_keys": [ { "cert": "[REDACTED]", @@ -898,7 +1012,7 @@ "subject": "deprecated" } ], - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "client_id": "kReg2CptPN821kn7Iw9B80tfE4eP5YtD", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -906,9 +1020,10 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], "custom_login_page_on": true @@ -921,7 +1036,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?per_page=100&page=0&include_totals=true&strategy=auth0", "body": "", "status": 200, "response": { @@ -930,14 +1045,27 @@ "limit": 100, "connections": [ { - "id": "con_tPtALYZ6wQWOFos3", + "id": "con_3TeCCeAZajlPXSuP", "options": { "mfa": { "active": true, "return_enroll_settings": true }, "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, "brute_force_protection": true }, "strategy": "auth0", @@ -947,7 +1075,8 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "WM31waMImeHDtQnjVLPzg2uvu00vgdim" + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "kReg2CptPN821kn7Iw9B80tfE4eP5YtD" ] } ] @@ -958,7 +1087,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -967,14 +1096,27 @@ "limit": 100, "connections": [ { - "id": "con_tPtALYZ6wQWOFos3", + "id": "con_3TeCCeAZajlPXSuP", "options": { "mfa": { "active": true, "return_enroll_settings": true }, "passwordPolicy": "good", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, "strategy_version": 2, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true + } + }, "brute_force_protection": true }, "strategy": "auth0", @@ -984,7 +1126,8 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "WM31waMImeHDtQnjVLPzg2uvu00vgdim" + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "kReg2CptPN821kn7Iw9B80tfE4eP5YtD" ] } ] @@ -1000,15 +1143,14 @@ "status": 200, "response": { "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" + "https://mycompany.org/logoutCallback" ], "change_password": { "enabled": true, "html": "Change Password\n" }, "enabled_locales": [ - "en", - "es" + "en" ], "error_page": { "html": "Error Page\n", @@ -1035,7 +1177,7 @@ "disable_clickjack_protection_headers": false, "enable_pipeline2": false }, - "friendly_name": "This tenant name should be preserved", + "friendly_name": "My Test Tenant", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" @@ -1044,8 +1186,8 @@ "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", "sandbox_version": "12", "session_lifetime": 3.0166666666666666, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", + "support_email": "support@mycompany.org", + "support_url": "https://mycompany.org/support", "universal_login": { "colors": { "primary": "#F8F8F2", @@ -1067,7 +1209,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/emails/provider?include_fields=true&fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address", + "path": "/api/v2/emails/provider?fields=name%2Cenabled%2Ccredentials%2Csettings%2Cdefault_from_address&include_fields=true", "body": "", "status": 200, "response": { @@ -1082,14 +1224,17 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/verify_email_by_code", + "path": "/api/v2/email-templates/verify_email", "body": "", - "status": 404, + "status": 200, "response": { - "statusCode": 404, - "error": "Not Found", - "message": "The template does not exist.", - "errorCode": "inexistent_email_template" + "template": "verify_email", + "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", + "from": "", + "subject": "", + "syntax": "liquid", + "urlLifetimeInSeconds": 432000, + "enabled": true }, "rawHeaders": [], "responseIsBinary": false @@ -1097,7 +1242,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/mfa_oob_code", + "path": "/api/v2/email-templates/verify_email_by_code", "body": "", "status": 404, "response": { @@ -1112,7 +1257,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/enrollment_email", + "path": "/api/v2/email-templates/stolen_credentials", "body": "", "status": 404, "response": { @@ -1127,7 +1272,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/blocked_account", + "path": "/api/v2/email-templates/reset_email", "body": "", "status": 404, "response": { @@ -1142,7 +1287,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/change_password", + "path": "/api/v2/email-templates/user_invitation", "body": "", "status": 404, "response": { @@ -1157,7 +1302,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/stolen_credentials", + "path": "/api/v2/email-templates/mfa_oob_code", "body": "", "status": 404, "response": { @@ -1172,18 +1317,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/welcome_email", + "path": "/api/v2/email-templates/change_password", "body": "", - "status": 200, + "status": 404, "response": { - "template": "welcome_email", - "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", - "from": "", - "resultUrl": "https://travel0.com/welcome", - "subject": "Welcome", - "syntax": "liquid", - "urlLifetimeInSeconds": 3600, - "enabled": false + "statusCode": 404, + "error": "Not Found", + "message": "The template does not exist.", + "errorCode": "inexistent_email_template" }, "rawHeaders": [], "responseIsBinary": false @@ -1191,7 +1332,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/password_reset", + "path": "/api/v2/email-templates/blocked_account", "body": "", "status": 404, "response": { @@ -1206,7 +1347,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/user_invitation", + "path": "/api/v2/email-templates/enrollment_email", "body": "", "status": 404, "response": { @@ -1221,17 +1362,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/verify_email", + "path": "/api/v2/email-templates/password_reset", "body": "", - "status": 200, + "status": 404, "response": { - "template": "verify_email", - "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", - "from": "", - "subject": "", - "syntax": "liquid", - "urlLifetimeInSeconds": 432000, - "enabled": true + "statusCode": 404, + "error": "Not Found", + "message": "The template does not exist.", + "errorCode": "inexistent_email_template" }, "rawHeaders": [], "responseIsBinary": false @@ -1239,14 +1377,18 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/reset_email", + "path": "/api/v2/email-templates/welcome_email", "body": "", - "status": 404, + "status": 200, "response": { - "statusCode": 404, - "error": "Not Found", - "message": "The template does not exist.", - "errorCode": "inexistent_email_template" + "template": "welcome_email", + "body": "\n \n

Welcome!

\n \n\n", + "from": "", + "resultUrl": "https://example.com/welcome", + "subject": "Welcome", + "syntax": "liquid", + "urlLifetimeInSeconds": 3600, + "enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -1254,7 +1396,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -1263,7 +1405,7 @@ "limit": 100, "client_grants": [ { - "id": "cgr_Uvfv2anWyTWpI1qQ", + "id": "cgr_t3j1isctGZmOVylt", "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ @@ -1534,7 +1676,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": { @@ -1558,7 +1700,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?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -1603,7 +1745,8 @@ "body": "", "status": 200, "response": { - "universal_login_experience": "new" + "universal_login_experience": "new", + "identifier_first": true }, "rawHeaders": [], "responseIsBinary": false @@ -1616,15 +1759,14 @@ "status": 200, "response": { "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" + "https://mycompany.org/logoutCallback" ], "change_password": { "enabled": true, "html": "Change Password\n" }, "enabled_locales": [ - "en", - "es" + "en" ], "error_page": { "html": "Error Page\n", @@ -1651,7 +1793,7 @@ "disable_clickjack_protection_headers": false, "enable_pipeline2": false }, - "friendly_name": "This tenant name should be preserved", + "friendly_name": "My Test Tenant", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" @@ -1660,8 +1802,8 @@ "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", "sandbox_version": "12", "session_lifetime": 3.0166666666666666, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", + "support_email": "support@mycompany.org", + "support_url": "https://mycompany.org/support", "universal_login": { "colors": { "primary": "#F8F8F2", @@ -1680,76 +1822,6 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/login/partials", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/login-id/partials", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/login-password/partials", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/login-passwordless/partials", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/signup/partials", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/signup-id/partials", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/signup-password/partials", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -1763,7 +1835,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-password/custom-text/en", + "path": "/api/v2/prompts/login/custom-text/en", "body": "", "status": 200, "response": {}, @@ -1773,7 +1845,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login/custom-text/en", + "path": "/api/v2/prompts/login-password/custom-text/en", "body": "", "status": 200, "response": {}, @@ -1783,7 +1855,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-email-verification/custom-text/en", + "path": "/api/v2/prompts/signup/custom-text/en", "body": "", "status": 200, "response": {}, @@ -1793,7 +1865,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup/custom-text/en", + "path": "/api/v2/prompts/login-email-verification/custom-text/en", "body": "", "status": 200, "response": {}, @@ -1873,7 +1945,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-webauthn/custom-text/en", + "path": "/api/v2/prompts/mfa-phone/custom-text/en", "body": "", "status": 200, "response": {}, @@ -1883,7 +1955,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-phone/custom-text/en", + "path": "/api/v2/prompts/mfa-webauthn/custom-text/en", "body": "", "status": 200, "response": {}, @@ -1950,16 +2022,6 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/email-verification/custom-text/en", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -1993,17 +2055,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/login-id/custom-text/es", + "path": "/api/v2/prompts/email-verification/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2023,17 +2075,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-email-verification/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/login-password/custom-text/es", + "path": "/api/v2/prompts/login-password/partials", "body": "", "status": 200, "response": {}, @@ -2043,7 +2085,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup/custom-text/es", + "path": "/api/v2/prompts/login/partials", "body": "", "status": 200, "response": {}, @@ -2053,7 +2095,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup-id/custom-text/es", + "path": "/api/v2/prompts/login-id/partials", "body": "", "status": 200, "response": {}, @@ -2063,7 +2105,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup-password/custom-text/es", + "path": "/api/v2/prompts/login-passwordless/partials", "body": "", "status": 200, "response": {}, @@ -2073,7 +2115,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/consent/custom-text/es", + "path": "/api/v2/prompts/signup/partials", "body": "", "status": 200, "response": {}, @@ -2083,7 +2125,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/reset-password/custom-text/es", + "path": "/api/v2/prompts/signup-id/partials", "body": "", "status": 200, "response": {}, @@ -2093,177 +2135,13 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-push/custom-text/es", + "path": "/api/v2/prompts/signup-password/partials", "body": "", "status": 200, "response": {}, "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/mfa-otp/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/mfa-voice/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/mfa-phone/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/mfa-webauthn/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/mfa-sms/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/mfa-recovery-code/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/mfa/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/mfa-email/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/status/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/device-flow/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/email-verification/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/email-otp-challenge/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/organizations/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/common/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/prompts/invitation/custom-text/es", - "body": "", - "status": 200, - "response": {}, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/migrations", - "body": "", - "status": 200, - "response": { - "flags": { - "role_users_offset_pagination_over_thousand": true - } - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -2285,6 +2163,18 @@ "status": 200, "response": { "triggers": [ + { + "id": "post-login", + "version": "v2", + "status": "DEPRECATED", + "runtimes": [ + "node12", + "node16" + ], + "default_runtime": "node16", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, { "id": "post-login", "version": "v3", @@ -2292,10 +2182,10 @@ "runtimes": [ "node12", "node16", - "node18", "node18-actions" ], "default_runtime": "node18-actions", + "binding_policy": "trigger-bound", "compatible_triggers": [ { "id": "post-login", @@ -2311,18 +2201,7 @@ "node12" ], "default_runtime": "node12", - "compatible_triggers": [] - }, - { - "id": "post-login", - "version": "v2", - "status": "DEPRECATED", - "runtimes": [ - "node12", - "node16", - "node18" - ], - "default_runtime": "node16", + "binding_policy": "trigger-bound", "compatible_triggers": [] }, { @@ -2333,6 +2212,7 @@ "node12" ], "default_runtime": "node12", + "binding_policy": "trigger-bound", "compatible_triggers": [] }, { @@ -2342,10 +2222,10 @@ "runtimes": [ "node12", "node16", - "node18", "node18-actions" ], "default_runtime": "node18-actions", + "binding_policy": "trigger-bound", "compatible_triggers": [] }, { @@ -2356,6 +2236,7 @@ "node12" ], "default_runtime": "node12", + "binding_policy": "trigger-bound", "compatible_triggers": [] }, { @@ -2365,10 +2246,10 @@ "runtimes": [ "node12", "node16", - "node18", "node18-actions" ], "default_runtime": "node18-actions", + "binding_policy": "trigger-bound", "compatible_triggers": [] }, { @@ -2379,6 +2260,7 @@ "node12" ], "default_runtime": "node12", + "binding_policy": "trigger-bound", "compatible_triggers": [] }, { @@ -2388,10 +2270,10 @@ "runtimes": [ "node12", "node16", - "node18", "node18-actions" ], "default_runtime": "node18-actions", + "binding_policy": "trigger-bound", "compatible_triggers": [] }, { @@ -2402,6 +2284,7 @@ "node12" ], "default_runtime": "node12", + "binding_policy": "trigger-bound", "compatible_triggers": [] }, { @@ -2411,19 +2294,10 @@ "runtimes": [ "node12", "node16", - "node18", "node18-actions" ], "default_runtime": "node18-actions", - "compatible_triggers": [] - }, - { - "id": "send-phone-message", - "version": "v1", - "status": "DEPRECATED", - "runtimes": [ - "node12" - ], + "binding_policy": "trigger-bound", "compatible_triggers": [] }, { @@ -2433,10 +2307,20 @@ "runtimes": [ "node12", "node16", - "node18", "node18-actions" ], "default_runtime": "node18-actions", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, + { + "id": "send-phone-message", + "version": "v1", + "status": "DEPRECATED", + "runtimes": [ + "node12" + ], + "binding_policy": "trigger-bound", "compatible_triggers": [] }, { @@ -2445,10 +2329,46 @@ "status": "CURRENT", "runtimes": [ "node16", - "node18", "node18-actions" ], "default_runtime": "node18-actions", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, + { + "id": "login-post-identifier", + "version": "v1", + "status": "CURRENT", + "default_runtime": "node18", + "binding_policy": "trigger-bound", + "runtimes": [], + "compatible_triggers": [] + }, + { + "id": "custom-phone-provider", + "version": "v1", + "status": "CURRENT", + "default_runtime": "node18", + "binding_policy": "trigger-bound", + "runtimes": [], + "compatible_triggers": [] + }, + { + "id": "custom-email-provider", + "version": "v1", + "status": "CURRENT", + "default_runtime": "node18", + "binding_policy": "trigger-bound", + "runtimes": [], + "compatible_triggers": [] + }, + { + "id": "custom-token-exchange-beta", + "version": "v1", + "status": "CURRENT", + "default_runtime": "node18", + "binding_policy": "trigger-bound", + "runtimes": [], "compatible_triggers": [] } ] @@ -2550,14 +2470,12 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true", + "path": "/api/v2/actions/triggers/login-post-identifier/bindings", "body": "", "status": 200, "response": { - "organizations": [], - "start": 0, - "limit": 50, - "total": 0 + "bindings": [], + "per_page": 20 }, "rawHeaders": [], "responseIsBinary": false @@ -2565,11 +2483,12 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?include_totals=true&take=50", + "path": "/api/v2/actions/triggers/custom-phone-provider/bindings", "body": "", "status": 200, "response": { - "organizations": [] + "bindings": [], + "per_page": 20 }, "rawHeaders": [], "responseIsBinary": false @@ -2577,26 +2496,40 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/attack-protection/suspicious-ip-throttling", + "path": "/api/v2/actions/triggers/custom-email-provider/bindings", "body": "", "status": 200, "response": { - "enabled": true, - "shields": [ - "admin_notification", - "block" - ], - "allowlist": [], - "stage": { - "pre-login": { - "max_attempts": 100, - "rate": 864000 - }, - "pre-user-registration": { - "max_attempts": 50, - "rate": 1200 - } - } + "bindings": [], + "per_page": 20 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/actions/triggers/custom-token-exchange-beta/bindings", + "body": "", + "status": 200, + "response": { + "bindings": [], + "per_page": 20 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations?page=0&per_page=100&include_totals=true", + "body": "", + "status": 200, + "response": { + "organizations": [], + "start": 0, + "limit": 100, + "total": 0 }, "rawHeaders": [], "responseIsBinary": false @@ -2643,7 +2576,34 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/log-streams?paginate=false", + "path": "/api/v2/attack-protection/suspicious-ip-throttling", + "body": "", + "status": 200, + "response": { + "enabled": true, + "shields": [ + "admin_notification", + "block" + ], + "allowlist": [], + "stage": { + "pre-login": { + "max_attempts": 100, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 50, + "rate": 1200 + } + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/log-streams", "body": "", "status": 200, "response": [], @@ -2653,7 +2613,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": [], @@ -2675,4 +2635,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 3ab4646c2..b5f2619ef 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 @@ -6,16 +6,12 @@ "body": "", "status": 200, "response": { - "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" - ], "change_password": { "enabled": true, "html": "Change Password\n" }, "enabled_locales": [ - "en", - "es" + "en" ], "error_page": { "html": "Error Page\n", @@ -26,46 +22,34 @@ "allow_changing_enable_sso": false, "allow_legacy_delegation_grant_types": true, "allow_legacy_ro_grant_types": true, - "change_pwd_flow_v1": false, "disable_impersonation": true, - "enable_apis_section": false, - "enable_client_connections": false, - "enable_custom_domain_in_emails": false, - "enable_dynamic_client_registration": false, - "enable_legacy_logs_search_v2": false, - "enable_public_signup_user_exists_error": true, + "enable_dynamic_client_registration": true, "enable_sso": true, "new_universal_login_experience_enabled": true, "universal_login": true, - "use_scope_descriptions_for_consent": false, "revoke_refresh_token_grant": false, - "disable_clickjack_protection_headers": false, - "enable_pipeline2": false + "dashboard_new_onboarding": false, + "mfa_show_factor_list_on_enrollment": false, + "disable_clickjack_protection_headers": false }, - "friendly_name": "This tenant name should be preserved", "guardian_mfa_page": { "enabled": true, "html": "MFA\n" }, - "idle_session_lifetime": 1, - "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", - "sandbox_version": "12", - "session_lifetime": 3.0166666666666666, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", + "picture_url": "https://cdn.auth0.com/manhattan/versions/1.3935.0/assets/badge.png", + "sandbox_version": "18", + "oidc_logout": { + "rp_logout_end_session_endpoint_discovery": true + }, "universal_login": { "colors": { - "primary": "#F8F8F2", - "page_background": "#222221" + "page_background": "#000000", + "primary": "#5ce4ff" } }, - "session_cookie": { - "mode": "non-persistent" - }, "sandbox_versions_available": [ "18", - "16", - "12" + "16" ] }, "rawHeaders": [], @@ -78,7 +62,121 @@ "body": "", "status": 200, "response": { - "actions": [], + "actions": [ + { + "id": "e105b5a8-cdea-4292-b588-383cb12bdbcc", + "name": "k-flow", + "supported_triggers": [ + { + "id": "post-login", + "version": "v3" + } + ], + "created_at": "2024-08-11T18:43:54.559933482Z", + "updated_at": "2024-09-26T07:32:36.751347258Z", + "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(event.secrets)\n // if (event.user.nickname != \"kushal.shit\"){\n // api.access.deny(\"Unknown user!!\")\n // }\n};\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", + "dependencies": [], + "runtime": "node18-actions", + "status": "built", + "secrets": [ + { + "name": "my_secret_url", + "updated_at": "2024-09-18T09:55:00.423293831Z" + }, + { + "name": "sec_1", + "updated_at": "2024-09-18T09:55:00.423293831Z" + } + ], + "current_version": { + "id": "44dd594d-c57d-490f-b22b-5fb499b81afd", + "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(event.secrets)\n // if (event.user.nickname != \"kushal.shit\"){\n // api.access.deny(\"Unknown user!!\")\n // }\n};\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", + "runtime": "node18-actions", + "status": "BUILT", + "number": 51, + "build_time": "2024-09-26T07:32:46.544296361Z", + "created_at": "2024-09-26T07:32:46.472453906Z", + "updated_at": "2024-09-26T07:32:46.544910189Z" + }, + "deployed_version": { + "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(event.secrets)\n // if (event.user.nickname != \"kushal.shit\"){\n // api.access.deny(\"Unknown user!!\")\n // }\n};\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", + "dependencies": [], + "id": "44dd594d-c57d-490f-b22b-5fb499b81afd", + "deployed": true, + "number": 51, + "built_at": "2024-09-26T07:32:46.544296361Z", + "secrets": [ + { + "name": "my_secret_url", + "updated_at": "2024-09-18T09:55:00.423293831Z" + }, + { + "name": "sec_1", + "updated_at": "2024-09-18T09:55:00.423293831Z" + } + ], + "status": "built", + "created_at": "2024-09-26T07:32:46.472453906Z", + "updated_at": "2024-09-26T07:32:46.544910189Z", + "runtime": "node18-actions", + "supported_triggers": [ + { + "id": "post-login", + "version": "v3" + } + ] + }, + "all_changes_deployed": true + }, + { + "id": "4301ffb3-fc3f-40cb-9b0b-2bb23f090327", + "name": "post-login-onbording", + "supported_triggers": [ + { + "id": "post-login", + "version": "v3" + } + ], + "created_at": "2024-08-12T11:09:42.970451051Z", + "updated_at": "2024-09-26T07:32:37.762276179Z", + "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 const FORM_ID = 'ap_vHcEKGZJ5oaTYTePwe2W1T';\n\n api.prompt.render(FORM_ID);\n};\nexports.onContinuePostLogin = async (event, api) => {}\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", + "dependencies": [], + "runtime": "node18-actions", + "status": "built", + "secrets": [], + "current_version": { + "id": "7a9f26f0-d5d7-45e5-b9a0-eaa9a6430299", + "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 const FORM_ID = 'ap_vHcEKGZJ5oaTYTePwe2W1T';\n\n api.prompt.render(FORM_ID);\n};\nexports.onContinuePostLogin = async (event, api) => {}\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", + "runtime": "node18-actions", + "status": "BUILT", + "number": 46, + "build_time": "2024-09-26T07:32:38.298040484Z", + "created_at": "2024-09-26T07:32:38.223235246Z", + "updated_at": "2024-09-26T07:32:38.299546854Z" + }, + "deployed_version": { + "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 const FORM_ID = 'ap_vHcEKGZJ5oaTYTePwe2W1T';\n\n api.prompt.render(FORM_ID);\n};\nexports.onContinuePostLogin = async (event, api) => {}\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", + "dependencies": [], + "id": "7a9f26f0-d5d7-45e5-b9a0-eaa9a6430299", + "deployed": true, + "number": 46, + "built_at": "2024-09-26T07:32:38.298040484Z", + "secrets": [], + "status": "built", + "created_at": "2024-09-26T07:32:38.223235246Z", + "updated_at": "2024-09-26T07:32:38.299546854Z", + "runtime": "node18-actions", + "supported_triggers": [ + { + "id": "post-login", + "version": "v3" + } + ] + }, + "all_changes_deployed": true + } + ], + "total": 2, "per_page": 100 }, "rawHeaders": [], 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 bfefa9e77..b677c2dbd 100644 --- a/test/e2e/recordings/should-preserve-keywords-for-directory-format.json +++ b/test/e2e/recordings/should-preserve-keywords-for-directory-format.json @@ -2,11 +2,11 @@ { "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?page=0&per_page=100&include_totals=true&is_global=false", "body": "", "status": 200, "response": { - "total": 3, + "total": 10, "start": 0, "limit": 100, "clients": [ @@ -28,6 +28,7 @@ "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -76,7 +77,7 @@ "subject": "deprecated" } ], - "client_id": "GunrGye8hwbrx4eUMZJvsSuAhjiLsLdD", + "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -96,12 +97,12 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", + "name": "API Explorer Application", "allowed_clients": [], "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", "native_social_login": { "apple": { "enabled": false @@ -110,6 +111,7 @@ "enabled": false } }, + "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -120,7 +122,6 @@ "rotation_type": "non-rotating" }, "sso_disabled": false, - "oidc_conformant": false, "signing_keys": [ { "cert": "[REDACTED]", @@ -128,7 +129,7 @@ "subject": "deprecated" } ], - "client_id": "dskjRi0px0aMvCKMueSqsYQlKSxxZsX7", + "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -143,245 +144,955 @@ "client_credentials" ], "custom_login_page_on": true - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/clients/dskjRi0px0aMvCKMueSqsYQlKSxxZsX7", - "body": { - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "app_type": "non_interactive", - "callbacks": [], - "client_aliases": [], - "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 - }, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "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": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" - } - ], - "client_id": "dskjRi0px0aMvCKMueSqsYQlKSxxZsX7", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "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", - "path": "/api/v2/tenants/settings", - "body": { - "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" - ], - "enabled_locales": [ - "en", - "es" - ], - "flags": { - "allow_legacy_delegation_grant_types": true, - "allow_legacy_ro_grant_types": true, - "change_pwd_flow_v1": false, - "enable_apis_section": false, - "enable_client_connections": false, - "enable_custom_domain_in_emails": false, - "enable_dynamic_client_registration": false, - "enable_public_signup_user_exists_error": true, - "revoke_refresh_token_grant": false, - "disable_clickjack_protection_headers": false, - "enable_pipeline2": false - }, - "friendly_name": "This tenant name should be preserved", - "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", - "sandbox_version": "12", - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", - "universal_login": { - "colors": { - "primary": "#F8F8F2", - "page_background": "#222221" - } - }, - "session_cookie": { - "mode": "non-persistent" - }, - "session_lifetime_in_minutes": 181, - "idle_session_lifetime_in_minutes": 60 - }, - "status": 200, - "response": { - "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" - ], - "change_password": { - "enabled": true, - "html": "Change Password\n" - }, - "enabled_locales": [ - "en", - "es" - ], - "error_page": { - "html": "Error Page\n", - "show_log_link": false, - "url": "https://mycompany.org/error" - }, - "flags": { - "allow_changing_enable_sso": false, - "allow_legacy_delegation_grant_types": true, - "allow_legacy_ro_grant_types": true, - "cannot_change_enforce_client_authentication_on_passwordless_start": true, - "change_pwd_flow_v1": false, - "disable_impersonation": true, - "enable_apis_section": false, - "enable_client_connections": false, - "enable_custom_domain_in_emails": false, - "enable_dynamic_client_registration": false, - "enable_legacy_logs_search_v2": false, - "enable_public_signup_user_exists_error": true, - "enable_sso": true, - "enforce_client_authentication_on_passwordless_start": true, - "new_universal_login_experience_enabled": true, - "universal_login": true, - "use_scope_descriptions_for_consent": false, - "revoke_refresh_token_grant": false, - "disable_clickjack_protection_headers": false, - "enable_pipeline2": false - }, - "friendly_name": "This tenant name should be preserved", - "guardian_mfa_page": { - "enabled": true, - "html": "MFA\n" - }, - "idle_session_lifetime": 1, - "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", - "sandbox_version": "12", - "session_lifetime": 3.0166666666666666, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", - "universal_login": { - "colors": { - "primary": "#F8F8F2", - "page_background": "#222221" - } - }, - "session_cookie": { - "mode": "non-persistent" - } - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "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", - "body": "", - "status": 200, - "response": { - "total": 3, - "start": 0, - "limit": 100, - "clients": [ { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Deploy CLI", + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "allowed_origins": [], + "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "regular_web", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "web_origins": [], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Terraform Provider", + "cross_origin_auth": false, + "is_first_party": true, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, + "cross_origin_auth": false, + "is_first_party": true, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "The Default App", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": false, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso": false, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Test SPA", + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000" + ], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "expiring", + "leeway": 0, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "infinite_token_lifetime": false, + "infinite_idle_token_lifetime": false, + "rotation_type": "rotating" + }, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "none", + "app_type": "spa", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "auth0-deploy-cli-extension", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Auth0 CLI - dev", + "allowed_clients": [], + "callbacks": [], + "cross_origin_auth": false, + "is_first_party": true, + "logo_uri": "https://dev.assets.com/photos/foo", + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": 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" + }, + "sso_disabled": false, + "oidc_conformant": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "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", + "path": "/api/v2/clients/STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "body": { + "name": "Auth0 CLI - dev", + "allowed_clients": [], + "app_type": "non_interactive", + "callbacks": [], + "client_aliases": [], + "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 + }, + "logo_uri": "https://dev.assets.com/photos/foo", + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": 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" + }, + "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": "Auth0 CLI - dev", + "allowed_clients": [], + "callbacks": [], + "cross_origin_auth": false, + "is_first_party": true, + "logo_uri": "https://dev.assets.com/photos/foo", + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": 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" + }, + "sso_disabled": false, + "oidc_conformant": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" + } + ], + "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "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", + "path": "/api/v2/tenants/settings", + "body": { + "allowed_logout_urls": [ + "https://travel0.com/logoutCallback" + ], + "enabled_locales": [ + "en", + "es" + ], + "flags": { + "allow_legacy_delegation_grant_types": true, + "allow_legacy_ro_grant_types": true, + "change_pwd_flow_v1": false, + "enable_apis_section": false, + "enable_client_connections": false, + "enable_custom_domain_in_emails": false, + "enable_dynamic_client_registration": false, + "enable_public_signup_user_exists_error": true, + "revoke_refresh_token_grant": false, + "disable_clickjack_protection_headers": false, + "enable_pipeline2": false + }, + "friendly_name": "This tenant name should be preserved", + "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", + "sandbox_version": "12", + "support_email": "support@travel0.com", + "support_url": "https://travel0.com/support", + "universal_login": { + "colors": { + "primary": "#F8F8F2", + "page_background": "#222221" + } + }, + "session_cookie": { + "mode": "non-persistent" + }, + "session_lifetime_in_minutes": 181, + "idle_session_lifetime_in_minutes": 60 + }, + "status": 200, + "response": { + "allowed_logout_urls": [ + "https://travel0.com/logoutCallback" + ], + "change_password": { + "enabled": true, + "html": "Change Password\n" + }, + "enabled_locales": [ + "en", + "es" + ], + "error_page": { + "html": "Error Page\n", + "show_log_link": false, + "url": "https://mycompany.org/error" + }, + "flags": { + "allow_changing_enable_sso": false, + "allow_legacy_delegation_grant_types": true, + "allow_legacy_ro_grant_types": true, + "cannot_change_enforce_client_authentication_on_passwordless_start": true, + "change_pwd_flow_v1": false, + "disable_impersonation": true, + "enable_apis_section": false, + "enable_client_connections": false, + "enable_custom_domain_in_emails": false, + "enable_dynamic_client_registration": false, + "enable_legacy_logs_search_v2": false, + "enable_public_signup_user_exists_error": true, + "enable_sso": true, + "enforce_client_authentication_on_passwordless_start": true, + "new_universal_login_experience_enabled": true, + "universal_login": true, + "use_scope_descriptions_for_consent": false, + "revoke_refresh_token_grant": false, + "disable_clickjack_protection_headers": false, + "enable_pipeline2": false + }, + "friendly_name": "This tenant name should be preserved", + "guardian_mfa_page": { + "enabled": true, + "html": "MFA\n" + }, + "idle_session_lifetime": 1, + "picture_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png", + "sandbox_version": "12", + "session_lifetime": 3.0166666666666666, + "support_email": "support@travel0.com", + "support_url": "https://travel0.com/support", + "universal_login": { + "colors": { + "primary": "#F8F8F2", + "page_background": "#222221" + }, + "identifier_first": true + }, + "session_cookie": { + "mode": "non-persistent" + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/clients?page=0&per_page=100&include_totals=true&is_global=false", + "body": "", + "status": 200, + "response": { + "total": 10, + "start": 0, + "limit": 100, + "clients": [ + { + "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" + }, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Default App", + "callbacks": [], + "cross_origin_auth": false, + "is_first_party": true, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "API Explorer Application", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "allowed_origins": [], + "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "regular_web", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "web_origins": [], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Terraform Provider", + "cross_origin_auth": false, + "is_first_party": true, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, + "cross_origin_auth": false, + "is_first_party": true, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "The Default App", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": false, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso": false, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Test SPA", + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000" + ], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, - "sso_disabled": false, - "cross_origin_auth": false, "refresh_token": { - "expiration_type": "non-expiring", + "expiration_type": "expiring", "leeway": 0, - "infinite_token_lifetime": true, - "infinite_idle_token_lifetime": true, - "token_lifetime": 31557600, - "idle_token_lifetime": 2592000, - "rotation_type": "non-rotating" + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "infinite_token_lifetime": false, + "infinite_idle_token_lifetime": false, + "rotation_type": "rotating" }, + "sso_disabled": false, "signing_keys": [ { "cert": "[REDACTED]", @@ -389,7 +1100,7 @@ "subject": "deprecated" } ], - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -397,10 +1108,16 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", + "client_aliases": [], + "token_endpoint_auth_method": "none", + "app_type": "spa", "grant_types": [ - "client_credentials" + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" ], "custom_login_page_on": true }, @@ -408,18 +1125,28 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Default App", + "name": "auth0-deploy-cli-extension", + "allowed_clients": [], "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, "infinite_token_lifetime": true, "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, "sso_disabled": false, @@ -430,7 +1157,7 @@ "subject": "deprecated" } ], - "client_id": "GunrGye8hwbrx4eUMZJvsSuAhjiLsLdD", + "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -438,10 +1165,10 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], "custom_login_page_on": true @@ -482,7 +1209,7 @@ "subject": "deprecated" } ], - "client_id": "dskjRi0px0aMvCKMueSqsYQlKSxxZsX7", + "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -575,21 +1302,6 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/email-templates/blocked_account", - "body": "", - "status": 404, - "response": { - "statusCode": 404, - "error": "Not Found", - "message": "The template does not exist.", - "errorCode": "inexistent_email_template" - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -626,7 +1338,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/change_password", + "path": "/api/v2/email-templates/blocked_account", "body": "", "status": 404, "response": { @@ -641,7 +1353,26 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/stolen_credentials", + "path": "/api/v2/email-templates/welcome_email", + "body": "", + "status": 200, + "response": { + "template": "welcome_email", + "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", + "from": "", + "resultUrl": "https://travel0.com/welcome", + "subject": "Welcome", + "syntax": "liquid", + "urlLifetimeInSeconds": 3600, + "enabled": false + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/email-templates/verify_email_by_code", "body": "", "status": 404, "response": { @@ -656,7 +1387,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/verify_email_by_code", + "path": "/api/v2/email-templates/enrollment_email", "body": "", "status": 404, "response": { @@ -671,7 +1402,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/mfa_oob_code", + "path": "/api/v2/email-templates/password_reset", "body": "", "status": 404, "response": { @@ -686,7 +1417,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/password_reset", + "path": "/api/v2/email-templates/stolen_credentials", "body": "", "status": 404, "response": { @@ -701,7 +1432,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/enrollment_email", + "path": "/api/v2/email-templates/user_invitation", "body": "", "status": 404, "response": { @@ -716,18 +1447,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/welcome_email", + "path": "/api/v2/email-templates/change_password", "body": "", - "status": 200, + "status": 404, "response": { - "template": "welcome_email", - "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", - "from": "", - "resultUrl": "https://travel0.com/welcome", - "subject": "Welcome", - "syntax": "liquid", - "urlLifetimeInSeconds": 3600, - "enabled": false + "statusCode": 404, + "error": "Not Found", + "message": "The template does not exist.", + "errorCode": "inexistent_email_template" }, "rawHeaders": [], "responseIsBinary": false @@ -735,7 +1462,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/user_invitation", + "path": "/api/v2/email-templates/mfa_oob_code", "body": "", "status": 404, "response": { @@ -750,11 +1477,11 @@ { "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?page=0&per_page=100&include_totals=true&is_global=false", "body": "", "status": 200, "response": { - "total": 3, + "total": 10, "start": 0, "limit": 100, "clients": [ @@ -762,11 +1489,246 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Deploy CLI", + "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" + }, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Default App", + "callbacks": [], + "cross_origin_auth": false, + "is_first_party": true, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "API Explorer Application", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "allowed_origins": [], + "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "regular_web", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "web_origins": [], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Terraform Provider", + "cross_origin_auth": false, "is_first_party": true, "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, + "is_first_party": true, + "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -776,6 +1738,7 @@ "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, + "sso_disabled": false, "signing_keys": [ { "cert": "[REDACTED]", @@ -783,7 +1746,7 @@ "subject": "deprecated" } ], - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -802,11 +1765,21 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Default App", + "name": "The Default App", + "allowed_clients": [], "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, - "oidc_conformant": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": false, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -816,6 +1789,7 @@ "idle_token_lifetime": 1296000, "rotation_type": "non-rotating" }, + "sso": false, "sso_disabled": false, "signing_keys": [ { @@ -824,7 +1798,7 @@ "subject": "deprecated" } ], - "client_id": "GunrGye8hwbrx4eUMZJvsSuAhjiLsLdD", + "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -832,6 +1806,8 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", "grant_types": [ "authorization_code", "implicit", @@ -840,6 +1816,120 @@ ], "custom_login_page_on": true }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Test SPA", + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000" + ], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "expiring", + "leeway": 0, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "infinite_token_lifetime": false, + "infinite_idle_token_lifetime": false, + "rotation_type": "rotating" + }, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "none", + "app_type": "spa", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "auth0-deploy-cli-extension", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, { "tenant": "auth0-deploy-cli-e2e", "global": false, @@ -876,7 +1966,7 @@ "subject": "deprecated" } ], - "client_id": "dskjRi0px0aMvCKMueSqsYQlKSxxZsX7", + "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -972,18 +2062,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/welcome_email", + "path": "/api/v2/email-templates/verify_email_by_code", "body": "", - "status": 200, + "status": 404, "response": { - "template": "welcome_email", - "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", - "from": "", - "resultUrl": "https://travel0.com/welcome", - "subject": "Welcome", - "syntax": "liquid", - "urlLifetimeInSeconds": 3600, - "enabled": false + "statusCode": 404, + "error": "Not Found", + "message": "The template does not exist.", + "errorCode": "inexistent_email_template" }, "rawHeaders": [], "responseIsBinary": false @@ -991,17 +2077,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/verify_email", + "path": "/api/v2/email-templates/stolen_credentials", "body": "", - "status": 200, + "status": 404, "response": { - "template": "verify_email", - "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", - "from": "", - "subject": "", - "syntax": "liquid", - "urlLifetimeInSeconds": 432000, - "enabled": true + "statusCode": 404, + "error": "Not Found", + "message": "The template does not exist.", + "errorCode": "inexistent_email_template" }, "rawHeaders": [], "responseIsBinary": false @@ -1009,7 +2092,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/mfa_oob_code", + "path": "/api/v2/email-templates/blocked_account", "body": "", "status": 404, "response": { @@ -1024,7 +2107,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/reset_email", + "path": "/api/v2/email-templates/mfa_oob_code", "body": "", "status": 404, "response": { @@ -1039,7 +2122,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/stolen_credentials", + "path": "/api/v2/email-templates/enrollment_email", "body": "", "status": 404, "response": { @@ -1054,7 +2137,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/blocked_account", + "path": "/api/v2/email-templates/reset_email", "body": "", "status": 404, "response": { @@ -1069,14 +2152,18 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/change_password", + "path": "/api/v2/email-templates/welcome_email", "body": "", - "status": 404, + "status": 200, "response": { - "statusCode": 404, - "error": "Not Found", - "message": "The template does not exist.", - "errorCode": "inexistent_email_template" + "template": "welcome_email", + "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", + "from": "", + "resultUrl": "https://travel0.com/welcome", + "subject": "Welcome", + "syntax": "liquid", + "urlLifetimeInSeconds": 3600, + "enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -1084,7 +2171,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/enrollment_email", + "path": "/api/v2/email-templates/user_invitation", "body": "", "status": 404, "response": { @@ -1099,7 +2186,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/password_reset", + "path": "/api/v2/email-templates/change_password", "body": "", "status": 404, "response": { @@ -1114,7 +2201,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/verify_email_by_code", + "path": "/api/v2/email-templates/password_reset", "body": "", "status": 404, "response": { @@ -1129,14 +2216,17 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/user_invitation", + "path": "/api/v2/email-templates/verify_email", "body": "", - "status": 404, + "status": 200, "response": { - "statusCode": 404, - "error": "Not Found", - "message": "The template does not exist.", - "errorCode": "inexistent_email_template" + "template": "verify_email", + "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", + "from": "", + "subject": "", + "syntax": "liquid", + "urlLifetimeInSeconds": 432000, + "enabled": true }, "rawHeaders": [], "responseIsBinary": false 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 5073d3f15..efd72a0eb 100644 --- a/test/e2e/recordings/should-preserve-keywords-for-yaml-format.json +++ b/test/e2e/recordings/should-preserve-keywords-for-yaml-format.json @@ -2,11 +2,11 @@ { "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?page=0&per_page=100&include_totals=true&is_global=false", "body": "", "status": 200, "response": { - "total": 2, + "total": 10, "start": 0, "limit": 100, "clients": [ @@ -28,6 +28,7 @@ "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -76,7 +77,7 @@ "subject": "deprecated" } ], - "client_id": "GunrGye8hwbrx4eUMZJvsSuAhjiLsLdD", + "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -91,6 +92,420 @@ "client_credentials" ], "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "API Explorer Application", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "allowed_origins": [], + "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "regular_web", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "web_origins": [], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Terraform Provider", + "cross_origin_auth": false, + "is_first_party": true, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, + "cross_origin_auth": false, + "is_first_party": true, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "The Default App", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": false, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso": false, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Test SPA", + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000" + ], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "expiring", + "leeway": 0, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "infinite_token_lifetime": false, + "infinite_idle_token_lifetime": false, + "rotation_type": "rotating" + }, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "none", + "app_type": "spa", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "auth0-deploy-cli-extension", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Auth0 CLI - dev", + "allowed_clients": [], + "callbacks": [], + "cross_origin_auth": false, + "is_first_party": true, + "logo_uri": "https://dev.assets.com/photos/foo", + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": 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" + }, + "sso_disabled": false, + "oidc_conformant": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true } ] }, @@ -99,268 +514,554 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/clients", - "body": { - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "app_type": "non_interactive", - "callbacks": [], - "client_aliases": [], - "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, - "secret_encoded": false - }, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "token_endpoint_auth_method": "client_secret_post" - }, - "status": 201, + "method": "PATCH", + "path": "/api/v2/clients/STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "body": { + "name": "Auth0 CLI - dev", + "allowed_clients": [], + "app_type": "non_interactive", + "callbacks": [], + "client_aliases": [], + "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 + }, + "logo_uri": "https://dev.assets.com/photos/foo", + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": 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" + }, + "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": "Auth0 CLI - dev", + "allowed_clients": [], + "callbacks": [], + "cross_origin_auth": false, + "is_first_party": true, + "logo_uri": "https://dev.assets.com/photos/foo", + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": 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" + }, + "sso_disabled": false, + "oidc_conformant": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" + } + ], + "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "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", + "path": "/api/v2/email-templates/welcome_email", + "body": { + "template": "welcome_email", + "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", + "enabled": false, + "from": "", + "resultUrl": "https://travel0.com/welcome", + "subject": "Welcome", + "syntax": "liquid", + "urlLifetimeInSeconds": 3600 + }, + "status": 200, + "response": { + "template": "welcome_email", + "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", + "from": "", + "resultUrl": "https://travel0.com/welcome", + "subject": "Welcome", + "syntax": "liquid", + "urlLifetimeInSeconds": 3600, + "enabled": false + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/tenants/settings", + "body": { + "allowed_logout_urls": [ + "https://travel0.com/logoutCallback" + ], + "enabled_locales": [ + "en", + "es" + ], + "flags": { + "allow_legacy_delegation_grant_types": true, + "allow_legacy_ro_grant_types": true, + "change_pwd_flow_v1": false, + "enable_apis_section": false, + "enable_client_connections": false, + "enable_custom_domain_in_emails": false, + "enable_dynamic_client_registration": false, + "enable_public_signup_user_exists_error": true, + "revoke_refresh_token_grant": false, + "disable_clickjack_protection_headers": false, + "enable_pipeline2": false + }, + "friendly_name": "This tenant name should be preserved", + "picture_url": "https://unsplash.com/photos/8v1T2SCM6Ek", + "sandbox_version": "12", + "session_cookie": { + "mode": "non-persistent" + }, + "support_email": "support@travel0.com", + "support_url": "https://travel0.com/support", + "universal_login": { + "colors": { + "primary": "#F8F8F2", + "page_background": "#222221" + } + }, + "session_lifetime_in_minutes": 181, + "idle_session_lifetime_in_minutes": 60 + }, + "status": 200, + "response": { + "allowed_logout_urls": [ + "https://travel0.com/logoutCallback" + ], + "change_password": { + "enabled": true, + "html": "Change Password\n" + }, + "enabled_locales": [ + "en", + "es" + ], + "error_page": { + "html": "Error Page\n", + "show_log_link": false, + "url": "https://mycompany.org/error" + }, + "flags": { + "allow_changing_enable_sso": false, + "allow_legacy_delegation_grant_types": true, + "allow_legacy_ro_grant_types": true, + "cannot_change_enforce_client_authentication_on_passwordless_start": true, + "change_pwd_flow_v1": false, + "disable_impersonation": true, + "enable_apis_section": false, + "enable_client_connections": false, + "enable_custom_domain_in_emails": false, + "enable_dynamic_client_registration": false, + "enable_legacy_logs_search_v2": false, + "enable_public_signup_user_exists_error": true, + "enable_sso": true, + "enforce_client_authentication_on_passwordless_start": true, + "new_universal_login_experience_enabled": true, + "universal_login": true, + "use_scope_descriptions_for_consent": false, + "revoke_refresh_token_grant": false, + "disable_clickjack_protection_headers": false, + "enable_pipeline2": false + }, + "friendly_name": "This tenant name should be preserved", + "guardian_mfa_page": { + "enabled": true, + "html": "MFA\n" + }, + "idle_session_lifetime": 1, + "picture_url": "https://unsplash.com/photos/8v1T2SCM6Ek", + "sandbox_version": "12", + "session_lifetime": 3.0166666666666666, + "support_email": "support@travel0.com", + "support_url": "https://travel0.com/support", + "universal_login": { + "colors": { + "primary": "#F8F8F2", + "page_background": "#222221" + }, + "identifier_first": true + }, + "session_cookie": { + "mode": "non-persistent" + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/clients?page=0&per_page=100&include_totals=true&is_global=false", + "body": "", + "status": 200, "response": { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Auth0 CLI - dev", - "allowed_clients": [], - "callbacks": [], - "cross_origin_auth": false, - "is_first_party": true, - "logo_uri": "https://dev.assets.com/photos/foo", - "native_social_login": { - "apple": { - "enabled": false + "total": 10, + "start": 0, + "limit": 100, + "clients": [ + { + "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" + }, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Default App", + "callbacks": [], + "cross_origin_auth": false, + "is_first_party": true, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "API Explorer Application", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "allowed_origins": [], + "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "regular_web", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "web_origins": [], + "custom_login_page_on": true }, - "facebook": { - "enabled": 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" - }, - "sso_disabled": false, - "oidc_conformant": false, - "encrypted": true, - "signing_keys": [ { - "cert": "[REDACTED]", - "key": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" - } - ], - "client_id": "dskjRi0px0aMvCKMueSqsYQlKSxxZsX7", - "callback_url_template": false, - "client_secret": "[REDACTED]", - "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "client_aliases": [], - "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", - "path": "/api/v2/email-templates/welcome_email", - "body": { - "template": "welcome_email", - "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", - "enabled": false, - "from": "", - "resultUrl": "https://travel0.com/welcome", - "subject": "Welcome", - "syntax": "liquid", - "urlLifetimeInSeconds": 3600 - }, - "status": 200, - "response": { - "template": "welcome_email", - "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", - "from": "", - "resultUrl": "https://travel0.com/welcome", - "subject": "Welcome", - "syntax": "liquid", - "urlLifetimeInSeconds": 3600, - "enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/tenants/settings", - "body": { - "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" - ], - "enabled_locales": [ - "en", - "es" - ], - "flags": { - "allow_legacy_delegation_grant_types": true, - "allow_legacy_ro_grant_types": true, - "change_pwd_flow_v1": false, - "enable_apis_section": false, - "enable_client_connections": false, - "enable_custom_domain_in_emails": false, - "enable_dynamic_client_registration": false, - "enable_public_signup_user_exists_error": true, - "revoke_refresh_token_grant": false, - "disable_clickjack_protection_headers": false, - "enable_pipeline2": false - }, - "friendly_name": "This tenant name should be preserved", - "picture_url": "https://unsplash.com/photos/8v1T2SCM6Ek", - "sandbox_version": "12", - "session_cookie": { - "mode": "non-persistent" - }, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", - "universal_login": { - "colors": { - "primary": "#F8F8F2", - "page_background": "#222221" - } - }, - "session_lifetime_in_minutes": 181, - "idle_session_lifetime_in_minutes": 60 - }, - "status": 200, - "response": { - "allowed_logout_urls": [ - "https://travel0.com/logoutCallback" - ], - "change_password": { - "enabled": true, - "html": "Change Password\n" - }, - "enabled_locales": [ - "en", - "es" - ], - "error_page": { - "html": "Error Page\n", - "show_log_link": false, - "url": "https://mycompany.org/error" - }, - "flags": { - "allow_changing_enable_sso": false, - "allow_legacy_delegation_grant_types": true, - "allow_legacy_ro_grant_types": true, - "cannot_change_enforce_client_authentication_on_passwordless_start": true, - "change_pwd_flow_v1": false, - "disable_impersonation": true, - "enable_apis_section": false, - "enable_client_connections": false, - "enable_custom_domain_in_emails": false, - "enable_dynamic_client_registration": false, - "enable_legacy_logs_search_v2": false, - "enable_public_signup_user_exists_error": true, - "enable_sso": true, - "enforce_client_authentication_on_passwordless_start": true, - "new_universal_login_experience_enabled": true, - "universal_login": true, - "use_scope_descriptions_for_consent": false, - "revoke_refresh_token_grant": false, - "disable_clickjack_protection_headers": false, - "enable_pipeline2": false - }, - "friendly_name": "This tenant name should be preserved", - "guardian_mfa_page": { - "enabled": true, - "html": "MFA\n" - }, - "idle_session_lifetime": 1, - "picture_url": "https://unsplash.com/photos/8v1T2SCM6Ek", - "sandbox_version": "12", - "session_lifetime": 3.0166666666666666, - "support_email": "support@travel0.com", - "support_url": "https://travel0.com/support", - "universal_login": { - "colors": { - "primary": "#F8F8F2", - "page_background": "#222221" - } - }, - "session_cookie": { - "mode": "non-persistent" - } - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "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", - "body": "", - "status": 200, - "response": { - "total": 3, - "start": 0, - "limit": 100, - "clients": [ + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Terraform Provider", + "cross_origin_auth": false, + "is_first_party": true, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "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 + }, { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Deploy CLI", + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, + "cross_origin_auth": false, "is_first_party": true, "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "The Default App", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": 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, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, "rotation_type": "non-rotating" }, + "sso": false, + "sso_disabled": false, "signing_keys": [ { "cert": "[REDACTED]", @@ -368,7 +1069,7 @@ "subject": "deprecated" } ], - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -376,9 +1077,12 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], "custom_login_page_on": true @@ -387,18 +1091,90 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Default App", + "name": "Test SPA", + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000" + ], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "expiring", + "leeway": 0, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "infinite_token_lifetime": false, + "infinite_idle_token_lifetime": false, + "rotation_type": "rotating" + }, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "none", + "app_type": "spa", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "auth0-deploy-cli-extension", + "allowed_clients": [], "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, "infinite_token_lifetime": true, "infinite_idle_token_lifetime": true, - "token_lifetime": 2592000, - "idle_token_lifetime": 1296000, + "token_lifetime": 31557600, + "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, "sso_disabled": false, @@ -409,7 +1185,7 @@ "subject": "deprecated" } ], - "client_id": "GunrGye8hwbrx4eUMZJvsSuAhjiLsLdD", + "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -417,10 +1193,10 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], "custom_login_page_on": true @@ -461,7 +1237,7 @@ "subject": "deprecated" } ], - "client_id": "dskjRi0px0aMvCKMueSqsYQlKSxxZsX7", + "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -590,7 +1366,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/blocked_account", + "path": "/api/v2/email-templates/enrollment_email", "body": "", "status": 404, "response": { @@ -620,7 +1396,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/mfa_oob_code", + "path": "/api/v2/email-templates/blocked_account", "body": "", "status": 404, "response": { @@ -635,14 +1411,18 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/password_reset", + "path": "/api/v2/email-templates/welcome_email", "body": "", - "status": 404, + "status": 200, "response": { - "statusCode": 404, - "error": "Not Found", - "message": "The template does not exist.", - "errorCode": "inexistent_email_template" + "template": "welcome_email", + "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", + "from": "", + "resultUrl": "https://travel0.com/welcome", + "subject": "Welcome", + "syntax": "liquid", + "urlLifetimeInSeconds": 3600, + "enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -665,7 +1445,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/change_password", + "path": "/api/v2/email-templates/user_invitation", "body": "", "status": 404, "response": { @@ -680,18 +1460,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/welcome_email", + "path": "/api/v2/email-templates/password_reset", "body": "", - "status": 200, + "status": 404, "response": { - "template": "welcome_email", - "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", - "from": "", - "resultUrl": "https://travel0.com/welcome", - "subject": "Welcome", - "syntax": "liquid", - "urlLifetimeInSeconds": 3600, - "enabled": false + "statusCode": 404, + "error": "Not Found", + "message": "The template does not exist.", + "errorCode": "inexistent_email_template" }, "rawHeaders": [], "responseIsBinary": false @@ -699,7 +1475,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/user_invitation", + "path": "/api/v2/email-templates/change_password", "body": "", "status": 404, "response": { @@ -714,7 +1490,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/enrollment_email", + "path": "/api/v2/email-templates/mfa_oob_code", "body": "", "status": 404, "response": { @@ -729,11 +1505,11 @@ { "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?page=0&per_page=100&include_totals=true&is_global=false", "body": "", "status": 200, "response": { - "total": 3, + "total": 10, "start": 0, "limit": 100, "clients": [ @@ -741,11 +1517,246 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Deploy CLI", + "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" + }, + "cross_origin_authentication": true, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Default App", + "callbacks": [], + "cross_origin_auth": false, + "is_first_party": true, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "non-expiring", + "leeway": 0, + "infinite_token_lifetime": true, + "infinite_idle_token_lifetime": true, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "rotation_type": "non-rotating" + }, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "OFEaV1swMjzG0w0yxF0cmRYX4zP97np3", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "API Explorer Application", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "780RIuWg8AlPQQgwCaQkSmem9CnzKgGd", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Node App", + "allowed_clients": [], + "allowed_logout_urls": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "allowed_origins": [], + "client_id": "e7rLqHSBYIFirN1a6psegd3IBUwFaWGb", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "regular_web", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" + ], + "web_origins": [], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Terraform Provider", + "cross_origin_auth": false, "is_first_party": true, "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "Zdogk3j4407BNWkWiBOxQKp1RgLFIOEV", + "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 + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Quickstarts API (Test Application)", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, + "is_first_party": true, + "oidc_conformant": true, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -755,6 +1766,7 @@ "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, + "sso_disabled": false, "signing_keys": [ { "cert": "[REDACTED]", @@ -762,7 +1774,7 @@ "subject": "deprecated" } ], - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "client_id": "Cbs29sl8S2G7zgo97erymb8t59IG6its", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -781,11 +1793,21 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Default App", + "name": "The Default App", + "allowed_clients": [], "callbacks": [], + "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, - "oidc_conformant": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": false, "refresh_token": { "expiration_type": "non-expiring", "leeway": 0, @@ -795,6 +1817,7 @@ "idle_token_lifetime": 1296000, "rotation_type": "non-rotating" }, + "sso": false, "sso_disabled": false, "signing_keys": [ { @@ -803,7 +1826,7 @@ "subject": "deprecated" } ], - "client_id": "GunrGye8hwbrx4eUMZJvsSuAhjiLsLdD", + "client_id": "RRILfE6sLlYfY3PQ0MwBGEBaDwdqJq05", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -811,6 +1834,8 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", "grant_types": [ "authorization_code", "implicit", @@ -819,6 +1844,120 @@ ], "custom_login_page_on": true }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "Test SPA", + "allowed_clients": [], + "allowed_logout_urls": [ + "http://localhost:3000" + ], + "callbacks": [ + "http://localhost:3000" + ], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "oidc_conformant": true, + "refresh_token": { + "expiration_type": "expiring", + "leeway": 0, + "token_lifetime": 2592000, + "idle_token_lifetime": 1296000, + "infinite_token_lifetime": false, + "infinite_idle_token_lifetime": false, + "rotation_type": "rotating" + }, + "sso_disabled": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "11CR1JJoz35mJP5HPekYuwloHZQrg6bT", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "none", + "app_type": "spa", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token" + ], + "web_origins": [ + "http://localhost:3000" + ], + "custom_login_page_on": true + }, + { + "tenant": "auth0-deploy-cli-e2e", + "global": false, + "is_token_endpoint_ip_header_trusted": false, + "name": "auth0-deploy-cli-extension", + "allowed_clients": [], + "callbacks": [], + "client_metadata": {}, + "cross_origin_auth": false, + "is_first_party": true, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "oRKXeVLk6Gc748UCH8zfMbf5wdPferqZ", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" + ], + "custom_login_page_on": true + }, { "tenant": "auth0-deploy-cli-e2e", "global": false, @@ -855,7 +1994,7 @@ "subject": "deprecated" } ], - "client_id": "dskjRi0px0aMvCKMueSqsYQlKSxxZsX7", + "client_id": "STzxgAFX55LmTkwzLQGNO9omrYKpSZ67", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -951,14 +2090,17 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/verify_email_by_code", + "path": "/api/v2/email-templates/verify_email", "body": "", - "status": 404, + "status": 200, "response": { - "statusCode": 404, - "error": "Not Found", - "message": "The template does not exist.", - "errorCode": "inexistent_email_template" + "template": "verify_email", + "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", + "from": "", + "subject": "", + "syntax": "liquid", + "urlLifetimeInSeconds": 432000, + "enabled": true }, "rawHeaders": [], "responseIsBinary": false @@ -966,17 +2108,18 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/verify_email", + "path": "/api/v2/email-templates/welcome_email", "body": "", "status": 200, "response": { - "template": "verify_email", - "body": "\n \n \n \n \n
\n \n \n \n
\n \n \n

\n\n

Welcome to {{ application.name}}!

\n\n

\n Thank you for signing up. Please verify your email address by clicking the following\n link:\n

\n\n

Confirm my account

\n\n

\n If you are having any issues with your account, please don’t hesitate to contact us\n by replying to this mail.\n

\n\n
\n Haha!!!\n
\n\n {{ application.name }}\n\n

\n
\n \n If you did not make this request, please contact us by replying to this mail.\n

\n
\n \n \n \n
\n \n\n", + "template": "welcome_email", + "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", "from": "", - "subject": "", + "resultUrl": "https://travel0.com/welcome", + "subject": "Welcome", "syntax": "liquid", - "urlLifetimeInSeconds": 432000, - "enabled": true + "urlLifetimeInSeconds": 3600, + "enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -984,7 +2127,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/stolen_credentials", + "path": "/api/v2/email-templates/verify_email_by_code", "body": "", "status": 404, "response": { @@ -999,7 +2142,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/mfa_oob_code", + "path": "/api/v2/email-templates/blocked_account", "body": "", "status": 404, "response": { @@ -1014,18 +2157,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/welcome_email", + "path": "/api/v2/email-templates/stolen_credentials", "body": "", - "status": 200, + "status": 404, "response": { - "template": "welcome_email", - "body": "\n \n

Welcome to This tenant name should be preserved!

\n \n\n", - "from": "", - "resultUrl": "https://travel0.com/welcome", - "subject": "Welcome", - "syntax": "liquid", - "urlLifetimeInSeconds": 3600, - "enabled": false + "statusCode": 404, + "error": "Not Found", + "message": "The template does not exist.", + "errorCode": "inexistent_email_template" }, "rawHeaders": [], "responseIsBinary": false @@ -1033,7 +2172,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/reset_email", + "path": "/api/v2/email-templates/change_password", "body": "", "status": 404, "response": { @@ -1048,7 +2187,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/blocked_account", + "path": "/api/v2/email-templates/mfa_oob_code", "body": "", "status": 404, "response": { @@ -1063,7 +2202,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/enrollment_email", + "path": "/api/v2/email-templates/password_reset", "body": "", "status": 404, "response": { @@ -1078,7 +2217,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/user_invitation", + "path": "/api/v2/email-templates/enrollment_email", "body": "", "status": 404, "response": { @@ -1093,7 +2232,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/change_password", + "path": "/api/v2/email-templates/reset_email", "body": "", "status": 404, "response": { @@ -1108,7 +2247,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/password_reset", + "path": "/api/v2/email-templates/user_invitation", "body": "", "status": 404, "response": { diff --git a/test/e2e/testdata/empty-tenant/tenant.yaml b/test/e2e/testdata/empty-tenant/tenant.yaml index 2890c0a7a..67ddf2560 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 3e7b3a63b..e440a091c 100644 --- a/test/e2e/testdata/lots-of-configuration/tenant.yaml +++ b/test/e2e/testdata/lots-of-configuration/tenant.yaml @@ -660,7 +660,6 @@ prompts: partials: {} 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 1b0aa2fb6..49724ec8e 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 @@ -1,6 +1,3 @@ -rules: [] -rulesConfigs: [] -hooks: [] pages: [] resourceServers: [] clients: @@ -126,7 +123,6 @@ prompts: customText: {} partials: {} universal_login_experience: new -migrations: {} actions: [] triggers: {} organizations: [] diff --git a/test/keywordPreservation.test.ts b/test/keywordPreservation.test.ts index 760430f78..cf5e40e1d 100644 --- a/test/keywordPreservation.test.ts +++ b/test/keywordPreservation.test.ts @@ -521,8 +521,8 @@ describe('preserveKeywords', () => { universal_login_enabled: true, customText: {}, }, - rules: null, //TODO: test these cases more thoroughly connections: [], // Empty on remote but has local assets + rules: null, // TODO: test these cases more thoroughly actions: [ { name: 'action-1', diff --git a/test/tools/auth0/client.tests.js b/test/tools/auth0/client.tests.js index 48905e493..5c3fa2a6a 100644 --- a/test/tools/auth0/client.tests.js +++ b/test/tools/auth0/client.tests.js @@ -19,12 +19,14 @@ describe('#schema validation tests', async () => { const localArgs = { ...args }; setTimeout(() => { resolve({ - start: localArgs.page * localArgs.per_page, - total: expectedNbClients, - clients: clients.slice( - localArgs.page * localArgs.per_page, - (localArgs.page + 1) * localArgs.per_page - ), + data: { + start: localArgs.page * localArgs.per_page, + total: expectedNbClients, + clients: clients.slice( + localArgs.page * localArgs.per_page, + (localArgs.page + 1) * localArgs.per_page + ), + }, }); }, 10); }), @@ -53,12 +55,14 @@ describe('#schema validation tests', async () => { permissions: { getAll: async (localArgs) => Promise.resolve({ - start: localArgs.page * localArgs.per_page, - total: expectedNbItems, - permissions: permissions.slice( - localArgs.page * localArgs.per_page, - (localArgs.page + 1) * localArgs.per_page - ), + data: { + start: localArgs.page * localArgs.per_page, + total: expectedNbItems, + permissions: permissions.slice( + localArgs.page * localArgs.per_page, + (localArgs.page + 1) * localArgs.per_page + ), + }, }), }, }, diff --git a/test/tools/auth0/handlers/actions.tests.js b/test/tools/auth0/handlers/actions.tests.js index 58ceaf37d..17430ff7d 100644 --- a/test/tools/auth0/handlers/actions.tests.js +++ b/test/tools/auth0/handlers/actions.tests.js @@ -1,7 +1,9 @@ import chai, { expect } from 'chai'; import chaiAsPromised from 'chai-as-promised'; +import pageClient from '../../../../src/tools/auth0/client'; const actions = require('../../../../src/tools/auth0/handlers/actions'); +const { mockPagedData } = require('../../../utils'); chai.use(chaiAsPromised); @@ -27,11 +29,11 @@ describe('#actions handler', () => { it('should not allow same names', (done) => { const auth0 = { actions: { - getAll: () => [], + getAll: () => ({ data: [] }), }, }; - const handler = new actions.default({ client: auth0, config }); + const handler = new actions.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).validate; const data = [ { @@ -67,11 +69,11 @@ describe('#actions handler', () => { it('should pass validation', async () => { const auth0 = { actions: { - getAll: () => [], + getAll: () => ({ data: [] }), }, }; - const handler = new actions.default({ client: auth0, config }); + const handler = new actions.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).validate; const data = [ { @@ -129,7 +131,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,33 +139,34 @@ 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, + getAllCalled: true, }; - const handler = new actions.default({ client: auth0, config }); + const handler = new actions.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ actions: [action] }]); @@ -196,26 +199,28 @@ 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([ - { - name: action.name, - supported_triggers: action.supported_triggers, - id: actionId, - }, - ]); + 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; @@ -225,7 +230,7 @@ describe('#actions handler', () => { getAllCalled: false, }; - const handler = new actions.default({ client: auth0, config }); + const handler = new actions.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ actions: [action] }]); @@ -256,11 +261,11 @@ describe('#actions handler', () => { const auth0 = { actions: { - getAll: () => actionsData, + getAll: () => mockPagedData({ include_totals: true }, 'actions', actionsData), }, }; - const handler = new actions.default({ client: auth0, config }); + const handler = new actions.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.include({ ...actionsData[0], deployed: true }); }); @@ -278,7 +283,7 @@ describe('#actions handler', () => { pool, }; - const handler = new actions.default({ client: auth0, config }); + const handler = new actions.default({ client: pageClient(auth0), config }); await expect(handler.getType()).to.be.rejectedWith( "Cannot process actions because the actions service is currently unavailable. Retrying may result in a successful operation. Alternatively, adding 'actions' to `AUTH0_EXCLUDED` configuration property will provide ability to skip until service is restored to actions service. This is not an issue with the Deploy CLI." ); @@ -296,7 +301,7 @@ describe('#actions handler', () => { pool, }; - const handler = new actions.default({ client: auth0, config }); + const handler = new actions.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal(null); }); @@ -313,7 +318,7 @@ describe('#actions handler', () => { pool, }; - const handler = new actions.default({ client: auth0, config }); + const handler = new actions.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal(null); }); @@ -337,7 +342,7 @@ describe('#actions handler', () => { pool, }; - const handler = new actions.default({ client: auth0, config }); + const handler = new actions.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal(null); }); @@ -354,7 +359,7 @@ describe('#actions handler', () => { pool, }; - const handler = new actions.default({ client: auth0, config }); + const handler = new actions.default({ client: pageClient(auth0), config }); try { await handler.getType(); } catch (error) { @@ -365,15 +370,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([ + mockPagedData({ include_totals: true }, 'actions', [ { id: 'action-1', name: 'action-test', @@ -387,23 +392,25 @@ 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, }; - const handler = new actions.default({ client: auth0, config }); + const handler = new actions.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ actions: [] }]); @@ -444,7 +451,7 @@ describe('#actions handler', () => { const auth0 = { actions: { - getAll: () => Promise.resolve([marketplaceAction]), + getAll: () => Promise.resolve({ data: { actions: [marketplaceAction] } }), delete: () => { wasDeleteCalled = true; }, @@ -452,7 +459,7 @@ describe('#actions handler', () => { pool, }; - const handler = new actions.default({ client: auth0, config }); + const handler = new actions.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ actions: [] }]); diff --git a/test/tools/auth0/handlers/attackProtection.tests.js b/test/tools/auth0/handlers/attackProtection.tests.js index 55ee73570..6f0ddbc12 100644 --- a/test/tools/auth0/handlers/attackProtection.tests.js +++ b/test/tools/auth0/handlers/attackProtection.tests.js @@ -7,30 +7,36 @@ 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, + }, }, }, }), @@ -74,7 +80,7 @@ describe('#attackProtection handler', () => { it('should update attack protection settings', async () => { const auth0 = { attackProtection: { - updateBreachedPasswordDetectionConfig: (params, data) => { + updateBreachedPasswordDetectionConfig: (data) => { expect(data).to.be.an('object'); expect(data).to.deep.equal({ admin_notification_frequency: [], @@ -84,7 +90,7 @@ describe('#attackProtection handler', () => { }); return Promise.resolve(data); }, - updateSuspiciousIpThrottlingConfig: (params, data) => { + updateSuspiciousIpThrottlingConfig: (data) => { expect(data).to.be.an('object'); expect(data).to.deep.equal({ allowlist: ['127.0.0.1'], @@ -103,7 +109,7 @@ describe('#attackProtection handler', () => { }); return Promise.resolve(data); }, - updateBruteForceConfig: (params, data) => { + updateBruteForceConfig: (data) => { expect(data).to.be.an('object'); expect(data).to.deep.equal({ allowlist: [], diff --git a/test/tools/auth0/handlers/branding.tests.js b/test/tools/auth0/handlers/branding.tests.js index 4a650ca81..87242d8f6 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 5fae08d73..54ee18f6c 100644 --- a/test/tools/auth0/handlers/clientGrants.tests.js +++ b/test/tools/auth0/handlers/clientGrants.tests.js @@ -1,5 +1,8 @@ +import pageClient from '../../../../src/tools/auth0/client'; + const { expect } = require('chai'); const clientGrants = require('../../../../src/tools/auth0/handlers/clientGrants'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -62,19 +65,19 @@ 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, }; - const handler = new clientGrants.default({ client: auth0, config }); + const handler = new clientGrants.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ { @@ -95,15 +98,16 @@ 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, }; - const handler = new clientGrants.default({ client: auth0, config }); + const handler = new clientGrants.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal([clientGrant]); }); @@ -116,19 +120,20 @@ 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, }; - const handler = new clientGrants.default({ client: auth0, config }); + const handler = new clientGrants.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ { @@ -147,7 +152,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,18 +162,21 @@ 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, }; - const handler = new clientGrants.default({ client: auth0, config }); + const handler = new clientGrants.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ { @@ -189,25 +197,28 @@ 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, }; - const handler = new clientGrants.default({ client: auth0, config }); + const handler = new clientGrants.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ { @@ -226,28 +237,31 @@ 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, }; - const handler = new clientGrants.default({ client: auth0, config }); + const handler = new clientGrants.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ { @@ -264,24 +278,27 @@ 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, }; - const handler = new clientGrants.default({ client: auth0, config }); + const handler = new clientGrants.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ clientGrants: [] }]); @@ -295,23 +312,26 @@ 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, }; - const handler = new clientGrants.default({ client: auth0, config }); + const handler = new clientGrants.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ clientGrants: [] }]); @@ -327,35 +347,37 @@ 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: 'cg1', client_id: 'client1', audience: 'audience1' }, - { id: 'cg2', client_id: 'client2', audience: 'audience2' }, - ], + getAll: (params) => + mockPagedData(params, 'client_grants', [ + { id: 'cg1', client_id: 'client1', audience: 'audience1' }, + { id: 'cg2', client_id: 'client2', audience: 'audience2' }, + ]), }, clients: { - getAll: () => [ - { name: 'client_delete', client_id: 'client1', audience: 'audience1' }, - { name: 'client_update', client_id: 'client2', audience: 'audience2' }, - { name: 'client_create', client_id: 'client3', audience: 'audience3' }, - ], + 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, }; - const handler = new clientGrants.default({ client: auth0, config }); + const handler = new clientGrants.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const assets = { @@ -383,67 +405,69 @@ 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([]); - }, - getAll: () => [ - { - client_id: '123', - audience: 'a', - id: '1', - }, - { - client_id: '123', - audience: 'a', - id: '2', - }, - { - client_id: '123', - audience: 'a', - id: '3', - }, - { - client_id: '456', - audience: 'a', - id: '4', - }, - { - client_id: '456', - audience: 'a', - id: '5', - }, - ], + return Promise.resolve({ data: [] }); + }, + getAll: (params) => + mockPagedData(params, 'client_grants', [ + { + client_id: '123', + audience: 'a', + id: '1', + }, + { + client_id: '123', + audience: 'a', + id: '2', + }, + { + client_id: '123', + audience: 'a', + id: '3', + }, + { + client_id: '456', + audience: 'a', + id: '4', + }, + { + client_id: '456', + audience: 'a', + id: '5', + }, + ]), }, clients: { - getAll: () => [ - { - name: 'abc', - client_id: 'abc', - }, - { - name: 'foo_client', - client_id: '123', - }, - { - name: 'foo_client', - client_id: '456', - }, - ], + getAll: (params) => + mockPagedData(params, 'clients', [ + { + name: 'abc', + client_id: 'abc', + }, + { + name: 'foo_client', + client_id: '123', + }, + { + name: 'foo_client', + client_id: '456', + }, + ]), }, pool, }; - const handler = new clientGrants.default({ client: auth0, config }); + const handler = new clientGrants.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const assets = { diff --git a/test/tools/auth0/handlers/clients.tests.js b/test/tools/auth0/handlers/clients.tests.js index 174e10b56..ce8389961 100644 --- a/test/tools/auth0/handlers/clients.tests.js +++ b/test/tools/auth0/handlers/clients.tests.js @@ -1,5 +1,8 @@ +import pageClient from '../../../../src/tools/auth0/client'; + const { expect } = require('chai'); const clients = require('../../../../src/tools/auth0/handlers/clients'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -62,16 +65,16 @@ 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, }; - const handler = new clients.default({ client: auth0, config }); + const handler = new clients.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ clients: [{ name: 'someClient' }] }]); @@ -80,15 +83,16 @@ describe('#clients handler', () => { it('should get clients', async () => { const auth0 = { clients: { - getAll: () => [ - { name: 'test client', client_id: 'FMfcgxvzLDvPsgpRFKkLVrnKqGgkHhQV' }, - { name: 'deploy client', client_id: 'client_id' }, - ], + getAll: (params) => + mockPagedData(params, 'clients', [ + { name: 'test client', client_id: 'FMfcgxvzLDvPsgpRFKkLVrnKqGgkHhQV' }, + { name: 'deploy client', client_id: 'client_id' }, + ]), }, pool, }; - const handler = new clients.default({ client: auth0, config }); + const handler = new clients.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal([ { client_id: 'FMfcgxvzLDvPsgpRFKkLVrnKqGgkHhQV', name: 'test client' }, @@ -103,7 +107,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,20 +116,21 @@ 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: () => [ - { - client_id: 'client1', - name: 'someClient', - }, - ], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => + mockPagedData(params, 'clients', [ + { + client_id: 'client1', + name: 'someClient', + }, + ]), }, pool, }; - const handler = new clients.default({ client: auth0, config }); + const handler = new clients.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [ @@ -147,24 +152,25 @@ 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: () => [ - { client_id: 'client1', name: 'existingClient' }, - { client_id: 'client_id', name: 'deploy client' }, - ], + getAll: (params) => + mockPagedData(params, 'clients', [ + { client_id: 'client1', name: 'existingClient' }, + { client_id: 'client_id', name: 'deploy client' }, + ]), }, pool, }; - const handler = new clients.default({ client: auth0, config }); + const handler = new clients.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ clients: [{ name: 'someClient' }] }]); @@ -174,24 +180,25 @@ 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: () => [ - { client_id: 'client1', name: 'existingClient' }, - { client_id: 'client_id', name: 'deploy client' }, - ], + getAll: (params) => + mockPagedData(params, 'clients', [ + { client_id: 'client1', name: 'existingClient' }, + { client_id: 'client_id', name: 'deploy client' }, + ]), }, pool, }; - const handler = new clients.default({ client: auth0, config }); + const handler = new clients.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ clients: [] }]); @@ -202,19 +209,20 @@ 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, }; - const handler = new clients.default({ client: auth0, config }); + const handler = new clients.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ clients: [{ name: 'newClient' }] }]); @@ -226,18 +234,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, }; @@ -249,7 +257,7 @@ describe('#clients handler', () => { }, }; - const handler = new clients.default({ client: auth0, config }); + const handler = new clients.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [assets]); @@ -262,22 +270,23 @@ 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: () => [ - { client_id: 'client1', name: 'existingClient' }, - { client_id: 'client2', name: 'existingClient2' }, - ], + getAll: (params) => + mockPagedData(params, 'clients', [ + { client_id: 'client1', name: 'existingClient' }, + { client_id: 'client2', name: 'existingClient2' }, + ]), }, pool, }; - const handler = new clients.default({ client: auth0, config }); + const handler = new clients.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ clients: [] }]); @@ -294,38 +303,39 @@ 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: () => [ - { - client_id: 'client-1', - name: 'Client 1', - }, - { - client_id: 'client-2', - name: 'Client 2', - }, - ], + getAll: (params) => + mockPagedData(params, 'clients', [ + { + client_id: 'client-1', + name: 'Client 1', + }, + { + client_id: 'client-2', + name: 'Client 2', + }, + ]), }, pool, }; const handler = new clients.default({ - client: auth0, + client: pageClient(auth0), config: (key) => ({ // Notably omitted is AUTH0_CLIENT_ID which diff --git a/test/tools/auth0/handlers/connections.tests.js b/test/tools/auth0/handlers/connections.tests.js index f29c4f32d..fc193a129 100644 --- a/test/tools/auth0/handlers/connections.tests.js +++ b/test/tools/auth0/handlers/connections.tests.js @@ -1,7 +1,10 @@ +import pageClient from '../../../../src/tools/auth0/client'; + /* eslint-disable consistent-return */ const { expect } = require('chai'); const sinon = require('sinon'); const connections = require('../../../../src/tools/auth0/handlers/connections'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -71,11 +74,13 @@ describe('#connections handler', () => { mapping: [ { scim: 'scim_id', - auth0: 'auth0_id' - } - ] + auth0: 'auth0_id', + }, + ], }), - applyScimConfiguration: sinon.stub().resolves(undefined) + applyScimConfiguration: sinon.stub().resolves(undefined), + createOverride: sinon.stub().resolves(new Map()), + updateOverride: sinon.stub().resolves(new Map()), }; }); @@ -90,20 +95,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([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', []), _getRestClient: () => ({}), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; - const handler = new connections.default({ client: auth0, config }); + const handler = new connections.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ connections: [{ name: 'someConnection' }] }]); @@ -114,19 +119,21 @@ describe('#connections handler', () => { const auth0 = { connections: { - getAll: () => [ - { strategy: 'github', name: 'github', enabled_clients: [clientId] }, - { strategy: 'auth0', name: 'db-should-be-ignored', enabled_clients: [] }, - ], + getAll: (params) => + mockPagedData(params, 'connections', [ + { strategy: 'github', name: 'github', enabled_clients: [clientId] }, + { strategy: 'auth0', name: 'db-should-be-ignored', enabled_clients: [] }, + ]), _getRestClient: () => ({}), }, clients: { - getAll: () => [{ name: 'test client', client_id: clientId }], + getAll: (params) => + mockPagedData(params, 'clients', [{ name: 'test client', client_id: clientId }]), }, pool, }; - const handler = new connections.default({ client: auth0, config }); + const handler = new connections.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal([ { strategy: 'github', name: 'github', enabled_clients: [clientId] }, @@ -139,7 +146,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)(); @@ -150,19 +157,25 @@ 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' }, + ]), _getRestClient: () => ({}), }, clients: { - getAll: () => [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }], + getAll: (params) => + mockPagedData(params, 'clients', [ + { name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }, + ]), }, pool, }; - const handler = new connections.default({ client: auth0, config }); + const handler = new connections.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ { @@ -196,7 +209,7 @@ describe('#connections handler', () => { }, }, }); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -214,22 +227,25 @@ describe('#connections handler', () => { }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ name: 'someSamlConnection', id: 'con1', strategy: 'samlp' }], - _getRestClient: () => ({}), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => + mockPagedData(params, 'connections', [ + { name: 'someSamlConnection', id: 'con1', strategy: 'samlp' }, + ]), }, clients: { - getAll: () => [ - { name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }, - { name: 'idp-one', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Teb' }, - ], + getAll: (params) => + mockPagedData(params, 'clients', [ + { name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }, + { name: 'idp-one', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Teb' }, + ]), }, pool, }; - const handler = new connections.default({ client: auth0, config }); + const handler = new connections.default({ client: pageClient(auth0), config }); handler.scimHandler = scimHandlerMock; const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ @@ -282,7 +298,7 @@ describe('#connections handler', () => { }, }, }); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -300,22 +316,26 @@ 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' }, + ]), _getRestClient: () => ({}), }, clients: { - getAll: () => [ - { name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }, - { name: 'idp-one', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Teb' }, - ], + getAll: (params) => + mockPagedData(params, 'clients', [ + { name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }, + { name: 'idp-one', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Teb' }, + ]), }, pool, }; - const handler = new connections.default({ client: auth0, config }); + const handler = new connections.default({ client: pageClient(auth0), config }); handler.scimHandler = scimHandlerMock; const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ @@ -358,7 +378,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)(); @@ -369,30 +389,32 @@ 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', - enabled_clients: ['excluded-one-id'], - }, - ], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => + mockPagedData(params, 'connections', [ + { + name: 'someConnection', + id: 'con1', + strategy: 'custom', + enabled_clients: ['excluded-one-id'], + }, + ]), _getRestClient: () => ({}), }, clients: { - getAll: () => [ - { name: 'client1', client_id: 'client1-id' }, - { name: 'excluded-one', client_id: 'excluded-one-id' }, - { name: 'excluded-two', client_id: 'excluded-two-id' }, - ], + 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, }; - const handler = new connections.default({ client: auth0, config }); + const handler = new connections.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ { @@ -417,26 +439,29 @@ 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' }, + ]), _getRestClient: () => ({}), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; - const handler = new connections.default({ client: auth0, config }); + const handler = new connections.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ { @@ -452,25 +477,28 @@ 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' }, + ]), _getRestClient: () => ({}), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; - const handler = new connections.default({ client: auth0, config }); + const handler = new connections.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ connections: [] }]); @@ -483,24 +511,27 @@ 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' }, + ]), _getRestClient: () => ({}), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; - const handler = new connections.default({ client: auth0, config }); + const handler = new connections.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ { @@ -518,23 +549,26 @@ 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' }, + ]), _getRestClient: () => ({}), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; - const handler = new connections.default({ client: auth0, config }); + const handler = new connections.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ connections: [] }]); @@ -549,30 +583,31 @@ 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: () => [ - { id: 'con1', name: 'existing1', strategy: 'custom' }, - { id: 'con2', name: 'existing2', strategy: 'custom' }, - ], + getAll: (params) => + mockPagedData(params, 'connections', [ + { id: 'con1', name: 'existing1', strategy: 'custom' }, + { id: 'con2', name: 'existing2', strategy: 'custom' }, + ]), _getRestClient: () => ({}), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; - const handler = new connections.default({ client: auth0, config }); + const handler = new connections.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const assets = { exclude: { diff --git a/test/tools/auth0/handlers/customDomains.test.ts b/test/tools/auth0/handlers/customDomains.test.ts index 455507ad4..e6a89ef93 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 394f0e059..bec93e39f 100644 --- a/test/tools/auth0/handlers/databases.tests.js +++ b/test/tools/auth0/handlers/databases.tests.js @@ -1,6 +1,9 @@ +import pageClient from '../../../../src/tools/auth0/client'; + const { expect } = require('chai'); const sinon = require('sinon'); const databases = require('../../../../src/tools/auth0/handlers/databases'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -58,19 +61,19 @@ 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, }; - const handler = new databases.default({ client: auth0, config }); + const handler = new databases.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ databases: [{ name: 'someDatabase' }] }]); @@ -80,21 +83,23 @@ 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, }; - const handler = new databases.default({ client: auth0, config }); + const handler = new databases.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal([{ strategy: 'auth0', name: 'db', enabled_clients: [clientId] }]); }); @@ -106,12 +111,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)(); @@ -122,18 +127,24 @@ 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, }; - const handler = new databases.default({ client: auth0, config }); + const handler = new databases.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ { @@ -155,12 +166,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)(); @@ -171,29 +182,31 @@ 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', - enabled_clients: ['excluded-one-id'], - }, - ], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => + mockPagedData(params, 'connections', [ + { + name: 'someDatabase', + id: 'con1', + strategy: 'auth0', + enabled_clients: ['excluded-one-id'], + }, + ]), }, clients: { - getAll: () => [ - { name: 'client1', client_id: 'client1-id' }, - { name: 'excluded-one', client_id: 'excluded-one-id' }, - { name: 'excluded-two', client_id: 'excluded-two-id' }, - ], + 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, }; - const handler = new databases.default({ client: auth0, config }); + const handler = new databases.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ { @@ -215,12 +228,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)(); @@ -230,18 +243,24 @@ 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, }; - const handler = new databases.default({ client: auth0, config }); + const handler = new databases.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ { @@ -261,7 +280,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) { @@ -269,17 +288,20 @@ 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, }; - const handler = new databases.default({ client: auth0, config }); + const handler = new databases.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ { @@ -295,24 +317,27 @@ 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, }; - const handler = new databases.default({ client: auth0, config }); + const handler = new databases.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ databases: [] }]); @@ -328,17 +353,20 @@ 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, }; - const handler = new databases.default({ client: auth0, config }); + const handler = new databases.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = [ { @@ -356,22 +384,25 @@ 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, }; - const handler = new databases.default({ client: auth0, config }); + const handler = new databases.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ databases: [] }]); @@ -386,29 +417,30 @@ 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: () => [ - { id: 'con1', name: 'existing1', strategy: 'auth0' }, - { id: 'con2', name: 'existing2', strategy: 'auth0' }, - ], + 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, }; - const handler = new databases.default({ client: auth0, config }); + const handler = new databases.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const assets = { exclude: { @@ -439,34 +471,34 @@ describe('#databases handler', () => { expect(params.id).to.equal('con1'); expect(data).to.deep.equal({ attributes: { - 'email': { - 'signup': { - 'status': 'required', - 'verification': { - 'active': false - } + email: { + signup: { + status: 'required', + verification: { + active: false, + }, }, - 'identifier': { - 'active': true + identifier: { + active: true, }, - 'profile_required': true + profile_required: true, }, - 'username': { - 'signup': { - 'status': 'required' + username: { + signup: { + status: 'required', }, - 'identifier': { - 'active': true + identifier: { + active: true, }, - 'validation': { - 'max_length': 15, - 'min_length': 1, - 'allowed_types': { - 'email': false, - 'phone_number': false - } + validation: { + max_length: 15, + min_length: 1, + allowed_types: { + email: false, + phone_number: false, + }, }, - 'profile_required': true + profile_required: true, }, }, options: { passwordPolicy: 'testPolicy', someOldOption: true }, @@ -491,36 +523,36 @@ describe('#databases handler', () => { strategy: 'auth0', options: { passwordPolicy: 'testPolicy' }, attributes: { - 'email': { - 'signup': { - 'status': 'required', - 'verification': { - 'active': false - } + email: { + signup: { + status: 'required', + verification: { + active: false, + }, }, - 'identifier': { - 'active': true + identifier: { + active: true, }, - 'profile_required': true + profile_required: true, }, - 'username': { - 'signup': { - 'status': 'required' - }, - 'identifier': { - 'active': true - }, - 'validation': { - 'max_length': 15, - 'min_length': 1, - 'allowed_types': { - 'email': false, - 'phone_number': false - } - }, - 'profile_required': true + username: { + signup: { + status: 'required', + }, + identifier: { + active: true, + }, + validation: { + max_length: 15, + min_length: 1, + allowed_types: { + email: false, + phone_number: false, + }, + }, + profile_required: true, }, - } + }, }, ]; @@ -546,10 +578,10 @@ describe('#databases handler', () => { expect(params.id).to.equal('con1'); expect(data).to.deep.equal({ validation: { - 'username': { - 'max': 15, - 'min': 1 - } + username: { + max: 15, + min: 1, + }, }, requires_username: true, options: { passwordPolicy: 'testPolicy', someOldOption: true }, @@ -574,10 +606,10 @@ describe('#databases handler', () => { strategy: 'auth0', options: { passwordPolicy: 'testPolicy' }, validation: { - 'username': { - 'max': 15, - 'min': 1 - } + username: { + max: 15, + min: 1, + }, }, requires_username: true, }, @@ -593,26 +625,33 @@ describe('#databases handler', () => { }); const logWarnSpy = sinon.spy(console, 'warn'); const deleteStub = sinon.stub().resolves([]); - const getAllStub = sinon.stub().resolves([{ - name: 'someDatabase', id: 'con1', strategy: 'auth0', validation: { - 'username': { - 'max': 15, - 'min': 1 - } - }, - requires_username: true - }]); + const getAllStub = sinon.stub().resolves([ + { + name: 'someDatabase', + id: 'con1', + strategy: 'auth0', + validation: { + username: { + max: 15, + min: 1, + }, + }, + requires_username: true, + }, + ]); const auth0 = { connections: { get: getStub, update: updateStub, delete: deleteStub, - getAll: getAllStub + getAll: getAllStub, }, clients: { - getAll: sinon.stub().resolves([{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]) + getAll: sinon + .stub() + .resolves([{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]), }, - pool: pool + pool: pool, }; const handler = new databases.default({ client: auth0, config }); @@ -625,7 +664,9 @@ describe('#databases handler', () => { const validation = payload?.options?.validation; if (attributes && (requiresUsername || validation)) { - console.warn('Warning: "attributes" cannot be used with "requires_username" or "validation". Please remove one of the conflicting options.'); + console.warn( + 'Warning: "attributes" cannot be used with "requires_username" or "validation". Please remove one of the conflicting options.' + ); throw new Error('Cannot set both attributes and requires_username or validation'); } @@ -700,13 +741,19 @@ describe('#databases handler', () => { await stageFn.apply(handler, [{ databases: data }]); } catch (err) { expect(err).to.be.an('object'); - expect(err.message).to.include('Cannot set both attributes and requires_username or validation'); + expect(err.message).to.include( + 'Cannot set both attributes and requires_username or validation' + ); } // eslint-disable-next-line no-unused-expressions expect(logWarnSpy.calledOnce).to.be.true; // eslint-disable-next-line no-unused-expressions - expect(logWarnSpy.calledWith('Warning: "attributes" cannot be used with "requires_username" or "validation". Please remove one of the conflicting options.')).to.be.true; + expect( + logWarnSpy.calledWith( + 'Warning: "attributes" cannot be used with "requires_username" or "validation". Please remove one of the conflicting options.' + ) + ).to.be.true; sinon.assert.calledOnce(getStub); sinon.assert.notCalled(updateStub); @@ -717,39 +764,47 @@ describe('#databases handler', () => { it('should update database with attributes and remove validation from the update request if validation is in the get response but attributes are in the update request', async () => { const getStub = sinon.stub().resolves({ options: { - someOldOption: true, validation: { - 'username': { - 'max': 15, - 'min': 1 - } - } - } + someOldOption: true, + validation: { + username: { + max: 15, + min: 1, + }, + }, + }, }); const updateStub = sinon.stub().resolves({ id: 'con1', }); const deleteStub = sinon.stub().resolves([]); - const getAllStub = sinon.stub().resolves([{ - name: 'someDatabase', id: 'con1', strategy: 'auth0', options: { - validation: { - 'username': { - 'max': 15, - 'min': 1 - } - } - } - }]); + const getAllStub = sinon.stub().resolves([ + { + name: 'someDatabase', + id: 'con1', + strategy: 'auth0', + options: { + validation: { + username: { + max: 15, + min: 1, + }, + }, + }, + }, + ]); const auth0 = { connections: { get: getStub, update: updateStub, delete: deleteStub, - getAll: getAllStub + getAll: getAllStub, }, clients: { - getAll: sinon.stub().resolves([{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]) + getAll: sinon + .stub() + .resolves([{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]), }, - pool: pool + pool: pool, }; const handler = new databases.default({ client: auth0, config }); @@ -761,7 +816,9 @@ describe('#databases handler', () => { const requiresUsername = payload?.options?.requires_username; const validation = payload?.options?.validation; if (attributes && (requiresUsername || validation)) { - console.warn('Warning: "attributes" cannot be used with "requires_username" or "validation". Please remove one of the conflicting options.'); + console.warn( + 'Warning: "attributes" cannot be used with "requires_username" or "validation". Please remove one of the conflicting options.' + ); throw new Error('Cannot set both attributes and requires_username or validation'); } @@ -842,7 +899,8 @@ describe('#databases handler', () => { it('should update database with validation & require username and remove attributes from the update request if attributes is in the get response but validation and require username are in the update request', async () => { const getStub = sinon.stub().resolves({ options: { - someOldOption: true, attributes: { + someOldOption: true, + attributes: { email: { signup: { status: 'required', @@ -873,58 +931,65 @@ describe('#databases handler', () => { profile_required: true, }, }, - } + }, }); const updateStub = sinon.stub().resolves({ id: 'con1', }); const deleteStub = sinon.stub().resolves([]); - const getAllStub = sinon.stub().resolves([{ - name: 'someDatabase', id: 'con1', strategy: 'auth0', options: { - attributes: { - email: { - signup: { - status: 'required', - verification: { - active: false, + const getAllStub = sinon.stub().resolves([ + { + name: 'someDatabase', + id: 'con1', + strategy: 'auth0', + options: { + attributes: { + email: { + signup: { + status: 'required', + verification: { + active: false, + }, }, + identifier: { + active: true, + }, + profile_required: true, }, - identifier: { - active: true, - }, - profile_required: true, - }, - username: { - signup: { - status: 'required', - }, - identifier: { - active: true, - }, - validation: { - max_length: 15, - min_length: 1, - allowed_types: { - email: false, - phone_number: false, + username: { + signup: { + status: 'required', + }, + identifier: { + active: true, + }, + validation: { + max_length: 15, + min_length: 1, + allowed_types: { + email: false, + phone_number: false, + }, }, + profile_required: true, }, - profile_required: true, }, }, - } - }]); + }, + ]); const auth0 = { connections: { get: getStub, update: updateStub, delete: deleteStub, - getAll: getAllStub + getAll: getAllStub, }, clients: { - getAll: sinon.stub().resolves([{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]) + getAll: sinon + .stub() + .resolves([{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]), }, - pool: pool + pool: pool, }; const handler = new databases.default({ client: auth0, config }); @@ -937,7 +1002,9 @@ describe('#databases handler', () => { const validation = payload?.options?.validation; if (attributes && (requiresUsername || validation)) { - console.warn('Warning: "attributes" cannot be used with "requires_username" or "validation". Please remove one of the conflicting options.'); + console.warn( + 'Warning: "attributes" cannot be used with "requires_username" or "validation". Please remove one of the conflicting options.' + ); throw new Error('Cannot set both attributes and requires_username or validation'); } @@ -969,10 +1036,620 @@ describe('#databases handler', () => { options: { passwordPolicy: 'testPolicy', validation: { - 'username': { - 'max': 15, - 'min': 1 - } + username: { + max: 15, + min: 1, + }, + }, + requires_username: true, + }, + }, + ]; + + await stageFn.apply(handler, [{ databases: data }]); + + sinon.assert.calledOnce(getStub); + sinon.assert.calledOnce(updateStub); + const updateArgs = updateStub.firstCall.args[1]; + + // eslint-disable-next-line no-unused-expressions + expect(updateArgs.options.attributes).to.not.exist; + + // eslint-disable-next-line no-unused-expressions + expect(updateArgs.options.validation).to.exist; + + // eslint-disable-next-line no-unused-expressions + expect(updateArgs.options.requires_username).to.exist; + }); + it('should update database when attributes are passed', async () => { + const auth0 = { + connections: { + get: function (params) { + (() => expect(this).to.not.be.undefined)(); + expect(params).to.be.an('object'); + expect(params.id).to.equal('con1'); + return Promise.resolve({ options: { someOldOption: true } }); + }, + create: function (data) { + (() => expect(this).to.not.be.undefined)(); + expect(data).to.be.an('undefined'); + return Promise.resolve(data); + }, + update: function (params, data) { + (() => expect(this).to.not.be.undefined)(); + expect(params).to.be.an('object'); + expect(params.id).to.equal('con1'); + expect(data).to.deep.equal({ + attributes: { + email: { + signup: { + status: 'required', + verification: { + active: false, + }, + }, + identifier: { + active: true, + }, + profile_required: true, + }, + username: { + signup: { + status: 'required', + }, + identifier: { + active: true, + }, + validation: { + max_length: 15, + min_length: 1, + allowed_types: { + email: false, + phone_number: false, + }, + }, + profile_required: true, + }, + }, + options: { passwordPolicy: 'testPolicy', someOldOption: true }, + }); + + return Promise.resolve({ ...params, ...data }); + }, + delete: () => Promise.resolve([]), + getAll: () => [{ name: 'someDatabase', id: 'con1', strategy: 'auth0' }], + }, + clients: { + getAll: () => [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }], + }, + pool, + }; + + const handler = new databases.default({ client: auth0, config }); + const stageFn = Object.getPrototypeOf(handler).processChanges; + const data = [ + { + name: 'someDatabase', + strategy: 'auth0', + options: { passwordPolicy: 'testPolicy' }, + attributes: { + email: { + signup: { + status: 'required', + verification: { + active: false, + }, + }, + identifier: { + active: true, + }, + profile_required: true, + }, + username: { + signup: { + status: 'required', + }, + identifier: { + active: true, + }, + validation: { + max_length: 15, + min_length: 1, + allowed_types: { + email: false, + phone_number: false, + }, + }, + profile_required: true, + }, + }, + }, + ]; + + await stageFn.apply(handler, [{ databases: data }]); + }); + it('should update database when require username and validation are passed', async () => { + const auth0 = { + connections: { + get: function (params) { + (() => expect(this).to.not.be.undefined)(); + expect(params).to.be.an('object'); + expect(params.id).to.equal('con1'); + return Promise.resolve({ options: { someOldOption: true } }); + }, + create: function (data) { + (() => expect(this).to.not.be.undefined)(); + expect(data).to.be.an('undefined'); + return Promise.resolve(data); + }, + update: function (params, data) { + (() => expect(this).to.not.be.undefined)(); + expect(params).to.be.an('object'); + expect(params.id).to.equal('con1'); + expect(data).to.deep.equal({ + validation: { + username: { + max: 15, + min: 1, + }, + }, + requires_username: true, + options: { passwordPolicy: 'testPolicy', someOldOption: true }, + }); + + return Promise.resolve({ ...params, ...data }); + }, + delete: () => Promise.resolve([]), + getAll: () => [{ name: 'someDatabase', id: 'con1', strategy: 'auth0' }], + }, + clients: { + getAll: () => [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }], + }, + pool, + }; + + const handler = new databases.default({ client: auth0, config }); + const stageFn = Object.getPrototypeOf(handler).processChanges; + const data = [ + { + name: 'someDatabase', + strategy: 'auth0', + options: { passwordPolicy: 'testPolicy' }, + validation: { + username: { + max: 15, + min: 1, + }, + }, + requires_username: true, + }, + ]; + + await stageFn.apply(handler, [{ databases: data }]); + }); + + it('should fail to update database when require username and validation and attributes are passed', async () => { + const getStub = sinon.stub().resolves({ options: { someOldOption: true } }); + const updateStub = sinon.stub().resolves({ + id: 'con1', + }); + const logWarnSpy = sinon.spy(console, 'warn'); + const deleteStub = sinon.stub().resolves([]); + const getAllStub = sinon.stub().resolves([ + { + name: 'someDatabase', + id: 'con1', + strategy: 'auth0', + validation: { + username: { + max: 15, + min: 1, + }, + }, + requires_username: true, + }, + ]); + const auth0 = { + connections: { + get: getStub, + update: updateStub, + delete: deleteStub, + getAll: getAllStub, + }, + clients: { + getAll: sinon + .stub() + .resolves([{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]), + }, + pool: pool, + }; + + const handler = new databases.default({ client: auth0, config }); + handler.getClientFN = function (fn) { + if (fn === 'update') { + return (params, payload) => + this.client.connections.get(params).then((connection) => { + const attributes = payload?.options?.attributes; + const requiresUsername = payload?.options?.requires_username; + const validation = payload?.options?.validation; + + if (attributes && (requiresUsername || validation)) { + console.warn( + 'Warning: "attributes" cannot be used with "requires_username" or "validation". Please remove one of the conflicting options.' + ); + throw new Error('Cannot set both attributes and requires_username or validation'); + } + + if (attributes) { + delete connection.options.validation; + delete connection.options.requires_username; + } + + if (requiresUsername || validation) { + delete connection.options.attributes; + } + + payload.options = { ...connection.options, ...payload.options }; + return this.client.connections.update(params, payload); + }); + } + + return this.client.connections[fn].bind(this.client.connections); + }; + + const stageFn = Object.getPrototypeOf(handler).processChanges; + + const data = [ + { + name: 'someDatabase', + strategy: 'auth0', + options: { + passwordPolicy: 'testPolicy', + attributes: { + email: { + signup: { + status: 'required', + verification: { + active: false, + }, + }, + identifier: { + active: true, + }, + profile_required: true, + }, + username: { + signup: { + status: 'required', + }, + identifier: { + active: true, + }, + validation: { + max_length: 15, + min_length: 1, + allowed_types: { + email: false, + phone_number: false, + }, + }, + profile_required: true, + }, + }, + validation: { + username: { + max: 15, + min: 1, + }, + }, + requires_username: true, + }, + }, + ]; + + try { + await stageFn.apply(handler, [{ databases: data }]); + } catch (err) { + expect(err).to.be.an('object'); + expect(err.message).to.include( + 'Cannot set both attributes and requires_username or validation' + ); + } + + // eslint-disable-next-line no-unused-expressions + expect(logWarnSpy.calledOnce).to.be.true; + // eslint-disable-next-line no-unused-expressions + expect( + logWarnSpy.calledWith( + 'Warning: "attributes" cannot be used with "requires_username" or "validation". Please remove one of the conflicting options.' + ) + ).to.be.true; + + sinon.assert.calledOnce(getStub); + sinon.assert.notCalled(updateStub); + + logWarnSpy.restore(); + }); + + it('should update database with attributes and remove validation from the update request if validation is in the get response but attributes are in the update request', async () => { + const getStub = sinon.stub().resolves({ + options: { + someOldOption: true, + validation: { + username: { + max: 15, + min: 1, + }, + }, + }, + }); + const updateStub = sinon.stub().resolves({ + id: 'con1', + }); + const deleteStub = sinon.stub().resolves([]); + const getAllStub = sinon.stub().resolves([ + { + name: 'someDatabase', + id: 'con1', + strategy: 'auth0', + options: { + validation: { + username: { + max: 15, + min: 1, + }, + }, + }, + }, + ]); + const auth0 = { + connections: { + get: getStub, + update: updateStub, + delete: deleteStub, + getAll: getAllStub, + }, + clients: { + getAll: sinon + .stub() + .resolves([{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]), + }, + pool: pool, + }; + + const handler = new databases.default({ client: auth0, config }); + handler.getClientFN = function (fn) { + if (fn === 'update') { + return (params, payload) => + this.client.connections.get(params).then((connection) => { + const attributes = payload?.options?.attributes; + const requiresUsername = payload?.options?.requires_username; + const validation = payload?.options?.validation; + if (attributes && (requiresUsername || validation)) { + console.warn( + 'Warning: "attributes" cannot be used with "requires_username" or "validation". Please remove one of the conflicting options.' + ); + throw new Error('Cannot set both attributes and requires_username or validation'); + } + + if (attributes) { + console.info('Info: "Removed Validation from Connection Payload"'); + delete connection.options.validation; + delete connection.options.requires_username; + } + + if (requiresUsername || validation) { + console.info('Info: "Removed Attributes from Connection Payload"'); + delete connection.options.attributes; + } + + payload.options = { ...connection.options, ...payload.options }; + return this.client.connections.update(params, payload); + }); + } + + return this.client.connections[fn].bind(this.client.connections); + }; + + const stageFn = Object.getPrototypeOf(handler).processChanges; + + const data = [ + { + name: 'someDatabase', + strategy: 'auth0', + options: { + passwordPolicy: 'testPolicy', + attributes: { + email: { + signup: { + status: 'required', + verification: { + active: false, + }, + }, + identifier: { + active: true, + }, + profile_required: true, + }, + username: { + signup: { + status: 'required', + }, + identifier: { + active: true, + }, + validation: { + max_length: 15, + min_length: 1, + allowed_types: { + email: false, + phone_number: false, + }, + }, + profile_required: true, + }, + }, + }, + }, + ]; + + await stageFn.apply(handler, [{ databases: data }]); + + sinon.assert.calledOnce(getStub); + sinon.assert.calledOnce(updateStub); + const updateArgs = updateStub.firstCall.args[1]; + + // eslint-disable-next-line no-unused-expressions + expect(updateArgs.options.attributes).to.exist; + // eslint-disable-next-line no-unused-expressions + expect(updateArgs.options.validation).to.not.exist; + }); + + it('should update database with validation & require username and remove attributes from the update request if attributes is in the get response but validation and require username are in the update request', async () => { + const getStub = sinon.stub().resolves({ + options: { + someOldOption: true, + attributes: { + email: { + signup: { + status: 'required', + verification: { + active: false, + }, + }, + identifier: { + active: true, + }, + profile_required: true, + }, + username: { + signup: { + status: 'required', + }, + identifier: { + active: true, + }, + validation: { + max_length: 15, + min_length: 1, + allowed_types: { + email: false, + phone_number: false, + }, + }, + profile_required: true, + }, + }, + }, + }); + const updateStub = sinon.stub().resolves({ + id: 'con1', + }); + const deleteStub = sinon.stub().resolves([]); + const getAllStub = sinon.stub().resolves([ + { + name: 'someDatabase', + id: 'con1', + strategy: 'auth0', + options: { + attributes: { + email: { + signup: { + status: 'required', + verification: { + active: false, + }, + }, + identifier: { + active: true, + }, + profile_required: true, + }, + username: { + signup: { + status: 'required', + }, + identifier: { + active: true, + }, + validation: { + max_length: 15, + min_length: 1, + allowed_types: { + email: false, + phone_number: false, + }, + }, + profile_required: true, + }, + }, + }, + }, + ]); + const auth0 = { + connections: { + get: getStub, + update: updateStub, + delete: deleteStub, + getAll: getAllStub, + }, + clients: { + getAll: sinon + .stub() + .resolves([{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]), + }, + pool: pool, + }; + + const handler = new databases.default({ client: auth0, config }); + handler.getClientFN = function (fn) { + if (fn === 'update') { + return (params, payload) => + this.client.connections.get(params).then((connection) => { + const attributes = payload?.options?.attributes; + const requiresUsername = payload?.options?.requires_username; + const validation = payload?.options?.validation; + + if (attributes && (requiresUsername || validation)) { + console.warn( + 'Warning: "attributes" cannot be used with "requires_username" or "validation". Please remove one of the conflicting options.' + ); + throw new Error('Cannot set both attributes and requires_username or validation'); + } + + if (attributes) { + console.info('Info: "Removed Validation from Connection Payload"'); + delete connection.options.validation; + delete connection.options.requires_username; + } + + if (requiresUsername || validation) { + console.info('Info: "Removed Attributes from Connection Payload"'); + delete connection.options.attributes; + } + + payload.options = { ...connection.options, ...payload.options }; + return this.client.connections.update(params, payload); + }); + } + + return this.client.connections[fn].bind(this.client.connections); + }; + + const stageFn = Object.getPrototypeOf(handler).processChanges; + + const data = [ + { + name: 'someDatabase', + strategy: 'auth0', + options: { + passwordPolicy: 'testPolicy', + validation: { + username: { + max: 15, + min: 1, + }, }, requires_username: true, }, diff --git a/test/tools/auth0/handlers/emailProvider.tests.js b/test/tools/auth0/handlers/emailProvider.tests.js index 57f9b695b..472e22b8e 100644 --- a/test/tools/auth0/handlers/emailProvider.tests.js +++ b/test/tools/auth0/handlers/emailProvider.tests.js @@ -5,17 +5,15 @@ describe('#emailProvider handler', () => { describe('#emailProvider process', () => { it('should configure email provider', async () => { const auth0 = { - emailProvider: { - configure: (provider, data) => { - expect(provider).to.be.an('object'); + emails: { + configure: (data) => { 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 }); }, - update: (provider, data) => Promise.resolve({ provider, data }), - delete: () => Promise.resolve(null), - get: () => [], + update: (data) => Promise.resolve({ data }), + delete: () => Promise.resolve({ data: null }), + get: () => ({ data: [] }), }, }; @@ -27,21 +25,16 @@ describe('#emailProvider handler', () => { it('should update email provider', async () => { const auth0 = { - emailProvider: { - configure: (provider, data) => { - expect(provider).to.be('undefined'); - return Promise.resolve(data); - }, - update: (provider, data) => { - expect(provider).to.be.an('object'); + emails: { + 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); + 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 +49,22 @@ describe('#emailProvider handler', () => { await stageFn.apply(handler, [{ emailProvider: data }]); }); - it('should delete email provider if set to empty object and AUTH0_ALLOW_DELETE is true', async () => { + // THIS IS NO LONGER SUPPORTED + it('should disable instead of delete email provider if set to empty object and AUTH0_ALLOW_DELETE is true', async () => { const AUTH0_ALLOW_DELETE = true; let wasDeleteCalled = false; - + let wasUpdateCalled = false; const auth0 = { - emailProvider: { + emails: { delete: () => { wasDeleteCalled = true; - return Promise.resolve({}); + return Promise.resolve({ data: {} }); }, - get: () => ({ name: 'someProvider', enabled: true }), + update: () => { + wasUpdateCalled = true; + return Promise.resolve({ data: {} }); + }, + get: () => ({ data: { name: 'someProvider', enabled: true } }), }, }; @@ -78,18 +76,19 @@ describe('#emailProvider handler', () => { await stageFn.apply(handler, [{ emailProvider: {} }]); - expect(wasDeleteCalled).to.equal(true); + expect(wasDeleteCalled).to.equal(false); + expect(wasUpdateCalled).to.equal(true); }); 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 +103,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 +115,16 @@ describe('#emailProvider handler', () => { it('should delete email provider and create another one instead', async () => { const auth0 = { - emailProvider: { - configure: (provider, data) => { - expect(provider).to.be.an('object'); + emails: { + 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); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve(null), - get: () => ({ name: 'oldProvider', enabled: true }), + update: (data) => Promise.resolve({ data }), + 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 ba1cc38bd..e783ee93e 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 980a5c479..ca807d4f5 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 9567e1995..0fb3f3631 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 ab26acf20..5ff88161b 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 215cd252d..ada7a506c 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 f6ccd392f..68ff576de 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 0bc517eec..6cbf29f47 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 deleted file mode 100644 index 6b82c1d16..000000000 --- a/test/tools/auth0/handlers/hooks.tests.js +++ /dev/null @@ -1,623 +0,0 @@ -import chai, { expect } from 'chai'; -import sinonChai from 'sinon-chai'; -import chaiAsPromised from 'chai-as-promised'; - -const constants = require('../../../../src/tools/constants').default; -const hooks = require('../../../../src/tools/auth0/handlers/hooks'); - -chai.use(chaiAsPromised); -chai.use(sinonChai); - -const pool = { - addEachTask: (data) => { - if (data.data && data.data.length) { - data.generator(data.data[0]); - } - return { promise: () => null }; - }, -}; - -describe('#hooks handler', () => { - const config = function (key) { - return config.data && config.data[key]; - }; - - config.data = { - AUTH0_ALLOW_DELETE: true, - }; - - describe('#hooks validate', () => { - it('should not allow same names', (done) => { - const auth0 = { - hooks: { - getAll: () => [], - }, - }; - - const handler = new hooks.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).validate; - const data = [ - { - name: 'newHook', - code: 'code', - triggerId: 'credentials-exchange', - }, - { - name: 'newHook', - code: 'code', - triggerId: 'credentials-exchange', - }, - ]; - - stageFn - .apply(handler, [{ hooks: data }]) - .then(() => done(new Error('Expecting error'))) - .catch((err) => { - expect(err).to.be.an('object'); - expect(err.message).to.include('Names must be unique'); - done(); - }); - }); - - it('should not allow more than one active hook for each triggerId', (done) => { - const auth0 = { - hooks: { - getAll: () => [], - }, - }; - - const handler = new hooks.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).validate; - const data = [ - { - name: 'Hook-1', - code: 'code', - active: true, - triggerId: 'credentials-exchange', - }, - { - name: 'Hook-2', - code: 'code', - active: true, - triggerId: 'credentials-exchange', - }, - ]; - - stageFn - .apply(handler, [{ hooks: data }]) - .then(() => done(new Error('Expecting error'))) - .catch((err) => { - expect(err).to.be.an.instanceof(Error); - expect(err.message).to.include( - 'Only one active hook allowed for "credentials-exchange" extensibility point. Conflicting hooks: Hook-1, Hook-2' - ); - done(); - }); - }); - - it('should pass validation', async () => { - const auth0 = { - hooks: { - getAll: () => [], - }, - }; - - const handler = new hooks.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).validate; - const data = [ - { - name: 'Hook-1', - code: 'code', - active: true, - triggerId: 'credentials-exchange', - }, - { - name: 'Hook-2', - code: 'code', - active: true, - triggerId: 'pre-user-registration', - }, - { - name: 'Hook-3', - code: 'code', - active: true, - triggerId: 'post-user-registration', - }, - { - name: 'Hook-4', - code: 'code', - active: false, - triggerId: 'pre-user-registration', - }, - { - name: 'Hook-5', - code: 'code', - active: false, - triggerId: 'credentials-exchange', - }, - { - name: 'Hook-6', - code: 'code', - active: false, - triggerId: 'post-change-password', - }, - { - name: 'Hook-7', - code: 'code', - active: false, - triggerId: 'send-phone-message', - }, - ]; - - await stageFn.apply(handler, [{ hooks: data }]); - }); - }); - - describe('#hooks process', () => { - it('should create hook', async () => { - const hookId = 'new-hook-id'; - const hook = { - name: 'Hook', - code: 'code', - triggerId: 'credentials-exchange', - secrets: { - SECRET: 'secret-secret', - }, - }; - - const auth0 = { - hooks: { - get: (params) => { - expect(params.id).to.equal(hookId); - return Promise.resolve({ ...hook, id: hookId, secrets: undefined }); - }, - create: function (data) { - (() => expect(this).to.not.be.undefined)(); - expect(data).to.be.an('object'); - 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 }); - }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => { - if (!auth0.getAllCalled) { - auth0.getAllCalled = true; - return Promise.resolve([]); - } - - return Promise.resolve([{ name: hook.name, triggerId: hook.triggerId, id: hookId }]); - }, - getSecrets: () => Promise.resolve({}), - addSecrets: (params, data) => { - expect(params.id).to.equal(hookId); - expect(data.SECRET).to.equal('secret-secret'); - return Promise.resolve(data); - }, - }, - pool, - getAllCalled: false, - }; - - const handler = new hooks.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [{ hooks: [hook] }]); - }); - - it('should get hooks', async () => { - const code = 'hook-code'; - - const hooksData = [ - { - id: 0, - active: false, - name: 'test-hook-1', - triggerId: 'credentials-exchange', - }, - { - id: 1, - active: true, - name: 'test-hook-2', - triggerId: 'credentials-exchange', - }, - ]; - - const auth0 = { - hooks: { - getAll: () => hooksData, - get: ({ id }) => Promise.resolve({ ...hooksData[id], code }), - getSecrets: ({ id }) => Promise.resolve({ SECRET: `hook-${id}-secret` }), - }, - }; - - const handler = new hooks.default({ client: auth0, config }); - const data = await handler.getType(); - expect(data).to.deep.equal( - hooksData.map((hook) => ({ ...hook, code, secrets: { SECRET: `hook-${hook.id}-secret` } })) - ); - }); - - it('should return if trying to get hooks when deprecated for tenant', async () => { - const auth0 = { - hooks: { - getAll: () => { - const error = new Error(); - error.statusCode = 403; - error.message = 'Insufficient privileges to use this deprecated feature'; - throw error; - }, - }, - }; - - const handler = new hooks.default({ client: auth0, config }); - const data = await handler.getType(); - expect(data).to.equal(null); - }); - - it('should return an empty array for 501 status code', async () => { - const auth0 = { - hooks: { - getAll: () => { - const error = new Error('Feature is not yet implemented'); - error.statusCode = 501; - throw error; - }, - }, - pool, - }; - - const handler = new hooks.default({ client: auth0, config }); - const data = await handler.getType(); - expect(data).to.deep.equal([]); - }); - - it('should return an empty array for 404 status code', async () => { - const auth0 = { - hooks: { - getAll: () => { - const error = new Error('Not found'); - error.statusCode = 404; - throw error; - }, - }, - pool, - }; - - const handler = new hooks.default({ client: auth0, config }); - const data = await handler.getType(); - expect(data).to.deep.equal([]); - }); - - it('should throw an error for all other failed requests', async () => { - const auth0 = { - hooks: { - getAll: () => { - const error = new Error('Bad request'); - error.statusCode = 500; - throw error; - }, - }, - pool, - }; - - const handler = new hooks.default({ client: auth0, config }); - try { - await handler.getType(); - } catch (error) { - expect(error).to.be.an.instanceOf(Error); - } - }); - - it('should update hook', async () => { - const auth0 = { - hooks: { - create: () => Promise.resolve([]), - 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('1'); - expect(data.id).to.be.an('undefined'); - expect(data.code).to.equal('code'); - expect(data.name).to.equal('someHook'); - expect(data.triggerId).to.be.an('undefined'); - return Promise.resolve(data); - }, - delete: () => Promise.resolve([]), - getAll: () => [ - { - id: '1', - name: 'someHook', - triggerId: 'credentials-exchange', - }, - ], - get: () => - Promise.resolve({ - id: '1', - name: 'someHook', - code: 'code', - triggerId: 'credentials-exchange', - }), - getSecrets: () => Promise.resolve({}), - }, - pool, - }; - - const handler = new hooks.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [ - { hooks: [{ name: 'someHook', code: 'code', triggerId: 'credentials-exchange' }] }, - ]); - }); - - it('should remove hook', async () => { - const auth0 = { - hooks: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), - delete: (data) => { - expect(data).to.be.an('object'); - expect(data.id).to.equal('1'); - return Promise.resolve(data); - }, - getAll: () => [ - { - id: '1', - name: 'someHook', - triggerId: 'credentials-exchange', - }, - ], - get: () => - Promise.resolve({ - id: '1', - name: 'someHook', - code: 'code', - triggerId: 'credentials-exchange', - }), - getSecrets: () => Promise.resolve({}), - }, - pool, - }; - - const handler = new hooks.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [{ hooks: [{}] }]); - }); - - // excluded hooks are not yet implemented - it.skip('should not touch excluded hooks', async () => { - const auth0 = { - hooks: { - create: function (data) { - (() => expect(this).to.not.be.undefined)(); - expect(data).to.be.an('undefined'); - return Promise.resolve(data); - }, - update: function (data) { - (() => expect(this).to.not.be.undefined)(); - expect(data).to.be.an('undefined'); - return Promise.resolve(data); - }, - delete: (data) => { - expect(data).to.be.an('undefined'); - return Promise.resolve(data); - }, - getAll: () => [ - { - id: '1', - code: 'hook-one-code', - name: 'Hook1', - triggerId: 'credentials-exchange', - }, - { - id: '2', - code: 'hook-two-code', - name: 'Hook2', - triggerId: 'credentials-exchange', - }, - ], - }, - pool, - }; - - const handler = new hooks.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - const data = { - hooks: [ - { name: 'Hook1', code: 'new-hook-one-code', triggerId: 'credentials-exchange' }, - { name: 'Hook3', script: 'new-hook-three-code', triggerId: 'credentials-exchange' }, - ], - exclude: { - hooks: ['Hook1', 'Hook2', 'Hook3'], - }, - }; - - await stageFn.apply(handler, [data]); - }); - - it('should update (create, delete) secrets', async () => { - const hook = { - id: '1', - name: 'someHook', - triggerId: 'credentials-exchange', - }; - const existingSecrets = { - TO_UPDATE_ONE: 'old secret - should be updated - 1', - TO_UPDATE_TWO: 'old secret - should be updated - 2', - TO_REMOVE_ONE: 'should be removed', - TO_REMOVE_TWO: 'should be removed', - }; - const createSecrets = { - TO_CREATE_ONE: 'should be created - 1', - TO_CREATE_TWO: 'should be created - 2', - }; - const updateSecrets = { - TO_UPDATE_ONE: 'updated - 1', - TO_UPDATE_TWO: 'updated - 2', - }; - const removeSecrets = ['TO_REMOVE_ONE', 'TO_REMOVE_TWO']; - const auth0 = { - hooks: { - create: () => Promise.resolve([]), - 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(hook.id); - expect(data.id).to.be.an('undefined'); - expect(data.code).to.equal('new-code'); - expect(data.name).to.equal('someHook'); - expect(data.triggerId).to.be.an('undefined'); - return Promise.resolve(data); - }, - delete: () => Promise.resolve([]), - getAll: () => [hook], - get: (params) => { - expect(params.id).to.equal(hook.id); - return Promise.resolve({ ...hook, code: 'hook-code' }); - }, - getSecrets: (params) => { - expect(params.id).to.equal(hook.id); - return Promise.resolve(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(); - }, - 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(); - }, - removeSecrets: (params, data) => { - expect(params.id).to.equal(hook.id); - expect(data).to.be.an('array'); - expect(data).to.deep.equal(removeSecrets); - return Promise.resolve(); - }, - }, - pool, - }; - - const handler = new hooks.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - const assets = { - hooks: [ - { - name: 'someHook', - code: 'new-code', - triggerId: 'credentials-exchange', - secrets: { - ...updateSecrets, - ...createSecrets, - }, - }, - ], - }; - - await stageFn.apply(handler, [assets]); - }); - - it('should not update secret, if its value did not change', async () => { - const hook = { - id: '1', - name: 'someHook', - triggerId: 'credentials-exchange', - }; - const existingSecrets = { - SOME_SECRET: 'should remain the same', - }; - const updateSecrets = { - SOME_SECRET: constants.HOOKS_HIDDEN_SECRET_VALUE, - }; - const auth0 = { - hooks: { - create: () => Promise.resolve([]), - 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(hook.id); - expect(data.id).to.be.an('undefined'); - expect(data.code).to.equal('new-code'); - expect(data.name).to.equal('someHook'); - expect(data.triggerId).to.be.an('undefined'); - return Promise.resolve(data); - }, - delete: () => Promise.resolve([]), - getAll: () => [hook], - get: (params) => { - expect(params.id).to.equal(hook.id); - return Promise.resolve({ ...hook, code: 'hook-code' }); - }, - getSecrets: (params) => { - expect(params.id).to.equal(hook.id); - return Promise.resolve(existingSecrets); - }, - updateSecrets: (params) => { - expect(params).to.equal(undefined); - return Promise.reject(new Error('Should not be called')); - }, - }, - pool, - }; - - const handler = new hooks.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - const assets = { - hooks: [ - { - name: 'someHook', - code: 'new-code', - triggerId: 'credentials-exchange', - secrets: updateSecrets, - }, - ], - }; - - await stageFn.apply(handler, [assets]); - }); - - it('should not throw if attempted to update hooks when deprecated for tenant', async () => { - const auth0 = { - hooks: { - getAll: () => { - const error = new Error(); - error.statusCode = 403; - error.message = 'Insufficient privileges to use this deprecated feature'; - throw error; - }, - create: () => { - const error = new Error(); - error.statusCode = 403; - error.message = 'Insufficient privileges to use this deprecated feature'; - throw error; - }, - }, - pool, - }; - const data = { - hooks: [ - { - name: 'someHook', - code: 'new-code', - triggerId: 'credentials-exchange', - secrets: [], - }, - ], - }; - - const handler = new hooks.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await expect(stageFn.apply(handler, [data])).to.be.eventually.fulfilled; - }); - }); -}); diff --git a/test/tools/auth0/handlers/logStreams.test.ts b/test/tools/auth0/handlers/logStreams.test.ts index 53fdc4ce7..11c0f3ebb 100644 --- a/test/tools/auth0/handlers/logStreams.test.ts +++ b/test/tools/auth0/handlers/logStreams.test.ts @@ -67,19 +67,19 @@ const mockLogStreams = [ type: 'eventbridge', status: 'active', sink: { - awsRegion: "some region", - awsAccountId: "some id", - awsPartnerEventSource: "some source", + awsRegion: 'some region', + awsAccountId: 'some id', + awsPartnerEventSource: 'some source', }, }, ]; 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, @@ -160,9 +160,9 @@ describe('#logStreams handler', () => { type: 'eventbridge', status: 'active', sink: { - awsRegion: "some region", - awsAccountId: "some id", - awsPartnerEventSource: "some source", + awsRegion: 'some region', + awsAccountId: 'some id', + awsPartnerEventSource: 'some source', }, }, ], @@ -178,7 +178,7 @@ describe('#logStreams handler', () => { ...auth0ApiClientMock, logStreams: { ...auth0ApiClientMock.logStreams, - getAll: async () => [], + getAll: async () => ({ data: [] }), }, }, functions: { diff --git a/test/tools/auth0/handlers/migrations.tests.js b/test/tools/auth0/handlers/migrations.tests.js deleted file mode 100644 index 9d47bdf0f..000000000 --- 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 914026918..931f96bc7 100644 --- a/test/tools/auth0/handlers/organizations.tests.js +++ b/test/tools/auth0/handlers/organizations.tests.js @@ -1,7 +1,9 @@ import { PromisePoolExecutor } from 'promise-pool-executor'; +import pageClient from '../../../../src/tools/auth0/client'; const { expect } = require('chai'); const organizations = require('../../../../src/tools/auth0/handlers/organizations'); +const { mockPagedData } = require('../../../utils'); const pool = new PromisePoolExecutor({ concurrencyLimit: 3, @@ -109,7 +111,7 @@ describe('#organizations handler', () => { pool, }; - const handler = new organizations.default({ client: auth0, config }); + const handler = new organizations.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const response = await stageFn.apply(handler, [{}]); expect(response).to.equal(undefined); @@ -125,11 +127,11 @@ 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'); @@ -137,28 +139,29 @@ describe('#organizations handler', () => { expect(connection.assign_membership_on_login).to.equal(true); expect(connection.show_as_button).to.equal(false); expect(connection.is_signup_enabled).to.equal(true); - return Promise.resolve(connection); + return Promise.resolve({ data: connection }); }, }, connections: { - getAll: () => [ - { - id: sampleEnabledConnection.connection_id, - name: sampleEnabledConnection.connection.name, - options: {}, - }, - { - id: sampleEnabledConnection2.connection_id, - name: sampleEnabledConnection2.connection.name, - options: {}, - }, - { id: 'con_999', name: 'Username', options: {} }, - ], + getAll: (params) => + mockPagedData(params, 'connections', [ + { + id: sampleEnabledConnection.connection_id, + name: sampleEnabledConnection.connection.name, + options: {}, + }, + { + id: sampleEnabledConnection2.connection_id, + name: sampleEnabledConnection2.connection.name, + options: {}, + }, + { id: 'con_999', name: 'Username', options: {} }, + ]), }, pool, }; - const handler = new organizations.default({ client: auth0, config }); + const handler = new organizations.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [ { @@ -171,7 +174,7 @@ describe('#organizations handler', () => { name: 'Username-Password-Login', assign_membership_on_login: true, show_as_button: false, - is_signup_enabled: true + is_signup_enabled: true, }, ], }, @@ -183,15 +186,13 @@ 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, }; - const handler = new organizations.default({ client: auth0, config }); + const handler = new organizations.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal([{ ...sampleOrg, connections: [sampleEnabledConnection] }]); }); @@ -208,15 +209,16 @@ 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, }; - const handler = new organizations.default({ client: auth0, config }); + const handler = new organizations.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.have.length(90); }); @@ -226,7 +228,7 @@ describe('#organizations handler', () => { pool, }; - const handler = new organizations.default({ client: auth0, config }); + const handler = new organizations.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal([]); }); @@ -243,7 +245,7 @@ describe('#organizations handler', () => { pool, }; - const handler = new organizations.default({ client: auth0, config }); + const handler = new organizations.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal([]); }); @@ -260,7 +262,7 @@ describe('#organizations handler', () => { pool, }; - const handler = new organizations.default({ client: auth0, config }); + const handler = new organizations.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal([]); }); @@ -277,7 +279,7 @@ describe('#organizations handler', () => { pool, }; - const handler = new organizations.default({ client: auth0, config }); + const handler = new organizations.default({ client: pageClient(auth0), config }); try { await handler.getType(); } catch (error) { @@ -289,21 +291,19 @@ 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, }; - const handler = new organizations.default({ client: auth0, config }); + const handler = new organizations.default({ client: pageClient(auth0), config }); let data = await handler.getType(); expect(data).to.deep.equal([sampleOrg]); @@ -315,24 +315,41 @@ 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); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => Promise.resolve([sampleOrg]), - connections: { - get: () => [sampleEnabledConnection, sampleEnabledConnection2], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => + Promise.resolve( + mockPagedData({ ...params, include_totals: true }, '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 }); + }, + 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({ data: undefined }); }, updateEnabledConnection: (params, data) => { - if (params.connection_id === sampleEnabledConnection.connection_id) { + if (params.connectionId === sampleEnabledConnection.connection_id) { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); - expect(params.connection_id).to.equal(sampleEnabledConnection.connection_id); + expect(params.connectionId).to.equal(sampleEnabledConnection.connection_id); expect(data).to.be.an('object'); expect(data.assign_membership_on_login).to.equal(false); expect(data.show_as_button).to.equal(true); @@ -340,7 +357,7 @@ describe('#organizations handler', () => { } else { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); - expect(params.connection_id).to.equal(sampleEnabledConnection2.connection_id); + expect(params.connectionId).to.equal(sampleEnabledConnection2.connection_id); expect(data).to.be.an('object'); expect(data.assign_membership_on_login).to.equal(true); expect(data.show_as_button).to.equal(false); @@ -349,24 +366,25 @@ describe('#organizations handler', () => { }, }, connections: { - getAll: () => [ - { - id: sampleEnabledConnection.connection_id, - name: sampleEnabledConnection.connection.name, - options: {}, - }, - { - id: sampleEnabledConnection2.connection_id, - name: sampleEnabledConnection2.connection.name, - options: {}, - }, - { id: 'con_999', name: 'Username', options: {} }, - ], + getAll: (params) => + mockPagedData({ ...params, include_totals: true }, 'connections', [ + { + id: sampleEnabledConnection.connection_id, + name: sampleEnabledConnection.connection.name, + options: {}, + }, + { + id: sampleEnabledConnection2.connection_id, + name: sampleEnabledConnection2.connection.name, + options: {}, + }, + { id: 'con_999', name: 'Username', options: {} }, + ]), }, pool, }; - const handler = new organizations.default({ client: auth0, config }); + const handler = new organizations.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [ @@ -381,7 +399,7 @@ describe('#organizations handler', () => { name: 'Username-Password-Login', assign_membership_on_login: false, show_as_button: true, - is_signup_enabled: false + is_signup_enabled: false, }, { name: 'facebook', assign_membership_on_login: true, show_as_button: false }, ], @@ -394,19 +412,17 @@ 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'); @@ -415,28 +431,29 @@ describe('#organizations handler', () => { expect(data.assign_membership_on_login).to.equal(false); expect(data.show_as_button).to.equal(false); expect(data.is_signup_enabled).to.equal(false); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, connections: { - getAll: () => [ - { - id: sampleEnabledConnection.connection_id, - name: sampleEnabledConnection.connection.name, - options: {}, - }, - { - id: sampleEnabledConnection2.connection_id, - name: sampleEnabledConnection2.connection.name, - options: {}, - }, - { id: 'con_999', name: 'Username', options: {} }, - ], + getAll: (params) => + mockPagedData(params, 'connections', [ + { + id: sampleEnabledConnection.connection_id, + name: sampleEnabledConnection.connection.name, + options: {}, + }, + { + id: sampleEnabledConnection2.connection_id, + name: sampleEnabledConnection2.connection.name, + options: {}, + }, + { id: 'con_999', name: 'Username', options: {} }, + ]), }, pool, }; - const handler = new organizations.default({ client: auth0, config }); + const handler = new organizations.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [ @@ -451,7 +468,7 @@ describe('#organizations handler', () => { name: 'Username-Password-Login', assign_membership_on_login: false, show_as_button: false, - is_signup_enabled: false + is_signup_enabled: false, }, ], }, @@ -469,39 +486,43 @@ 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); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => Promise.resolve([sampleOrg]), - connections: { - get: () => [sampleEnabledConnection2], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [sampleOrg])), + getEnabledConnections: () => ({ data: [sampleEnabledConnection2] }), + deleteEnabledConnection: (params) => { + expect(params).to.be.an('object'); + expect(params.connectionId).to.equal(sampleEnabledConnection2.connection_id); + 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 }); }, }, connections: { - getAll: () => [ - { - id: sampleEnabledConnection.connection_id, - name: sampleEnabledConnection.connection.name, - options: {}, - }, - { - id: sampleEnabledConnection2.connection_id, - name: sampleEnabledConnection2.connection.name, - options: {}, - }, - { id: 'con_999', name: 'Username', options: {} }, - ], + getAll: (params) => + mockPagedData(params, 'connections', [ + { + id: sampleEnabledConnection.connection_id, + name: sampleEnabledConnection.connection.name, + options: {}, + }, + { + id: sampleEnabledConnection2.connection_id, + name: sampleEnabledConnection2.connection.name, + options: {}, + }, + { id: 'con_999', name: 'Username', options: {} }, + ]), }, pool, }; - const handler = new organizations.default({ client: auth0, config }); + const handler = new organizations.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [ @@ -526,33 +547,32 @@ 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: () => [ - { - id: sampleEnabledConnection.connection_id, - name: sampleEnabledConnection.connection.name, - options: {}, - }, - { - id: sampleEnabledConnection2.connection_id, - name: sampleEnabledConnection2.connection.name, - options: {}, - }, - { id: 'con_999', name: 'Username', options: {} }, - ], + getAll: (params) => + mockPagedData(params, 'connections', [ + { + id: sampleEnabledConnection.connection_id, + name: sampleEnabledConnection.connection.name, + options: {}, + }, + { + id: sampleEnabledConnection2.connection_id, + name: sampleEnabledConnection2.connection.name, + options: {}, + }, + { id: 'con_999', name: 'Username', options: {} }, + ]), }, pool, }; - const handler = new organizations.default({ client: auth0, config }); + const handler = new organizations.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [ @@ -572,24 +592,22 @@ 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, }; - const handler = new organizations.default({ client: auth0, config }); + const handler = new organizations.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ organizations: [{}] }]); }); diff --git a/test/tools/auth0/handlers/pages.tests.js b/test/tools/auth0/handlers/pages.tests.js index 011076429..f4e4ab6ed 100644 --- a/test/tools/auth0/handlers/pages.tests.js +++ b/test/tools/auth0/handlers/pages.tests.js @@ -1,5 +1,8 @@ +import pageClient from '../../../../src/tools/auth0/client'; + const { expect } = require('chai'); const pages = require('../../../../src/tools/auth0/handlers/pages'); +const { mockPagedData } = require('../../../utils'); describe('#pages handler', () => { describe('#pages process', () => { @@ -13,13 +16,13 @@ describe('#pages handler', () => { 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); + return Promise.resolve({ data }); }, - getAll: () => [{ client_id: 'global1' }], + getAll: (params) => mockPagedData(params, 'clients', [{ client_id: 'global1' }]), }, }; - const handler = new pages.default({ client: auth0 }); + const handler = new pages.default({ client: pageClient(auth0) }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [ @@ -33,25 +36,28 @@ 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 }, + }, }), }, }; - const handler = new pages.default({ client: auth0 }); + const handler = new pages.default({ client: pageClient(auth0) }); const data = await handler.getType(); expect(data).to.deep.equal([ { enabled: true, html: html, name: 'login' }, @@ -68,18 +74,18 @@ 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 }); }, }, }; - const handler = new pages.default({ client: auth0 }); + const handler = new pages.default({ client: pageClient(auth0) }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [ @@ -91,19 +97,19 @@ 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 }); }, }, }; - const handler = new pages.default({ client: auth0 }); + const handler = new pages.default({ client: pageClient(auth0) }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [ diff --git a/test/tools/auth0/handlers/prompts.tests.ts b/test/tools/auth0/handlers/prompts.tests.ts index a772c794d..b93071149 100644 --- a/test/tools/auth0/handlers/prompts.tests.ts +++ b/test/tools/auth0/handlers/prompts.tests.ts @@ -5,10 +5,7 @@ import sinon from 'sinon'; import promptsHandler, { Prompts } from '../../../../src/tools/auth0/handlers/prompts'; import { Language } from '../../../../src/types'; import log from '../../../../src/logger'; -import { - CustomPartialsPromptTypes, - CustomPromptPartialsScreens, -} from '../../../../lib/tools/auth0/handlers/prompts'; +import { CustomPartialsPromptTypes } from '../../../../lib/tools/auth0/handlers/prompts'; const mockPromptsSettings = { universal_login_experience: 'classic', @@ -65,14 +62,16 @@ describe('#prompts handler', () => { }, }; const auth0 = { - tenant: { + tenants: { getSettings: () => Promise.resolve({ - enabled_locales: supportedLanguages, + data: { + enabled_locales: supportedLanguages, + }, }), }, prompts: { - getSettings: () => mockPromptsSettings, + get: () => ({ data: mockPromptsSettings }), getCustomTextByLanguage: ({ language, prompt }) => { const customTextLanguageMap = { en: englishCustomText, @@ -82,13 +81,10 @@ 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 }); }, - _getRestClient: (endpoint) => ({ - get: (...options) => Promise.resolve({ endpoint, method: 'get', options }), - }), }, pool: new PromisePoolExecutor({ concurrencyLimit: 3, @@ -102,13 +98,13 @@ describe('#prompts handler', () => { }); const getCustomPartial = sinon.stub(handler, 'getCustomPartial'); - getCustomPartial.withArgs({ prompt: 'login' }).resolves(loginPartial); + getCustomPartial.withArgs({ prompt: 'login' }).resolves({ data: loginPartial }); getCustomPartial.withArgs({ prompt: 'login-id' }).resolves({}); getCustomPartial.withArgs({ prompt: 'login-password' }).resolves({}); getCustomPartial.withArgs({ prompt: 'login-passwordless' }).resolves({}); getCustomPartial.withArgs({ prompt: 'signup-password' }).resolves({}); getCustomPartial.withArgs({ prompt: 'signup-id' }).resolves({}); - getCustomPartial.withArgs({ prompt: 'signup' }).resolves(signupPartial); + getCustomPartial.withArgs({ prompt: 'signup' }).resolves({ data: signupPartial }); const data = await handler.getType(); expect(data).to.deep.equal({ @@ -140,7 +136,7 @@ describe('#prompts handler', () => { let didCallUpdatePartials = false; const auth0 = { - tenant: { + tenants: { getSettings: () => ({ enabled_locales: ['en'], }), @@ -149,10 +145,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 }); }, _getRestClient: (endpoint) => ({ get: (...options) => Promise.resolve({ endpoint, method: 'get', options }), @@ -226,12 +222,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 }); }, _getRestClient: (endpoint) => ({ get: (...options) => Promise.resolve({ endpoint, method: 'get', options }), @@ -270,13 +266,16 @@ describe('#prompts handler', () => { it('should not fail if tenant languages or partials are undefined', async () => { const auth0 = { - tenant: { + tenants: { getSettings: () => Promise.resolve({ - enabled_locales: undefined, + data: { + enabled_locales: undefined, + }, }), }, prompts: { + get: () => ({ data: mockPromptsSettings }), getSettings: () => mockPromptsSettings, _getRestClient: (endpoint) => ({ get: (...options) => Promise.resolve({ endpoint, method: 'get', options }), @@ -402,79 +401,6 @@ describe('#prompts handler', () => { } }); - it('should handle errors correctly in partialHttpRequest with Get Method', async () => { - const method = 'get'; - const options = [{ prompt: 'test-prompt' }]; - const error = new Error('Request failed'); - sandbox.stub(handler.promptClient, method).rejects(error); - - try { - await handler.partialHttpRequest(method, options); - throw new Error('Expected method to throw.'); - } catch (err) { - expect(err).to.equal(error); - } - }); - - it('should handle errors correctly in partialHttpRequest with Put Method', async () => { - const method = 'put'; - const options = [{ prompt: 'test-prompt' }, { key: 'value' }]; - const error = new Error('Request failed'); - sandbox.stub(handler.promptClient, 'invoke').rejects(error); - - try { - await handler.partialHttpRequest(method, options); - throw new Error('Expected method to throw.'); - } catch (err) { - expect(err).to.equal(error); - } - }); - - it('should make an HTTP request with the correct headers with Get Method', async () => { - const method = 'get'; - const options = [{ prompt: 'test-prompt' }]; - const mockResponse = { data: 'response' }; - sandbox.stub(handler.promptClient, method).resolves(mockResponse); - - const result = await handler.partialHttpRequest(method, options); - expect(result).to.deep.equal(mockResponse); - }); - - it('should make an HTTP request with the correct headers with Put Method', async () => { - const method = 'put'; - const options = [{ prompt: 'test-prompt' }, { key: 'value' }]; - const mockResponse = { data: 'response' }; - sandbox.stub(handler.promptClient, 'invoke').resolves(mockResponse); - - const result = await handler.partialHttpRequest(method, options); - expect(result).to.deep.equal(mockResponse); - }); - - it('should not make a request if the feature is not supported', async () => { - handler.IsFeatureSupported = false; - const putStub = sandbox.stub(handler, 'partialHttpRequest'); - - await handler.updateCustomPartials({ - prompt: 'login', - body: {} as CustomPromptPartialsScreens, - }); - - expect(putStub.called).to.be.false; - }); - - it('should make a request if the feature is supported', async () => { - handler.IsFeatureSupported = true; - const body = { key: 'value' }; - const putStub = sandbox.stub(handler, 'partialHttpRequest').resolves(); - - await handler.updateCustomPartials({ prompt: 'login', body }); - - expect(putStub.calledOnce).to.be.true; - const { args } = putStub.getCall(0); - expect(args[0]).to.equal('put'); - expect(args[1]).to.deep.equal([{ prompt: 'login' }, body]); - }); - it('should return empty object if feature is not supported', async () => { handler.IsFeatureSupported = false; @@ -483,33 +409,5 @@ describe('#prompts handler', () => { }); expect(result).to.deep.equal({}); }); - - it('should return custom partial data if feature is supported', async () => { - handler.IsFeatureSupported = true; - - const mockResponse = { - 'form-content-end': '
TEST
', - }; - sandbox.stub(handler, 'partialHttpRequest').resolves(mockResponse); - - const result = await handler.getCustomPartial({ prompt: 'login' }); - - expect(result).to.deep.equal(mockResponse); - expect(handler.partialHttpRequest.calledOnceWith('get', [{ prompt: 'login' }])).to.be.true; - }); - - it('should handle errors correctly', async () => { - handler.IsFeatureSupported = true; - - const error = new Error('Request failed'); - sandbox.stub(handler, 'partialHttpRequest').rejects(error); - - try { - await handler.getCustomPartial({ prompt: 'login' as CustomPartialsPromptTypes }); - throw new Error('Expected method to throw.'); - } catch (err) { - expect(err).to.equal(error); - } - }); }); }); diff --git a/test/tools/auth0/handlers/resourceServers.tests.js b/test/tools/auth0/handlers/resourceServers.tests.js index 839c978a9..f85476812 100644 --- a/test/tools/auth0/handlers/resourceServers.tests.js +++ b/test/tools/auth0/handlers/resourceServers.tests.js @@ -1,5 +1,8 @@ +import pageClient from '../../../../src/tools/auth0/client'; + const { expect } = require('chai'); const resourceServers = require('../../../../src/tools/auth0/handlers/resourceServers'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -78,16 +81,16 @@ 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, }; - const handler = new resourceServers.default({ client: auth0, config }); + const handler = new resourceServers.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ resourceServers: [{ name: 'someAPI' }] }]); @@ -96,14 +99,18 @@ 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' }, + ]), }, }; - const handler = new resourceServers.default({ client: auth0, config }); + const handler = new resourceServers.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal([{ name: 'Company API', identifier: 'http://company.com/api' }]); }); @@ -117,15 +124,18 @@ 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, }; - const handler = new resourceServers.default({ client: auth0, config }); + const handler = new resourceServers.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [ @@ -142,21 +152,24 @@ 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, }; - const handler = new resourceServers.default({ client: auth0, config }); + const handler = new resourceServers.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [ @@ -172,14 +185,17 @@ 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, }; - const handler = new resourceServers.default({ client: auth0, config }); + const handler = new resourceServers.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ resourceServers: [{}] }]); @@ -189,20 +205,23 @@ 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, }; - const handler = new resourceServers.default({ client: auth0, config }); + const handler = new resourceServers.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ resourceServers: [] }]); @@ -217,20 +236,23 @@ 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, }; - const handler = new resourceServers.default({ client: auth0, config }); + const handler = new resourceServers.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ resourceServers: [] }]); @@ -244,21 +266,22 @@ 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: () => [ - { id: 'rs1', identifier: 'some-api', name: 'someAPI' }, - { id: 'rs2', identifier: 'some-other-api', name: 'someOtherAPI' }, - ], + getAll: (params) => + mockPagedData(params, 'resource_servers', [ + { id: 'rs1', identifier: 'some-api', name: 'someAPI' }, + { id: 'rs2', identifier: 'some-other-api', name: 'someOtherAPI' }, + ]), }, pool, }; - const handler = new resourceServers.default({ client: auth0, config }); + const handler = new resourceServers.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; const data = { resourceServers: [{ name: 'someAPI', identifier: 'some-api', scope: 'new:scope' }], diff --git a/test/tools/auth0/handlers/roles.tests.js b/test/tools/auth0/handlers/roles.tests.js index b6b04d6d1..450df6be9 100644 --- a/test/tools/auth0/handlers/roles.tests.js +++ b/test/tools/auth0/handlers/roles.tests.js @@ -1,5 +1,8 @@ +import pageClient from '../../../../src/tools/auth0/client'; + const { expect } = require('chai'); const roles = require('../../../../src/tools/auth0/handlers/roles'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -63,11 +66,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,14 +82,14 @@ 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, }; - const handler = new roles.default({ client: auth0, config }); + const handler = new roles.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [ { @@ -110,22 +113,21 @@ describe('#roles handler', () => { const auth0 = { roles: { - getAll: () => - Promise.resolve([ + getAll: (params) => + mockPagedData({ ...params, include_totals: true }, 'roles', [ { name: 'myRole', id: 'myRoleId', description: 'myDescription', }, ]), - permissions: { - getAll: () => Promise.resolve(permissions), - }, + getPermissions: (params) => + mockPagedData({ ...params, include_totals: true }, 'permissions', permissions), }, pool, }; - const handler = new roles.default({ client: auth0, config }); + const handler = new roles.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal([ { @@ -152,7 +154,7 @@ describe('#roles handler', () => { pool, }; - const handler = new roles.default({ client: auth0, config }); + const handler = new roles.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal([]); }); @@ -169,7 +171,7 @@ describe('#roles handler', () => { pool, }; - const handler = new roles.default({ client: auth0, config }); + const handler = new roles.default({ client: pageClient(auth0), config }); const data = await handler.getType(); expect(data).to.deep.equal([]); }); @@ -186,7 +188,7 @@ describe('#roles handler', () => { pool, }; - const handler = new roles.default({ client: auth0, config }); + const handler = new roles.default({ client: pageClient(auth0), config }); try { await handler.getType(); } catch (error) { @@ -201,7 +203,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,43 +213,39 @@ 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', + }, + ]), + deletePermissions: function (params) { + expect(params).to.be.an('object'); + expect(params.id).to.equal('myRoleId'); + return Promise.resolve({ data: [] }); + }, + addPermissions: function (params) { + expect(params).to.be.an('object'); + expect(params.id).to.equal('myRoleId'); + return Promise.resolve({ data: [] }); }, }, pool, }; - const handler = new roles.default({ client: auth0, config }); + const handler = new roles.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [ @@ -272,28 +270,26 @@ 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, }; - const handler = new roles.default({ client: auth0, config }); + const handler = new roles.default({ client: pageClient(auth0), config }); const stageFn = Object.getPrototypeOf(handler).processChanges; await stageFn.apply(handler, [{ roles: [{}] }]); }); diff --git a/test/tools/auth0/handlers/rules.tests.js b/test/tools/auth0/handlers/rules.tests.js deleted file mode 100644 index d9e66a263..000000000 --- a/test/tools/auth0/handlers/rules.tests.js +++ /dev/null @@ -1,435 +0,0 @@ -const { expect } = require('chai'); -const rules = require('../../../../src/tools/auth0/handlers/rules'); - -const pool = { - addEachTask: (data) => { - if (data.data && data.data.length) { - data.generator(data.data[0]); - } - return { promise: () => null }; - }, -}; - -describe('#rules handler', () => { - const config = function (key) { - return config.data && config.data[key]; - }; - - config.data = { - AUTH0_ALLOW_DELETE: true, - }; - - describe('#rules validate', () => { - it('should not allow same names', async () => { - const auth0 = { - rules: { - getAll: () => [], - }, - }; - - const handler = new rules.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).validate; - const data = [ - { - name: 'newRule', - }, - { - name: 'newRule', - }, - ]; - - try { - await stageFn.apply(handler, [{ rules: data }]); - } catch (err) { - expect(err).to.be.an('object'); - expect(err.message).to.include('Names must be unique'); - } - }); - - it('should not allow same order', async () => { - const auth0 = { - rules: { - getAll: () => [], - }, - }; - - const handler = new rules.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).validate; - const data = [ - { - name: 'Rule1', - order: '0', - }, - { - name: 'Rule2', - order: '0', - }, - ]; - - try { - await stageFn.apply(handler, [{ rules: data }]); - } catch (err) { - expect(err).to.be.an('object'); - expect(err.message).to.include( - 'There are multiple rules for the following stage-order combinations' - ); - } - }); - - 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, - }, - ], - }, - }; - - const handler = new rules.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).calcChanges; - const data = [ - { - name: 'Rule3', - order: 2, - }, - { - name: 'Rule4', - order: 4, - }, - ]; - - const output = await stageFn.apply(handler, [{ rules: data }], true); - const newRulesOrder = [...output.create, ...output.update].map((rule) => rule.order); - const reorderedRulesOrder = output.reOrder.map((rule) => rule.order); - - // check if there is no collisions between rules order - const checker = (arr, target) => target.every((v) => arr.includes(v)); - expect(checker(newRulesOrder, reorderedRulesOrder)).to.be.equal(false); - }); - - 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, - }, - ], - }, - }; - - const handler = new rules.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).calcChanges; - const data = [ - { - name: 'Rule3', - order: 2, - }, - { - name: 'Rule4', - order: 3, - }, - ]; - - const output = await stageFn.apply(handler, [{ rules: data }], true); - const newRulesOrder = [...output.create, ...output.update].map((rule) => rule.order); - const reorderedRulesOrder = output.reOrder.map((rule) => rule.order); - - // check if there is no collisions between rules order - const checker = (arr, target) => target.every((v) => arr.includes(v)); - expect(checker(newRulesOrder, reorderedRulesOrder)).to.be.equal(false); - }); - - it('should not allow change stage', async () => { - const auth0 = { - rules: { - getAll: () => [ - { - name: 'Rule1', - stage: 'some_stage', - }, - ], - }, - }; - - const handler = new rules.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).validate; - const data = [ - { - name: 'Rule1', - stage: 'new_stage', - }, - ]; - - try { - await stageFn.apply(handler, [{ rules: data }]); - } catch (err) { - expect(err).to.be.an('object'); - expect(err.message).to.include('The following rules changed stage which is not allowed'); - } - }); - - it('should pass validation', async () => { - const auth0 = { - rules: { - getAll: () => [], - }, - }; - - const handler = new rules.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).validate; - const data = [ - { - name: 'newRule', - }, - ]; - - await stageFn.apply(handler, [{ rules: data }]); - }); - }); - - describe('#rules process', () => { - it('should create rule', async () => { - const auth0 = { - rules: { - create: function (data) { - (() => expect(this).to.not.be.undefined)(); - expect(data).to.be.an('object'); - expect(data.name).to.equal('someRule'); - expect(data.script).to.equal('rule_script'); - return Promise.resolve(data); - }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], - }, - pool, - }; - - const handler = new rules.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [{ rules: [{ name: 'someRule', script: 'rule_script' }] }]); - }); - - it('should get rules', async () => { - const script = 'function fake() {};'; - - const rulesData = [ - { - enabled: false, - name: 'test-rule-1', - script, - order: 1, - stage: 'login_success', - }, - { - enabled: false, - name: 'test-rule-2', - script, - order: 2, - stage: 'login_success', - }, - ]; - - const auth0 = { - rules: { getAll: () => rulesData }, - }; - - const handler = new rules.default({ client: auth0, config }); - const data = await handler.getType(); - expect(data).to.deep.equal(rulesData); - }); - - it('should not throw if rules endpoint deprecated', async () => { - const auth0 = { - rules: { - getAll: () => { - const error = new Error(); - error.statusCode = 403; - error.message = 'Insufficient privileges to use this deprecated feature'; - throw error; - }, - }, - }; - - const handler = new rules.default({ client: auth0, config }); - const data = await handler.getType(); - expect(data).to.equal(null); - }); - - it('should update rule', async () => { - const auth0 = { - rules: { - create: () => Promise.resolve([]), - 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); - }, - delete: () => Promise.resolve([]), - getAll: () => [{ id: 'rule1', name: 'someRule', script: 'rule_script' }], - }, - pool, - }; - - const handler = new rules.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [{ rules: [{ name: 'someRule', script: 'new_script' }] }]); - }); - - it('should remove rule', async () => { - const auth0 = { - rules: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), - delete: (data) => { - expect(data).to.be.an('object'); - expect(data.id).to.equal('rule1'); - return Promise.resolve(data); - }, - getAll: () => [{ id: 'rule1', name: 'existingRule', order: '10' }], - }, - pool, - }; - - const handler = new rules.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [{ rules: [{}] }]); - }); - - it('should remove all rules', async () => { - let removed = false; - const auth0 = { - rules: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), - delete: (data) => { - expect(data).to.be.an('object'); - expect(data.id).to.equal('rule1'); - removed = true; - return Promise.resolve(data); - }, - getAll: () => [{ id: 'rule1', name: 'existingRule', order: '10' }], - }, - pool, - }; - - const handler = new rules.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [{ rules: [] }]); - expect(removed).to.equal(true); - }); - - it('should remove rules if run by extension', async () => { - config.data = { - EXTENSION_SECRET: 'some-secret', - }; - - let removed = false; - const auth0 = { - rules: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), - delete: (data) => { - expect(data).to.be.an('object'); - expect(data.id).to.equal('rule1'); - removed = true; - return Promise.resolve(data); - }, - getAll: () => [{ id: 'rule1', name: 'existingRule', order: '10' }], - }, - pool, - }; - - const handler = new rules.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [{ rules: [] }]); - expect(removed).to.equal(true); - }); - - it('should not touch excluded rules', async () => { - const auth0 = { - rules: { - create: function (data) { - (() => expect(this).to.not.be.undefined)(); - expect(data).to.be.an('undefined'); - return Promise.resolve(data); - }, - update: function (data) { - (() => expect(this).to.not.be.undefined)(); - expect(data).to.be.an('undefined'); - return Promise.resolve(data); - }, - delete: (data) => { - expect(data).to.be.an('undefined'); - return Promise.resolve(data); - }, - getAll: () => [ - { id: 'rule1', script: 'rule-one-script', name: 'Rule1' }, - { id: 'rile2', script: 'some-other-script', name: 'Rule2' }, - ], - }, - pool, - }; - - const handler = new rules.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - const data = { - rules: [ - { name: 'Rule1', script: 'new-rule-one-script' }, - { name: 'Rule3', script: 'new-rule-three-script' }, - ], - exclude: { - rules: ['Rule1', 'Rule2', 'Rule3'], - }, - }; - - await stageFn.apply(handler, [data]); - }); - - it('should not throw if attempted to update rules when deprecated for tenant', async () => { - const auth0 = { - rules: { - getAll: () => { - const error = new Error(); - error.statusCode = 403; - error.message = 'Insufficient privileges to use this deprecated feature'; - throw error; - }, - }, - pool, - }; - const data = { - rules: [ - { name: 'Rule1', script: 'new-rule-one-script' }, - { name: 'Rule3', script: 'new-rule-three-script' }, - ], - }; - - const handler = new rules.default({ client: auth0, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await expect(stageFn.apply(handler, [data])).to.be.eventually.fulfilled; - }); - }); -}); diff --git a/test/tools/auth0/handlers/rulesConfigs.tests.ts b/test/tools/auth0/handlers/rulesConfigs.tests.ts deleted file mode 100644 index 80c0a0b71..000000000 --- a/test/tools/auth0/handlers/rulesConfigs.tests.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { expect } from 'chai'; -import rulesConfigs from '../../../../src/tools/auth0/handlers/rulesConfigs'; - -const pool = { - addEachTask: (data) => { - if (data.data && data.data.length) { - data.generator(data.data[0]); - } - return { promise: () => null }; - }, -}; - -describe('#rulesConfigs handler', () => { - describe('#rulesConfigs process', () => { - it('should set rulesConfig', async () => { - const auth0 = { - rulesConfigs: { - set: (params, data) => { - expect(params).to.be.an('object'); - expect(data).to.be.an('object'); - expect(params.key).to.equal('someKey'); - expect(data.value).to.equal('some_value'); - return Promise.resolve(params); - }, - }, - pool, - }; - - const handler = new rulesConfigs({ client: auth0 }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [{ rulesConfigs: [{ key: 'someKey', value: 'some_value' }] }]); - }); - }); - - it('should get rules configs', async () => { - const rulesConfigData = [{ key: 'SOME_SECRET' }, { key: 'SOME_OTHER_SECRET' }]; - - const auth0 = { - rulesConfigs: { getAll: () => rulesConfigData }, - }; - - const handler = new rulesConfigs({ client: auth0 }); - const data = await handler.getType(); - expect(data).to.deep.equal(rulesConfigData); - }); -}); diff --git a/test/tools/auth0/handlers/scimHandler.tests.js b/test/tools/auth0/handlers/scimHandler.tests.js index a229e2725..9d18f66e6 100644 --- a/test/tools/auth0/handlers/scimHandler.tests.js +++ b/test/tools/auth0/handlers/scimHandler.tests.js @@ -20,20 +20,21 @@ describe('ScimHandler', () => { beforeEach(() => { mockConfig = sinon.stub(); mockConnectionsManager = { - _getRestClient: sinon.stub().returns({ - get: sinon.stub(), - create: sinon.stub(), - patch: sinon.stub(), - delete: sinon.stub(), - }), + get: sinon.stub(), + patch: sinon.stub(), + delete: sinon.stub(), getAll: sinon.stub(), update: sinon.stub(), create: sinon.stub(), + getScimConfiguration: sinon.stub(), + createScimConfiguration: sinon.stub(), + deleteScimConfiguration: sinon.stub(), + updateScimConfiguration: sinon.stub(), }; handler = new ScimHandler(mockConfig, mockConnectionsManager, mockPoolClient); }); - afterEach(() =>{ + afterEach(() => { sinon.restore(); }); @@ -44,7 +45,7 @@ describe('ScimHandler', () => { expect(handler.isScimStrategy('okta')).to.be.true; expect(handler.isScimStrategy('waad')).to.be.true; }); - + it('should return false for unsupported strategies', () => { expect(handler.isScimStrategy('google-auth')).to.be.false; expect(handler.isScimStrategy('auth0')).to.be.false; @@ -60,17 +61,22 @@ describe('ScimHandler', () => { ]; const response = { - mapping: [{ scim: 'userName', auth0: 'preferred_username' }], + mapping: [{ scim: 'userName', auth0: 'preferred_username' }], user_id_attribute: 'externalId', - connection_id: 'con_kzpLY0Afi4I8lvwM' + connection_id: 'con_kzpLY0Afi4I8lvwM', + }; + const expectedScimConfiguration = { + mapping: response.mapping, + user_id_attribute: response.user_id_attribute, }; - const expectedScimConfiguration = { mapping: response.mapping, user_id_attribute: response.user_id_attribute }; - handler.getScimConfiguration = sinon.stub().resolves(response); + handler.getScimConfiguration = sinon.stub().resolves({ data: response }); await handler.createIdMap(connections); expect(handler.idMap.size).to.equal(1); expect(handler.idMap.get('con_kzpLY0Afi4I8lvwM')).to.have.property('strategy', 'samlp'); - expect(handler.idMap.get('con_kzpLY0Afi4I8lvwM')).to.have.property('scimConfiguration').that.deep.equals(expectedScimConfiguration); + expect(handler.idMap.get('con_kzpLY0Afi4I8lvwM')) + .to.have.property('scimConfiguration') + .that.deep.equals(expectedScimConfiguration); expect(handler.idMap.get('con_ilYXDjpVjU6GMnmk')).to.be.undefined; }); @@ -90,12 +96,12 @@ describe('ScimHandler', () => { await expect(handler.createIdMap(connections)); expect(handler.idMap.get('con_kzpLY0Afi4I8lvwM')).to.have.property('strategy', 'samlp'); expect(handler.idMap.get('con_kzpLY0Afi4I8lvwM')).to.not.have.property('scimConfiguration'); - + handler.getScimConfiguration = sinon.stub().rejects({ statusCode: 403 }); await expect(handler.createIdMap(connections)); expect(handler.idMap.get('con_kzpLY0Afi4I8lvwM')).to.have.property('strategy', 'samlp'); expect(handler.idMap.get('con_kzpLY0Afi4I8lvwM')).to.not.have.property('scimConfiguration'); - + handler.getScimConfiguration = sinon.stub().rejects({ statusCode: 429 }); await expect(handler.createIdMap(connections)); expect(handler.idMap.get('con_kzpLY0Afi4I8lvwM')).to.have.property('strategy', 'samlp'); @@ -110,13 +116,18 @@ describe('ScimHandler', () => { it('should apply SCIM configuration to SCIM connections', async () => { const connections = [{ id: 'con_kzpLY0Afi4I8lvwM', strategy: 'samlp' }]; const expectedScimConfiguration = { - mapping: [{ scim: 'userName', auth0: 'preferred_username' }], - user_id_attribute: 'externalId' + mapping: [{ scim: 'userName', auth0: 'preferred_username' }], + user_id_attribute: 'externalId', }; - handler.idMap.set('con_kzpLY0Afi4I8lvwM', { strategy: 'samlp', scimConfiguration: expectedScimConfiguration }); + handler.idMap.set('con_kzpLY0Afi4I8lvwM', { + strategy: 'samlp', + scimConfiguration: expectedScimConfiguration, + }); await handler.applyScimConfiguration(connections); - expect(connections[0]).to.have.property('scim_configuration').that.deep.equals(expectedScimConfiguration); + expect(connections[0]) + .to.have.property('scim_configuration') + .that.deep.equals(expectedScimConfiguration); }); it('should not modify connections if idMap is empty', async () => { @@ -132,7 +143,8 @@ describe('ScimHandler', () => { const params = { id: 'con_kzpLY0Afi4I8lvwM' }; const body = { user_id_attribute: 'id', mapping: [] }; - mockConnectionsManager._getRestClient().create.resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); + handler.createScimConfiguration = sinon.stub().resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); + mockConnectionsManager.create.resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); const result = await handler.createScimConfiguration(params, body); expect(result).to.deep.equal({ id: 'con_kzpLY0Afi4I8lvwM' }); }); @@ -141,8 +153,11 @@ describe('ScimHandler', () => { const params = { id: 'con_kzpLY0Afi4I8lvwM' }; const body = { user_id_attribute: 'id', mapping: [] }; - mockConnectionsManager._getRestClient().create.rejects(new Error('Unexpected error')); - await expect(handler.createScimConfiguration(params, body)).to.be.rejectedWith('Unexpected error'); + handler.createScimConfiguration = sinon.stub().rejects(new Error('Unexpected error')); + mockConnectionsManager.create.rejects(new Error('Unexpected error')); + await expect(handler.createScimConfiguration(params, body)).to.be.rejectedWith( + 'Unexpected error' + ); }); }); @@ -150,7 +165,10 @@ describe('ScimHandler', () => { it('should retrieve SCIM configuration', async () => { const params = { id: 'con_kzpLY0Afi4I8lvwM' }; - mockConnectionsManager._getRestClient().get.resolves({ mapping: [], user_id_attribute: 'id' }); + handler.getScimConfiguration = sinon + .stub() + .resolves({ mapping: [], user_id_attribute: 'id' }); + mockConnectionsManager.get.resolves({ mapping: [], user_id_attribute: 'id' }); const result = await handler.getScimConfiguration(params); expect(result).to.deep.equal({ mapping: [], user_id_attribute: 'id' }); @@ -159,7 +177,8 @@ describe('ScimHandler', () => { it('should handle errors during retrieval', async () => { const params = { id: 'con_kzpLY0Afi4I8lvwM' }; - mockConnectionsManager._getRestClient().get.rejects(new Error('Unexpected error')); + handler.getScimConfiguration = sinon.stub().rejects(new Error('Unexpected error')); + mockConnectionsManager.get.rejects(new Error('Unexpected error')); await expect(handler.getScimConfiguration(params)).to.be.rejectedWith('Unexpected error'); }); }); @@ -169,7 +188,8 @@ describe('ScimHandler', () => { const params = { id: 'con_kzpLY0Afi4I8lvwM' }; const body = { user_id_attribute: 'id', mapping: [] }; - mockConnectionsManager._getRestClient().patch.resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); + handler.updateScimConfiguration = sinon.stub().resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); + mockConnectionsManager.patch.resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); const result = await handler.updateScimConfiguration(params, body); expect(result).to.deep.equal({ id: 'con_kzpLY0Afi4I8lvwM' }); @@ -179,8 +199,11 @@ describe('ScimHandler', () => { const params = { id: 'con_kzpLY0Afi4I8lvwM' }; const body = { user_id_attribute: 'id', mapping: [] }; - mockConnectionsManager._getRestClient().patch.rejects(new Error('Unexpected error')); - await expect(handler.updateScimConfiguration(params, body)).to.be.rejectedWith('Unexpected error'); + handler.updateScimConfiguration = sinon.stub().rejects(new Error('Unexpected error')); + mockConnectionsManager.patch.rejects(new Error('Unexpected error')); + await expect(handler.updateScimConfiguration(params, body)).to.be.rejectedWith( + 'Unexpected error' + ); }); }); @@ -188,7 +211,8 @@ describe('ScimHandler', () => { it('should delete SCIM configuration', async () => { const params = { id: 'con_kzpLY0Afi4I8lvwM' }; - mockConnectionsManager._getRestClient().delete.resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); + handler.deleteScimConfiguration = sinon.stub().resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); + mockConnectionsManager.delete.resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); const result = await handler.deleteScimConfiguration(params); expect(result).to.deep.equal({ id: 'con_kzpLY0Afi4I8lvwM' }); @@ -197,7 +221,9 @@ describe('ScimHandler', () => { it('should handle errors during deletion', async () => { const params = { id: 'con_kzpLY0Afi4I8lvwM' }; - mockConnectionsManager._getRestClient().delete.rejects(new Error('Unexpected error')); + handler.deleteScimConfiguration = sinon.stub().rejects(new Error('Unexpected error')); + + mockConnectionsManager.delete.rejects(new Error('Unexpected error')); await expect(handler.deleteScimConfiguration(params)).to.be.rejectedWith('Unexpected error'); }); }); @@ -208,8 +234,13 @@ describe('ScimHandler', () => { const bodyParams = { scim_configuration: { mapping: [], user_id_attribute: 'id' } }; mockConnectionsManager.update.resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); - handler.updateScimConfiguration = sinon.stub().resolves({ connection_id: 'con_kzpLY0Afi4I8lvwM' }); - handler.idMap.set('con_kzpLY0Afi4I8lvwM', { strategy: 'samlp', scimConfiguration: bodyParams.scim_configuration }); + handler.updateScimConfiguration = sinon + .stub() + .resolves({ connection_id: 'con_kzpLY0Afi4I8lvwM' }); + handler.idMap.set('con_kzpLY0Afi4I8lvwM', { + strategy: 'samlp', + scimConfiguration: bodyParams.scim_configuration, + }); await handler.updateOverride(requestParams, bodyParams); expect(mockConnectionsManager.update.calledOnce).to.be.true; @@ -221,8 +252,10 @@ describe('ScimHandler', () => { const bodyParams = { scim_configuration: { mapping: [], user_id_attribute: 'id' } }; mockConnectionsManager.update.resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); - handler.createScimConfiguration = sinon.stub().resolves({ connection_id: 'con_kzpLY0Afi4I8lvwM' }); - + handler.createScimConfiguration = sinon + .stub() + .resolves({ connection_id: 'con_kzpLY0Afi4I8lvwM' }); + await handler.updateOverride(requestParams, bodyParams); expect(mockConnectionsManager.update.calledOnce).to.be.true; expect(handler.createScimConfiguration.calledOnce).to.be.true; @@ -233,24 +266,34 @@ describe('ScimHandler', () => { const bodyParams = {}; mockConnectionsManager.update.resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); - handler.idMap.set('con_kzpLY0Afi4I8lvwM', { strategy: 'samlp', scimConfiguration: { mapping: [], user_id_attribute: 'id' } }); - handler.deleteScimConfiguration = sinon.stub().resolves({ connection_id: 'con_kzpLY0Afi4I8lvwM' }); + handler.idMap.set('con_kzpLY0Afi4I8lvwM', { + strategy: 'samlp', + scimConfiguration: { mapping: [], user_id_attribute: 'id' }, + }); + handler.deleteScimConfiguration = sinon + .stub() + .resolves({ connection_id: 'con_kzpLY0Afi4I8lvwM' }); handler.config.returns(true); // Setting `AUTH0_ALLOW_DELETE` to true. - + await handler.updateOverride(requestParams, bodyParams); expect(mockConnectionsManager.update.calledOnce).to.be.true; expect(handler.deleteScimConfiguration.calledOnce).to.be.true; }); - + it('should not delete SCIM configuration when updating connection during updateOverride when AUTH0_ALLOW_DELETE is false', async () => { const requestParams = { id: 'con_kzpLY0Afi4I8lvwM' }; const bodyParams = {}; mockConnectionsManager.update.resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); - handler.idMap.set('con_kzpLY0Afi4I8lvwM', { strategy: 'samlp', scimConfiguration: { mapping: [], user_id_attribute: 'id' } }); - handler.deleteScimConfiguration = sinon.stub().resolves({ connection_id: 'con_kzpLY0Afi4I8lvwM' }); + handler.idMap.set('con_kzpLY0Afi4I8lvwM', { + strategy: 'samlp', + scimConfiguration: { mapping: [], user_id_attribute: 'id' }, + }); + handler.deleteScimConfiguration = sinon + .stub() + .resolves({ connection_id: 'con_kzpLY0Afi4I8lvwM' }); handler.config.returns(false); // Setting `AUTH0_ALLOW_DELETE` to false. - + await handler.updateOverride(requestParams, bodyParams); expect(mockConnectionsManager.update.calledOnce).to.be.true; expect(handler.deleteScimConfiguration.called).to.be.false; @@ -259,11 +302,15 @@ describe('ScimHandler', () => { it('should handle errors gracefully during updateOverride', async () => { const requestParams = { id: 'con_kzpLY0Afi4I8lvwM' }; const bodyParams = { scim_configuration: { mapping: [], user_id_attribute: 'id' } }; - + mockConnectionsManager.update.rejects(new Error('Unexpected error')); - handler.updateScimConfiguration = sinon.stub().resolves({ connection_id: 'con_kzpLY0Afi4I8lvwM' }); - - await expect(handler.updateOverride(requestParams, bodyParams)).to.be.rejectedWith('Unexpected error'); + handler.updateScimConfiguration = sinon + .stub() + .resolves({ connection_id: 'con_kzpLY0Afi4I8lvwM' }); + + await expect(handler.updateOverride(requestParams, bodyParams)).to.be.rejectedWith( + 'Unexpected error' + ); expect(handler.updateScimConfiguration.called).to.be.false; }); }); @@ -272,7 +319,7 @@ describe('ScimHandler', () => { it('should create SCIM configuration when creating connection', async () => { const bodyParams = { scim_configuration: { mapping: [], user_id_attribute: 'id' } }; - mockConnectionsManager.create.resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); + mockConnectionsManager.create.resolves({ data: { id: 'con_kzpLY0Afi4I8lvwM' } }); handler.createScimConfiguration = sinon.stub().resolves({ id: 'con_kzpLY0Afi4I8lvwM' }); await handler.createOverride(bodyParams); @@ -295,7 +342,7 @@ describe('ScimHandler', () => { expect(result).to.be.null; expect(mockCallback.calledOnce).to.be.true; }); - + it('should handle 403 errors, log a warning, and return null', async () => { const mockCallback = sinon.stub().rejects({ statusCode: 403 }); const logWarnSpy = sinon.spy(log, 'warn'); @@ -306,26 +353,39 @@ describe('ScimHandler', () => { expect(logWarnSpy.firstCall.args[0]).to.include('Insufficient scope'); logWarnSpy.restore(); }); - + it('should handle 400 errors with "already exists" message and return null', async () => { - const mockCallback = sinon.stub().rejects({ statusCode: 400, message: 'SCIM configuration already exists' }); - const result = await handler.withErrorHandling(mockCallback, 'create', 'con_kzpLY0Afi4I8lvwM'); + const mockCallback = sinon + .stub() + .rejects({ statusCode: 400, message: 'SCIM configuration already exists' }); + const result = await handler.withErrorHandling( + mockCallback, + 'create', + 'con_kzpLY0Afi4I8lvwM' + ); expect(result).to.be.null; expect(mockCallback.calledOnce).to.be.true; }); - + it('should handle 429 errors and return null', async () => { - const mockCallback = sinon.stub().rejects({ statusCode: 429, message: 'Rate limit exceeded' }); - const result = await handler.withErrorHandling(mockCallback, 'create', 'con_kzpLY0Afi4I8lvwM'); + const mockCallback = sinon + .stub() + .rejects({ statusCode: 429, message: 'Rate limit exceeded' }); + const result = await handler.withErrorHandling( + mockCallback, + 'create', + 'con_kzpLY0Afi4I8lvwM' + ); expect(result).to.be.null; expect(mockCallback.calledOnce).to.be.true; }); - + it('should rethrow unexpected errors', async () => { const mockCallback = sinon.stub().rejects(new Error('Unexpected error')); - await expect(handler.withErrorHandling(mockCallback, 'create', 'con_kzpLY0Afi4I8lvwM')).to.be.rejectedWith('Unexpected error'); + await expect( + handler.withErrorHandling(mockCallback, 'create', 'con_kzpLY0Afi4I8lvwM') + ).to.be.rejectedWith('Unexpected error'); expect(mockCallback.calledOnce).to.be.true; }); }); - }); diff --git a/test/tools/auth0/handlers/tenant.tests.ts b/test/tools/auth0/handlers/tenant.tests.ts index 3998ae0d4..4bedb3d3f 100644 --- a/test/tools/auth0/handlers/tenant.tests.ts +++ b/test/tools/auth0/handlers/tenant.tests.ts @@ -32,14 +32,16 @@ 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 51ffce07d..08e817de1 100644 --- a/test/tools/auth0/handlers/themes.tests.js +++ b/test/tools/auth0/handlers/themes.tests.js @@ -1,10 +1,9 @@ -const chai = require('chai'); +const { expect, assert, use } = require('chai'); const chaiAsPromised = require('chai-as-promised'); const { omit, cloneDeep } = require('lodash'); const { default: ThemesHandler } = require('../../../../src/tools/auth0/handlers/themes'); -chai.use(chaiAsPromised); -const { expect, assert } = chai; +use(chaiAsPromised); function stub() { const s = function (...args) { @@ -71,7 +70,7 @@ const mockTheme = ({ withThemeId } = {}) => { success: '#FF00CC', widget_background: '#FF00CC', widget_border: '#FF00CC', - captcha_widget_theme: 'auto' + captcha_widget_theme: 'auto', }, fonts: { body_text: { @@ -131,7 +130,7 @@ describe('#themes handler', () => { const auth0 = { branding: { - getDefaultTheme: stub().returns(Promise.resolve(theme)), + getDefaultTheme: stub().returns(Promise.resolve({ data: theme })), }, }; @@ -232,7 +231,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')) ), @@ -253,7 +252,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); @@ -268,14 +267,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 })), }, }; @@ -287,7 +286,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 b2accafc3..794f38dea 100644 --- a/test/tools/auth0/handlers/triggers.tests.js +++ b/test/tools/auth0/handlers/triggers.tests.js @@ -78,14 +78,16 @@ describe('#triggers handler', () => { 'post-user-registration': [{ action_name: 'action-one', display_name: 'email-user' }], 'post-change-password': [{ action_name: 'action-two', display_name: 'log-to-logger' }], 'send-phone-message': [{ action_name: 'action-three', display_name: 'slack-integration' }], - 'password-reset-post-challenge': [{ action_name: 'action-two', display_name: 'log-to-logger' }], + 'password-reset-post-challenge': [ + { action_name: 'action-two', display_name: 'log-to-logger' }, + ], }; const auth0 = { actions: { getAllTriggers: () => Promise.resolve(existingTriggerBindings), // eslint-disable-next-line camelcase - updateTriggerBindings: ({ trigger_id }, { bindings }) => { + updateTriggerBindings: ({ triggerId }, { bindings }) => { expect([ 'post-login', 'credentials-exchange', @@ -94,7 +96,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([]); @@ -139,7 +141,9 @@ describe('#triggers handler', () => { 'post-user-registration': [{ action_name: 'action-one', display_name: 'email-user' }], 'post-change-password': [{ action_name: 'action-two', display_name: 'log-to-logger' }], 'send-phone-message': [{ action_name: 'action-three', display_name: 'slack-integration' }], - 'password-reset-post-challenge': [{ action_name: 'action-two', display_name: 'log-to-logger' }], + 'password-reset-post-challenge': [ + { action_name: 'action-two', display_name: 'log-to-logger' }, + ], }; const updatePayload = [ @@ -163,8 +167,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/index.test.ts b/test/tools/auth0/index.test.ts index 20e8bb53b..2d208a6ea 100644 --- a/test/tools/auth0/index.test.ts +++ b/test/tools/auth0/index.test.ts @@ -19,7 +19,7 @@ describe('#Auth0 class', () => { return config[key]; }); - const AUTH0_EXCLUDED = ['rules', 'organizations', 'connections']; + const AUTH0_EXCLUDED = ['organizations', 'connections']; const auth0WithExclusions = new Auth0(mockEmptyClient, mockEmptyAssets, (key) => { const config = { AUTH0_EXCLUDED }; return config[key]; @@ -46,7 +46,7 @@ describe('#Auth0 class', () => { describe('#resource inclusion', () => { it('should include only the handlers listed in AUTH0_INCLUDED_ONLY from Auth0 class', () => { - const AUTH0_INCLUDED_ONLY = ['rules', 'organizations', 'connections']; + const AUTH0_INCLUDED_ONLY = ['organizations', 'connections']; const auth0WithInclusions = new Auth0(mockEmptyClient, mockEmptyAssets, (key) => { const config = { AUTH0_INCLUDED_ONLY }; return config[key]; diff --git a/test/tools/auth0/validator.tests.js b/test/tools/auth0/validator.tests.js index 226e2ba9f..faaa6a503 100644 --- a/test/tools/auth0/validator.tests.js +++ b/test/tools/auth0/validator.tests.js @@ -2,29 +2,27 @@ 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 = () => { }; +const mockConfigFn = () => {}; describe('#schema validation tests', () => { const client = { - rules: { - getAll: async () => ({ rules: [] }), - }, clients: { - getAll: async () => ({ clients: [] }), + getAll: async (params) => mockPagedData(params, 'clients', []), }, connections: { - getAll: async () => ({ connections: [] }), + getAll: async (params) => mockPagedData(params, 'connections', []), _getRestClient: () => ({}), }, 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', []), }, prompts: { _getRestClient: (endpoint) => ({ @@ -678,187 +676,6 @@ describe('#schema validation tests', () => { }); }); - describe('#rules validate', () => { - it('should fail validation if no "name" provided', (done) => { - const data = [ - { - anything: 'anything', - }, - ]; - - checkRequired('name', { rules: data }, done); - }); - - it('should fail validation if bad "name" provided', (done) => { - const data = [ - { - name: '-rule-', - }, - ]; - - const auth0 = new Auth0( - { - prompts: { - _getRestClient: (endpoint) => ({ - get: (...options) => Promise.resolve({ endpoint, method: 'get', options }), - }), - }, - }, - { rules: data }, - mockConfigFn - ); - - auth0.validate().then(failedCb(done), passedCb(done, 'should match pattern')); - }); - - it('should fail validation if bad "stage" provided', (done) => { - const data = [ - { - name: 'rule', - stage: 'stage', - }, - ]; - - checkEnum({ rules: data }, done); - }); - - it('should pass validation', (done) => { - const data = [ - { - name: 'name', - order: 1, - stage: 'login_failure', - }, - ]; - - checkPassed({ rules: data }, done); - }); - }); - - describe('#rulesConfigs validate', () => { - it('should fail validation if no "key" provided', (done) => { - const data = [ - { - anything: 'anything', - }, - ]; - - checkRequired('key', { rulesConfigs: data }, done); - }); - - it('should fail validation if no "value" provided', (done) => { - const data = [ - { - key: 'key', - }, - ]; - - checkRequired('value', { rulesConfigs: data }, done); - }); - - it('should fail validation if bad "key" provided', (done) => { - const data = [ - { - key: ':-?', - value: 'value', - }, - ]; - - const auth0 = new Auth0( - { - prompts: { - _getRestClient: (endpoint) => ({ - get: (...options) => Promise.resolve({ endpoint, method: 'get', options }), - }), - }, - }, - { rulesConfigs: data }, - mockConfigFn - ); - - auth0.validate().then(failedCb(done), passedCb(done, 'should match pattern')); - }); - - it('should pass validation', (done) => { - const data = [ - { - key: 'key', - value: 'value', - }, - ]; - - checkPassed({ rulesConfigs: data }, done); - }); - }); - - describe('#hooks validate', () => { - it('should fail validation if no "name" provided', (done) => { - const data = [ - { - anything: 'anything', - }, - ]; - - checkRequired('name', { hooks: data }, done); - }); - - it('should fail validation if bad "name" provided', (done) => { - const data = [ - { - name: '-hook-', - }, - ]; - - const auth0 = new Auth0( - { - prompts: { - _getRestClient: (endpoint) => ({ - get: (...options) => Promise.resolve({ endpoint, method: 'get', options }), - }), - }, - }, - { hooks: data }, - mockConfigFn - ); - - auth0.validate().then(failedCb(done), passedCb(done, 'should match pattern')); - }); - - it('should fail validation if no "triggerId" provided', (done) => { - const data = [ - { - name: 'name', - script: 'script content', - }, - ]; - - checkRequired('triggerId', { hooks: data }, done); - }); - - it('should fail validation if bad "triggerId" provided', (done) => { - const data = [ - { - name: 'rule', - triggerId: 'invalid triggerId', - }, - ]; - - checkEnum({ hooks: data }, done); - }); - - it('should pass validation', (done) => { - const data = [ - { - name: 'name', - script: 'script content', - triggerId: 'post-change-password', - }, - ]; - - checkPassed({ hooks: data }, done); - }); - }); - describe('#tenant validate', () => { it('should fail validation if tenant is not an object', (done) => { const data = [ @@ -891,54 +708,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( - { - prompts: { - _getRestClient: (endpoint) => ({ - get: (...options) => Promise.resolve({ endpoint, method: 'get', options }), - }), - }, - }, - { 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( - { - prompts: { - _getRestClient: (endpoint) => ({ - get: (...options) => Promise.resolve({ endpoint, method: 'get', options }), - }), - }, - }, - { 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 cc54d2613..da54cab3c 100644 --- a/test/utils.js +++ b/test/utils.js @@ -13,36 +13,54 @@ 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, + total: data?.length || 0, + }, + } + : { + data, + }; +} + 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: [] }), _getRestClient: () => ({}) }, - 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,82 +73,64 @@ export function mockMgmtClient() { custom_login_page: 'page', }; - if (params.per_page) { - return { - clients: [client], - }; - } - - return [client]; + return mockPagedData(params, 'clients', [client]); }, }, roles: { - getAll: () => ({ - roles: [ + getAll: (params) => + mockPagedData(params, '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, - }), - }, + ]), + 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({}), - }, - migrations: { - getMigrations: () => ({ - migration_flag: true, - }), + getCustomTextByLanguage: () => Promise.resolve({ data: {} }), }, 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: { _getRestClient: (endpoint) => ({ get: (...options) => Promise.resolve({ endpoint, method: 'get', options }), - }), getCustomTextByLanguage: () => new Promise((res) => { - res({}); + res({ data: {} }); }), - getSettings: () => { }, + get: () => ({ data: {} }), }, - customDomains: { getAll: () => [] }, + customDomains: { getAll: (params) => mockPagedData(params, 'custom_domains', []) }, }; } @@ -169,12 +169,16 @@ export function createDirWithNestedDir(repoDir, files) { Object.entries(content).forEach(([fileName, fileContent]) => { const filePath = path.join(subtypeDir, fileName); if (typeof fileContent !== 'string') { - throw new TypeError(`Expected content to be a string, but received ${typeof fileContent}`); + throw new TypeError( + `Expected content to be a string, but received ${typeof fileContent}` + ); } fs.writeFileSync(filePath, fileContent); }); } else { - throw new TypeError(`Expected content to be a string or object, but received ${typeof content}`); + throw new TypeError( + `Expected content to be a string or object, but received ${typeof content}` + ); } }); });