diff --git a/.gitignore b/.gitignore index d356d40de..7d63fdc93 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ Makefile .github/copilot-instructions.md .github/chatmodes/* .github/prompts/* +.github/agents/* diff --git a/docs/resource-specific-documentation.md b/docs/resource-specific-documentation.md index e80f0a544..f717eef9b 100644 --- a/docs/resource-specific-documentation.md +++ b/docs/resource-specific-documentation.md @@ -575,3 +575,56 @@ phoneProviders: } ] ``` + +## PhoneTemplates + +Phone templates allow you to customize the SMS and voice messages sent to users for phone-based authentication. +Refer to the [Management API](https://auth0.com/docs/api/management/v2/branding/get-phone-templates) for more details. + +### YAML Example + +```yaml +# Contents of ./tenant.yaml +phoneTemplates: + - type: otp_verify + disabled: false + content: + from: '+12341234567' + body: + text: 'Your verification code is {{ code }}' + voice: 'Your verification code is {{ code }}' + - type: otp_enroll + disabled: false + content: + from: '+12341234567' + body: + text: 'Your enrollment code is {{ code }}' +``` + +### Directory Example + +Create individual JSON files for each template in the `phone-templates` directory: + +```text +phone-templates/ +├── otp_verify.json +├── otp_enroll.json +├── change_password.json +└── ... +``` + +Example `phone-templates/otp_verify.json`: + +```json +{ + "type": "otp_verify", + "disabled": false, + "content": { + "from": "+12341234567", + "body": { + "text": "Your verification code is {{ code }}", + "voice": "Your verification code is {{ code }}" + } + } +} +``` diff --git a/examples/directory/phone-templates/otp_enroll.json b/examples/directory/phone-templates/otp_enroll.json new file mode 100644 index 000000000..bfda25c4e --- /dev/null +++ b/examples/directory/phone-templates/otp_enroll.json @@ -0,0 +1,12 @@ +{ + "type": "otp_enroll", + "disabled": false, + "content": { + "syntax": "liquid", + "from": "+12341234567", + "body": { + "text": "Your enrollment code is {{ code }}", + "voice": "Your enrollment code is {{ code }}" + } + } +} diff --git a/examples/directory/phone-templates/otp_verify.json b/examples/directory/phone-templates/otp_verify.json new file mode 100644 index 000000000..14eed7aef --- /dev/null +++ b/examples/directory/phone-templates/otp_verify.json @@ -0,0 +1,12 @@ +{ + "type": "otp_verify", + "disabled": false, + "content": { + "syntax": "liquid", + "from": "+12341234567", + "body": { + "text": "Your verification code is {{ code }}", + "voice": "Your verification code is {{ code }}" + } + } +} diff --git a/examples/yaml/tenant.yaml b/examples/yaml/tenant.yaml index 672c24b90..011b3ad19 100644 --- a/examples/yaml/tenant.yaml +++ b/examples/yaml/tenant.yaml @@ -111,6 +111,21 @@ phoneProviders: credentials: auth_token: "some_auth_token" +phoneTemplates: + - type: otp_verify + disabled: false + content: + from: "+12341234567" + body: + text: "Your verification code is {{ code }}" + voice: "Your verification code is {{ code }}" + - type: otp_enroll + disabled: false + content: + from: "+12341234567" + body: + text: "Your enrollment code is {{ code }}" + emailProvider: name: "smtp" enabled: true diff --git a/src/context/defaults.ts b/src/context/defaults.ts index 63a80df62..a37d8db19 100644 --- a/src/context/defaults.ts +++ b/src/context/defaults.ts @@ -90,6 +90,27 @@ export function phoneProviderDefaults(phoneProvider) { return updated; } +export function phoneTemplatesDefaults(phoneTemplate) { + const updated = { ...phoneTemplate }; + + // Strip read-only fields that are returned by the API but should not be included in exported config + const removeKeysFromOutput = [ + 'id', + 'channel', + 'customizable', + 'tenant', + 'created_at', + 'updated_at', + ]; + removeKeysFromOutput.forEach((key) => { + if (key in updated) { + delete updated[key]; + } + }); + + return updated; +} + export function connectionDefaults(connection) { if (connection.options) { // Mask secret for key: connection.options.client_secret diff --git a/src/context/directory/handlers/index.ts b/src/context/directory/handlers/index.ts index ce75460bc..366d83709 100644 --- a/src/context/directory/handlers/index.ts +++ b/src/context/directory/handlers/index.ts @@ -20,6 +20,7 @@ import triggers from './triggers'; import attackProtection from './attackProtection'; import branding from './branding'; import phoneProviders from './phoneProvider'; +import phoneTemplates from './phoneTemplates'; import logStreams from './logStreams'; import prompts from './prompts'; import customDomains from './customDomains'; @@ -70,6 +71,7 @@ const directoryHandlers: { attackProtection, branding, phoneProviders, + phoneTemplates, logStreams, prompts, customDomains, diff --git a/src/context/directory/handlers/phoneTemplates.ts b/src/context/directory/handlers/phoneTemplates.ts new file mode 100644 index 000000000..e8ab3204b --- /dev/null +++ b/src/context/directory/handlers/phoneTemplates.ts @@ -0,0 +1,52 @@ +import path from 'path'; +import fs from 'fs-extra'; +import { constants } from '../../../tools'; + +import { existsMustBeDir, getFiles, dumpJSON, loadJSON } from '../../../utils'; +import { DirectoryHandler } from '.'; +import DirectoryContext from '..'; +import { ParsedAsset } from '../../../types'; +import { PhoneTemplate } from '../../../tools/auth0/handlers/phoneTemplates'; +import { phoneTemplatesDefaults } from '../../defaults'; + +type ParsedPhoneTemplates = ParsedAsset<'phoneTemplates', PhoneTemplate[]>; + +function parse(context: DirectoryContext): ParsedPhoneTemplates { + const phoneTemplatesFolder = path.join(context.filePath, constants.PHONE_TEMPLATES_DIRECTORY); + if (!existsMustBeDir(phoneTemplatesFolder)) return { phoneTemplates: null }; // Skip + + const files = getFiles(phoneTemplatesFolder, ['.json']); + + const phoneTemplates = files.map((f) => + loadJSON(f, { + mappings: context.mappings, + disableKeywordReplacement: context.disableKeywordReplacement, + }) + ); + + return { phoneTemplates }; +} + +async function dump(context: DirectoryContext): Promise { + const { phoneTemplates } = context.assets; + + if (!phoneTemplates) { + return; + } // Skip, nothing to dump + + const phoneTemplatesFolder = path.join(context.filePath, constants.PHONE_TEMPLATES_DIRECTORY); + fs.ensureDirSync(phoneTemplatesFolder); + + phoneTemplates.forEach((template) => { + const templateWithDefaults = phoneTemplatesDefaults(template); + const templateFile = path.join(phoneTemplatesFolder, `${template.type}.json`); + dumpJSON(templateFile, templateWithDefaults); + }); +} + +const phoneTemplatesHandler: DirectoryHandler = { + parse, + dump, +}; + +export default phoneTemplatesHandler; diff --git a/src/context/yaml/handlers/index.ts b/src/context/yaml/handlers/index.ts index 87459c879..f7bbb5765 100644 --- a/src/context/yaml/handlers/index.ts +++ b/src/context/yaml/handlers/index.ts @@ -20,6 +20,7 @@ import triggers from './triggers'; import attackProtection from './attackProtection'; import branding from './branding'; import phoneProviders from './phoneProvider'; +import phoneTemplates from './phoneTemplates'; import logStreams from './logStreams'; import prompts from './prompts'; import customDomains from './customDomains'; @@ -68,6 +69,7 @@ const yamlHandlers: { [key in AssetTypes]: YAMLHandler<{ [key: string]: unknown attackProtection, branding, phoneProviders, + phoneTemplates, logStreams, prompts, customDomains, diff --git a/src/context/yaml/handlers/phoneTemplates.ts b/src/context/yaml/handlers/phoneTemplates.ts new file mode 100644 index 000000000..1ce0ab6d2 --- /dev/null +++ b/src/context/yaml/handlers/phoneTemplates.ts @@ -0,0 +1,36 @@ +import { YAMLHandler } from '.'; +import YAMLContext from '..'; +import { PhoneTemplate } from '../../../tools/auth0/handlers/phoneTemplates'; +import { ParsedAsset } from '../../../types'; +import { phoneTemplatesDefaults } from '../../defaults'; + +type ParsedPhoneTemplates = ParsedAsset<'phoneTemplates', PhoneTemplate[]>; + +async function parse(context: YAMLContext): Promise { + const { phoneTemplates } = context.assets; + + if (!phoneTemplates) return { phoneTemplates: null }; + + return { + phoneTemplates, + }; +} + +async function dump(context: YAMLContext): Promise { + const { phoneTemplates } = context.assets; + + if (!phoneTemplates) return { phoneTemplates: null }; + + const processedTemplates = phoneTemplates.map((template) => phoneTemplatesDefaults(template)); + + return { + phoneTemplates: processedTemplates, + }; +} + +const phoneTemplatesHandler: YAMLHandler = { + parse, + dump, +}; + +export default phoneTemplatesHandler; diff --git a/src/tools/auth0/handlers/index.ts b/src/tools/auth0/handlers/index.ts index e4c871dfc..ce9aad752 100644 --- a/src/tools/auth0/handlers/index.ts +++ b/src/tools/auth0/handlers/index.ts @@ -19,6 +19,7 @@ import * as guardianPhoneFactorMessageTypes from './guardianPhoneFactorMessageTy import * as roles from './roles'; import * as branding from './branding'; import * as phoneProviders from './phoneProvider'; +import * as phoneTemplates from './phoneTemplates'; import * as prompts from './prompts'; import * as actions from './actions'; import * as triggers from './triggers'; @@ -59,6 +60,7 @@ const auth0ApiHandlers: { [key in AssetTypes]: any } = { roles, branding, phoneProviders, + phoneTemplates, //@ts-ignore because prompts have not been universally implemented yet prompts, actions, diff --git a/src/tools/auth0/handlers/phoneTemplates.ts b/src/tools/auth0/handlers/phoneTemplates.ts new file mode 100644 index 000000000..3527b29ba --- /dev/null +++ b/src/tools/auth0/handlers/phoneTemplates.ts @@ -0,0 +1,220 @@ +import { Management } from 'auth0'; +import DefaultHandler, { order } from './default'; +import { Asset, Assets, CalculatedChanges } from '../../../types'; +import log from '../../../logger'; + +export type PhoneTemplate = Management.PhoneTemplate; + +export const schema = { + type: 'array', + description: 'List of phone notification templates', + items: { + type: 'object', + properties: { + type: { + type: 'string', + description: 'Type of phone notification template', + enum: ['otp_verify', 'otp_enroll', 'change_password', 'blocked_account', 'password_breach'], + }, + disabled: { + type: 'boolean', + description: 'Whether the template is enabled (false) or disabled (true).', + }, + content: { + type: 'object', + description: 'Content of the phone template', + properties: { + syntax: { + type: 'string', + description: 'Syntax used for the template content', + }, + from: { + type: 'string', + description: + 'Default phone number to be used as "from" when sending a phone notification', + }, + body: { + type: 'object', + description: 'Body content of the phone template', + properties: { + text: { + type: 'string', + description: 'Content of the phone template for text notifications', + }, + voice: { + type: 'string', + description: 'Content of the phone template for voice notifications', + }, + }, + }, + }, + }, + }, + }, +}; + +export default class PhoneTemplatesHandler extends DefaultHandler { + existing: PhoneTemplate[]; + + constructor(options: DefaultHandler) { + super({ + ...options, + type: 'phoneTemplates', + identifiers: ['type'], + stripCreateFields: ['channel', 'customizable', 'tenant'], + stripUpdateFields: ['channel', 'customizable', 'tenant', 'type'], + }); + } + + objString(template): string { + return super.objString({ type: template.type, disabled: template.disabled }); + } + + async getType(): Promise { + if (this.existing) { + return this.existing; + } + + const response = await this.client.branding.phone.templates.list(); + this.existing = response.templates ?? []; + + return this.existing; + } + + @order('65') + async processChanges(assets: Assets): Promise { + const { phoneTemplates } = assets; + + if (!phoneTemplates) return; + + const { del, update, create } = await this.calcChanges(assets); + + log.debug( + `Start processChanges for phone templates [delete:${del.length}] [update:${update.length}], [create:${create.length}]` + ); + + const changes = [{ del: del }, { create: create }, { update: update }]; + + await Promise.all( + changes.map(async (change) => { + switch (true) { + case change.del && change.del.length > 0: + await this.deletePhoneTemplates(change.del || []); + break; + case change.create && change.create.length > 0: + await this.createPhoneTemplates(change.create); + break; + case change.update && change.update.length > 0: + if (change.update) await this.updatePhoneTemplates(change.update); + break; + default: + break; + } + }) + ); + } + + async createPhoneTemplate(template): Promise { + const created = await this.client.branding.phone.templates.create(template); + return created; + } + + async createPhoneTemplates(creates: CalculatedChanges['create']): Promise { + await this.client.pool + .addEachTask({ + data: creates || [], + generator: (item) => + this.createPhoneTemplate(item) + .then((data) => { + this.didCreate(data); + this.created += 1; + }) + .catch((err) => { + throw new Error(`Problem creating ${this.type} ${this.objString(item)}\n${err}`); + }), + }) + .promise(); + } + + async updatePhoneTemplate(template): Promise { + const { type } = template; + + // Find the existing template to get its id + const existing = this.existing?.find((t) => t.type === type); + if (!existing?.id) { + log.warn( + `Skipping update for phone template type '${type}' as unable to find existing template ID` + ); + return template; + } + + // stripUpdateFields does not support in sub modules + const stripUpdateFields = ['content.syntax']; + log.debug(`Stripping ${this.type} create-only fields ${JSON.stringify(stripUpdateFields)}`); + + const updatePayload: Management.UpdatePhoneTemplateRequestContent = { + content: { + from: template.content?.from, + body: { + text: template.content?.body?.text, + voice: template.content?.body?.voice, + }, + }, + disabled: template.disabled, + }; + + const updated = await this.client.branding.phone.templates.update(existing.id, updatePayload); + return updated; + } + + async updatePhoneTemplates(updates: CalculatedChanges['update']): Promise { + await this.client.pool + .addEachTask({ + data: updates || [], + generator: (item) => + this.updatePhoneTemplate(item) + .then((data) => { + this.didUpdate(data); + this.updated += 1; + }) + .catch((err) => { + throw new Error(`Problem updating ${this.type} ${this.objString(item)}\n${err}`); + }), + }) + .promise(); + } + + async deletePhoneTemplate(template): Promise { + if (!template.id) { + throw new Error( + `Unable to find phone template id for type ${template.type} when trying to delete` + ); + } + await this.client.branding.phone.templates.delete(template.id); + } + + async deletePhoneTemplates(data: Asset[]): Promise { + if ( + this.config('AUTH0_ALLOW_DELETE') === 'true' || + this.config('AUTH0_ALLOW_DELETE') === true + ) { + await this.client.pool + .addEachTask({ + data: data || [], + generator: (item) => + this.deletePhoneTemplate(item) + .then(() => { + this.didDelete(item); + this.deleted += 1; + }) + .catch((err) => { + throw new Error(`Problem deleting ${this.type} ${this.objString(item)}\n${err}`); + }), + }) + .promise(); + } else { + log.warn(`Detected the following phone templates should be deleted. Doing so may be destructive.\nYou can enable deletes by setting 'AUTH0_ALLOW_DELETE' to true in the config + \n${data.map((i) => this.objString(i)).join('\n')}`); + } + } +} diff --git a/src/tools/constants.ts b/src/tools/constants.ts index 0d243d1a4..4045df5e1 100644 --- a/src/tools/constants.ts +++ b/src/tools/constants.ts @@ -96,6 +96,7 @@ const constants = { CLIENTS_GRANTS_DIRECTORY: 'grants', BRANDING_DIRECTORY: 'branding', PHONE_PROVIDER_DIRECTORY: 'phone-providers', + PHONE_TEMPLATES_DIRECTORY: 'phone-templates', BRANDING_TEMPLATES_DIRECTORY: 'templates', BRANDING_TEMPLATES_YAML_DIRECTORY: 'branding_templates', CLIENTS_CLIENT_NAME: 'clients', diff --git a/src/types.ts b/src/types.ts index 3d7c3a404..3d7a9db77 100644 --- a/src/types.ts +++ b/src/types.ts @@ -13,6 +13,7 @@ import { Flow } from './tools/auth0/handlers/flows'; import { FlowVaultConnection } from './tools/auth0/handlers/flowVaultConnections'; import { SsProfileWithCustomText } from './tools/auth0/handlers/selfServiceProfiles'; import { PhoneProvider } from './tools/auth0/handlers/phoneProvider'; +import { PhoneTemplate } from './tools/auth0/handlers/phoneTemplates'; import { NetworkACL } from './tools/auth0/handlers/networkACLs'; import { UserAttributeProfile } from './tools/auth0/handlers/userAttributeProfiles'; import { AttackProtection } from './tools/auth0/handlers/attackProtection'; @@ -99,6 +100,7 @@ export type Assets = Partial<{ }) | null; phoneProviders: PhoneProvider[] | null; + phoneTemplates: PhoneTemplate[] | null; clients: Client[] | null; clientGrants: ClientGrant[] | null; connections: Asset[] | null; @@ -175,6 +177,7 @@ export type AssetTypes = | 'attackProtection' | 'branding' | 'phoneProviders' + | 'phoneTemplates' | 'logStreams' | 'prompts' | 'customDomains' diff --git a/test/context/directory/phoneTemplates.test.ts b/test/context/directory/phoneTemplates.test.ts new file mode 100644 index 000000000..87d13e564 --- /dev/null +++ b/test/context/directory/phoneTemplates.test.ts @@ -0,0 +1,253 @@ +import path from 'path'; +import { expect } from 'chai'; +import { constants } from '../../../src/tools'; + +import Context from '../../../src/context/directory'; +import { testDataDir, cleanThenMkdir, mockMgmtClient } from '../../utils'; +import handler from '../../../src/context/directory/handlers/phoneTemplates'; +import { loadJSON } from '../../../src/utils'; +import fs from 'fs-extra'; + +describe('#directory context phone templates', () => { + it('should process phoneTemplates', async () => { + const repoDir = path.join(testDataDir, 'directory', 'phoneTemplates'); + cleanThenMkdir(repoDir); + + const phoneTemplatesDir = path.join(repoDir, constants.PHONE_TEMPLATES_DIRECTORY); + cleanThenMkdir(phoneTemplatesDir); + + // Create individual template files + fs.writeFileSync( + path.join(phoneTemplatesDir, 'otp_verify.json'), + JSON.stringify({ + type: 'otp_verify', + disabled: false, + content: { + from: '+15551234567', + body: { + text: '##OTP_VERIFICATION_TEXT## {{ code }}', + voice: '##OTP_VERIFICATION_TEXT## {{ code }}', + }, + }, + }) + ); + + fs.writeFileSync( + path.join(phoneTemplatesDir, 'otp_enroll.json'), + JSON.stringify({ + type: 'otp_enroll', + disabled: false, + content: { + from: '+15551234567', + body: { + text: '##OTP_ENROLL_TEXT## {{ code }}', + }, + }, + }) + ); + + const config = { AUTH0_INPUT_FILE: repoDir, AUTH0_KEYWORD_REPLACE_MAPPINGS: { env: 'test' } }; + const context = new Context(config, mockMgmtClient()); + await context.loadAssetsFromLocal(); + + // Sort by type for consistent comparison since file order is not deterministic + const sortedTemplates = [...context.assets.phoneTemplates].sort((a, b) => + a.type.localeCompare(b.type) + ); + + expect(sortedTemplates).to.deep.equal([ + { + type: 'otp_enroll', + disabled: false, + content: { + from: '+15551234567', + body: { + text: '##OTP_ENROLL_TEXT## {{ code }}', + }, + }, + }, + { + type: 'otp_verify', + disabled: false, + content: { + from: '+15551234567', + body: { + text: '##OTP_VERIFICATION_TEXT## {{ code }}', + voice: '##OTP_VERIFICATION_TEXT## {{ code }}', + }, + }, + }, + ]); + }); + + it('should return null when phone-templates directory does not exist', async () => { + const repoDir = path.join(testDataDir, 'directory', 'phoneTemplatesEmpty'); + cleanThenMkdir(repoDir); + + const config = { AUTH0_INPUT_FILE: repoDir }; + const context = new Context(config, mockMgmtClient()); + await context.loadAssetsFromLocal(); + + expect(context.assets.phoneTemplates).to.equal(null); + }); + + it('should dump phone templates', async () => { + const dir = path.join(testDataDir, 'directory', 'phoneTemplatesDump'); + cleanThenMkdir(dir); + const context = new Context({ AUTH0_INPUT_FILE: dir }, mockMgmtClient()); + + context.assets.phoneTemplates = [ + { + id: 'pntm_1234567890', + type: 'otp_verify', + disabled: false, + channel: 'sms', + customizable: true, + tenant: 'test-tenant', + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: '##OTP_VERIFICATION_TEXT## {{ code }}', + voice: '##OTP_VERIFICATION_TEXT## {{ code }}', + }, + }, + }, + { + id: 'pntm_0987654321', + type: 'otp_enroll', + disabled: false, + channel: 'sms', + customizable: true, + tenant: 'test-tenant', + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: '##OTP_ENROLL_TEXT## {{ code }}', + }, + }, + }, + ]; + + await handler.dump(context); + + const phoneTemplatesFolder = path.join(dir, constants.PHONE_TEMPLATES_DIRECTORY); + + // Check otp_verify.json - should have read-only fields stripped + const otpVerify = loadJSON(path.join(phoneTemplatesFolder, 'otp_verify.json')); + expect(otpVerify).to.deep.equal({ + type: 'otp_verify', + disabled: false, + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: '##OTP_VERIFICATION_TEXT## {{ code }}', + voice: '##OTP_VERIFICATION_TEXT## {{ code }}', + }, + }, + }); + expect(otpVerify).to.not.have.property('id'); + expect(otpVerify).to.not.have.property('channel'); + expect(otpVerify).to.not.have.property('customizable'); + expect(otpVerify).to.not.have.property('tenant'); + + // Check otp_enroll.json + const otpEnroll = loadJSON(path.join(phoneTemplatesFolder, 'otp_enroll.json')); + expect(otpEnroll).to.deep.equal({ + type: 'otp_enroll', + disabled: false, + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: '##OTP_ENROLL_TEXT## {{ code }}', + }, + }, + }); + }); + + it('should not dump when phoneTemplates is null', async () => { + const dir = path.join(testDataDir, 'directory', 'phoneTemplatesNullDump'); + cleanThenMkdir(dir); + const context = new Context({ AUTH0_INPUT_FILE: dir }, mockMgmtClient()); + + context.assets.phoneTemplates = null; + + await handler.dump(context); + + const phoneTemplatesFolder = path.join(dir, constants.PHONE_TEMPLATES_DIRECTORY); + expect(fs.existsSync(phoneTemplatesFolder)).to.equal(false); + }); + + it('should preserve keyword markers when dumping with AUTH0_PRESERVE_KEYWORDS', async () => { + const dir = path.join(testDataDir, 'directory', 'phoneTemplatesPreserve'); + const phoneTemplatesDir = path.join(dir, constants.PHONE_TEMPLATES_DIRECTORY); + cleanThenMkdir(phoneTemplatesDir); + + const localTemplate = { + type: 'otp_verify', + disabled: false, + content: { + syntax: 'liquid', + from: '##FROM_NUMBER##', + body: { + text: '##OTP_VERIFICATION_TEXT## {{ code }}', + voice: '##OTP_VERIFICATION_TEXT## {{ code }}', + }, + }, + }; + + fs.writeFileSync( + path.join(phoneTemplatesDir, 'otp_verify.json'), + JSON.stringify(localTemplate) + ); + + const remoteTemplates = [ + { + id: 'pntm_otp_verify', + type: 'otp_verify', + disabled: false, + content: { + syntax: 'liquid', + from: '+15551230000', + body: { + text: 'Your verification code is {{ code }}', + voice: 'Your verification code is {{ code }}', + }, + }, + }, + ]; + + const mockMgmt = { + branding: { + phone: { + templates: { + list: () => Promise.resolve({ templates: remoteTemplates }), + }, + }, + }, + } as any; + + const context = new Context( + { + AUTH0_INPUT_FILE: dir, + AUTH0_PRESERVE_KEYWORDS: true, + AUTH0_INCLUDED_ONLY: ['phoneTemplates'], + AUTH0_KEYWORD_REPLACE_MAPPINGS: { + FROM_NUMBER: '+15551230000', + OTP_VERIFICATION_TEXT: 'Your verification code is', + OTP_ENROLL_TEXT: 'Your enrollment code is', + }, + } as any, + mockMgmt + ); + + await context.dump(); + + const dumped = loadJSON(path.join(phoneTemplatesDir, 'otp_verify.json')); + + expect(dumped).to.deep.equal(localTemplate); + }); +}); diff --git a/test/context/yaml/context.test.js b/test/context/yaml/context.test.js index 1cc7ae4a8..eca94338a 100644 --- a/test/context/yaml/context.test.js +++ b/test/context/yaml/context.test.js @@ -311,6 +311,7 @@ describe('#YAML context validation', () => { forms: [], selfServiceProfiles: [], userAttributeProfiles: [], + phoneTemplates: [], }); }); @@ -439,6 +440,7 @@ describe('#YAML context validation', () => { forms: [], selfServiceProfiles: [], userAttributeProfiles: [], + phoneTemplates: [], }); }); @@ -568,6 +570,7 @@ describe('#YAML context validation', () => { forms: [], selfServiceProfiles: [], userAttributeProfiles: [], + phoneTemplates: [], }); }); diff --git a/test/context/yaml/phoneTemplates.test.ts b/test/context/yaml/phoneTemplates.test.ts new file mode 100644 index 000000000..791efbdd2 --- /dev/null +++ b/test/context/yaml/phoneTemplates.test.ts @@ -0,0 +1,239 @@ +import path from 'path'; +import fs from 'fs-extra'; +import jsYaml from 'js-yaml'; +import { expect } from 'chai'; + +import Context from '../../../src/context/yaml'; +import handler from '../../../src/context/yaml/handlers/phoneTemplates'; +import { cleanThenMkdir, testDataDir, mockMgmtClient } from '../../utils'; + +describe('#YAML context phone templates', () => { + it('should process phone templates', async () => { + const dir = path.join(testDataDir, 'yaml', 'phoneTemplates'); + cleanThenMkdir(dir); + + const yaml = ` +phoneTemplates: + - type: otp_verify + disabled: false + content: + from: '+15551234567' + body: + text: '##OTP_VERIFICATION_TEXT## {{ code }}' + voice: '##OTP_VERIFICATION_TEXT## {{ code }}' + - type: otp_enroll + disabled: false + content: + from: '+15551234567' + body: + text: '##OTP_ENROLL_TEXT## {{ code }}' +`; + const yamlFile = path.join(dir, 'config.yaml'); + fs.writeFileSync(yamlFile, yaml); + + const target = [ + { + type: 'otp_verify', + disabled: false, + content: { + from: '+15551234567', + body: { + text: '##OTP_VERIFICATION_TEXT## {{ code }}', + voice: '##OTP_VERIFICATION_TEXT## {{ code }}', + }, + }, + }, + { + type: 'otp_enroll', + disabled: false, + content: { + from: '+15551234567', + body: { + text: '##OTP_ENROLL_TEXT## {{ code }}', + }, + }, + }, + ]; + + const config = { AUTH0_INPUT_FILE: yamlFile, AUTH0_KEYWORD_REPLACE_MAPPINGS: { ENV: 'test' } }; + const context = new Context(config, mockMgmtClient()); + await context.loadAssetsFromLocal(); + expect(context.assets.phoneTemplates).to.deep.equal(target); + }); + + it('should dump phone templates', async () => { + const context = new Context({ AUTH0_INPUT_FILE: './test.yml' }, mockMgmtClient()); + context.assets.phoneTemplates = [ + { + id: 'pntm_1234567890', + type: 'otp_verify', + disabled: false, + channel: 'sms', + customizable: true, + tenant: 'test-tenant', + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: '##OTP_VERIFICATION_TEXT## {{ code }}', + voice: '##OTP_VERIFICATION_TEXT## {{ code }}', + }, + }, + }, + { + id: 'pntm_0987654321', + type: 'otp_enroll', + disabled: false, + channel: 'sms', + customizable: true, + tenant: 'test-tenant', + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: '##OTP_ENROLL_TEXT## {{ code }}', + }, + }, + }, + ]; + + const dumped = await handler.dump(context); + + // Should have read-only fields stripped + expect(dumped).to.deep.equal({ + phoneTemplates: [ + { + type: 'otp_verify', + disabled: false, + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: '##OTP_VERIFICATION_TEXT## {{ code }}', + voice: '##OTP_VERIFICATION_TEXT## {{ code }}', + }, + }, + }, + { + type: 'otp_enroll', + disabled: false, + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: '##OTP_ENROLL_TEXT## {{ code }}', + }, + }, + }, + ], + }); + + // Verify read-only fields are stripped + dumped.phoneTemplates.forEach((template) => { + expect(template).to.not.have.property('id'); + expect(template).to.not.have.property('channel'); + expect(template).to.not.have.property('customizable'); + expect(template).to.not.have.property('tenant'); + }); + }); + + it('should return null when phoneTemplates is not defined', async () => { + const dir = path.join(testDataDir, 'yaml', 'phoneTemplatesEmpty'); + cleanThenMkdir(dir); + + const yaml = ` +clients: [] +`; + const yamlFile = path.join(dir, 'config.yaml'); + fs.writeFileSync(yamlFile, yaml); + + const config = { AUTH0_INPUT_FILE: yamlFile }; + const context = new Context(config, mockMgmtClient()); + await context.loadAssetsFromLocal(); + expect(context.assets.phoneTemplates).to.equal(null); + }); + + it('should return null when dumping null phoneTemplates', async () => { + const context = new Context({ AUTH0_INPUT_FILE: './test.yml' }, mockMgmtClient()); + context.assets.phoneTemplates = null; + + const dumped = await handler.dump(context); + expect(dumped).to.deep.equal({ phoneTemplates: null }); + }); + + it('should preserve keyword markers when dumping with AUTH0_PRESERVE_KEYWORDS', async () => { + const dir = path.join(testDataDir, 'yaml', 'phoneTemplatesPreserve'); + cleanThenMkdir(dir); + + const yamlFile = path.join(dir, 'config.yaml'); + const localYaml = ` +phoneTemplates: + - type: otp_verify + disabled: false + content: + from: '##FROM_NUMBER##' + body: + text: '##OTP_VERIFICATION_TEXT## {{ code }}' + voice: '##OTP_VERIFICATION_TEXT## {{ code }}' +`; + fs.writeFileSync(yamlFile, localYaml); + + const remoteTemplates = [ + { + id: 'pntm_otp_verify', + type: 'otp_verify', + disabled: false, + content: { + syntax: 'liquid', + from: '+15551230000', + body: { + text: 'Your verification code is {{ code }}', + voice: 'Your verification code is {{ code }}', + }, + }, + }, + ]; + + const context = new Context( + { + AUTH0_INPUT_FILE: yamlFile, + AUTH0_PRESERVE_KEYWORDS: true, + AUTH0_INCLUDED_ONLY: ['phoneTemplates'], + AUTH0_KEYWORD_REPLACE_MAPPINGS: { + FROM_NUMBER: '+15551230000', + OTP_VERIFICATION_TEXT: 'Your verification code is', + }, + } as any, + { + branding: { + phone: { + templates: { + list: () => Promise.resolve({ templates: remoteTemplates }) as any, + }, + }, + }, + } as any + ); + + await context.dump(); + + const dumpedYaml = jsYaml.load(fs.readFileSync(yamlFile, 'utf8')); + + expect(dumpedYaml).to.deep.equal({ + phoneTemplates: [ + { + type: 'otp_verify', + disabled: false, + content: { + syntax: 'liquid', + from: '##FROM_NUMBER##', + body: { + text: '##OTP_VERIFICATION_TEXT## {{ code }}', + voice: '##OTP_VERIFICATION_TEXT## {{ code }}', + }, + }, + }, + ], + }); + }); +}); 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 0e1f2cadd..5a894fd59 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 @@ -1201,7 +1201,7 @@ "body": "", "status": 200, "response": { - "total": 2, + "total": 9, "start": 0, "limit": 100, "clients": [ @@ -1241,7 +1241,364 @@ "subject": "deprecated" } ], - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", + "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", + "implicit", + "authorization_code", + "refresh_token" + ], + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", + "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": "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", + "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": "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "allowed_origins": [], + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "3fBUyX06CDDuksAP7TNZKYONbfYDLZMA", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1250,36 +1607,48 @@ "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", - "implicit", "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": "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, "cross_origin_authentication": false, - "cross_origin_auth": false, "signing_keys": [ { "cert": "[REDACTED]", @@ -1287,7 +1656,7 @@ "subject": "deprecated" } ], - "client_id": "VTTBLf4Y7vX3tpTVj0TuGPLPXGsAMUrj", + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1295,10 +1664,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 @@ -1311,7 +1680,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/VTTBLf4Y7vX3tpTVj0TuGPLPXGsAMUrj", + "path": "/api/v2/clients/BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", "body": "", "status": 204, "response": "", @@ -1320,14 +1689,15 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/clients", + "method": "PATCH", + "path": "/api/v2/clients/feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", "body": { - "name": "Quickstarts API (Test Application)", + "name": "API Explorer Application", + "allowed_clients": [], "app_type": "non_interactive", - "client_metadata": { - "foo": "bar" - }, + "callbacks": [], + "client_aliases": [], + "client_metadata": {}, "cross_origin_auth": false, "custom_login_page_on": true, "grant_types": [ @@ -1337,8 +1707,15 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "lifetime_in_seconds": 36000 + }, + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } }, "oidc_conformant": true, "refresh_token": { @@ -1353,17 +1730,25 @@ "sso_disabled": false, "token_endpoint_auth_method": "client_secret_post" }, - "status": 201, + "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" - }, + "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", @@ -1376,16 +1761,14 @@ }, "sso_disabled": false, "cross_origin_authentication": false, - "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", - "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "qXCqK884hJUOYPhMMkXuFaoIlkDlIqsS", + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1393,6 +1776,7 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", "app_type": "non_interactive", "grant_types": [ @@ -1405,15 +1789,14 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/clients", + "method": "PATCH", + "path": "/api/v2/clients/c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", "body": { - "name": "API Explorer Application", - "allowed_clients": [], + "name": "Quickstarts API (Test Application)", "app_type": "non_interactive", - "callbacks": [], - "client_aliases": [], - "client_metadata": {}, + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "custom_login_page_on": true, "grant_types": [ @@ -1423,16 +1806,7 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false - }, - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } + "lifetime_in_seconds": 36000 }, "oidc_conformant": true, "refresh_token": { @@ -1447,25 +1821,17 @@ "sso_disabled": false, "token_endpoint_auth_method": "client_secret_post" }, - "status": 201, + "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": {}, + "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", @@ -1478,16 +1844,14 @@ }, "sso_disabled": false, "cross_origin_authentication": false, - "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", - "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "y47mfVuNz3nzK4VbATlDhYsU6sBHfq8e", + "client_id": "c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1495,7 +1859,6 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, - "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", "app_type": "non_interactive", "grant_types": [ @@ -1508,8 +1871,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/clients", + "method": "PATCH", + "path": "/api/v2/clients/xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", "body": { "name": "Node App", "allowed_clients": [], @@ -1531,8 +1894,7 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "lifetime_in_seconds": 36000 }, "native_social_login": { "apple": { @@ -1556,7 +1918,7 @@ "token_endpoint_auth_method": "client_secret_post", "web_origins": [] }, - "status": 201, + "status": 200, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, @@ -1588,17 +1950,15 @@ }, "sso_disabled": false, "cross_origin_authentication": false, - "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", - "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], "allowed_origins": [], - "client_id": "tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL", + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1623,8 +1983,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/clients", + "method": "PATCH", + "path": "/api/v2/clients/3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", "body": { "name": "Terraform Provider", "app_type": "non_interactive", @@ -1637,8 +1997,7 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "lifetime_in_seconds": 36000 }, "oidc_conformant": true, "refresh_token": { @@ -1653,7 +2012,7 @@ "sso_disabled": false, "token_endpoint_auth_method": "client_secret_post" }, - "status": 201, + "status": 200, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, @@ -1673,16 +2032,14 @@ }, "sso_disabled": false, "cross_origin_authentication": false, - "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", - "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "Ls1MLBy6XnrS6FICBpTgagxcvY6g4Ln9", + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1702,8 +2059,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/clients", + "method": "PATCH", + "path": "/api/v2/clients/ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", "body": { "name": "The Default App", "allowed_clients": [], @@ -1722,8 +2079,7 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "lifetime_in_seconds": 36000 }, "native_social_login": { "apple": { @@ -1747,7 +2103,7 @@ "sso_disabled": false, "token_endpoint_auth_method": "client_secret_post" }, - "status": 201, + "status": 200, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, @@ -1779,16 +2135,14 @@ "sso": false, "sso_disabled": false, "cross_origin_authentication": false, - "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", - "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "m0BppkTR5PJR9UBbJmhOcXQm8kUBi3mb", + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1811,33 +2165,25 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/clients", + "method": "PATCH", + "path": "/api/v2/clients/XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", "body": { - "name": "Test SPA", + "name": "auth0-deploy-cli-extension", "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], - "app_type": "spa", - "callbacks": [ - "http://localhost:3000" - ], + "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, "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "lifetime_in_seconds": 36000 }, "native_social_login": { "apple": { @@ -1849,33 +2195,25 @@ }, "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, - "token_endpoint_auth_method": "none", - "web_origins": [ - "http://localhost:3000" - ] + "token_endpoint_auth_method": "client_secret_post" }, - "status": 201, + "status": 200, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "Test SPA", + "name": "auth0-deploy-cli-extension", "allowed_clients": [], - "allowed_logout_urls": [ - "http://localhost:3000" - ], - "callbacks": [ - "http://localhost:3000" - ], + "callbacks": [], "client_metadata": {}, "cross_origin_auth": false, "is_first_party": true, @@ -1889,26 +2227,24 @@ }, "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": false, - "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", - "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "1oQC5ORWSgXf4D3muXm0JFSFfyBp0svZ", + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1917,15 +2253,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 }, @@ -1934,26 +2265,32 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/clients", + "method": "PATCH", + "path": "/api/v2/clients/3fBUyX06CDDuksAP7TNZKYONbfYDLZMA", "body": { - "name": "auth0-deploy-cli-extension", + "name": "Test SPA", "allowed_clients": [], - "app_type": "non_interactive", - "callbacks": [], + "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": [ - "client_credentials" + "authorization_code", + "implicit", + "refresh_token" ], "is_first_party": true, "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { - "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "alg": "RS256", + "lifetime_in_seconds": 36000 }, "native_social_login": { "apple": { @@ -1965,25 +2302,33 @@ }, "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, - "token_endpoint_auth_method": "client_secret_post" + "token_endpoint_auth_method": "none", + "web_origins": [ + "http://localhost:3000" + ] }, - "status": 201, + "status": 200, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "auth0-deploy-cli-extension", + "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, @@ -1997,26 +2342,24 @@ }, "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, "cross_origin_authentication": false, - "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", - "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", + "client_id": "3fBUyX06CDDuksAP7TNZKYONbfYDLZMA", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2025,10 +2368,15 @@ "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 }, @@ -2066,7 +2414,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 }, @@ -2080,13 +2428,13 @@ { "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 + "enabled": true }, "status": 200, "response": { - "enabled": false + "enabled": true }, "rawHeaders": [], "responseIsBinary": false @@ -2108,13 +2456,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-roaming", "body": { - "enabled": true + "enabled": false }, "status": 200, "response": { - "enabled": true + "enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -2212,7 +2560,103 @@ "body": "", "status": 200, "response": { - "actions": [], + "actions": [ + { + "id": "4273221d-f20e-44e6-aa9d-d45702782e4e", + "name": "My Custom Action", + "supported_triggers": [ + { + "id": "post-login", + "version": "v2" + } + ], + "created_at": "2025-12-05T14:18:53.100690661Z", + "updated_at": "2025-12-09T12:31:15.977676526Z", + "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": "node18", + "status": "built", + "secrets": [], + "current_version": { + "id": "a20b7a92-0d6e-4926-9226-fb83db144dae", + "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": "node18", + "status": "BUILT", + "number": 7, + "build_time": "2025-12-09T12:31:16.794944131Z", + "created_at": "2025-12-09T12:31:16.719266241Z", + "updated_at": "2025-12-09T12:31:16.796068316Z" + }, + "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": "a20b7a92-0d6e-4926-9226-fb83db144dae", + "deployed": true, + "number": 7, + "built_at": "2025-12-09T12:31:16.794944131Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:31:16.719266241Z", + "updated_at": "2025-12-09T12:31:16.796068316Z", + "runtime": "node18", + "supported_triggers": [ + { + "id": "post-login", + "version": "v2" + } + ] + }, + "all_changes_deployed": true + }, + { + "id": "50d86033-6bc2-4ceb-8991-d14c85d2e304", + "name": "Custom Phone Provider", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ], + "created_at": "2025-12-09T12:23:14.388072786Z", + "updated_at": "2025-12-09T12:30:12.235258402Z", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "runtime": "node22", + "status": "built", + "secrets": [], + "current_version": { + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "runtime": "node22", + "status": "BUILT", + "number": 3, + "build_time": "2025-12-09T12:30:13.066221969Z", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z" + }, + "deployed_version": { + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "deployed": true, + "number": 3, + "built_at": "2025-12-09T12:30:13.066221969Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z", + "runtime": "node22", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ] + }, + "all_changes_deployed": true + } + ], + "total": 2, "per_page": 100 }, "rawHeaders": [], @@ -2220,8 +2664,18 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/actions/actions", + "method": "DELETE", + "path": "/api/v2/actions/actions/50d86033-6bc2-4ceb-8991-d14c85d2e304?force=true", + "body": "", + "status": 204, + "response": "", + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/actions/actions/4273221d-f20e-44e6-aa9d-d45702782e4e", "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", @@ -2235,9 +2689,9 @@ } ] }, - "status": 201, + "status": 200, "response": { - "id": "0c33a5ff-8c26-44e6-9c95-78b980a40e12", + "id": "4273221d-f20e-44e6-aa9d-d45702782e4e", "name": "My Custom Action", "supported_triggers": [ { @@ -2245,14 +2699,43 @@ "version": "v2" } ], - "created_at": "2025-12-05T14:17:01.355911147Z", - "updated_at": "2025-12-05T14:17:01.372519072Z", + "created_at": "2025-12-05T14:18:53.100690661Z", + "updated_at": "2025-12-09T12:35:06.967806400Z", "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": "node18", "status": "pending", "secrets": [], - "all_changes_deployed": false + "current_version": { + "id": "a20b7a92-0d6e-4926-9226-fb83db144dae", + "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": "node18", + "status": "BUILT", + "number": 7, + "build_time": "2025-12-09T12:31:16.794944131Z", + "created_at": "2025-12-09T12:31:16.719266241Z", + "updated_at": "2025-12-09T12:31:16.796068316Z" + }, + "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": "a20b7a92-0d6e-4926-9226-fb83db144dae", + "deployed": true, + "number": 7, + "built_at": "2025-12-09T12:31:16.794944131Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:31:16.719266241Z", + "updated_at": "2025-12-09T12:31:16.796068316Z", + "runtime": "node18", + "supported_triggers": [ + { + "id": "post-login", + "version": "v2" + } + ] + }, + "all_changes_deployed": true }, "rawHeaders": [], "responseIsBinary": false @@ -2266,7 +2749,7 @@ "response": { "actions": [ { - "id": "0c33a5ff-8c26-44e6-9c95-78b980a40e12", + "id": "4273221d-f20e-44e6-aa9d-d45702782e4e", "name": "My Custom Action", "supported_triggers": [ { @@ -2274,14 +2757,43 @@ "version": "v2" } ], - "created_at": "2025-12-05T14:17:01.355911147Z", - "updated_at": "2025-12-05T14:17:01.372519072Z", + "created_at": "2025-12-05T14:18:53.100690661Z", + "updated_at": "2025-12-09T12:35:06.967806400Z", "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": "node18", "status": "built", "secrets": [], - "all_changes_deployed": false + "current_version": { + "id": "a20b7a92-0d6e-4926-9226-fb83db144dae", + "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": "node18", + "status": "BUILT", + "number": 7, + "build_time": "2025-12-09T12:31:16.794944131Z", + "created_at": "2025-12-09T12:31:16.719266241Z", + "updated_at": "2025-12-09T12:31:16.796068316Z" + }, + "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": "a20b7a92-0d6e-4926-9226-fb83db144dae", + "deployed": true, + "number": 7, + "built_at": "2025-12-09T12:31:16.794944131Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:31:16.719266241Z", + "updated_at": "2025-12-09T12:31:16.796068316Z", + "runtime": "node18", + "supported_triggers": [ + { + "id": "post-login", + "version": "v2" + } + ] + }, + "all_changes_deployed": true } ], "total": 1, @@ -2293,19 +2805,19 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "POST", - "path": "/api/v2/actions/actions/0c33a5ff-8c26-44e6-9c95-78b980a40e12/deploy", + "path": "/api/v2/actions/actions/4273221d-f20e-44e6-aa9d-d45702782e4e/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": "7449cbf1-56ef-45a8-88fb-76e3da65a88c", + "id": "180cfbad-155a-407a-94b3-cf0dfab34726", "deployed": false, - "number": 1, + "number": 8, "secrets": [], "status": "built", - "created_at": "2025-12-05T14:17:02.267752368Z", - "updated_at": "2025-12-05T14:17:02.267752368Z", + "created_at": "2025-12-09T12:35:07.753860417Z", + "updated_at": "2025-12-09T12:35:07.753860417Z", "runtime": "node18", "supported_triggers": [ { @@ -2314,7 +2826,7 @@ } ], "action": { - "id": "0c33a5ff-8c26-44e6-9c95-78b980a40e12", + "id": "4273221d-f20e-44e6-aa9d-d45702782e4e", "name": "My Custom Action", "supported_triggers": [ { @@ -2322,14 +2834,60 @@ "version": "v2" } ], - "created_at": "2025-12-05T14:17:01.355911147Z", - "updated_at": "2025-12-05T14:17:01.355911147Z", + "created_at": "2025-12-05T14:18:53.100690661Z", + "updated_at": "2025-12-09T12:35:06.960018210Z", "all_changes_deployed": 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" + ], + "allowlist": [ + "127.0.0.1" + ], + "stage": { + "pre-login": { + "max_attempts": 66, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 66, + "rate": 1200 + } + } + }, + "status": 200, + "response": { + "enabled": true, + "shields": [ + "admin_notification" + ], + "allowlist": [ + "127.0.0.1" + ], + "stage": { + "pre-login": { + "max_attempts": 66, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 66, + "rate": 1200 + } + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", @@ -2370,62 +2928,16 @@ }, "status": 200, "response": { - "enabled": false, - "shields": [], - "admin_notification_frequency": [], - "method": "standard", - "stage": { - "pre-user-registration": { - "shields": [] - }, - "pre-change-password": { - "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" - ], - "allowlist": [ - "127.0.0.1" - ], - "stage": { - "pre-login": { - "max_attempts": 66, - "rate": 864000 - }, - "pre-user-registration": { - "max_attempts": 66, - "rate": 1200 - } - } - }, - "status": 200, - "response": { - "enabled": true, - "shields": [ - "admin_notification" - ], - "allowlist": [ - "127.0.0.1" - ], + "enabled": false, + "shields": [], + "admin_notification_frequency": [], + "method": "standard", "stage": { - "pre-login": { - "max_attempts": 66, - "rate": 864000 - }, "pre-user-registration": { - "max_attempts": 66, - "rate": 1200 + "shields": [] + }, + "pre-change-password": { + "shields": [] } } }, @@ -2459,7 +2971,7 @@ } }, "created_at": "2025-09-09T04:41:43.671Z", - "updated_at": "2025-12-05T07:04:15.756Z", + "updated_at": "2025-12-09T12:31:17.804Z", "id": "acl_wpZ6oScRU5L6QKAxMUMHmx" } ] @@ -2504,7 +3016,7 @@ } }, "created_at": "2025-09-09T04:41:43.671Z", - "updated_at": "2025-12-05T14:17:03.449Z", + "updated_at": "2025-12-09T12:35:08.930Z", "id": "acl_wpZ6oScRU5L6QKAxMUMHmx" }, "rawHeaders": [], @@ -2756,7 +3268,7 @@ "subject": "deprecated" } ], - "client_id": "y47mfVuNz3nzK4VbATlDhYsU6sBHfq8e", + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2801,7 +3313,7 @@ "subject": "deprecated" } ], - "client_id": "qXCqK884hJUOYPhMMkXuFaoIlkDlIqsS", + "client_id": "c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2855,7 +3367,7 @@ } ], "allowed_origins": [], - "client_id": "tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL", + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2901,7 +3413,7 @@ "subject": "deprecated" } ], - "client_id": "Ls1MLBy6XnrS6FICBpTgagxcvY6g4Ln9", + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -2954,7 +3466,7 @@ "subject": "deprecated" } ], - "client_id": "m0BppkTR5PJR9UBbJmhOcXQm8kUBi3mb", + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3014,7 +3526,7 @@ "subject": "deprecated" } ], - "client_id": "1oQC5ORWSgXf4D3muXm0JFSFfyBp0svZ", + "client_id": "3fBUyX06CDDuksAP7TNZKYONbfYDLZMA", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3072,7 +3584,7 @@ "subject": "deprecated" } ], - "client_id": "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3139,7 +3651,75 @@ "response": { "connections": [ { - "id": "con_LyQ8Ql8u6kYDmUkh", + "id": "con_bBSD5AQUW0Q5aLuE", + "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, + "api_behavior": "required" + } + }, + "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, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "realms": [ + "boo-baz-db-connection-test" + ], + "enabled_clients": [ + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + ] + }, + { + "id": "con_CfDqv7jPXpFqETeK", "options": { "mfa": { "active": true, @@ -3193,7 +3773,75 @@ "response": { "connections": [ { - "id": "con_LyQ8Ql8u6kYDmUkh", + "id": "con_bBSD5AQUW0Q5aLuE", + "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, + "api_behavior": "required" + } + }, + "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, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "realms": [ + "boo-baz-db-connection-test" + ], + "enabled_clients": [ + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + ] + }, + { + "id": "con_CfDqv7jPXpFqETeK", "options": { "mfa": { "active": true, @@ -3241,7 +3889,26 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_LyQ8Ql8u6kYDmUkh/clients?take=50", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE/clients?take=50", + "body": "", + "status": 200, + "response": { + "clients": [ + { + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + }, + { + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_CfDqv7jPXpFqETeK/clients?take=50", "body": "", "status": 200, "response": { @@ -3257,7 +3924,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_LyQ8Ql8u6kYDmUkh/clients?take=50", + "path": "/api/v2/connections/con_CfDqv7jPXpFqETeK/clients?take=50", "body": "", "status": 200, "response": { @@ -3270,28 +3937,122 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE/clients?take=50", + "body": "", + "status": 200, + "response": { + "clients": [ + { + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + }, + { + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/connections/con_LyQ8Ql8u6kYDmUkh", + "path": "/api/v2/connections/con_CfDqv7jPXpFqETeK", "body": "", "status": 202, "response": { - "deleted_at": "2025-12-05T14:17:06.615Z" + "deleted_at": "2025-12-09T12:35:11.855Z" + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE", + "body": "", + "status": 200, + "response": { + "id": "con_bBSD5AQUW0Q5aLuE", + "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, + "api_behavior": "required" + } + }, + "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, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "enabled_clients": [ + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + ], + "realms": [ + "boo-baz-db-connection-test" + ] }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/connections", + "method": "PATCH", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE", "body": { - "name": "boo-baz-db-connection-test", - "strategy": "auth0", "enabled_clients": [ - "tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL", - "GRROzy1MZCZ9d84osY58JfLA3X02qtQL" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ], "is_domain_connection": false, "options": { @@ -3310,6 +4071,11 @@ }, "disable_signup": false, "passwordPolicy": "low", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, "password_history": { "size": 5, "enable": false @@ -3320,6 +4086,15 @@ "enable": true, "dictionary": [] }, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true, + "api_behavior": "required" + } + }, "brute_force_protection": true, "password_no_personal_info": { "enable": true @@ -3333,25 +4108,30 @@ "boo-baz-db-connection-test" ] }, - "status": 201, + "status": 200, "response": { - "id": "con_hZaTQt1ipndiAks3", + "id": "con_bBSD5AQUW0Q5aLuE", "options": { "mfa": { "active": true, "return_enroll_settings": true }, - "passwordPolicy": "low", "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", + "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", - "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" + "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 @@ -3362,6 +4142,15 @@ "enable": true, "dictionary": [] }, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true, + "api_behavior": "required" + } + }, "brute_force_protection": true, "password_no_personal_info": { "enable": true @@ -3369,21 +4158,7 @@ "password_complexity_options": { "min_length": 8 }, - "enabledDatabaseCustomization": true, - "authentication_methods": { - "password": { - "enabled": true, - "api_behavior": "required" - }, - "passkey": { - "enabled": false - } - }, - "passkey_options": { - "challenge_ui": "both", - "progressive_enrollment_enabled": true, - "local_enrollment_enabled": true - } + "enabledDatabaseCustomization": true }, "strategy": "auth0", "name": "boo-baz-db-connection-test", @@ -3395,8 +4170,8 @@ "active": false }, "enabled_clients": [ - "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", - "tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ], "realms": [ "boo-baz-db-connection-test" @@ -3405,98 +4180,17 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/connections?take=1&name=boo-baz-db-connection-test&include_fields=true", - "body": "", - "status": 200, - "response": { - "connections": [ - { - "id": "con_hZaTQt1ipndiAks3", - "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, - "api_behavior": "required" - } - }, - "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, - "authentication": { - "active": true - }, - "connected_accounts": { - "active": false - }, - "realms": [ - "boo-baz-db-connection-test" - ], - "enabled_clients": [ - "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", - "tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL" - ] - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/connections/con_hZaTQt1ipndiAks3/clients", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE/clients", "body": [ { - "client_id": "tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL", + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", "status": true }, { - "client_id": "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", "status": true } ], @@ -3608,7 +4302,7 @@ "subject": "deprecated" } ], - "client_id": "y47mfVuNz3nzK4VbATlDhYsU6sBHfq8e", + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3653,7 +4347,7 @@ "subject": "deprecated" } ], - "client_id": "qXCqK884hJUOYPhMMkXuFaoIlkDlIqsS", + "client_id": "c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3707,7 +4401,7 @@ } ], "allowed_origins": [], - "client_id": "tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL", + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3753,7 +4447,7 @@ "subject": "deprecated" } ], - "client_id": "Ls1MLBy6XnrS6FICBpTgagxcvY6g4Ln9", + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3806,7 +4500,7 @@ "subject": "deprecated" } ], - "client_id": "m0BppkTR5PJR9UBbJmhOcXQm8kUBi3mb", + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3866,7 +4560,7 @@ "subject": "deprecated" } ], - "client_id": "1oQC5ORWSgXf4D3muXm0JFSFfyBp0svZ", + "client_id": "3fBUyX06CDDuksAP7TNZKYONbfYDLZMA", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3924,7 +4618,7 @@ "subject": "deprecated" } ], - "client_id": "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -3991,7 +4685,7 @@ "response": { "connections": [ { - "id": "con_hZaTQt1ipndiAks3", + "id": "con_bBSD5AQUW0Q5aLuE", "options": { "mfa": { "active": true, @@ -4054,8 +4748,35 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", - "tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + ] + }, + { + "id": "con_yGZ6rzfkdR6mMBoE", + "options": { + "email": true, + "scope": [ + "email", + "profile" + ], + "profile": true + }, + "strategy": "google-oauth2", + "name": "google-oauth2", + "is_domain_connection": false, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "realms": [ + "google-oauth2" + ], + "enabled_clients": [ + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", + "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz" ] } ] @@ -4072,7 +4793,7 @@ "response": { "connections": [ { - "id": "con_hZaTQt1ipndiAks3", + "id": "con_bBSD5AQUW0Q5aLuE", "options": { "mfa": { "active": true, @@ -4135,77 +4856,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", - "tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/connections", - "body": { - "name": "google-oauth2", - "strategy": "google-oauth2", - "enabled_clients": [ - "m0BppkTR5PJR9UBbJmhOcXQm8kUBi3mb", - "GRROzy1MZCZ9d84osY58JfLA3X02qtQL" - ], - "is_domain_connection": false, - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true - } - }, - "status": 201, - "response": { - "id": "con_PDStfmy3MyTLMu1x", - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true - }, - "strategy": "google-oauth2", - "name": "google-oauth2", - "is_domain_connection": false, - "authentication": { - "active": true - }, - "connected_accounts": { - "active": false - }, - "enabled_clients": [ - "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", - "m0BppkTR5PJR9UBbJmhOcXQm8kUBi3mb" - ], - "realms": [ - "google-oauth2" - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/connections?take=1&name=google-oauth2&include_fields=true", - "body": "", - "status": 200, - "response": { - "connections": [ + }, { - "id": "con_PDStfmy3MyTLMu1x", + "id": "con_yGZ6rzfkdR6mMBoE", "options": { "email": true, "scope": [ @@ -4227,8 +4883,8 @@ "google-oauth2" ], "enabled_clients": [ - "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", - "m0BppkTR5PJR9UBbJmhOcXQm8kUBi3mb" + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", + "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz" ] } ] @@ -4236,17 +4892,105 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_yGZ6rzfkdR6mMBoE/clients?take=50", + "body": "", + "status": 200, + "response": { + "clients": [ + { + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + }, + { + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_yGZ6rzfkdR6mMBoE/clients?take=50", + "body": "", + "status": 200, + "response": { + "clients": [ + { + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + }, + { + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/connections/con_yGZ6rzfkdR6mMBoE", + "body": { + "enabled_clients": [ + "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + ], + "is_domain_connection": false, + "options": { + "email": true, + "scope": [ + "email", + "profile" + ], + "profile": true + } + }, + "status": 200, + "response": { + "id": "con_yGZ6rzfkdR6mMBoE", + "options": { + "email": true, + "scope": [ + "email", + "profile" + ], + "profile": true + }, + "strategy": "google-oauth2", + "name": "google-oauth2", + "is_domain_connection": false, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "enabled_clients": [ + "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + ], + "realms": [ + "google-oauth2" + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/connections/con_PDStfmy3MyTLMu1x/clients", + "path": "/api/v2/connections/con_yGZ6rzfkdR6mMBoE/clients", "body": [ { - "client_id": "m0BppkTR5PJR9UBbJmhOcXQm8kUBi3mb", + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", "status": true }, { - "client_id": "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", "status": true } ], @@ -4395,7 +5139,7 @@ "subject": "deprecated" } ], - "client_id": "y47mfVuNz3nzK4VbATlDhYsU6sBHfq8e", + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4440,7 +5184,7 @@ "subject": "deprecated" } ], - "client_id": "qXCqK884hJUOYPhMMkXuFaoIlkDlIqsS", + "client_id": "c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4494,7 +5238,7 @@ } ], "allowed_origins": [], - "client_id": "tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL", + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4540,7 +5284,7 @@ "subject": "deprecated" } ], - "client_id": "Ls1MLBy6XnrS6FICBpTgagxcvY6g4Ln9", + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4593,7 +5337,7 @@ "subject": "deprecated" } ], - "client_id": "m0BppkTR5PJR9UBbJmhOcXQm8kUBi3mb", + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4653,7 +5397,7 @@ "subject": "deprecated" } ], - "client_id": "1oQC5ORWSgXf4D3muXm0JFSFfyBp0svZ", + "client_id": "3fBUyX06CDDuksAP7TNZKYONbfYDLZMA", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -4672,111 +5416,387 @@ "web_origins": [ "http://localhost:3000" ], - "custom_login_page_on": true + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", + "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", + "mr|google-oauth2|112839029247827700155", + "mr|samlp|okta|ewan.harris@auth0.com" + ], + "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?take=50", + "body": "", + "status": 200, + "response": { + "client_grants": [ + { + "id": "cgr_JYmQHwQEXGDCc53P", + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", + "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" + ], + "subject_type": "client" }, { - "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, - "cross_origin_authentication": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", - "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" + "id": "cgr_ReJeayDzA8FTvFPY", + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", + "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" ], - "custom_login_page_on": true + "subject_type": "client" }, - { - "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", - "mr|google-oauth2|112839029247827700155", - "mr|samlp|okta|ewan.harris@auth0.com" - ], - "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?take=50", - "body": "", - "status": 200, - "response": { - "client_grants": [ { "id": "cgr_pbwejzhwoujrsNE8", "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", @@ -5019,11 +6039,9 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/client-grants", + "method": "PATCH", + "path": "/api/v2/client-grants/cgr_ReJeayDzA8FTvFPY", "body": { - "client_id": "y47mfVuNz3nzK4VbATlDhYsU6sBHfq8e", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", "create:client_grants", @@ -5157,10 +6175,10 @@ "delete:organization_invitations" ] }, - "status": 201, + "status": 200, "response": { - "id": "cgr_nQbSrZMUhw4DZL08", - "client_id": "y47mfVuNz3nzK4VbATlDhYsU6sBHfq8e", + "id": "cgr_ReJeayDzA8FTvFPY", + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -5301,11 +6319,9 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/client-grants", + "method": "PATCH", + "path": "/api/v2/client-grants/cgr_JYmQHwQEXGDCc53P", "body": { - "client_id": "Ls1MLBy6XnrS6FICBpTgagxcvY6g4Ln9", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", "create:client_grants", @@ -5439,10 +6455,10 @@ "delete:organization_invitations" ] }, - "status": 201, + "status": 200, "response": { - "id": "cgr_Wrw6xD2c9kmIaens", - "client_id": "Ls1MLBy6XnrS6FICBpTgagxcvY6g4Ln9", + "id": "cgr_JYmQHwQEXGDCc53P", + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -5588,7 +6604,43 @@ "body": "", "status": 200, "response": { - "roles": [], + "roles": [ + { + "id": "rol_EH7ASyHIXKqKPc4X", + "name": "Admin", + "description": "Can read and write things" + }, + { + "id": "rol_WHMW5tI8GYuTShEL", + "name": "Reader", + "description": "Can only read things" + }, + { + "id": "rol_dkoJYFPEbm4fBQUa", + "name": "read_only", + "description": "Read Only" + }, + { + "id": "rol_6mNIPtAC2wBSBD7S", + "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_EH7ASyHIXKqKPc4X/permissions?per_page=100&page=0&include_totals=true", + "body": "", + "status": 200, + "response": { + "permissions": [], "start": 0, "limit": 100, "total": 0 @@ -5598,49 +6650,120 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/roles", - "body": { - "name": "Reader", - "description": "Can only read things" + "method": "GET", + "path": "/api/v2/roles/rol_EH7ASyHIXKqKPc4X/permissions?per_page=100&page=0&include_totals=true", + "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_WHMW5tI8GYuTShEL/permissions?per_page=100&page=0&include_totals=true", + "body": "", "status": 200, "response": { - "id": "rol_RHscBFVFVGjF0XUF", - "name": "Reader", - "description": "Can only read things" + "permissions": [], + "start": 0, + "limit": 100, + "total": 0 }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/roles", - "body": { - "name": "read_only", - "description": "Read Only" + "method": "GET", + "path": "/api/v2/roles/rol_WHMW5tI8GYuTShEL/permissions?per_page=100&page=0&include_totals=true", + "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_dkoJYFPEbm4fBQUa/permissions?per_page=100&page=0&include_totals=true", + "body": "", "status": 200, "response": { - "id": "rol_kL3UG17fgNRrEKRx", - "name": "read_only", - "description": "Read Only" + "permissions": [], + "start": 0, + "limit": 100, + "total": 0 }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/roles", + "method": "GET", + "path": "/api/v2/roles/rol_dkoJYFPEbm4fBQUa/permissions?per_page=100&page=0&include_totals=true", + "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_6mNIPtAC2wBSBD7S/permissions?per_page=100&page=0&include_totals=true", + "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_6mNIPtAC2wBSBD7S/permissions?per_page=100&page=0&include_totals=true", + "body": "", + "status": 200, + "response": { + "permissions": [], + "start": 0, + "limit": 100, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/roles/rol_EH7ASyHIXKqKPc4X", "body": { "name": "Admin", "description": "Can read and write things" }, "status": 200, "response": { - "id": "rol_46SzzG1V7VRvdtq8", + "id": "rol_EH7ASyHIXKqKPc4X", "name": "Admin", "description": "Can read and write things" }, @@ -5649,15 +6772,49 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/roles", + "method": "PATCH", + "path": "/api/v2/roles/rol_WHMW5tI8GYuTShEL", + "body": { + "name": "Reader", + "description": "Can only read things" + }, + "status": 200, + "response": { + "id": "rol_WHMW5tI8GYuTShEL", + "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_dkoJYFPEbm4fBQUa", + "body": { + "name": "read_only", + "description": "Read Only" + }, + "status": 200, + "response": { + "id": "rol_dkoJYFPEbm4fBQUa", + "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_6mNIPtAC2wBSBD7S", "body": { "name": "read_osnly", "description": "Readz Only" }, "status": 200, "response": { - "id": "rol_zSgDEbLTgZ2JAGIy", + "id": "rol_6mNIPtAC2wBSBD7S", "name": "read_osnly", "description": "Readz Only" }, @@ -5693,7 +6850,7 @@ "okta" ], "created_at": "2024-11-26T11:58:18.962Z", - "updated_at": "2025-12-05T07:04:31.162Z", + "updated_at": "2025-12-09T12:31:31.782Z", "branding": { "colors": { "primary": "#19aecc" @@ -5769,7 +6926,7 @@ "okta" ], "created_at": "2024-11-26T11:58:18.962Z", - "updated_at": "2025-12-05T14:17:19.637Z", + "updated_at": "2025-12-09T12:35:22.470Z", "branding": { "colors": { "primary": "#19aecc" @@ -5782,25 +6939,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 @@ -5808,27 +6967,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 @@ -5840,7 +6997,24 @@ "body": "", "status": 200, "response": { - "organizations": [] + "organizations": [ + { + "id": "org_fIRF1it8cTOyf2yS", + "name": "org1", + "display_name": "Organization", + "branding": { + "colors": { + "page_background": "#fff5f5", + "primary": "#57ddff" + } + } + }, + { + "id": "org_hWOYWXtnxIpJ0MX3", + "name": "org2", + "display_name": "Organization2" + } + ] }, "rawHeaders": [], "responseIsBinary": false @@ -5948,7 +7122,7 @@ "subject": "deprecated" } ], - "client_id": "y47mfVuNz3nzK4VbATlDhYsU6sBHfq8e", + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -5993,7 +7167,7 @@ "subject": "deprecated" } ], - "client_id": "qXCqK884hJUOYPhMMkXuFaoIlkDlIqsS", + "client_id": "c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -6047,7 +7221,7 @@ } ], "allowed_origins": [], - "client_id": "tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL", + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -6093,7 +7267,7 @@ "subject": "deprecated" } ], - "client_id": "Ls1MLBy6XnrS6FICBpTgagxcvY6g4Ln9", + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -6146,7 +7320,7 @@ "subject": "deprecated" } ], - "client_id": "m0BppkTR5PJR9UBbJmhOcXQm8kUBi3mb", + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -6206,7 +7380,7 @@ "subject": "deprecated" } ], - "client_id": "1oQC5ORWSgXf4D3muXm0JFSFfyBp0svZ", + "client_id": "3fBUyX06CDDuksAP7TNZKYONbfYDLZMA", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -6264,7 +7438,7 @@ "subject": "deprecated" } ], - "client_id": "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -6322,6 +7496,174 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/enabled_connections?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "enabled_connections": [], + "start": 0, + "limit": 0, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/enabled_connections?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "enabled_connections": [], + "start": 0, + "limit": 0, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/client-grants?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "client_grants": [], + "start": 0, + "limit": 50, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/client-grants?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "client_grants": [], + "start": 0, + "limit": 50, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/discovery-domains?take=50", + "body": "", + "status": 200, + "response": { + "domains": [] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/discovery-domains?take=50", + "body": "", + "status": 200, + "response": { + "domains": [] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/enabled_connections?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "enabled_connections": [], + "start": 0, + "limit": 0, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/enabled_connections?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "enabled_connections": [], + "start": 0, + "limit": 0, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/client-grants?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "client_grants": [], + "start": 0, + "limit": 50, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/client-grants?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "client_grants": [], + "start": 0, + "limit": 50, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/discovery-domains?take=50", + "body": "", + "status": 200, + "response": { + "domains": [] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/discovery-domains?take=50", + "body": "", + "status": 200, + "response": { + "domains": [] + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -6331,7 +7673,7 @@ "response": { "connections": [ { - "id": "con_hZaTQt1ipndiAks3", + "id": "con_bBSD5AQUW0Q5aLuE", "options": { "mfa": { "active": true, @@ -6394,12 +7736,12 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", - "tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { - "id": "con_PDStfmy3MyTLMu1x", + "id": "con_yGZ6rzfkdR6mMBoE", "options": { "email": true, "scope": [ @@ -6421,8 +7763,8 @@ "google-oauth2" ], "enabled_clients": [ - "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", - "m0BppkTR5PJR9UBbJmhOcXQm8kUBi3mb" + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", + "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz" ] } ] @@ -6439,8 +7781,8 @@ "response": { "client_grants": [ { - "id": "cgr_Wrw6xD2c9kmIaens", - "client_id": "Ls1MLBy6XnrS6FICBpTgagxcvY6g4Ln9", + "id": "cgr_JYmQHwQEXGDCc53P", + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -6577,8 +7919,8 @@ "subject_type": "client" }, { - "id": "cgr_nQbSrZMUhw4DZL08", - "client_id": "y47mfVuNz3nzK4VbATlDhYsU6sBHfq8e", + "id": "cgr_ReJeayDzA8FTvFPY", + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -7057,7 +8399,7 @@ "subject": "deprecated" } ], - "client_id": "y47mfVuNz3nzK4VbATlDhYsU6sBHfq8e", + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7102,7 +8444,7 @@ "subject": "deprecated" } ], - "client_id": "qXCqK884hJUOYPhMMkXuFaoIlkDlIqsS", + "client_id": "c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7156,7 +8498,7 @@ } ], "allowed_origins": [], - "client_id": "tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL", + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7202,7 +8544,7 @@ "subject": "deprecated" } ], - "client_id": "Ls1MLBy6XnrS6FICBpTgagxcvY6g4Ln9", + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7255,7 +8597,7 @@ "subject": "deprecated" } ], - "client_id": "m0BppkTR5PJR9UBbJmhOcXQm8kUBi3mb", + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7315,7 +8657,7 @@ "subject": "deprecated" } ], - "client_id": "1oQC5ORWSgXf4D3muXm0JFSFfyBp0svZ", + "client_id": "3fBUyX06CDDuksAP7TNZKYONbfYDLZMA", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7373,7 +8715,7 @@ "subject": "deprecated" } ], - "client_id": "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7433,15 +8775,14 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/organizations", + "method": "PATCH", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3", "body": { - "name": "org2", "display_name": "Organization2" }, - "status": 201, + "status": 200, "response": { - "id": "org_xFaZ9p68B4spMsY4", + "id": "org_hWOYWXtnxIpJ0MX3", "display_name": "Organization2", "name": "org2" }, @@ -7450,10 +8791,9 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/organizations", + "method": "PATCH", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS", "body": { - "name": "org1", "branding": { "colors": { "page_background": "#fff5f5", @@ -7462,17 +8802,17 @@ }, "display_name": "Organization" }, - "status": 201, + "status": 200, "response": { - "id": "org_QEYnCDUsFcZBfoaS", - "display_name": "Organization", - "name": "org1", "branding": { "colors": { "page_background": "#fff5f5", "primary": "#57ddff" } - } + }, + "id": "org_fIRF1it8cTOyf2yS", + "display_name": "Organization", + "name": "org1" }, "rawHeaders": [], "responseIsBinary": false @@ -7483,25 +8823,86 @@ "path": "/api/v2/log-streams", "body": "", "status": 200, - "response": [], + "response": [ + { + "id": "lst_0000000000025431", + "name": "Suspended DD Log Stream", + "type": "datadog", + "status": "active", + "sink": { + "datadogApiKey": "some-sensitive-api-key", + "datadogRegion": "us" + }, + "isPriority": false + }, + { + "id": "lst_0000000000025432", + "name": "Amazon EventBridge", + "type": "eventbridge", + "status": "active", + "sink": { + "awsAccountId": "123456789012", + "awsRegion": "us-east-2", + "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-84b807b2-8a87-4d4b-87eb-ff1b56370b3a/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": "POST", - "path": "/api/v2/log-streams", + "method": "PATCH", + "path": "/api/v2/log-streams/lst_0000000000025431", "body": { "name": "Suspended DD Log Stream", "sink": { "datadogApiKey": "some-sensitive-api-key", "datadogRegion": "us" - }, - "type": "datadog" + } }, "status": 200, "response": { - "id": "lst_0000000000025429", + "id": "lst_0000000000025431", "name": "Suspended DD Log Stream", "type": "datadog", "status": "active", @@ -7516,8 +8917,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/log-streams", + "method": "PATCH", + "path": "/api/v2/log-streams/lst_0000000000025432", "body": { "name": "Amazon EventBridge", "filters": [ @@ -7558,22 +8959,18 @@ "name": "auth.token_exchange.fail" } ], - "sink": { - "awsAccountId": "123456789012", - "awsRegion": "us-east-2" - }, - "type": "eventbridge" + "status": "active" }, "status": 200, "response": { - "id": "lst_0000000000025430", + "id": "lst_0000000000025432", "name": "Amazon EventBridge", "type": "eventbridge", "status": "active", "sink": { "awsAccountId": "123456789012", "awsRegion": "us-east-2", - "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-5c0e180e-b406-4da2-92eb-a6fa8507a291/auth0.logs" + "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-84b807b2-8a87-4d4b-87eb-ff1b56370b3a/auth0.logs" }, "filters": [ { @@ -7664,7 +9061,7 @@ "name": "Blank-form", "flow_count": 0, "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T09:38:30.169Z" + "updated_at": "2025-12-09T12:31:42.735Z" } ] }, @@ -7735,7 +9132,7 @@ } }, "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T09:38:30.169Z" + "updated_at": "2025-12-09T12:31:42.735Z" }, "rawHeaders": [], "responseIsBinary": false @@ -7860,7 +9257,7 @@ } }, "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T14:17:26.192Z" + "updated_at": "2025-12-09T12:35:32.845Z" }, "rawHeaders": [], "responseIsBinary": false @@ -9080,7 +10477,7 @@ "subject": "deprecated" } ], - "client_id": "y47mfVuNz3nzK4VbATlDhYsU6sBHfq8e", + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9125,7 +10522,7 @@ "subject": "deprecated" } ], - "client_id": "qXCqK884hJUOYPhMMkXuFaoIlkDlIqsS", + "client_id": "c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9179,7 +10576,7 @@ } ], "allowed_origins": [], - "client_id": "tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL", + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9225,7 +10622,7 @@ "subject": "deprecated" } ], - "client_id": "Ls1MLBy6XnrS6FICBpTgagxcvY6g4Ln9", + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9278,7 +10675,7 @@ "subject": "deprecated" } ], - "client_id": "m0BppkTR5PJR9UBbJmhOcXQm8kUBi3mb", + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9338,7 +10735,7 @@ "subject": "deprecated" } ], - "client_id": "1oQC5ORWSgXf4D3muXm0JFSFfyBp0svZ", + "client_id": "3fBUyX06CDDuksAP7TNZKYONbfYDLZMA", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9396,7 +10793,7 @@ "subject": "deprecated" } ], - "client_id": "GRROzy1MZCZ9d84osY58JfLA3X02qtQL", + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9420,7 +10817,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/y47mfVuNz3nzK4VbATlDhYsU6sBHfq8e", + "path": "/api/v2/clients/feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", "body": "", "status": 204, "response": "", @@ -9430,7 +10827,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/tALNSCcv1RtuaFJdwZkpj8WW7Ai2wGwL", + "path": "/api/v2/clients/xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", "body": "", "status": 204, "response": "", @@ -9440,7 +10837,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/qXCqK884hJUOYPhMMkXuFaoIlkDlIqsS", + "path": "/api/v2/clients/c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", "body": "", "status": 204, "response": "", @@ -9450,7 +10847,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/Ls1MLBy6XnrS6FICBpTgagxcvY6g4Ln9", + "path": "/api/v2/clients/3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", "body": "", "status": 204, "response": "", @@ -9460,7 +10857,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/m0BppkTR5PJR9UBbJmhOcXQm8kUBi3mb", + "path": "/api/v2/clients/ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", "body": "", "status": 204, "response": "", @@ -9470,7 +10867,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/1oQC5ORWSgXf4D3muXm0JFSFfyBp0svZ", + "path": "/api/v2/clients/3fBUyX06CDDuksAP7TNZKYONbfYDLZMA", "body": "", "status": 204, "response": "", @@ -9480,7 +10877,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/clients/GRROzy1MZCZ9d84osY58JfLA3X02qtQL", + "path": "/api/v2/clients/XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", "body": "", "status": 204, "response": "", @@ -9551,7 +10948,7 @@ "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "client_id": "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -9601,7 +10998,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/webauthn-platform", + "path": "/api/v2/guardian/factors/otp", "body": { "enabled": false }, @@ -9615,7 +11012,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 }, @@ -9629,7 +11026,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 }, @@ -9643,7 +11040,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/recovery-code", + "path": "/api/v2/guardian/factors/sms", "body": { "enabled": false }, @@ -9671,7 +11068,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/sms", + "path": "/api/v2/guardian/factors/webauthn-roaming", "body": { "enabled": false }, @@ -9744,7 +11141,7 @@ "response": { "actions": [ { - "id": "0c33a5ff-8c26-44e6-9c95-78b980a40e12", + "id": "4273221d-f20e-44e6-aa9d-d45702782e4e", "name": "My Custom Action", "supported_triggers": [ { @@ -9752,34 +11149,34 @@ "version": "v2" } ], - "created_at": "2025-12-05T14:17:01.355911147Z", - "updated_at": "2025-12-05T14:17:01.372519072Z", + "created_at": "2025-12-05T14:18:53.100690661Z", + "updated_at": "2025-12-09T12:35:06.967806400Z", "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": "node18", "status": "built", "secrets": [], "current_version": { - "id": "7449cbf1-56ef-45a8-88fb-76e3da65a88c", + "id": "180cfbad-155a-407a-94b3-cf0dfab34726", "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": "node18", "status": "BUILT", - "number": 1, - "build_time": "2025-12-05T14:17:02.387240600Z", - "created_at": "2025-12-05T14:17:02.267752368Z", - "updated_at": "2025-12-05T14:17:02.389468426Z" + "number": 8, + "build_time": "2025-12-09T12:35:07.834791992Z", + "created_at": "2025-12-09T12:35:07.753860417Z", + "updated_at": "2025-12-09T12:35:07.836162168Z" }, "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": "7449cbf1-56ef-45a8-88fb-76e3da65a88c", + "id": "180cfbad-155a-407a-94b3-cf0dfab34726", "deployed": true, - "number": 1, - "built_at": "2025-12-05T14:17:02.387240600Z", + "number": 8, + "built_at": "2025-12-09T12:35:07.834791992Z", "secrets": [], "status": "built", - "created_at": "2025-12-05T14:17:02.267752368Z", - "updated_at": "2025-12-05T14:17:02.389468426Z", + "created_at": "2025-12-09T12:35:07.753860417Z", + "updated_at": "2025-12-09T12:35:07.836162168Z", "runtime": "node18", "supported_triggers": [ { @@ -9800,7 +11197,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/actions/actions/0c33a5ff-8c26-44e6-9c95-78b980a40e12?force=true", + "path": "/api/v2/actions/actions/4273221d-f20e-44e6-aa9d-d45702782e4e?force=true", "body": "", "status": 204, "response": "", @@ -9810,40 +11207,12 @@ { "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": "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": [] - }, - "pre-change-password": { - "shields": [] - } - } + "path": "/api/v2/actions/actions?page=0&per_page=100", + "body": "", + "status": 200, + "response": { + "actions": [], + "per_page": 100 }, "rawHeaders": [], "responseIsBinary": false @@ -9892,6 +11261,34 @@ "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": [] + }, + "pre-change-password": { + "shields": [] + } + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", @@ -10013,7 +11410,7 @@ "subject": "deprecated" } ], - "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "client_id": "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -10080,7 +11477,7 @@ "response": { "connections": [ { - "id": "con_hZaTQt1ipndiAks3", + "id": "con_bBSD5AQUW0Q5aLuE", "options": { "mfa": { "active": true, @@ -10158,7 +11555,7 @@ "response": { "connections": [ { - "id": "con_hZaTQt1ipndiAks3", + "id": "con_bBSD5AQUW0Q5aLuE", "options": { "mfa": { "active": true, @@ -10230,7 +11627,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_hZaTQt1ipndiAks3/clients?take=50", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE/clients?take=50", "body": "", "status": 200, "response": { @@ -10242,7 +11639,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_hZaTQt1ipndiAks3/clients?take=50", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE/clients?take=50", "body": "", "status": 200, "response": { @@ -10254,11 +11651,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/connections/con_hZaTQt1ipndiAks3", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE", "body": "", "status": 202, "response": { - "deleted_at": "2025-12-05T14:17:40.094Z" + "deleted_at": "2025-12-09T12:35:45.505Z" }, "rawHeaders": [], "responseIsBinary": false @@ -10272,7 +11669,7 @@ "strategy": "auth0", "enabled_clients": [ "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5" ], "is_domain_connection": false, "options": { @@ -10290,7 +11687,7 @@ }, "status": 201, "response": { - "id": "con_CfDqv7jPXpFqETeK", + "id": "con_hKLY3IvYo1iFcMHg", "options": { "mfa": { "active": true, @@ -10324,7 +11721,7 @@ "active": false }, "enabled_clients": [ - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ], "realms": [ @@ -10343,7 +11740,7 @@ "response": { "connections": [ { - "id": "con_CfDqv7jPXpFqETeK", + "id": "con_hKLY3IvYo1iFcMHg", "options": { "mfa": { "active": true, @@ -10380,7 +11777,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -10392,14 +11789,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/connections/con_CfDqv7jPXpFqETeK/clients", + "path": "/api/v2/connections/con_hKLY3IvYo1iFcMHg/clients", "body": [ { "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", "status": true }, { - "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "client_id": "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "status": true } ], @@ -10501,7 +11898,7 @@ "subject": "deprecated" } ], - "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "client_id": "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -10568,7 +11965,7 @@ "response": { "connections": [ { - "id": "con_PDStfmy3MyTLMu1x", + "id": "con_yGZ6rzfkdR6mMBoE", "options": { "email": true, "scope": [ @@ -10592,7 +11989,7 @@ "enabled_clients": [] }, { - "id": "con_CfDqv7jPXpFqETeK", + "id": "con_hKLY3IvYo1iFcMHg", "options": { "mfa": { "active": true, @@ -10629,7 +12026,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -10647,7 +12044,7 @@ "response": { "connections": [ { - "id": "con_PDStfmy3MyTLMu1x", + "id": "con_yGZ6rzfkdR6mMBoE", "options": { "email": true, "scope": [ @@ -10671,7 +12068,7 @@ "enabled_clients": [] }, { - "id": "con_CfDqv7jPXpFqETeK", + "id": "con_hKLY3IvYo1iFcMHg", "options": { "mfa": { "active": true, @@ -10708,7 +12105,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -10720,7 +12117,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_PDStfmy3MyTLMu1x/clients?take=50", + "path": "/api/v2/connections/con_yGZ6rzfkdR6mMBoE/clients?take=50", "body": "", "status": 200, "response": { @@ -10732,7 +12129,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_PDStfmy3MyTLMu1x/clients?take=50", + "path": "/api/v2/connections/con_yGZ6rzfkdR6mMBoE/clients?take=50", "body": "", "status": 200, "response": { @@ -10744,11 +12141,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/connections/con_PDStfmy3MyTLMu1x", + "path": "/api/v2/connections/con_yGZ6rzfkdR6mMBoE", "body": "", "status": 202, "response": { - "deleted_at": "2025-12-05T14:17:45.941Z" + "deleted_at": "2025-12-09T12:35:51.306Z" }, "rawHeaders": [], "responseIsBinary": false @@ -10880,7 +12277,7 @@ "subject": "deprecated" } ], - "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "client_id": "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -11195,22 +12592,22 @@ "response": { "roles": [ { - "id": "rol_46SzzG1V7VRvdtq8", + "id": "rol_EH7ASyHIXKqKPc4X", "name": "Admin", "description": "Can read and write things" }, { - "id": "rol_RHscBFVFVGjF0XUF", + "id": "rol_WHMW5tI8GYuTShEL", "name": "Reader", "description": "Can only read things" }, { - "id": "rol_kL3UG17fgNRrEKRx", + "id": "rol_dkoJYFPEbm4fBQUa", "name": "read_only", "description": "Read Only" }, { - "id": "rol_zSgDEbLTgZ2JAGIy", + "id": "rol_6mNIPtAC2wBSBD7S", "name": "read_osnly", "description": "Readz Only" } @@ -11225,7 +12622,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_46SzzG1V7VRvdtq8/permissions?per_page=100&page=0&include_totals=true", + "path": "/api/v2/roles/rol_EH7ASyHIXKqKPc4X/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11240,7 +12637,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_46SzzG1V7VRvdtq8/permissions?per_page=100&page=0&include_totals=true", + "path": "/api/v2/roles/rol_EH7ASyHIXKqKPc4X/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11255,7 +12652,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_RHscBFVFVGjF0XUF/permissions?per_page=100&page=0&include_totals=true", + "path": "/api/v2/roles/rol_WHMW5tI8GYuTShEL/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11270,7 +12667,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_RHscBFVFVGjF0XUF/permissions?per_page=100&page=0&include_totals=true", + "path": "/api/v2/roles/rol_WHMW5tI8GYuTShEL/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11285,7 +12682,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_kL3UG17fgNRrEKRx/permissions?per_page=100&page=0&include_totals=true", + "path": "/api/v2/roles/rol_dkoJYFPEbm4fBQUa/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11300,7 +12697,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_kL3UG17fgNRrEKRx/permissions?per_page=100&page=0&include_totals=true", + "path": "/api/v2/roles/rol_dkoJYFPEbm4fBQUa/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11315,7 +12712,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_zSgDEbLTgZ2JAGIy/permissions?per_page=100&page=0&include_totals=true", + "path": "/api/v2/roles/rol_6mNIPtAC2wBSBD7S/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11330,7 +12727,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles/rol_zSgDEbLTgZ2JAGIy/permissions?per_page=100&page=0&include_totals=true", + "path": "/api/v2/roles/rol_6mNIPtAC2wBSBD7S/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { @@ -11345,7 +12742,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/roles/rol_46SzzG1V7VRvdtq8", + "path": "/api/v2/roles/rol_EH7ASyHIXKqKPc4X", "body": "", "status": 200, "response": {}, @@ -11355,7 +12752,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/roles/rol_RHscBFVFVGjF0XUF", + "path": "/api/v2/roles/rol_dkoJYFPEbm4fBQUa", "body": "", "status": 200, "response": {}, @@ -11365,7 +12762,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/roles/rol_kL3UG17fgNRrEKRx", + "path": "/api/v2/roles/rol_WHMW5tI8GYuTShEL", "body": "", "status": 200, "response": {}, @@ -11375,7 +12772,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/roles/rol_zSgDEbLTgZ2JAGIy", + "path": "/api/v2/roles/rol_6mNIPtAC2wBSBD7S", "body": "", "status": 200, "response": {}, @@ -11391,12 +12788,7 @@ "response": { "organizations": [ { - "id": "org_xFaZ9p68B4spMsY4", - "name": "org2", - "display_name": "Organization2" - }, - { - "id": "org_QEYnCDUsFcZBfoaS", + "id": "org_fIRF1it8cTOyf2yS", "name": "org1", "display_name": "Organization", "branding": { @@ -11405,6 +12797,11 @@ "primary": "#57ddff" } } + }, + { + "id": "org_hWOYWXtnxIpJ0MX3", + "name": "org2", + "display_name": "Organization2" } ] }, @@ -11504,7 +12901,7 @@ "subject": "deprecated" } ], - "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "client_id": "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -11565,7 +12962,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_xFaZ9p68B4spMsY4/enabled_connections?page=0&per_page=50&include_totals=true", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/enabled_connections?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { @@ -11580,7 +12977,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_xFaZ9p68B4spMsY4/enabled_connections?page=0&per_page=50&include_totals=true", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/enabled_connections?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { @@ -11595,7 +12992,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_xFaZ9p68B4spMsY4/client-grants?page=0&per_page=50&include_totals=true", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/client-grants?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { @@ -11610,7 +13007,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_xFaZ9p68B4spMsY4/client-grants?page=0&per_page=50&include_totals=true", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/client-grants?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { @@ -11625,7 +13022,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_xFaZ9p68B4spMsY4/discovery-domains?take=50", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/discovery-domains?take=50", "body": "", "status": 200, "response": { @@ -11637,7 +13034,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_xFaZ9p68B4spMsY4/discovery-domains?take=50", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/discovery-domains?take=50", "body": "", "status": 200, "response": { @@ -11649,7 +13046,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_QEYnCDUsFcZBfoaS/enabled_connections?page=0&per_page=50&include_totals=true", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/enabled_connections?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { @@ -11664,7 +13061,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_QEYnCDUsFcZBfoaS/enabled_connections?page=0&per_page=50&include_totals=true", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/enabled_connections?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { @@ -11679,7 +13076,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_QEYnCDUsFcZBfoaS/client-grants?page=0&per_page=50&include_totals=true", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/client-grants?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { @@ -11694,7 +13091,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_QEYnCDUsFcZBfoaS/client-grants?page=0&per_page=50&include_totals=true", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/client-grants?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { @@ -11709,7 +13106,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_QEYnCDUsFcZBfoaS/discovery-domains?take=50", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/discovery-domains?take=50", "body": "", "status": 200, "response": { @@ -11721,7 +13118,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations/org_QEYnCDUsFcZBfoaS/discovery-domains?take=50", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/discovery-domains?take=50", "body": "", "status": 200, "response": { @@ -11739,7 +13136,7 @@ "response": { "connections": [ { - "id": "con_CfDqv7jPXpFqETeK", + "id": "con_hKLY3IvYo1iFcMHg", "options": { "mfa": { "active": true, @@ -11776,7 +13173,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -12126,7 +13523,7 @@ "subject": "deprecated" } ], - "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "client_id": "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -12187,7 +13584,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/organizations/org_QEYnCDUsFcZBfoaS", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS", "body": "", "status": 204, "response": "", @@ -12197,7 +13594,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/organizations/org_xFaZ9p68B4spMsY4", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3", "body": "", "status": 204, "response": "", @@ -12212,7 +13609,7 @@ "status": 200, "response": [ { - "id": "lst_0000000000025429", + "id": "lst_0000000000025431", "name": "Suspended DD Log Stream", "type": "datadog", "status": "active", @@ -12223,14 +13620,14 @@ "isPriority": false }, { - "id": "lst_0000000000025430", + "id": "lst_0000000000025432", "name": "Amazon EventBridge", "type": "eventbridge", "status": "active", "sink": { "awsAccountId": "123456789012", "awsRegion": "us-east-2", - "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-5c0e180e-b406-4da2-92eb-a6fa8507a291/auth0.logs" + "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-84b807b2-8a87-4d4b-87eb-ff1b56370b3a/auth0.logs" }, "filters": [ { @@ -12279,7 +13676,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/log-streams/lst_0000000000025429", + "path": "/api/v2/log-streams/lst_0000000000025431", "body": "", "status": 204, "response": "", @@ -12289,7 +13686,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "DELETE", - "path": "/api/v2/log-streams/lst_0000000000025430", + "path": "/api/v2/log-streams/lst_0000000000025432", "body": "", "status": 204, "response": "", @@ -13581,7 +14978,7 @@ "subject": "deprecated" } ], - "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "client_id": "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -13611,7 +15008,7 @@ "response": { "connections": [ { - "id": "con_CfDqv7jPXpFqETeK", + "id": "con_hKLY3IvYo1iFcMHg", "options": { "mfa": { "active": true, @@ -13648,7 +15045,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -13660,13 +15057,13 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_CfDqv7jPXpFqETeK/clients?take=50", + "path": "/api/v2/connections/con_hKLY3IvYo1iFcMHg/clients?take=50", "body": "", "status": 200, "response": { "clients": [ { - "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "client_id": "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5" }, { "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" @@ -13679,13 +15076,13 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_CfDqv7jPXpFqETeK/clients?take=50", + "path": "/api/v2/connections/con_hKLY3IvYo1iFcMHg/clients?take=50", "body": "", "status": 200, "response": { "clients": [ { - "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "client_id": "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5" }, { "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" @@ -13704,7 +15101,7 @@ "response": { "connections": [ { - "id": "con_CfDqv7jPXpFqETeK", + "id": "con_hKLY3IvYo1iFcMHg", "options": { "mfa": { "active": true, @@ -13741,7 +15138,7 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } @@ -13873,7 +15270,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": { @@ -13907,7 +15304,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": { @@ -13922,7 +15319,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": { @@ -13967,7 +15364,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": { @@ -13997,7 +15394,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/async_approval", "body": "", "status": 404, "response": { @@ -14012,7 +15409,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/async_approval", + "path": "/api/v2/email-templates/reset_email_by_code", "body": "", "status": 404, "response": { @@ -14027,7 +15424,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/reset_email_by_code", + "path": "/api/v2/email-templates/user_invitation", "body": "", "status": 404, "response": { @@ -14341,7 +15738,7 @@ { "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": {}, @@ -14351,7 +15748,7 @@ { "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": {}, @@ -14453,7 +15850,101 @@ "body": "", "status": 200, "response": { - "providers": [] + "providers": [ + { + "id": "pro_mY3L5BP6iVUUzpv22opofm", + "tenant": "auth0-deploy-cli-e2e", + "name": "custom", + "channel": "phone", + "disabled": false, + "configuration": { + "delivery_methods": [ + "text" + ] + }, + "credentials": null, + "created_at": "2025-12-09T12:24:00.604Z", + "updated_at": "2025-12-09T12:30:28.218Z" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/branding/phone/templates", + "body": "", + "status": 200, + "response": { + "templates": [ + { + "id": "tem_dL83uTmWn8moGzm8UgAk4Q", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "blocked_account", + "disabled": false, + "created_at": "2025-12-09T12:22:47.683Z", + "updated_at": "2025-12-09T12:30:30.019Z", + "content": { + "syntax": "liquid", + "body": { + "text": "We detected suspicious activity on your account from the ip {{user.source_ip}}{% if user.city %} from {{user.city}}, {{user.country}}{% elsif user.country %} from {{user.country}}{% endif %}. Logins from this IP have been blocked on your account. If this is your IP, please reset your password to unblock your account. Otherwise, disregard this message.", + "voice": "We detected suspicious activity on your account from the ip {{user.source_ip}}{% if user.city %} from {{user.city}}, {{user.country}}{% elsif user.country %} from {{user.country}}{% endif %}. Logins from this IP have been blocked on your account. If this is your IP, please reset your password to unblock your account. Otherwise, disregard this message." + }, + "from": "0032232323" + } + }, + { + "id": "tem_xqbUSF83fpnRv8r8rqXFDZ", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "change_password", + "disabled": false, + "created_at": "2025-12-09T12:26:20.243Z", + "updated_at": "2025-12-09T12:30:30.034Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your password change code for {{ friendly_name | escape }}", + "voice": "Hello. Your password change code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your password change code is {{ pause }} {{ code | escape }}" + } + } + }, + { + "id": "tem_qarYST5TTE5pbMNB5NHZAj", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "otp_enroll", + "disabled": false, + "created_at": "2025-12-09T12:26:25.327Z", + "updated_at": "2025-12-09T12:30:30.174Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your verification code for {{ friendly_name | escape }}. Please enter this code to verify your enrollment.", + "voice": "Hello. Your verification code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your verification code is {{ pause }} {{ code | escape }}" + } + } + }, + { + "id": "tem_o4LBTt4NQyX8K4vC9dPafR", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "otp_verify", + "disabled": false, + "created_at": "2025-12-09T12:26:30.547Z", + "updated_at": "2025-12-09T12:30:30.365Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your verification code for {{ friendly_name | escape }}", + "voice": "Hello. Your verification code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your verification code is {{ pause }} {{ code | escape }}" + } + } + } + ] }, "rawHeaders": [], "responseIsBinary": false @@ -14556,7 +16047,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": {}, @@ -14566,7 +16057,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": {}, @@ -14786,7 +16277,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": {}, @@ -14796,7 +16287,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": {}, @@ -14816,7 +16307,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/email-verification/custom-text/en", + "path": "/api/v2/prompts/email-otp-challenge/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14826,7 +16317,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/email-otp-challenge/custom-text/en", + "path": "/api/v2/prompts/email-verification/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14876,7 +16367,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/brute-force-protection/custom-text/en", + "path": "/api/v2/prompts/passkeys/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14886,7 +16377,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/passkeys/custom-text/en", + "path": "/api/v2/prompts/brute-force-protection/custom-text/en", "body": "", "status": 200, "response": {}, @@ -14896,7 +16387,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login/partials", + "path": "/api/v2/prompts/login-password/partials", "body": "", "status": 200, "response": {}, @@ -14906,7 +16397,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": {}, @@ -14984,12 +16475,23 @@ "status": 200, "response": { "triggers": [ + { + "id": "post-login", + "version": "v2", + "status": "DEPRECATED", + "runtimes": [ + "node12", + "node18" + ], + "default_runtime": "node16", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, { "id": "post-login", "version": "v3", "status": "CURRENT", "runtimes": [ - "node12", "node18-actions", "node22" ], @@ -15003,21 +16505,23 @@ ] }, { - "id": "post-login", + "id": "credentials-exchange", "version": "v2", - "status": "DEPRECATED", + "status": "CURRENT", "runtimes": [ - "node18" + "node18-actions", + "node22" ], - "default_runtime": "node16", + "default_runtime": "node22", "binding_policy": "trigger-bound", "compatible_triggers": [] }, { - "id": "credentials-exchange", + "id": "pre-user-registration", "version": "v2", "status": "CURRENT", "runtimes": [ + "node12", "node18-actions", "node22" ], @@ -15026,7 +16530,7 @@ "compatible_triggers": [] }, { - "id": "pre-user-registration", + "id": "post-user-registration", "version": "v1", "status": "DEPRECATED", "runtimes": [ @@ -15036,24 +16540,11 @@ "binding_policy": "trigger-bound", "compatible_triggers": [] }, - { - "id": "pre-user-registration", - "version": "v2", - "status": "CURRENT", - "runtimes": [ - "node18-actions", - "node22" - ], - "default_runtime": "node22", - "binding_policy": "trigger-bound", - "compatible_triggers": [] - }, { "id": "post-user-registration", "version": "v2", "status": "CURRENT", "runtimes": [ - "node12", "node18-actions", "node22" ], @@ -15066,6 +16557,7 @@ "version": "v2", "status": "CURRENT", "runtimes": [ + "node12", "node18-actions", "node22" ], @@ -15073,22 +16565,12 @@ "binding_policy": "trigger-bound", "compatible_triggers": [] }, - { - "id": "send-phone-message", - "version": "v1", - "status": "DEPRECATED", - "runtimes": [ - "node12" - ], - "default_runtime": "node12", - "binding_policy": "trigger-bound", - "compatible_triggers": [] - }, { "id": "send-phone-message", "version": "v2", "status": "CURRENT", "runtimes": [ + "node12", "node18-actions", "node22" ], @@ -15433,7 +16915,7 @@ "subject": "deprecated" } ], - "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "client_id": "Nk9n91Nc6Ae8Vldm7gCHHqs7oSnUcwT5", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -15560,6 +17042,23 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/attack-protection/bot-detection", + "body": "", + "status": 200, + "response": { + "challenge_password_policy": "never", + "challenge_passwordless_policy": "never", + "challenge_password_reset_policy": "never", + "allowlist": [], + "bot_detection_level": "medium", + "monitoring_mode_enabled": false + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -15595,23 +17094,6 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/attack-protection/bot-detection", - "body": "", - "status": 200, - "response": { - "challenge_password_policy": "never", - "challenge_passwordless_policy": "never", - "challenge_password_reset_policy": "never", - "allowlist": [], - "bot_detection_level": "medium", - "monitoring_mode_enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -15650,14 +17132,22 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/flows?page=0&per_page=100&include_totals=true", + "path": "/api/v2/forms?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { "limit": 100, "start": 0, - "total": 0, - "flows": [] + "total": 1, + "forms": [ + { + "id": "ap_6JUSCU7qq1CravnoU6d6jr", + "name": "Blank-form", + "flow_count": 0, + "created_at": "2024-11-26T11:58:18.187Z", + "updated_at": "2025-12-09T12:35:32.845Z" + } + ] }, "rawHeaders": [], "responseIsBinary": false @@ -15665,22 +17155,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/forms?page=0&per_page=100&include_totals=true", + "path": "/api/v2/flows?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { "limit": 100, "start": 0, - "total": 1, - "forms": [ - { - "id": "ap_6JUSCU7qq1CravnoU6d6jr", - "name": "Blank-form", - "flow_count": 0, - "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T14:17:26.192Z" - } - ] + "total": 0, + "flows": [] }, "rawHeaders": [], "responseIsBinary": false @@ -15749,7 +17231,7 @@ } }, "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T14:17:26.192Z" + "updated_at": "2025-12-09T12:35:32.845Z" }, "rawHeaders": [], "responseIsBinary": false @@ -15757,14 +17239,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/flows/vault/connections?page=0&per_page=50&include_totals=true", + "path": "/api/v2/flows?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "limit": 50, + "limit": 100, "start": 0, "total": 0, - "connections": [] + "flows": [] }, "rawHeaders": [], "responseIsBinary": false @@ -15772,14 +17254,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/flows?page=0&per_page=100&include_totals=true", + "path": "/api/v2/flows/vault/connections?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { - "limit": 100, + "limit": 50, "start": 0, "total": 0, - "flows": [] + "connections": [] }, "rawHeaders": [], "responseIsBinary": false @@ -15858,7 +17340,7 @@ "okta" ], "created_at": "2024-11-26T11:58:18.962Z", - "updated_at": "2025-12-05T14:17:19.637Z", + "updated_at": "2025-12-09T12:35:22.470Z", "branding": { "colors": { "primary": "#19aecc" @@ -15910,7 +17392,7 @@ } }, "created_at": "2025-09-09T04:41:43.671Z", - "updated_at": "2025-12-05T14:17:03.449Z", + "updated_at": "2025-12-09T12:35:08.930Z", "id": "acl_wpZ6oScRU5L6QKAxMUMHmx" } ] 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 ab0cd0cb7..10e45b352 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 @@ -1201,7 +1201,7 @@ "body": "", "status": 200, "response": { - "total": 2, + "total": 9, "start": 0, "limit": 100, "clients": [ @@ -1302,183 +1302,463 @@ "client_credentials" ], "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 }, - "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 + { + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", + "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 }, - "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": false, - "encrypted": true, - "signing_keys": [ { - "cert": "[REDACTED]", - "key": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" - } - ], - "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", - "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": "POST", - "path": "/api/v2/clients", - "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, - "secret_encoded": 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": "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, - "cross_origin_authentication": 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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", + "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": "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "allowed_origins": [], + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "3fBUyX06CDDuksAP7TNZKYONbfYDLZMA", + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", + "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/feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", + "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, + "cross_origin_authentication": false, + "signing_keys": [ { "cert": "[REDACTED]", - "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1486,6 +1766,7 @@ "lifetime_in_seconds": 36000, "secret_encoded": false }, + "client_aliases": [], "token_endpoint_auth_method": "client_secret_post", "app_type": "non_interactive", "grant_types": [ @@ -1498,8 +1779,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/clients", + "method": "PATCH", + "path": "/api/v2/clients/xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", "body": { "name": "Node App", "allowed_clients": [], @@ -1521,8 +1802,7 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "lifetime_in_seconds": 36000 }, "native_social_login": { "apple": { @@ -1546,7 +1826,7 @@ "token_endpoint_auth_method": "client_secret_post", "web_origins": [] }, - "status": 201, + "status": 200, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, @@ -1578,11 +1858,9 @@ }, "sso_disabled": false, "cross_origin_authentication": false, - "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", - "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } @@ -1613,11 +1891,14 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/clients", + "method": "PATCH", + "path": "/api/v2/clients/c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", "body": { - "name": "Terraform Provider", + "name": "Quickstarts API (Test Application)", "app_type": "non_interactive", + "client_metadata": { + "foo": "bar" + }, "cross_origin_auth": false, "custom_login_page_on": true, "grant_types": [ @@ -1625,11 +1906,89 @@ ], "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": "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" + } + ], + "client_id": "c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", + "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/3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", + "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", @@ -1643,7 +2002,7 @@ "sso_disabled": false, "token_endpoint_auth_method": "client_secret_post" }, - "status": 201, + "status": 200, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, @@ -1663,11 +2022,9 @@ }, "sso_disabled": false, "cross_origin_authentication": false, - "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", - "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } @@ -1692,8 +2049,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/clients", + "method": "PATCH", + "path": "/api/v2/clients/ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", "body": { "name": "The Default App", "allowed_clients": [], @@ -1712,8 +2069,7 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "lifetime_in_seconds": 36000 }, "native_social_login": { "apple": { @@ -1737,7 +2093,7 @@ "sso_disabled": false, "token_endpoint_auth_method": "client_secret_post" }, - "status": 201, + "status": 200, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, @@ -1769,11 +2125,9 @@ "sso": false, "sso_disabled": false, "cross_origin_authentication": false, - "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", - "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } @@ -1801,8 +2155,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/clients", + "method": "PATCH", + "path": "/api/v2/clients/3fBUyX06CDDuksAP7TNZKYONbfYDLZMA", "body": { "name": "Test SPA", "allowed_clients": [], @@ -1826,8 +2180,7 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "lifetime_in_seconds": 36000 }, "native_social_login": { "apple": { @@ -1853,7 +2206,7 @@ "http://localhost:3000" ] }, - "status": 201, + "status": 200, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, @@ -1889,11 +2242,9 @@ }, "sso_disabled": false, "cross_origin_authentication": false, - "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", - "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } @@ -1924,8 +2275,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/clients", + "method": "PATCH", + "path": "/api/v2/clients/XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", "body": { "name": "auth0-deploy-cli-extension", "allowed_clients": [], @@ -1942,8 +2293,7 @@ "is_token_endpoint_ip_header_trusted": false, "jwt_configuration": { "alg": "RS256", - "lifetime_in_seconds": 36000, - "secret_encoded": false + "lifetime_in_seconds": 36000 }, "native_social_login": { "apple": { @@ -1966,7 +2316,7 @@ "sso_disabled": false, "token_endpoint_auth_method": "client_secret_post" }, - "status": 201, + "status": 200, "response": { "tenant": "auth0-deploy-cli-e2e", "global": false, @@ -1997,11 +2347,9 @@ }, "sso_disabled": false, "cross_origin_authentication": false, - "encrypted": true, "signing_keys": [ { "cert": "[REDACTED]", - "key": "[REDACTED]", "pkcs7": "[REDACTED]", "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } @@ -2028,7 +2376,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 }, @@ -2042,7 +2390,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 }, @@ -2056,7 +2404,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/webauthn-platform", + "path": "/api/v2/guardian/factors/email", "body": { "enabled": false }, @@ -2070,13 +2418,13 @@ { "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": true + "enabled": false }, "status": 200, "response": { - "enabled": true + "enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -2098,7 +2446,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/recovery-code", + "path": "/api/v2/guardian/factors/webauthn-platform", "body": { "enabled": false }, @@ -2112,13 +2460,13 @@ { "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 + "enabled": true }, "status": 200, "response": { - "enabled": false + "enabled": true }, "rawHeaders": [], "responseIsBinary": false @@ -2126,7 +2474,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 }, @@ -2202,7 +2550,103 @@ "body": "", "status": 200, "response": { - "actions": [], + "actions": [ + { + "id": "4273221d-f20e-44e6-aa9d-d45702782e4e", + "name": "My Custom Action", + "supported_triggers": [ + { + "id": "post-login", + "version": "v2" + } + ], + "created_at": "2025-12-05T14:18:53.100690661Z", + "updated_at": "2025-12-09T12:30:12.235100452Z", + "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": "node18", + "status": "built", + "secrets": [], + "current_version": { + "id": "0add2116-19c1-4f2d-b66a-3592d7d38559", + "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": "node18", + "status": "BUILT", + "number": 6, + "build_time": "2025-12-09T12:30:13.134919313Z", + "created_at": "2025-12-09T12:30:12.969210112Z", + "updated_at": "2025-12-09T12:30:13.136114182Z" + }, + "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": "0add2116-19c1-4f2d-b66a-3592d7d38559", + "deployed": true, + "number": 6, + "built_at": "2025-12-09T12:30:13.134919313Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:30:12.969210112Z", + "updated_at": "2025-12-09T12:30:13.136114182Z", + "runtime": "node18", + "supported_triggers": [ + { + "id": "post-login", + "version": "v2" + } + ] + }, + "all_changes_deployed": true + }, + { + "id": "50d86033-6bc2-4ceb-8991-d14c85d2e304", + "name": "Custom Phone Provider", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ], + "created_at": "2025-12-09T12:23:14.388072786Z", + "updated_at": "2025-12-09T12:30:12.235258402Z", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "runtime": "node22", + "status": "built", + "secrets": [], + "current_version": { + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "runtime": "node22", + "status": "BUILT", + "number": 3, + "build_time": "2025-12-09T12:30:13.066221969Z", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z" + }, + "deployed_version": { + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "deployed": true, + "number": 3, + "built_at": "2025-12-09T12:30:13.066221969Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z", + "runtime": "node22", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ] + }, + "all_changes_deployed": true + } + ], + "total": 2, "per_page": 100 }, "rawHeaders": [], @@ -2210,8 +2654,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/actions/actions", + "method": "PATCH", + "path": "/api/v2/actions/actions/4273221d-f20e-44e6-aa9d-d45702782e4e", "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", @@ -2225,7 +2669,7 @@ } ] }, - "status": 201, + "status": 200, "response": { "id": "4273221d-f20e-44e6-aa9d-d45702782e4e", "name": "My Custom Action", @@ -2236,13 +2680,42 @@ } ], "created_at": "2025-12-05T14:18:53.100690661Z", - "updated_at": "2025-12-05T14:18:53.114050616Z", + "updated_at": "2025-12-09T12:31:15.977676526Z", "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": "node18", "status": "pending", "secrets": [], - "all_changes_deployed": false + "current_version": { + "id": "0add2116-19c1-4f2d-b66a-3592d7d38559", + "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": "node18", + "status": "BUILT", + "number": 6, + "build_time": "2025-12-09T12:30:13.134919313Z", + "created_at": "2025-12-09T12:30:12.969210112Z", + "updated_at": "2025-12-09T12:30:13.136114182Z" + }, + "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": "0add2116-19c1-4f2d-b66a-3592d7d38559", + "deployed": true, + "number": 6, + "built_at": "2025-12-09T12:30:13.134919313Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:30:12.969210112Z", + "updated_at": "2025-12-09T12:30:13.136114182Z", + "runtime": "node18", + "supported_triggers": [ + { + "id": "post-login", + "version": "v2" + } + ] + }, + "all_changes_deployed": true }, "rawHeaders": [], "responseIsBinary": false @@ -2265,16 +2738,92 @@ } ], "created_at": "2025-12-05T14:18:53.100690661Z", - "updated_at": "2025-12-05T14:18:53.114050616Z", + "updated_at": "2025-12-09T12:31:15.977676526Z", "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": "node18", "status": "built", "secrets": [], - "all_changes_deployed": false + "current_version": { + "id": "0add2116-19c1-4f2d-b66a-3592d7d38559", + "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": "node18", + "status": "BUILT", + "number": 6, + "build_time": "2025-12-09T12:30:13.134919313Z", + "created_at": "2025-12-09T12:30:12.969210112Z", + "updated_at": "2025-12-09T12:30:13.136114182Z" + }, + "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": "0add2116-19c1-4f2d-b66a-3592d7d38559", + "deployed": true, + "number": 6, + "built_at": "2025-12-09T12:30:13.134919313Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:30:12.969210112Z", + "updated_at": "2025-12-09T12:30:13.136114182Z", + "runtime": "node18", + "supported_triggers": [ + { + "id": "post-login", + "version": "v2" + } + ] + }, + "all_changes_deployed": true + }, + { + "id": "50d86033-6bc2-4ceb-8991-d14c85d2e304", + "name": "Custom Phone Provider", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ], + "created_at": "2025-12-09T12:23:14.388072786Z", + "updated_at": "2025-12-09T12:30:12.235258402Z", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "runtime": "node22", + "status": "built", + "secrets": [], + "current_version": { + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "runtime": "node22", + "status": "BUILT", + "number": 3, + "build_time": "2025-12-09T12:30:13.066221969Z", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z" + }, + "deployed_version": { + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "deployed": true, + "number": 3, + "built_at": "2025-12-09T12:30:13.066221969Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z", + "runtime": "node22", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ] + }, + "all_changes_deployed": true } ], - "total": 1, + "total": 2, "per_page": 100 }, "rawHeaders": [], @@ -2289,13 +2838,13 @@ "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": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "a20b7a92-0d6e-4926-9226-fb83db144dae", "deployed": false, - "number": 1, + "number": 7, "secrets": [], "status": "built", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.780088164Z", + "created_at": "2025-12-09T12:31:16.719266241Z", + "updated_at": "2025-12-09T12:31:16.719266241Z", "runtime": "node18", "supported_triggers": [ { @@ -2313,7 +2862,7 @@ } ], "created_at": "2025-12-05T14:18:53.100690661Z", - "updated_at": "2025-12-05T14:18:53.100690661Z", + "updated_at": "2025-12-09T12:31:15.968509992Z", "all_changes_deployed": false } }, @@ -2323,45 +2872,27 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/attack-protection/suspicious-ip-throttling", + "path": "/api/v2/attack-protection/brute-force-protection", "body": { "enabled": true, "shields": [ - "admin_notification" - ], - "allowlist": [ - "127.0.0.1" + "block", + "user_notification" ], - "stage": { - "pre-login": { - "max_attempts": 66, - "rate": 864000 - }, - "pre-user-registration": { - "max_attempts": 66, - "rate": 1200 - } - } + "mode": "count_per_identifier_and_ip", + "allowlist": [], + "max_attempts": 66 }, "status": 200, "response": { "enabled": true, "shields": [ - "admin_notification" - ], - "allowlist": [ - "127.0.0.1" + "block", + "user_notification" ], - "stage": { - "pre-login": { - "max_attempts": 66, - "rate": 864000 - }, - "pre-user-registration": { - "max_attempts": 66, - "rate": 1200 - } - } + "mode": "count_per_identifier_and_ip", + "allowlist": [], + "max_attempts": 66 }, "rawHeaders": [], "responseIsBinary": false @@ -2397,27 +2928,45 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/attack-protection/brute-force-protection", + "path": "/api/v2/attack-protection/suspicious-ip-throttling", "body": { "enabled": true, "shields": [ - "block", - "user_notification" + "admin_notification" ], - "mode": "count_per_identifier_and_ip", - "allowlist": [], - "max_attempts": 66 + "allowlist": [ + "127.0.0.1" + ], + "stage": { + "pre-login": { + "max_attempts": 66, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 66, + "rate": 1200 + } + } }, "status": 200, "response": { "enabled": true, "shields": [ - "block", - "user_notification" + "admin_notification" ], - "mode": "count_per_identifier_and_ip", - "allowlist": [], - "max_attempts": 66 + "allowlist": [ + "127.0.0.1" + ], + "stage": { + "pre-login": { + "max_attempts": 66, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 66, + "rate": 1200 + } + } }, "rawHeaders": [], "responseIsBinary": false @@ -2449,7 +2998,7 @@ } }, "created_at": "2025-09-09T04:41:43.671Z", - "updated_at": "2025-12-05T14:17:03.449Z", + "updated_at": "2025-12-09T12:30:14.491Z", "id": "acl_wpZ6oScRU5L6QKAxMUMHmx" } ] @@ -2494,7 +3043,7 @@ } }, "created_at": "2025-09-09T04:41:43.671Z", - "updated_at": "2025-12-05T14:18:54.912Z", + "updated_at": "2025-12-09T12:31:17.804Z", "id": "acl_wpZ6oScRU5L6QKAxMUMHmx" }, "rawHeaders": [], @@ -2558,9 +3107,9 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/user-attribute-profiles/uap_1csDj3szFsgxGS1oTZTdFm", + "path": "/api/v2/user-attribute-profiles/uap_1csDj3sAVu6n5eTzLw6XZg", "body": { - "name": "test-user-attribute-profile-2", + "name": "test-user-attribute-profile", "user_attributes": { "email": { "description": "Email of the User", @@ -2576,8 +3125,8 @@ }, "status": 200, "response": { - "id": "uap_1csDj3szFsgxGS1oTZTdFm", - "name": "test-user-attribute-profile-2", + "id": "uap_1csDj3sAVu6n5eTzLw6XZg", + "name": "test-user-attribute-profile", "user_id": { "oidc_mapping": "sub", "saml_mapping": [ @@ -2602,9 +3151,9 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/user-attribute-profiles/uap_1csDj3sAVu6n5eTzLw6XZg", + "path": "/api/v2/user-attribute-profiles/uap_1csDj3szFsgxGS1oTZTdFm", "body": { - "name": "test-user-attribute-profile", + "name": "test-user-attribute-profile-2", "user_attributes": { "email": { "description": "Email of the User", @@ -2620,8 +3169,8 @@ }, "status": 200, "response": { - "id": "uap_1csDj3sAVu6n5eTzLw6XZg", - "name": "test-user-attribute-profile", + "id": "uap_1csDj3szFsgxGS1oTZTdFm", + "name": "test-user-attribute-profile-2", "user_id": { "oidc_mapping": "sub", "saml_mapping": [ @@ -3154,23 +3703,91 @@ "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?take=50&strategy=auth0", - "body": "", - "status": 200, - "response": { - "connections": [ + "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?take=50&strategy=auth0", + "body": "", + "status": 200, + "response": { + "connections": [ + { + "id": "con_bBSD5AQUW0Q5aLuE", + "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, + "api_behavior": "required" + } + }, + "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, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "realms": [ + "boo-baz-db-connection-test" + ], + "enabled_clients": [ + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + ] + }, { "id": "con_CfDqv7jPXpFqETeK", "options": { @@ -3226,6 +3843,74 @@ "status": 200, "response": { "connections": [ + { + "id": "con_bBSD5AQUW0Q5aLuE", + "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, + "api_behavior": "required" + } + }, + "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, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "realms": [ + "boo-baz-db-connection-test" + ], + "enabled_clients": [ + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + ] + }, { "id": "con_CfDqv7jPXpFqETeK", "options": { @@ -3273,6 +3958,25 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE/clients?take=50", + "body": "", + "status": 200, + "response": { + "clients": [ + { + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + }, + { + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -3292,6 +3996,25 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE/clients?take=50", + "body": "", + "status": 200, + "response": { + "clients": [ + { + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + }, + { + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -3313,11 +4036,86 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/connections", - "body": { - "name": "boo-baz-db-connection-test", + "method": "GET", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE", + "body": "", + "status": 200, + "response": { + "id": "con_bBSD5AQUW0Q5aLuE", + "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, + "api_behavior": "required" + } + }, + "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, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "enabled_clients": [ + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + ], + "realms": [ + "boo-baz-db-connection-test" + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE", + "body": { "enabled_clients": [ "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" @@ -3339,6 +4137,11 @@ }, "disable_signup": false, "passwordPolicy": "low", + "passkey_options": { + "challenge_ui": "both", + "local_enrollment_enabled": true, + "progressive_enrollment_enabled": true + }, "password_history": { "size": 5, "enable": false @@ -3349,6 +4152,15 @@ "enable": true, "dictionary": [] }, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true, + "api_behavior": "required" + } + }, "brute_force_protection": true, "password_no_personal_info": { "enable": true @@ -3362,7 +4174,7 @@ "boo-baz-db-connection-test" ] }, - "status": 201, + "status": 200, "response": { "id": "con_bBSD5AQUW0Q5aLuE", "options": { @@ -3370,17 +4182,22 @@ "active": true, "return_enroll_settings": true }, - "passwordPolicy": "low", "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", + "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", - "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" + "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 @@ -3391,6 +4208,15 @@ "enable": true, "dictionary": [] }, + "authentication_methods": { + "passkey": { + "enabled": false + }, + "password": { + "enabled": true, + "api_behavior": "required" + } + }, "brute_force_protection": true, "password_no_personal_info": { "enable": true @@ -3398,21 +4224,7 @@ "password_complexity_options": { "min_length": 8 }, - "enabledDatabaseCustomization": true, - "authentication_methods": { - "password": { - "enabled": true, - "api_behavior": "required" - }, - "passkey": { - "enabled": false - } - }, - "passkey_options": { - "challenge_ui": "both", - "progressive_enrollment_enabled": true, - "local_enrollment_enabled": true - } + "enabledDatabaseCustomization": true }, "strategy": "auth0", "name": "boo-baz-db-connection-test", @@ -3424,8 +4236,8 @@ "active": false }, "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ], "realms": [ "boo-baz-db-connection-test" @@ -3434,87 +4246,6 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/connections?take=1&name=boo-baz-db-connection-test&include_fields=true", - "body": "", - "status": 200, - "response": { - "connections": [ - { - "id": "con_bBSD5AQUW0Q5aLuE", - "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, - "api_behavior": "required" - } - }, - "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, - "authentication": { - "active": true - }, - "connected_accounts": { - "active": false - }, - "realms": [ - "boo-baz-db-connection-test" - ], - "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" - ] - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", @@ -4125,9 +4856,36 @@ "realms": [ "boo-baz-db-connection-test" ], + "enabled_clients": [ + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + ] + }, + { + "id": "con_yGZ6rzfkdR6mMBoE", + "options": { + "email": true, + "scope": [ + "email", + "profile" + ], + "profile": true + }, + "strategy": "google-oauth2", + "name": "google-oauth2", + "is_domain_connection": false, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "realms": [ + "google-oauth2" + ], "enabled_clients": [ "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz" ] }, { @@ -4248,9 +5006,36 @@ "realms": [ "boo-baz-db-connection-test" ], + "enabled_clients": [ + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + ] + }, + { + "id": "con_yGZ6rzfkdR6mMBoE", + "options": { + "email": true, + "scope": [ + "email", + "profile" + ], + "profile": true + }, + "strategy": "google-oauth2", + "name": "google-oauth2", + "is_domain_connection": false, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "realms": [ + "google-oauth2" + ], "enabled_clients": [ "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz" ] }, { @@ -4302,11 +5087,47 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/connections", + "method": "GET", + "path": "/api/v2/connections/con_yGZ6rzfkdR6mMBoE/clients?take=50", + "body": "", + "status": 200, + "response": { + "clients": [ + { + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + }, + { + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_yGZ6rzfkdR6mMBoE/clients?take=50", + "body": "", + "status": 200, + "response": { + "clients": [ + { + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + }, + { + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/connections/con_yGZ6rzfkdR6mMBoE", "body": { - "name": "google-oauth2", - "strategy": "google-oauth2", "enabled_clients": [ "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" @@ -4321,7 +5142,7 @@ "profile": true } }, - "status": 201, + "status": 200, "response": { "id": "con_yGZ6rzfkdR6mMBoE", "options": { @@ -4342,8 +5163,8 @@ "active": false }, "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz" + "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ], "realms": [ "google-oauth2" @@ -4352,46 +5173,6 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/connections?take=1&name=google-oauth2&include_fields=true", - "body": "", - "status": 200, - "response": { - "connections": [ - { - "id": "con_yGZ6rzfkdR6mMBoE", - "options": { - "email": true, - "scope": [ - "email", - "profile" - ], - "profile": true - }, - "strategy": "google-oauth2", - "name": "google-oauth2", - "is_domain_connection": false, - "authentication": { - "active": true - }, - "connected_accounts": { - "active": false - }, - "realms": [ - "google-oauth2" - ], - "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz" - ] - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", @@ -4901,8 +5682,57 @@ "idle_token_lifetime": 2592000, "rotation_type": "non-rotating" }, - "sso_disabled": false, - "cross_origin_authentication": false, + "sso_disabled": false, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", + "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", + "mr|google-oauth2|112839029247827700155", + "mr|samlp|okta|ewan.harris@auth0.com" + ], + "custom_login_page": "TEST123\n", + "cross_origin_authentication": true, "signing_keys": [ { "cert": "[REDACTED]", @@ -4910,72 +5740,299 @@ "subject": "deprecated" } ], - "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "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/client-grants?take=50", + "body": "", + "status": 200, + "response": { + "client_grants": [ + { + "id": "cgr_JYmQHwQEXGDCc53P", + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", + "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" + ], + "subject_type": "client" + }, + { + "id": "cgr_ReJeayDzA8FTvFPY", + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", + "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" ], - "custom_login_page_on": true + "subject_type": "client" }, - { - "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", - "mr|google-oauth2|112839029247827700155", - "mr|samlp|okta|ewan.harris@auth0.com" - ], - "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?take=50", - "body": "", - "status": 200, - "response": { - "client_grants": [ { "id": "cgr_pbwejzhwoujrsNE8", "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", @@ -5218,11 +6275,9 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/client-grants", + "method": "PATCH", + "path": "/api/v2/client-grants/cgr_ReJeayDzA8FTvFPY", "body": { - "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", "create:client_grants", @@ -5356,7 +6411,7 @@ "delete:organization_invitations" ] }, - "status": 201, + "status": 200, "response": { "id": "cgr_ReJeayDzA8FTvFPY", "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", @@ -5500,11 +6555,9 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/client-grants", + "method": "PATCH", + "path": "/api/v2/client-grants/cgr_JYmQHwQEXGDCc53P", "body": { - "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", - "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", "create:client_grants", @@ -5638,7 +6691,7 @@ "delete:organization_invitations" ] }, - "status": 201, + "status": 200, "response": { "id": "cgr_JYmQHwQEXGDCc53P", "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", @@ -5783,11 +6836,152 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles?per_page=100&page=0&include_totals=true", + "path": "/api/v2/roles?per_page=100&page=0&include_totals=true", + "body": "", + "status": 200, + "response": { + "roles": [ + { + "id": "rol_EH7ASyHIXKqKPc4X", + "name": "Admin", + "description": "Can read and write things" + }, + { + "id": "rol_WHMW5tI8GYuTShEL", + "name": "Reader", + "description": "Can only read things" + }, + { + "id": "rol_dkoJYFPEbm4fBQUa", + "name": "read_only", + "description": "Read Only" + }, + { + "id": "rol_6mNIPtAC2wBSBD7S", + "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_EH7ASyHIXKqKPc4X/permissions?per_page=100&page=0&include_totals=true", + "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_EH7ASyHIXKqKPc4X/permissions?per_page=100&page=0&include_totals=true", + "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_WHMW5tI8GYuTShEL/permissions?per_page=100&page=0&include_totals=true", + "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_WHMW5tI8GYuTShEL/permissions?per_page=100&page=0&include_totals=true", + "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_dkoJYFPEbm4fBQUa/permissions?per_page=100&page=0&include_totals=true", + "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_dkoJYFPEbm4fBQUa/permissions?per_page=100&page=0&include_totals=true", + "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_6mNIPtAC2wBSBD7S/permissions?per_page=100&page=0&include_totals=true", + "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_6mNIPtAC2wBSBD7S/permissions?per_page=100&page=0&include_totals=true", "body": "", "status": 200, "response": { - "roles": [], + "permissions": [], "start": 0, "limit": 100, "total": 0 @@ -5797,8 +6991,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/roles", + "method": "PATCH", + "path": "/api/v2/roles/rol_EH7ASyHIXKqKPc4X", "body": { "name": "Admin", "description": "Can read and write things" @@ -5814,8 +7008,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/roles", + "method": "PATCH", + "path": "/api/v2/roles/rol_WHMW5tI8GYuTShEL", "body": { "name": "Reader", "description": "Can only read things" @@ -5831,8 +7025,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/roles", + "method": "PATCH", + "path": "/api/v2/roles/rol_dkoJYFPEbm4fBQUa", "body": { "name": "read_only", "description": "Read Only" @@ -5848,8 +7042,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/roles", + "method": "PATCH", + "path": "/api/v2/roles/rol_6mNIPtAC2wBSBD7S", "body": { "name": "read_osnly", "description": "Readz Only" @@ -5892,7 +7086,7 @@ "okta" ], "created_at": "2024-11-26T11:58:18.962Z", - "updated_at": "2025-12-05T14:17:19.637Z", + "updated_at": "2025-12-09T12:30:29.308Z", "branding": { "colors": { "primary": "#19aecc" @@ -5968,7 +7162,7 @@ "okta" ], "created_at": "2024-11-26T11:58:18.962Z", - "updated_at": "2025-12-05T14:19:10.944Z", + "updated_at": "2025-12-09T12:31:31.782Z", "branding": { "colors": { "primary": "#19aecc" @@ -5978,34 +7172,6 @@ "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!

\n \n\n", - "enabled": false, - "from": "", - "resultUrl": "https://example.com/welcome", - "subject": "Welcome", - "syntax": "liquid", - "urlLifetimeInSeconds": 3600 - }, - "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": "PATCH", @@ -6034,12 +7200,28 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/organizations?take=50", - "body": "", + "method": "PATCH", + "path": "/api/v2/email-templates/welcome_email", + "body": { + "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": { - "organizations": [] + "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 @@ -6564,6 +7746,203 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations?take=50", + "body": "", + "status": 200, + "response": { + "organizations": [ + { + "id": "org_fIRF1it8cTOyf2yS", + "name": "org1", + "display_name": "Organization", + "branding": { + "colors": { + "page_background": "#fff5f5", + "primary": "#57ddff" + } + } + }, + { + "id": "org_hWOYWXtnxIpJ0MX3", + "name": "org2", + "display_name": "Organization2" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/enabled_connections?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "enabled_connections": [], + "start": 0, + "limit": 0, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/enabled_connections?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "enabled_connections": [], + "start": 0, + "limit": 0, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/client-grants?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "client_grants": [], + "start": 0, + "limit": 50, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/client-grants?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "client_grants": [], + "start": 0, + "limit": 50, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/discovery-domains?take=50", + "body": "", + "status": 200, + "response": { + "domains": [] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/discovery-domains?take=50", + "body": "", + "status": 200, + "response": { + "domains": [] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/enabled_connections?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "enabled_connections": [], + "start": 0, + "limit": 0, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/enabled_connections?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "enabled_connections": [], + "start": 0, + "limit": 0, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/client-grants?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "client_grants": [], + "start": 0, + "limit": 50, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/client-grants?page=0&per_page=50&include_totals=true", + "body": "", + "status": 200, + "response": { + "client_grants": [], + "start": 0, + "limit": 50, + "total": 0 + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/discovery-domains?take=50", + "body": "", + "status": 200, + "response": { + "domains": [] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/discovery-domains?take=50", + "body": "", + "status": 200, + "response": { + "domains": [] + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -6636,8 +8015,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -7760,10 +9139,25 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/organizations", + "method": "PATCH", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3", + "body": { + "display_name": "Organization2" + }, + "status": 200, + "response": { + "id": "org_hWOYWXtnxIpJ0MX3", + "display_name": "Organization2", + "name": "org2" + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS", "body": { - "name": "org1", "branding": { "colors": { "page_background": "#fff5f5", @@ -7772,34 +9166,17 @@ }, "display_name": "Organization" }, - "status": 201, + "status": 200, "response": { - "id": "org_fIRF1it8cTOyf2yS", - "display_name": "Organization", - "name": "org1", "branding": { "colors": { "page_background": "#fff5f5", "primary": "#57ddff" } - } - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/organizations", - "body": { - "name": "org2", - "display_name": "Organization2" - }, - "status": 201, - "response": { - "id": "org_hWOYWXtnxIpJ0MX3", - "display_name": "Organization2", - "name": "org2" + }, + "id": "org_fIRF1it8cTOyf2yS", + "display_name": "Organization", + "name": "org1" }, "rawHeaders": [], "responseIsBinary": false @@ -7810,21 +9187,82 @@ "path": "/api/v2/log-streams", "body": "", "status": 200, - "response": [], + "response": [ + { + "id": "lst_0000000000025431", + "name": "Suspended DD Log Stream", + "type": "datadog", + "status": "active", + "sink": { + "datadogApiKey": "##LOGSTREAMS_DATADOG_SECRET##", + "datadogRegion": "us" + }, + "isPriority": false + }, + { + "id": "lst_0000000000025432", + "name": "Amazon EventBridge", + "type": "eventbridge", + "status": "active", + "sink": { + "awsAccountId": "123456789012", + "awsRegion": "us-east-2", + "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-84b807b2-8a87-4d4b-87eb-ff1b56370b3a/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": "POST", - "path": "/api/v2/log-streams", + "method": "PATCH", + "path": "/api/v2/log-streams/lst_0000000000025431", "body": { "name": "Suspended DD Log Stream", "sink": { "datadogApiKey": "some-sensitive-api-key", "datadogRegion": "us" - }, - "type": "datadog" + } }, "status": 200, "response": { @@ -7843,8 +9281,8 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "POST", - "path": "/api/v2/log-streams", + "method": "PATCH", + "path": "/api/v2/log-streams/lst_0000000000025432", "body": { "name": "Amazon EventBridge", "filters": [ @@ -7885,11 +9323,7 @@ "name": "auth.token_exchange.fail" } ], - "sink": { - "awsAccountId": "123456789012", - "awsRegion": "us-east-2" - }, - "type": "eventbridge" + "status": "active" }, "status": 200, "response": { @@ -7963,14 +9397,22 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/flows?page=0&per_page=100&include_totals=true", + "path": "/api/v2/forms?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { "limit": 100, "start": 0, - "total": 0, - "flows": [] + "total": 1, + "forms": [ + { + "id": "ap_6JUSCU7qq1CravnoU6d6jr", + "name": "Blank-form", + "flow_count": 0, + "created_at": "2024-11-26T11:58:18.187Z", + "updated_at": "2025-12-09T12:30:43.698Z" + } + ] }, "rawHeaders": [], "responseIsBinary": false @@ -7978,22 +9420,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/forms?page=0&per_page=100&include_totals=true", + "path": "/api/v2/flows?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { "limit": 100, "start": 0, - "total": 1, - "forms": [ - { - "id": "ap_6JUSCU7qq1CravnoU6d6jr", - "name": "Blank-form", - "flow_count": 0, - "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T14:17:26.192Z" - } - ] + "total": 0, + "flows": [] }, "rawHeaders": [], "responseIsBinary": false @@ -8062,7 +9496,7 @@ } }, "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T14:17:26.192Z" + "updated_at": "2025-12-09T12:30:43.698Z" }, "rawHeaders": [], "responseIsBinary": false @@ -8187,7 +9621,7 @@ } }, "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T14:19:17.478Z" + "updated_at": "2025-12-09T12:31:42.735Z" }, "rawHeaders": [], "responseIsBinary": false @@ -9898,7 +11332,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/sms", + "path": "/api/v2/guardian/factors/otp", "body": { "enabled": false }, @@ -9912,7 +11346,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/otp", + "path": "/api/v2/guardian/factors/push-notification", "body": { "enabled": false }, @@ -9926,7 +11360,7 @@ { "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": false }, @@ -9940,7 +11374,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 }, @@ -9968,7 +11402,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/recovery-code", + "path": "/api/v2/guardian/factors/sms", "body": { "enabled": false }, @@ -10050,33 +11484,33 @@ } ], "created_at": "2025-12-05T14:18:53.100690661Z", - "updated_at": "2025-12-05T14:18:53.114050616Z", + "updated_at": "2025-12-09T12:31:15.977676526Z", "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": "node18", "status": "built", "secrets": [], "current_version": { - "id": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "a20b7a92-0d6e-4926-9226-fb83db144dae", "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": "node18", "status": "BUILT", - "number": 1, - "build_time": "2025-12-05T14:18:53.859494195Z", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.860524296Z" + "number": 7, + "build_time": "2025-12-09T12:31:16.794944131Z", + "created_at": "2025-12-09T12:31:16.719266241Z", + "updated_at": "2025-12-09T12:31:16.796068316Z" }, "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": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "a20b7a92-0d6e-4926-9226-fb83db144dae", "deployed": true, - "number": 1, - "built_at": "2025-12-05T14:18:53.859494195Z", + "number": 7, + "built_at": "2025-12-09T12:31:16.794944131Z", "secrets": [], "status": "built", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.860524296Z", + "created_at": "2025-12-09T12:31:16.719266241Z", + "updated_at": "2025-12-09T12:31:16.796068316Z", "runtime": "node18", "supported_triggers": [ { @@ -10086,9 +11520,56 @@ ] }, "all_changes_deployed": true + }, + { + "id": "50d86033-6bc2-4ceb-8991-d14c85d2e304", + "name": "Custom Phone Provider", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ], + "created_at": "2025-12-09T12:23:14.388072786Z", + "updated_at": "2025-12-09T12:30:12.235258402Z", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "runtime": "node22", + "status": "built", + "secrets": [], + "current_version": { + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "runtime": "node22", + "status": "BUILT", + "number": 3, + "build_time": "2025-12-09T12:30:13.066221969Z", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z" + }, + "deployed_version": { + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "deployed": true, + "number": 3, + "built_at": "2025-12-09T12:30:13.066221969Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z", + "runtime": "node22", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ] + }, + "all_changes_deployed": true } ], - "total": 1, + "total": 2, "per_page": 100 }, "rawHeaders": [], @@ -10112,33 +11593,33 @@ } ], "created_at": "2025-12-05T14:18:53.100690661Z", - "updated_at": "2025-12-05T14:18:53.114050616Z", + "updated_at": "2025-12-09T12:31:15.977676526Z", "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": "node18", "status": "built", "secrets": [], "current_version": { - "id": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "a20b7a92-0d6e-4926-9226-fb83db144dae", "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": "node18", "status": "BUILT", - "number": 1, - "build_time": "2025-12-05T14:18:53.859494195Z", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.860524296Z" + "number": 7, + "build_time": "2025-12-09T12:31:16.794944131Z", + "created_at": "2025-12-09T12:31:16.719266241Z", + "updated_at": "2025-12-09T12:31:16.796068316Z" }, "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": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "a20b7a92-0d6e-4926-9226-fb83db144dae", "deployed": true, - "number": 1, - "built_at": "2025-12-05T14:18:53.859494195Z", + "number": 7, + "built_at": "2025-12-09T12:31:16.794944131Z", "secrets": [], "status": "built", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.860524296Z", + "created_at": "2025-12-09T12:31:16.719266241Z", + "updated_at": "2025-12-09T12:31:16.796068316Z", "runtime": "node18", "supported_triggers": [ { @@ -10148,9 +11629,56 @@ ] }, "all_changes_deployed": true + }, + { + "id": "50d86033-6bc2-4ceb-8991-d14c85d2e304", + "name": "Custom Phone Provider", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ], + "created_at": "2025-12-09T12:23:14.388072786Z", + "updated_at": "2025-12-09T12:30:12.235258402Z", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "runtime": "node22", + "status": "built", + "secrets": [], + "current_version": { + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "runtime": "node22", + "status": "BUILT", + "number": 3, + "build_time": "2025-12-09T12:30:13.066221969Z", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z" + }, + "deployed_version": { + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "deployed": true, + "number": 3, + "built_at": "2025-12-09T12:30:13.066221969Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z", + "runtime": "node22", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ] + }, + "all_changes_deployed": true } ], - "total": 1, + "total": 2, "per_page": 100 }, "rawHeaders": [], @@ -10159,43 +11687,27 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/attack-protection/suspicious-ip-throttling", + "path": "/api/v2/attack-protection/brute-force-protection", "body": { "enabled": true, "shields": [ - "admin_notification", - "block" + "block", + "user_notification" ], + "mode": "count_per_identifier_and_ip", "allowlist": [], - "stage": { - "pre-login": { - "max_attempts": 100, - "rate": 864000 - }, - "pre-user-registration": { - "max_attempts": 50, - "rate": 1200 - } - } + "max_attempts": 10 }, "status": 200, "response": { "enabled": true, "shields": [ - "admin_notification", - "block" + "block", + "user_notification" ], + "mode": "count_per_identifier_and_ip", "allowlist": [], - "stage": { - "pre-login": { - "max_attempts": 100, - "rate": 864000 - }, - "pre-user-registration": { - "max_attempts": 50, - "rate": 1200 - } - } + "max_attempts": 10 }, "rawHeaders": [], "responseIsBinary": false @@ -10231,27 +11743,43 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/attack-protection/brute-force-protection", + "path": "/api/v2/attack-protection/suspicious-ip-throttling", "body": { "enabled": true, "shields": [ - "block", - "user_notification" + "admin_notification", + "block" ], - "mode": "count_per_identifier_and_ip", "allowlist": [], - "max_attempts": 10 + "stage": { + "pre-login": { + "max_attempts": 100, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 50, + "rate": 1200 + } + } }, "status": 200, "response": { "enabled": true, "shields": [ - "block", - "user_notification" + "admin_notification", + "block" ], - "mode": "count_per_identifier_and_ip", "allowlist": [], - "max_attempts": 10 + "stage": { + "pre-login": { + "max_attempts": 100, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 50, + "rate": 1200 + } + } }, "rawHeaders": [], "responseIsBinary": false @@ -10848,8 +12376,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -10971,8 +12499,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -11843,8 +13371,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -11912,8 +13440,8 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } ] @@ -11993,8 +13521,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -12062,8 +13590,8 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } ] @@ -14113,8 +15641,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -14182,8 +15710,8 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } ] @@ -17054,8 +18582,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -17096,8 +18624,8 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } ] @@ -17253,8 +18781,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -17322,8 +18850,8 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } ] @@ -17492,18 +19020,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/welcome_email", + "path": "/api/v2/email-templates/user_invitation", "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 @@ -17511,7 +19035,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": { @@ -17526,7 +19050,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/password_reset", + "path": "/api/v2/email-templates/async_approval", "body": "", "status": 404, "response": { @@ -17541,7 +19065,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/stolen_credentials", + "path": "/api/v2/email-templates/reset_email", "body": "", "status": 404, "response": { @@ -17556,7 +19080,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": { @@ -17571,14 +19095,18 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/async_approval", + "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 @@ -17586,7 +19114,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": { @@ -17601,7 +19129,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": { @@ -17631,7 +19159,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": { @@ -17646,7 +19174,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": { @@ -18489,7 +20017,101 @@ "body": "", "status": 200, "response": { - "providers": [] + "providers": [ + { + "id": "pro_mY3L5BP6iVUUzpv22opofm", + "tenant": "auth0-deploy-cli-e2e", + "name": "custom", + "channel": "phone", + "disabled": false, + "configuration": { + "delivery_methods": [ + "text" + ] + }, + "credentials": null, + "created_at": "2025-12-09T12:24:00.604Z", + "updated_at": "2025-12-09T12:30:28.218Z" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/branding/phone/templates", + "body": "", + "status": 200, + "response": { + "templates": [ + { + "id": "tem_dL83uTmWn8moGzm8UgAk4Q", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "blocked_account", + "disabled": false, + "created_at": "2025-12-09T12:22:47.683Z", + "updated_at": "2025-12-09T12:30:30.019Z", + "content": { + "syntax": "liquid", + "body": { + "text": "We detected suspicious activity on your account from the ip {{user.source_ip}}{% if user.city %} from {{user.city}}, {{user.country}}{% elsif user.country %} from {{user.country}}{% endif %}. Logins from this IP have been blocked on your account. If this is your IP, please reset your password to unblock your account. Otherwise, disregard this message.", + "voice": "We detected suspicious activity on your account from the ip {{user.source_ip}}{% if user.city %} from {{user.city}}, {{user.country}}{% elsif user.country %} from {{user.country}}{% endif %}. Logins from this IP have been blocked on your account. If this is your IP, please reset your password to unblock your account. Otherwise, disregard this message." + }, + "from": "0032232323" + } + }, + { + "id": "tem_xqbUSF83fpnRv8r8rqXFDZ", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "change_password", + "disabled": false, + "created_at": "2025-12-09T12:26:20.243Z", + "updated_at": "2025-12-09T12:30:30.034Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your password change code for {{ friendly_name | escape }}", + "voice": "Hello. Your password change code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your password change code is {{ pause }} {{ code | escape }}" + } + } + }, + { + "id": "tem_qarYST5TTE5pbMNB5NHZAj", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "otp_enroll", + "disabled": false, + "created_at": "2025-12-09T12:26:25.327Z", + "updated_at": "2025-12-09T12:30:30.174Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your verification code for {{ friendly_name | escape }}. Please enter this code to verify your enrollment.", + "voice": "Hello. Your verification code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your verification code is {{ pause }} {{ code | escape }}" + } + } + }, + { + "id": "tem_o4LBTt4NQyX8K4vC9dPafR", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "otp_verify", + "disabled": false, + "created_at": "2025-12-09T12:26:30.547Z", + "updated_at": "2025-12-09T12:30:30.365Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your verification code for {{ friendly_name | escape }}", + "voice": "Hello. Your verification code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your verification code is {{ pause }} {{ code | escape }}" + } + } + } + ] }, "rawHeaders": [], "responseIsBinary": false @@ -18622,7 +20244,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": {}, @@ -18632,7 +20254,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": {}, @@ -18702,7 +20324,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/custom-form/custom-text/en", + "path": "/api/v2/prompts/consent/custom-text/en", "body": "", "status": 200, "response": {}, @@ -18712,7 +20334,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/consent/custom-text/en", + "path": "/api/v2/prompts/custom-form/custom-text/en", "body": "", "status": 200, "response": {}, @@ -18722,7 +20344,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/customized-consent/custom-text/en", + "path": "/api/v2/prompts/logout/custom-text/en", "body": "", "status": 200, "response": {}, @@ -18732,7 +20354,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/logout/custom-text/en", + "path": "/api/v2/prompts/customized-consent/custom-text/en", "body": "", "status": 200, "response": {}, @@ -18742,7 +20364,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": {}, @@ -18752,7 +20374,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": {}, @@ -18762,7 +20384,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/mfa-voice/custom-text/en", "body": "", "status": 200, "response": {}, @@ -18772,7 +20394,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": {}, @@ -18782,7 +20404,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": {}, @@ -18802,7 +20424,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-recovery-code/custom-text/en", + "path": "/api/v2/prompts/mfa-email/custom-text/en", "body": "", "status": 200, "response": {}, @@ -18812,7 +20434,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-email/custom-text/en", + "path": "/api/v2/prompts/mfa-recovery-code/custom-text/en", "body": "", "status": 200, "response": {}, @@ -18882,7 +20504,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/invitation/custom-text/en", + "path": "/api/v2/prompts/common/custom-text/en", "body": "", "status": 200, "response": {}, @@ -18892,7 +20514,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/common/custom-text/en", + "path": "/api/v2/prompts/invitation/custom-text/en", "body": "", "status": 200, "response": {}, @@ -18942,7 +20564,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-password/partials", + "path": "/api/v2/prompts/login-id/partials", "body": "", "status": 200, "response": {}, @@ -18952,7 +20574,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": {}, @@ -18962,7 +20584,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": {}, @@ -18972,7 +20594,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": {}, @@ -19017,33 +20639,33 @@ } ], "created_at": "2025-12-05T14:18:53.100690661Z", - "updated_at": "2025-12-05T14:18:53.114050616Z", + "updated_at": "2025-12-09T12:31:15.977676526Z", "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": "node18", "status": "built", "secrets": [], "current_version": { - "id": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "a20b7a92-0d6e-4926-9226-fb83db144dae", "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": "node18", "status": "BUILT", - "number": 1, - "build_time": "2025-12-05T14:18:53.859494195Z", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.860524296Z" + "number": 7, + "build_time": "2025-12-09T12:31:16.794944131Z", + "created_at": "2025-12-09T12:31:16.719266241Z", + "updated_at": "2025-12-09T12:31:16.796068316Z" }, "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": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "a20b7a92-0d6e-4926-9226-fb83db144dae", "deployed": true, - "number": 1, - "built_at": "2025-12-05T14:18:53.859494195Z", + "number": 7, + "built_at": "2025-12-09T12:31:16.794944131Z", "secrets": [], "status": "built", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.860524296Z", + "created_at": "2025-12-09T12:31:16.719266241Z", + "updated_at": "2025-12-09T12:31:16.796068316Z", "runtime": "node18", "supported_triggers": [ { @@ -19053,9 +20675,56 @@ ] }, "all_changes_deployed": true + }, + { + "id": "50d86033-6bc2-4ceb-8991-d14c85d2e304", + "name": "Custom Phone Provider", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ], + "created_at": "2025-12-09T12:23:14.388072786Z", + "updated_at": "2025-12-09T12:30:12.235258402Z", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "runtime": "node22", + "status": "built", + "secrets": [], + "current_version": { + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "runtime": "node22", + "status": "BUILT", + "number": 3, + "build_time": "2025-12-09T12:30:13.066221969Z", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z" + }, + "deployed_version": { + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "deployed": true, + "number": 3, + "built_at": "2025-12-09T12:30:13.066221969Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z", + "runtime": "node22", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ] + }, + "all_changes_deployed": true } ], - "total": 1, + "total": 2, "per_page": 100 }, "rawHeaders": [], @@ -19074,7 +20743,6 @@ "version": "v3", "status": "CURRENT", "runtimes": [ - "node12", "node18-actions", "node22" ], @@ -19098,6 +20766,17 @@ "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": "credentials-exchange", "version": "v2", @@ -19125,24 +20804,24 @@ }, { "id": "post-user-registration", - "version": "v1", - "status": "DEPRECATED", + "version": "v2", + "status": "CURRENT", "runtimes": [ - "node12" + "node18-actions", + "node22" ], - "default_runtime": "node12", + "default_runtime": "node22", "binding_policy": "trigger-bound", "compatible_triggers": [] }, { - "id": "post-user-registration", - "version": "v2", - "status": "CURRENT", + "id": "post-change-password", + "version": "v1", + "status": "DEPRECATED", "runtimes": [ - "node18-actions", - "node22" + "node12" ], - "default_runtime": "node22", + "default_runtime": "node12", "binding_policy": "trigger-bound", "compatible_triggers": [] }, @@ -19163,7 +20842,6 @@ "version": "v2", "status": "CURRENT", "runtimes": [ - "node12", "node18-actions", "node22" ], @@ -19358,7 +21036,58 @@ "body": "", "status": 200, "response": { - "bindings": [], + "bindings": [ + { + "id": "0c7814f9-5cbb-47bc-a868-cac7b38e7225", + "trigger_id": "custom-phone-provider", + "action": { + "id": "50d86033-6bc2-4ceb-8991-d14c85d2e304", + "name": "Custom Phone Provider", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ], + "created_at": "2025-12-09T12:23:14.388072786Z", + "updated_at": "2025-12-09T12:30:12.225370374Z", + "current_version": { + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "runtime": "node22", + "status": "BUILT", + "number": 3, + "build_time": "2025-12-09T12:30:13.066221969Z", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z" + }, + "deployed_version": { + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "deployed": true, + "number": 3, + "built_at": "2025-12-09T12:30:13.066221969Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z", + "runtime": "node22", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ] + }, + "all_changes_deployed": false + }, + "created_at": "2025-12-09T12:30:40.877571889Z", + "updated_at": "2025-12-09T12:30:40.877571889Z", + "display_name": "Custom Phone Provider" + } + ], + "total": 1, "per_page": 50 }, "rawHeaders": [], @@ -20341,14 +22070,22 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/flows?page=0&per_page=100&include_totals=true", + "path": "/api/v2/forms?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { "limit": 100, "start": 0, - "total": 0, - "flows": [] + "total": 1, + "forms": [ + { + "id": "ap_6JUSCU7qq1CravnoU6d6jr", + "name": "Blank-form", + "flow_count": 0, + "created_at": "2024-11-26T11:58:18.187Z", + "updated_at": "2025-12-09T12:31:42.735Z" + } + ] }, "rawHeaders": [], "responseIsBinary": false @@ -20356,22 +22093,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/forms?page=0&per_page=100&include_totals=true", + "path": "/api/v2/flows?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { "limit": 100, "start": 0, - "total": 1, - "forms": [ - { - "id": "ap_6JUSCU7qq1CravnoU6d6jr", - "name": "Blank-form", - "flow_count": 0, - "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T14:19:17.478Z" - } - ] + "total": 0, + "flows": [] }, "rawHeaders": [], "responseIsBinary": false @@ -20440,7 +22169,7 @@ } }, "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T14:19:17.478Z" + "updated_at": "2025-12-09T12:31:42.735Z" }, "rawHeaders": [], "responseIsBinary": false @@ -20549,7 +22278,7 @@ "okta" ], "created_at": "2024-11-26T11:58:18.962Z", - "updated_at": "2025-12-05T14:19:10.944Z", + "updated_at": "2025-12-09T12:31:31.782Z", "branding": { "colors": { "primary": "#19aecc" @@ -20601,7 +22330,7 @@ } }, "created_at": "2025-09-09T04:41:43.671Z", - "updated_at": "2025-12-05T14:18:54.912Z", + "updated_at": "2025-12-09T12:31:17.804Z", "id": "acl_wpZ6oScRU5L6QKAxMUMHmx" } ] 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 4fb57c91d..74fdf9202 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 @@ -1668,8 +1668,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -1710,8 +1710,8 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } ] @@ -1867,8 +1867,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -1936,8 +1936,8 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } ] @@ -2070,21 +2070,6 @@ "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": { - "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", @@ -2106,7 +2091,7 @@ { "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_by_code", "body": "", "status": 404, "response": { @@ -2121,7 +2106,22 @@ { "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": { + "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", + "path": "/api/v2/email-templates/change_password", "body": "", "status": 404, "response": { @@ -2155,7 +2155,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/reset_email_by_code", + "path": "/api/v2/email-templates/blocked_account", "body": "", "status": 404, "response": { @@ -2170,7 +2170,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/reset_email", + "path": "/api/v2/email-templates/enrollment_email", "body": "", "status": 404, "response": { @@ -2185,7 +2185,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/stolen_credentials", + "path": "/api/v2/email-templates/password_reset", "body": "", "status": 404, "response": { @@ -2200,7 +2200,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/async_approval", + "path": "/api/v2/email-templates/reset_email", "body": "", "status": 404, "response": { @@ -2215,7 +2215,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/blocked_account", + "path": "/api/v2/email-templates/async_approval", "body": "", "status": 404, "response": { @@ -2230,7 +2230,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/password_reset", + "path": "/api/v2/email-templates/mfa_oob_code", "body": "", "status": 404, "response": { @@ -2245,7 +2245,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": { @@ -2260,7 +2260,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_by_code", "body": "", "status": 404, "response": { @@ -2850,7 +2850,7 @@ { "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": {}, @@ -2860,7 +2860,7 @@ { "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": {}, @@ -3103,7 +3103,101 @@ "body": "", "status": 200, "response": { - "providers": [] + "providers": [ + { + "id": "pro_mY3L5BP6iVUUzpv22opofm", + "tenant": "auth0-deploy-cli-e2e", + "name": "custom", + "channel": "phone", + "disabled": false, + "configuration": { + "delivery_methods": [ + "text" + ] + }, + "credentials": null, + "created_at": "2025-12-09T12:24:00.604Z", + "updated_at": "2025-12-09T12:26:07.171Z" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/branding/phone/templates", + "body": "", + "status": 200, + "response": { + "templates": [ + { + "id": "tem_dL83uTmWn8moGzm8UgAk4Q", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "blocked_account", + "disabled": false, + "created_at": "2025-12-09T12:22:47.683Z", + "updated_at": "2025-12-09T12:26:08.914Z", + "content": { + "syntax": "liquid", + "body": { + "text": "We detected suspicious activity on your account from the ip {{user.source_ip}}{% if user.city %} from {{user.city}}, {{user.country}}{% elsif user.country %} from {{user.country}}{% endif %}. Logins from this IP have been blocked on your account. If this is your IP, please reset your password to unblock your account. Otherwise, disregard this message.", + "voice": "We detected suspicious activity on your account from the ip {{user.source_ip}}{% if user.city %} from {{user.city}}, {{user.country}}{% elsif user.country %} from {{user.country}}{% endif %}. Logins from this IP have been blocked on your account. If this is your IP, please reset your password to unblock your account. Otherwise, disregard this message." + }, + "from": "0032232323" + } + }, + { + "id": "tem_xqbUSF83fpnRv8r8rqXFDZ", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "change_password", + "disabled": false, + "created_at": "2025-12-09T12:26:20.243Z", + "updated_at": "2025-12-09T12:26:20.243Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your password change code for {{ friendly_name | escape }}", + "voice": "Hello. Your password change code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your password change code is {{ pause }} {{ code | escape }}" + } + } + }, + { + "id": "tem_qarYST5TTE5pbMNB5NHZAj", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "otp_enroll", + "disabled": false, + "created_at": "2025-12-09T12:26:25.327Z", + "updated_at": "2025-12-09T12:26:25.327Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your verification code for {{ friendly_name | escape }}. Please enter this code to verify your enrollment.", + "voice": "Hello. Your verification code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your verification code is {{ pause }} {{ code | escape }}" + } + } + }, + { + "id": "tem_o4LBTt4NQyX8K4vC9dPafR", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "otp_verify", + "disabled": false, + "created_at": "2025-12-09T12:26:30.547Z", + "updated_at": "2025-12-09T12:26:30.547Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your verification code for {{ friendly_name | escape }}", + "voice": "Hello. Your verification code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your verification code is {{ pause }} {{ code | escape }}" + } + } + } + ] }, "rawHeaders": [], "responseIsBinary": false @@ -3206,7 +3300,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": {}, @@ -3216,7 +3310,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": {}, @@ -3236,7 +3330,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": {}, @@ -3246,7 +3340,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": {}, @@ -3256,7 +3350,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-password/custom-text/en", "body": "", "status": 200, "response": {}, @@ -3266,7 +3360,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/signup-id/custom-text/en", "body": "", "status": 200, "response": {}, @@ -3276,7 +3370,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/phone-identifier-challenge/custom-text/en", + "path": "/api/v2/prompts/phone-identifier-enrollment/custom-text/en", "body": "", "status": 200, "response": {}, @@ -3286,7 +3380,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/phone-identifier-enrollment/custom-text/en", + "path": "/api/v2/prompts/phone-identifier-challenge/custom-text/en", "body": "", "status": 200, "response": {}, @@ -3316,7 +3410,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/consent/custom-text/en", + "path": "/api/v2/prompts/custom-form/custom-text/en", "body": "", "status": 200, "response": {}, @@ -3326,7 +3420,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/custom-form/custom-text/en", + "path": "/api/v2/prompts/consent/custom-text/en", "body": "", "status": 200, "response": {}, @@ -3416,7 +3510,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-recovery-code/custom-text/en", + "path": "/api/v2/prompts/mfa-email/custom-text/en", "body": "", "status": 200, "response": {}, @@ -3426,7 +3520,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-email/custom-text/en", + "path": "/api/v2/prompts/mfa-recovery-code/custom-text/en", "body": "", "status": 200, "response": {}, @@ -3476,7 +3570,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/email-otp-challenge/custom-text/en", + "path": "/api/v2/prompts/organizations/custom-text/en", "body": "", "status": 200, "response": {}, @@ -3486,7 +3580,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/organizations/custom-text/en", + "path": "/api/v2/prompts/email-otp-challenge/custom-text/en", "body": "", "status": 200, "response": {}, @@ -3526,7 +3620,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/passkeys/custom-text/en", + "path": "/api/v2/prompts/brute-force-protection/custom-text/en", "body": "", "status": 200, "response": {}, @@ -3536,7 +3630,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/brute-force-protection/custom-text/en", + "path": "/api/v2/prompts/passkeys/custom-text/en", "body": "", "status": 200, "response": {}, @@ -3546,7 +3640,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": {}, @@ -3556,7 +3650,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": {}, @@ -3566,7 +3660,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": {}, @@ -3631,33 +3725,33 @@ } ], "created_at": "2025-12-05T14:18:53.100690661Z", - "updated_at": "2025-12-05T14:18:53.114050616Z", + "updated_at": "2025-12-09T12:25:51.494697086Z", "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": "node18", "status": "built", "secrets": [], "current_version": { - "id": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "44fba440-0a0d-4db2-94bf-fc48386af8de", "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": "node18", "status": "BUILT", - "number": 1, - "build_time": "2025-12-05T14:18:53.859494195Z", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.860524296Z" + "number": 5, + "build_time": "2025-12-09T12:25:52.348112095Z", + "created_at": "2025-12-09T12:25:52.274537523Z", + "updated_at": "2025-12-09T12:25:52.349226046Z" }, "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": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "44fba440-0a0d-4db2-94bf-fc48386af8de", "deployed": true, - "number": 1, - "built_at": "2025-12-05T14:18:53.859494195Z", + "number": 5, + "built_at": "2025-12-09T12:25:52.348112095Z", "secrets": [], "status": "built", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.860524296Z", + "created_at": "2025-12-09T12:25:52.274537523Z", + "updated_at": "2025-12-09T12:25:52.349226046Z", "runtime": "node18", "supported_triggers": [ { @@ -3667,9 +3761,56 @@ ] }, "all_changes_deployed": true + }, + { + "id": "50d86033-6bc2-4ceb-8991-d14c85d2e304", + "name": "Custom Phone Provider", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ], + "created_at": "2025-12-09T12:23:14.388072786Z", + "updated_at": "2025-12-09T12:25:51.513462250Z", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "runtime": "node22", + "status": "built", + "secrets": [], + "current_version": { + "id": "96746eb0-d30a-43c8-97b1-7e52ed7f99d8", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "runtime": "node22", + "status": "BUILT", + "number": 2, + "build_time": "2025-12-09T12:25:52.371869360Z", + "created_at": "2025-12-09T12:25:52.307767155Z", + "updated_at": "2025-12-09T12:25:52.372388702Z" + }, + "deployed_version": { + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "id": "96746eb0-d30a-43c8-97b1-7e52ed7f99d8", + "deployed": true, + "number": 2, + "built_at": "2025-12-09T12:25:52.371869360Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:25:52.307767155Z", + "updated_at": "2025-12-09T12:25:52.372388702Z", + "runtime": "node22", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ] + }, + "all_changes_deployed": true } ], - "total": 1, + "total": 2, "per_page": 100 }, "rawHeaders": [], @@ -3683,6 +3824,18 @@ "status": 200, "response": { "triggers": [ + { + "id": "post-login", + "version": "v2", + "status": "DEPRECATED", + "runtimes": [ + "node12", + "node18" + ], + "default_runtime": "node16", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, { "id": "post-login", "version": "v3", @@ -3700,28 +3853,6 @@ } ] }, - { - "id": "post-login", - "version": "v2", - "status": "DEPRECATED", - "runtimes": [ - "node18" - ], - "default_runtime": "node16", - "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": "credentials-exchange", "version": "v2", @@ -3739,6 +3870,7 @@ "version": "v2", "status": "CURRENT", "runtimes": [ + "node12", "node18-actions", "node22" ], @@ -3991,7 +4123,58 @@ "body": "", "status": 200, "response": { - "bindings": [], + "bindings": [ + { + "id": "98a1ef64-bf5f-4128-8ce5-0b3f966d81c9", + "trigger_id": "custom-phone-provider", + "action": { + "id": "50d86033-6bc2-4ceb-8991-d14c85d2e304", + "name": "Custom Phone Provider", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ], + "created_at": "2025-12-09T12:23:14.388072786Z", + "updated_at": "2025-12-09T12:25:51.502965767Z", + "current_version": { + "id": "96746eb0-d30a-43c8-97b1-7e52ed7f99d8", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "runtime": "node22", + "status": "BUILT", + "number": 2, + "build_time": "2025-12-09T12:25:52.371869360Z", + "created_at": "2025-12-09T12:25:52.307767155Z", + "updated_at": "2025-12-09T12:25:52.372388702Z" + }, + "deployed_version": { + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "id": "96746eb0-d30a-43c8-97b1-7e52ed7f99d8", + "deployed": true, + "number": 2, + "built_at": "2025-12-09T12:25:52.371869360Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:25:52.307767155Z", + "updated_at": "2025-12-09T12:25:52.372388702Z", + "runtime": "node22", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ] + }, + "all_changes_deployed": false + }, + "created_at": "2025-12-09T12:26:07.127919966Z", + "updated_at": "2025-12-09T12:26:07.127919966Z", + "display_name": "Custom Phone Provider" + } + ], + "total": 1, "per_page": 50 }, "rawHeaders": [], @@ -4753,6 +4936,29 @@ "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": [] + }, + "pre-change-password": { + "shields": [] + } + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -4802,22 +5008,16 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/attack-protection/breached-password-detection", + "path": "/api/v2/attack-protection/bot-detection", "body": "", "status": 200, "response": { - "enabled": false, - "shields": [], - "admin_notification_frequency": [], - "method": "standard", - "stage": { - "pre-user-registration": { - "shields": [] - }, - "pre-change-password": { - "shields": [] - } - } + "challenge_password_policy": "never", + "challenge_passwordless_policy": "never", + "challenge_password_reset_policy": "never", + "allowlist": [], + "bot_detection_level": "medium", + "monitoring_mode_enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -4860,24 +5060,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/attack-protection/bot-detection", - "body": "", - "status": 200, - "response": { - "challenge_password_policy": "never", - "challenge_passwordless_policy": "never", - "challenge_password_reset_policy": "never", - "allowlist": [], - "bot_detection_level": "medium", - "monitoring_mode_enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/log-streams", + "path": "/api/v2/log-streams", "body": "", "status": 200, "response": [ @@ -4887,7 +5070,7 @@ "type": "datadog", "status": "active", "sink": { - "datadogApiKey": "some-sensitive-api-key", + "datadogApiKey": "##LOGSTREAMS_DATADOG_SECRET##", "datadogRegion": "us" }, "isPriority": false @@ -4987,7 +5170,7 @@ "name": "Blank-form", "flow_count": 0, "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T14:19:17.478Z" + "updated_at": "2025-12-05T14:24:57.289Z" } ] }, @@ -5073,7 +5256,7 @@ } }, "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T14:19:17.478Z" + "updated_at": "2025-12-05T14:24:57.289Z" }, "rawHeaders": [], "responseIsBinary": false @@ -5182,7 +5365,7 @@ "okta" ], "created_at": "2024-11-26T11:58:18.962Z", - "updated_at": "2025-12-05T14:19:10.944Z", + "updated_at": "2025-12-09T12:26:08.151Z", "branding": { "colors": { "primary": "#19aecc" @@ -5234,7 +5417,7 @@ } }, "created_at": "2025-09-09T04:41:43.671Z", - "updated_at": "2025-12-05T14:18:54.912Z", + "updated_at": "2025-12-09T12:25:53.862Z", "id": "acl_wpZ6oScRU5L6QKAxMUMHmx" } ] @@ -7554,11 +7737,10 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/clients/XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", + "path": "/api/v2/clients/ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", "body": { - "name": "auth0-deploy-cli-extension", + "name": "The Default App", "allowed_clients": [], - "app_type": "non_interactive", "callbacks": [], "client_aliases": [], "client_metadata": {}, @@ -7566,6 +7748,9 @@ "cross_origin_authentication": false, "custom_login_page_on": true, "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", "client_credentials" ], "is_first_party": true, @@ -7582,16 +7767,17 @@ "enabled": false } }, - "oidc_conformant": true, + "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" }, @@ -7600,7 +7786,7 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "auth0-deploy-cli-extension", + "name": "The Default App", "allowed_clients": [], "callbacks": [], "client_metadata": {}, @@ -7614,16 +7800,17 @@ "enabled": false } }, - "oidc_conformant": true, + "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, "cross_origin_authentication": false, "signing_keys": [ @@ -7633,7 +7820,7 @@ "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7643,8 +7830,10 @@ }, "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 @@ -7655,10 +7844,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/clients/ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", + "path": "/api/v2/clients/XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", "body": { - "name": "The Default App", + "name": "auth0-deploy-cli-extension", "allowed_clients": [], + "app_type": "non_interactive", "callbacks": [], "client_aliases": [], "client_metadata": {}, @@ -7666,9 +7856,6 @@ "cross_origin_authentication": false, "custom_login_page_on": true, "grant_types": [ - "authorization_code", - "implicit", - "refresh_token", "client_credentials" ], "is_first_party": true, @@ -7685,17 +7872,16 @@ "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" }, @@ -7704,7 +7890,7 @@ "tenant": "auth0-deploy-cli-e2e", "global": false, "is_token_endpoint_ip_header_trusted": false, - "name": "The Default App", + "name": "auth0-deploy-cli-extension", "allowed_clients": [], "callbacks": [], "client_metadata": {}, @@ -7718,17 +7904,16 @@ "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, "cross_origin_authentication": false, "signing_keys": [ @@ -7738,7 +7923,7 @@ "subject": "/CN=auth0-deploy-cli-e2e.us.auth0.com" } ], - "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -7748,10 +7933,8 @@ }, "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 @@ -7762,7 +7945,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/otp", + "path": "/api/v2/guardian/factors/email", "body": { "enabled": false }, @@ -7776,7 +7959,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 }, @@ -7790,7 +7973,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/duo", + "path": "/api/v2/guardian/factors/webauthn-platform", "body": { "enabled": false }, @@ -7804,7 +7987,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/recovery-code", + "path": "/api/v2/guardian/factors/webauthn-roaming", "body": { "enabled": false }, @@ -7818,7 +8001,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/webauthn-roaming", + "path": "/api/v2/guardian/factors/recovery-code", "body": { "enabled": false }, @@ -7832,7 +8015,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 }, @@ -7846,7 +8029,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/sms", + "path": "/api/v2/guardian/factors/push-notification", "body": { "enabled": false }, @@ -7860,7 +8043,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PUT", - "path": "/api/v2/guardian/factors/push-notification", + "path": "/api/v2/guardian/factors/duo", "body": { "enabled": false }, @@ -7959,33 +8142,33 @@ } ], "created_at": "2025-12-05T14:18:53.100690661Z", - "updated_at": "2025-12-05T14:18:53.114050616Z", + "updated_at": "2025-12-09T12:25:51.494697086Z", "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": "node18", "status": "built", "secrets": [], "current_version": { - "id": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "44fba440-0a0d-4db2-94bf-fc48386af8de", "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": "node18", "status": "BUILT", - "number": 1, - "build_time": "2025-12-05T14:18:53.859494195Z", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.860524296Z" + "number": 5, + "build_time": "2025-12-09T12:25:52.348112095Z", + "created_at": "2025-12-09T12:25:52.274537523Z", + "updated_at": "2025-12-09T12:25:52.349226046Z" }, "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": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "44fba440-0a0d-4db2-94bf-fc48386af8de", "deployed": true, - "number": 1, - "built_at": "2025-12-05T14:18:53.859494195Z", + "number": 5, + "built_at": "2025-12-09T12:25:52.348112095Z", "secrets": [], "status": "built", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.860524296Z", + "created_at": "2025-12-09T12:25:52.274537523Z", + "updated_at": "2025-12-09T12:25:52.349226046Z", "runtime": "node18", "supported_triggers": [ { @@ -7995,14 +8178,129 @@ ] }, "all_changes_deployed": true + }, + { + "id": "50d86033-6bc2-4ceb-8991-d14c85d2e304", + "name": "Custom Phone Provider", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ], + "created_at": "2025-12-09T12:23:14.388072786Z", + "updated_at": "2025-12-09T12:25:51.513462250Z", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "runtime": "node22", + "status": "built", + "secrets": [], + "current_version": { + "id": "96746eb0-d30a-43c8-97b1-7e52ed7f99d8", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "runtime": "node22", + "status": "BUILT", + "number": 2, + "build_time": "2025-12-09T12:25:52.371869360Z", + "created_at": "2025-12-09T12:25:52.307767155Z", + "updated_at": "2025-12-09T12:25:52.372388702Z" + }, + "deployed_version": { + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "id": "96746eb0-d30a-43c8-97b1-7e52ed7f99d8", + "deployed": true, + "number": 2, + "built_at": "2025-12-09T12:25:52.371869360Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:25:52.307767155Z", + "updated_at": "2025-12-09T12:25:52.372388702Z", + "runtime": "node22", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ] + }, + "all_changes_deployed": true } ], - "total": 1, + "total": 2, "per_page": 100 }, "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/actions/actions/50d86033-6bc2-4ceb-8991-d14c85d2e304", + "body": { + "name": "Custom Phone Provider", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "runtime": "node22", + "secrets": [], + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ] + }, + "status": 200, + "response": { + "id": "50d86033-6bc2-4ceb-8991-d14c85d2e304", + "name": "Custom Phone Provider", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ], + "created_at": "2025-12-09T12:23:14.388072786Z", + "updated_at": "2025-12-09T12:30:12.235258402Z", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "runtime": "node22", + "status": "pending", + "secrets": [], + "current_version": { + "id": "96746eb0-d30a-43c8-97b1-7e52ed7f99d8", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "runtime": "node22", + "status": "BUILT", + "number": 2, + "build_time": "2025-12-09T12:25:52.371869360Z", + "created_at": "2025-12-09T12:25:52.307767155Z", + "updated_at": "2025-12-09T12:25:52.372388702Z" + }, + "deployed_version": { + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "id": "96746eb0-d30a-43c8-97b1-7e52ed7f99d8", + "deployed": true, + "number": 2, + "built_at": "2025-12-09T12:25:52.371869360Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:25:52.307767155Z", + "updated_at": "2025-12-09T12:25:52.372388702Z", + "runtime": "node22", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ] + }, + "all_changes_deployed": true + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", @@ -8031,33 +8329,33 @@ } ], "created_at": "2025-12-05T14:18:53.100690661Z", - "updated_at": "2025-12-05T14:24:28.025061142Z", + "updated_at": "2025-12-09T12:30:12.235100452Z", "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": "node18", "status": "pending", "secrets": [], "current_version": { - "id": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "44fba440-0a0d-4db2-94bf-fc48386af8de", "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": "node18", "status": "BUILT", - "number": 1, - "build_time": "2025-12-05T14:18:53.859494195Z", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.860524296Z" + "number": 5, + "build_time": "2025-12-09T12:25:52.348112095Z", + "created_at": "2025-12-09T12:25:52.274537523Z", + "updated_at": "2025-12-09T12:25:52.349226046Z" }, "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": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "44fba440-0a0d-4db2-94bf-fc48386af8de", "deployed": true, - "number": 1, - "built_at": "2025-12-05T14:18:53.859494195Z", + "number": 5, + "built_at": "2025-12-09T12:25:52.348112095Z", "secrets": [], "status": "built", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.860524296Z", + "created_at": "2025-12-09T12:25:52.274537523Z", + "updated_at": "2025-12-09T12:25:52.349226046Z", "runtime": "node18", "supported_triggers": [ { @@ -8089,33 +8387,33 @@ } ], "created_at": "2025-12-05T14:18:53.100690661Z", - "updated_at": "2025-12-05T14:24:28.025061142Z", + "updated_at": "2025-12-09T12:30:12.235100452Z", "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": "node18", "status": "built", "secrets": [], "current_version": { - "id": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "44fba440-0a0d-4db2-94bf-fc48386af8de", "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": "node18", "status": "BUILT", - "number": 1, - "build_time": "2025-12-05T14:18:53.859494195Z", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.860524296Z" + "number": 5, + "build_time": "2025-12-09T12:25:52.348112095Z", + "created_at": "2025-12-09T12:25:52.274537523Z", + "updated_at": "2025-12-09T12:25:52.349226046Z" }, "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": "6a213299-32ce-486f-addb-5864d95ac3d9", + "id": "44fba440-0a0d-4db2-94bf-fc48386af8de", "deployed": true, - "number": 1, - "built_at": "2025-12-05T14:18:53.859494195Z", + "number": 5, + "built_at": "2025-12-09T12:25:52.348112095Z", "secrets": [], "status": "built", - "created_at": "2025-12-05T14:18:53.780088164Z", - "updated_at": "2025-12-05T14:18:53.860524296Z", + "created_at": "2025-12-09T12:25:52.274537523Z", + "updated_at": "2025-12-09T12:25:52.349226046Z", "runtime": "node18", "supported_triggers": [ { @@ -8125,9 +8423,56 @@ ] }, "all_changes_deployed": true + }, + { + "id": "50d86033-6bc2-4ceb-8991-d14c85d2e304", + "name": "Custom Phone Provider", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ], + "created_at": "2025-12-09T12:23:14.388072786Z", + "updated_at": "2025-12-09T12:30:12.235258402Z", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "runtime": "node22", + "status": "built", + "secrets": [], + "current_version": { + "id": "96746eb0-d30a-43c8-97b1-7e52ed7f99d8", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "runtime": "node22", + "status": "BUILT", + "number": 2, + "build_time": "2025-12-09T12:25:52.371869360Z", + "created_at": "2025-12-09T12:25:52.307767155Z", + "updated_at": "2025-12-09T12:25:52.372388702Z" + }, + "deployed_version": { + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "id": "96746eb0-d30a-43c8-97b1-7e52ed7f99d8", + "deployed": true, + "number": 2, + "built_at": "2025-12-09T12:25:52.371869360Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:25:52.307767155Z", + "updated_at": "2025-12-09T12:25:52.372388702Z", + "runtime": "node22", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ] + }, + "all_changes_deployed": true } ], - "total": 1, + "total": 2, "per_page": 100 }, "rawHeaders": [], @@ -8142,13 +8487,13 @@ "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": "f2b70924-49de-4b47-acbc-96602dd5e836", + "id": "0add2116-19c1-4f2d-b66a-3592d7d38559", "deployed": false, - "number": 2, + "number": 6, "secrets": [], "status": "built", - "created_at": "2025-12-05T14:24:28.826233092Z", - "updated_at": "2025-12-05T14:24:28.826233092Z", + "created_at": "2025-12-09T12:30:12.969210112Z", + "updated_at": "2025-12-09T12:30:12.969210112Z", "runtime": "node18", "supported_triggers": [ { @@ -8166,7 +8511,7 @@ } ], "created_at": "2025-12-05T14:18:53.100690661Z", - "updated_at": "2025-12-05T14:24:28.016621482Z", + "updated_at": "2025-12-09T12:30:12.227479056Z", "all_changes_deployed": false } }, @@ -8175,67 +8520,39 @@ }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/attack-protection/bot-detection", - "body": { - "challenge_password_policy": "never", - "challenge_passwordless_policy": "never", - "challenge_password_reset_policy": "never", - "allowlist": [], - "bot_detection_level": "medium", - "monitoring_mode_enabled": false - }, + "method": "POST", + "path": "/api/v2/actions/actions/50d86033-6bc2-4ceb-8991-d14c85d2e304/deploy", + "body": "", "status": 200, "response": { - "challenge_password_policy": "never", - "challenge_passwordless_policy": "never", - "challenge_password_reset_policy": "never", - "allowlist": [], - "bot_detection_level": "medium", - "monitoring_mode_enabled": 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 + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "deployed": false, + "number": 3, + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:12.977011820Z", + "runtime": "node22", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" } - } - }, - "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 - } + "action": { + "id": "50d86033-6bc2-4ceb-8991-d14c85d2e304", + "name": "Custom Phone Provider", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ], + "created_at": "2025-12-09T12:23:14.388072786Z", + "updated_at": "2025-12-09T12:30:12.225370374Z", + "all_changes_deployed": false } }, "rawHeaders": [], @@ -8272,15 +8589,55 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/attack-protection/breached-password-detection", + "path": "/api/v2/attack-protection/captcha", "body": { - "enabled": false, - "shields": [], - "admin_notification_frequency": [], - "method": "standard", - "stage": { - "pre-user-registration": { - "shields": [] + "active_provider_id": "auth_challenge", + "auth_challenge": { + "fail_open": false + } + }, + "status": 200, + "response": { + "active_provider_id": "auth_challenge", + "simple_captcha": {}, + "auth_challenge": { + "fail_open": false + }, + "recaptcha_v2": { + "site_key": "" + }, + "recaptcha_enterprise": { + "site_key": "", + "project_id": "" + }, + "hcaptcha": { + "site_key": "" + }, + "friendly_captcha": { + "site_key": "" + }, + "arkose": { + "site_key": "", + "client_subdomain": "client-api", + "verify_subdomain": "verify-api", + "fail_open": 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": [] }, "pre-change-password": { "shields": [] @@ -8308,38 +8665,66 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/attack-protection/captcha", + "path": "/api/v2/attack-protection/bot-detection", "body": { - "active_provider_id": "auth_challenge", - "auth_challenge": { - "fail_open": false + "challenge_password_policy": "never", + "challenge_passwordless_policy": "never", + "challenge_password_reset_policy": "never", + "allowlist": [], + "bot_detection_level": "medium", + "monitoring_mode_enabled": false + }, + "status": 200, + "response": { + "challenge_password_policy": "never", + "challenge_passwordless_policy": "never", + "challenge_password_reset_policy": "never", + "allowlist": [], + "bot_detection_level": "medium", + "monitoring_mode_enabled": 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": { - "active_provider_id": "auth_challenge", - "simple_captcha": {}, - "auth_challenge": { - "fail_open": false - }, - "recaptcha_v2": { - "site_key": "" - }, - "recaptcha_enterprise": { - "site_key": "", - "project_id": "" - }, - "hcaptcha": { - "site_key": "" - }, - "friendly_captcha": { - "site_key": "" - }, - "arkose": { - "site_key": "", - "client_subdomain": "client-api", - "verify_subdomain": "verify-api", - "fail_open": false + "enabled": true, + "shields": [ + "admin_notification", + "block" + ], + "allowlist": [], + "stage": { + "pre-login": { + "max_attempts": 100, + "rate": 864000 + }, + "pre-user-registration": { + "max_attempts": 50, + "rate": 1200 + } } }, "rawHeaders": [], @@ -8382,7 +8767,7 @@ } }, "created_at": "2025-09-09T04:41:43.671Z", - "updated_at": "2025-12-05T14:18:54.912Z", + "updated_at": "2025-12-09T12:25:53.862Z", "id": "acl_wpZ6oScRU5L6QKAxMUMHmx" } ] @@ -8427,7 +8812,7 @@ } }, "created_at": "2025-09-09T04:41:43.671Z", - "updated_at": "2025-12-05T14:24:30.497Z", + "updated_at": "2025-12-09T12:30:14.491Z", "id": "acl_wpZ6oScRU5L6QKAxMUMHmx" }, "rawHeaders": [], @@ -9178,8 +9563,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -9220,8 +9605,8 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } ] @@ -9301,8 +9686,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -9343,8 +9728,8 @@ "Username-Password-Authentication" ], "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ] } ] @@ -9355,16 +9740,16 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_CfDqv7jPXpFqETeK/clients?take=50", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE/clients?take=50", "body": "", "status": 200, "response": { "clients": [ { - "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" }, { - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" } ] }, @@ -9374,16 +9759,16 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE/clients?take=50", + "path": "/api/v2/connections/con_CfDqv7jPXpFqETeK/clients?take=50", "body": "", "status": 200, "response": { "clients": [ { - "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" }, { - "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" } ] }, @@ -9393,16 +9778,16 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_CfDqv7jPXpFqETeK/clients?take=50", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE/clients?take=50", "body": "", "status": 200, "response": { "clients": [ { - "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" }, { - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" } ] }, @@ -9412,16 +9797,16 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE/clients?take=50", + "path": "/api/v2/connections/con_CfDqv7jPXpFqETeK/clients?take=50", "body": "", "status": 200, "response": { "clients": [ { - "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" }, { - "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" } ] }, @@ -9431,23 +9816,42 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_CfDqv7jPXpFqETeK", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE", "body": "", "status": 200, "response": { - "id": "con_CfDqv7jPXpFqETeK", + "id": "con_bBSD5AQUW0Q5aLuE", "options": { "mfa": { "active": true, "return_enroll_settings": true }, - "passwordPolicy": "good", + "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 @@ -9457,10 +9861,17 @@ "api_behavior": "required" } }, - "brute_force_protection": true + "brute_force_protection": true, + "password_no_personal_info": { + "enable": true + }, + "password_complexity_options": { + "min_length": 8 + }, + "enabledDatabaseCustomization": true }, "strategy": "auth0", - "name": "Username-Password-Authentication", + "name": "boo-baz-db-connection-test", "is_domain_connection": false, "authentication": { "active": true @@ -9469,11 +9880,11 @@ "active": false }, "enabled_clients": [ - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", - "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ], "realms": [ - "Username-Password-Authentication" + "boo-baz-db-connection-test" ] }, "rawHeaders": [], @@ -9482,42 +9893,23 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE", + "path": "/api/v2/connections/con_CfDqv7jPXpFqETeK", "body": "", "status": 200, "response": { - "id": "con_bBSD5AQUW0Q5aLuE", + "id": "con_CfDqv7jPXpFqETeK", "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 @@ -9527,17 +9919,10 @@ "api_behavior": "required" } }, - "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, "authentication": { "active": true @@ -9546,11 +9931,11 @@ "active": false }, "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" ], "realms": [ - "boo-baz-db-connection-test" + "Username-Password-Authentication" ] }, "rawHeaders": [], @@ -10416,8 +10801,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -10566,8 +10951,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -11841,7 +12226,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/client-grants/cgr_ReJeayDzA8FTvFPY", + "path": "/api/v2/client-grants/cgr_JYmQHwQEXGDCc53P", "body": { "scope": [ "read:client_grants", @@ -11978,8 +12363,8 @@ }, "status": 200, "response": { - "id": "cgr_ReJeayDzA8FTvFPY", - "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", + "id": "cgr_JYmQHwQEXGDCc53P", + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -12121,7 +12506,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/client-grants/cgr_JYmQHwQEXGDCc53P", + "path": "/api/v2/client-grants/cgr_ReJeayDzA8FTvFPY", "body": { "scope": [ "read:client_grants", @@ -12258,8 +12643,8 @@ }, "status": 200, "response": { - "id": "cgr_JYmQHwQEXGDCc53P", - "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", + "id": "cgr_ReJeayDzA8FTvFPY", + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", "audience": "https://auth0-deploy-cli-e2e.us.auth0.com/api/v2/", "scope": [ "read:client_grants", @@ -12622,6 +13007,65 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/branding/phone/providers", + "body": "", + "status": 200, + "response": { + "providers": [ + { + "id": "pro_mY3L5BP6iVUUzpv22opofm", + "tenant": "auth0-deploy-cli-e2e", + "name": "custom", + "channel": "phone", + "disabled": false, + "configuration": { + "delivery_methods": [ + "text" + ] + }, + "credentials": null, + "created_at": "2025-12-09T12:24:00.604Z", + "updated_at": "2025-12-09T12:26:07.171Z" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/branding/phone/providers/pro_mY3L5BP6iVUUzpv22opofm", + "body": { + "name": "custom", + "configuration": { + "delivery_methods": [ + "text" + ] + }, + "disabled": false + }, + "status": 200, + "response": { + "id": "pro_mY3L5BP6iVUUzpv22opofm", + "tenant": "auth0-deploy-cli-e2e", + "name": "custom", + "channel": "phone", + "disabled": false, + "configuration": { + "delivery_methods": [ + "text" + ] + }, + "created_at": "2025-12-09T12:24:00.604Z", + "updated_at": "2025-12-09T12:30:28.218Z" + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -12651,7 +13095,7 @@ "okta" ], "created_at": "2024-11-26T11:58:18.962Z", - "updated_at": "2025-12-05T14:19:10.944Z", + "updated_at": "2025-12-09T12:26:08.151Z", "branding": { "colors": { "primary": "#19aecc" @@ -12727,7 +13171,7 @@ "okta" ], "created_at": "2024-11-26T11:58:18.962Z", - "updated_at": "2025-12-05T14:24:44.076Z", + "updated_at": "2025-12-09T12:30:29.308Z", "branding": { "colors": { "primary": "#19aecc" @@ -12737,28 +13181,214 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/branding/phone/templates", + "body": "", + "status": 200, + "response": { + "templates": [ + { + "id": "tem_dL83uTmWn8moGzm8UgAk4Q", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "blocked_account", + "disabled": false, + "created_at": "2025-12-09T12:22:47.683Z", + "updated_at": "2025-12-09T12:26:08.914Z", + "content": { + "syntax": "liquid", + "body": { + "text": "We detected suspicious activity on your account from the ip {{user.source_ip}}{% if user.city %} from {{user.city}}, {{user.country}}{% elsif user.country %} from {{user.country}}{% endif %}. Logins from this IP have been blocked on your account. If this is your IP, please reset your password to unblock your account. Otherwise, disregard this message.", + "voice": "We detected suspicious activity on your account from the ip {{user.source_ip}}{% if user.city %} from {{user.city}}, {{user.country}}{% elsif user.country %} from {{user.country}}{% endif %}. Logins from this IP have been blocked on your account. If this is your IP, please reset your password to unblock your account. Otherwise, disregard this message." + }, + "from": "0032232323" + } + }, + { + "id": "tem_xqbUSF83fpnRv8r8rqXFDZ", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "change_password", + "disabled": false, + "created_at": "2025-12-09T12:26:20.243Z", + "updated_at": "2025-12-09T12:26:20.243Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your password change code for {{ friendly_name | escape }}", + "voice": "Hello. Your password change code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your password change code is {{ pause }} {{ code | escape }}" + } + } + }, + { + "id": "tem_qarYST5TTE5pbMNB5NHZAj", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "otp_enroll", + "disabled": false, + "created_at": "2025-12-09T12:26:25.327Z", + "updated_at": "2025-12-09T12:26:25.327Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your verification code for {{ friendly_name | escape }}. Please enter this code to verify your enrollment.", + "voice": "Hello. Your verification code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your verification code is {{ pause }} {{ code | escape }}" + } + } + }, + { + "id": "tem_o4LBTt4NQyX8K4vC9dPafR", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "otp_verify", + "disabled": false, + "created_at": "2025-12-09T12:26:30.547Z", + "updated_at": "2025-12-09T12:26:30.547Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your verification code for {{ friendly_name | escape }}", + "voice": "Hello. Your verification code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your verification code is {{ pause }} {{ code | escape }}" + } + } + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", - "path": "/api/v2/email-templates/verify_email", + "path": "/api/v2/branding/phone/templates/tem_dL83uTmWn8moGzm8UgAk4Q", "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 + "content": { + "from": "0032232323", + "body": { + "text": "We detected suspicious activity on your account from the ip {{user.source_ip}}{% if user.city %} from {{user.city}}, {{user.country}}{% elsif user.country %} from {{user.country}}{% endif %}. Logins from this IP have been blocked on your account. If this is your IP, please reset your password to unblock your account. Otherwise, disregard this message.", + "voice": "We detected suspicious activity on your account from the ip {{user.source_ip}}{% if user.city %} from {{user.city}}, {{user.country}}{% elsif user.country %} from {{user.country}}{% endif %}. Logins from this IP have been blocked on your account. If this is your IP, please reset your password to unblock your account. Otherwise, disregard this message." + } + }, + "disabled": false }, "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 + "id": "tem_dL83uTmWn8moGzm8UgAk4Q", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "blocked_account", + "disabled": false, + "created_at": "2025-12-09T12:22:47.683Z", + "updated_at": "2025-12-09T12:30:30.019Z", + "content": { + "syntax": "liquid", + "body": { + "text": "We detected suspicious activity on your account from the ip {{user.source_ip}}{% if user.city %} from {{user.city}}, {{user.country}}{% elsif user.country %} from {{user.country}}{% endif %}. Logins from this IP have been blocked on your account. If this is your IP, please reset your password to unblock your account. Otherwise, disregard this message.", + "voice": "We detected suspicious activity on your account from the ip {{user.source_ip}}{% if user.city %} from {{user.city}}, {{user.country}}{% elsif user.country %} from {{user.country}}{% endif %}. Logins from this IP have been blocked on your account. If this is your IP, please reset your password to unblock your account. Otherwise, disregard this message." + }, + "from": "0032232323" + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/branding/phone/templates/tem_xqbUSF83fpnRv8r8rqXFDZ", + "body": { + "content": { + "body": { + "text": "{{ code | escape }} is your password change code for {{ friendly_name | escape }}", + "voice": "Hello. Your password change code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your password change code is {{ pause }} {{ code | escape }}" + } + }, + "disabled": false + }, + "status": 200, + "response": { + "id": "tem_xqbUSF83fpnRv8r8rqXFDZ", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "change_password", + "disabled": false, + "created_at": "2025-12-09T12:26:20.243Z", + "updated_at": "2025-12-09T12:30:30.034Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your password change code for {{ friendly_name | escape }}", + "voice": "Hello. Your password change code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your password change code is {{ pause }} {{ code | escape }}" + } + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/branding/phone/templates/tem_qarYST5TTE5pbMNB5NHZAj", + "body": { + "content": { + "body": { + "text": "{{ code | escape }} is your verification code for {{ friendly_name | escape }}. Please enter this code to verify your enrollment.", + "voice": "Hello. Your verification code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your verification code is {{ pause }} {{ code | escape }}" + } + }, + "disabled": false + }, + "status": 200, + "response": { + "id": "tem_qarYST5TTE5pbMNB5NHZAj", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "otp_enroll", + "disabled": false, + "created_at": "2025-12-09T12:26:25.327Z", + "updated_at": "2025-12-09T12:30:30.174Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your verification code for {{ friendly_name | escape }}. Please enter this code to verify your enrollment.", + "voice": "Hello. Your verification code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your verification code is {{ pause }} {{ code | escape }}" + } + } + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/branding/phone/templates/tem_o4LBTt4NQyX8K4vC9dPafR", + "body": { + "content": { + "body": { + "text": "{{ code | escape }} is your verification code for {{ friendly_name | escape }}", + "voice": "Hello. Your verification code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your verification code is {{ pause }} {{ code | escape }}" + } + }, + "disabled": false + }, + "status": 200, + "response": { + "id": "tem_o4LBTt4NQyX8K4vC9dPafR", + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "otp_verify", + "disabled": false, + "created_at": "2025-12-09T12:26:30.547Z", + "updated_at": "2025-12-09T12:30:30.365Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your verification code for {{ friendly_name | escape }}", + "voice": "Hello. Your verification code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your verification code is {{ pause }} {{ code | escape }}" + } + } }, "rawHeaders": [], "responseIsBinary": false @@ -12791,6 +13421,32 @@ "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", @@ -13602,8 +14258,8 @@ "boo-baz-db-connection-test" ], "enabled_clients": [ - "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", - "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" ] }, { @@ -14781,7 +15437,7 @@ "type": "datadog", "status": "active", "sink": { - "datadogApiKey": "some-sensitive-api-key", + "datadogApiKey": "##LOGSTREAMS_DATADOG_SECRET##", "datadogRegion": "us" }, "isPriority": false @@ -14840,34 +15496,6 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "PATCH", - "path": "/api/v2/log-streams/lst_0000000000025431", - "body": { - "name": "Suspended DD Log Stream", - "isPriority": false, - "sink": { - "datadogApiKey": "##LOGSTREAMS_DATADOG_SECRET##", - "datadogRegion": "us" - }, - "status": "active" - }, - "status": 200, - "response": { - "id": "lst_0000000000025431", - "name": "Suspended DD Log Stream", - "type": "datadog", - "status": "active", - "sink": { - "datadogApiKey": "##LOGSTREAMS_DATADOG_SECRET##", - "datadogRegion": "us" - }, - "isPriority": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "PATCH", @@ -14969,6 +15597,34 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/log-streams/lst_0000000000025431", + "body": { + "name": "Suspended DD Log Stream", + "isPriority": false, + "sink": { + "datadogApiKey": "##LOGSTREAMS_DATADOG_SECRET##", + "datadogRegion": "us" + }, + "status": "active" + }, + "status": 200, + "response": { + "id": "lst_0000000000025431", + "name": "Suspended DD Log Stream", + "type": "datadog", + "status": "active", + "sink": { + "datadogApiKey": "##LOGSTREAMS_DATADOG_SECRET##", + "datadogRegion": "us" + }, + "isPriority": false + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -14999,6 +15655,78 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "PATCH", + "path": "/api/v2/actions/triggers/custom-phone-provider/bindings", + "body": { + "bindings": [ + { + "ref": { + "type": "action_name", + "value": "Custom Phone Provider" + }, + "display_name": "Custom Phone Provider" + } + ] + }, + "status": 200, + "response": { + "bindings": [ + { + "id": "0c7814f9-5cbb-47bc-a868-cac7b38e7225", + "trigger_id": "custom-phone-provider", + "action": { + "id": "50d86033-6bc2-4ceb-8991-d14c85d2e304", + "name": "Custom Phone Provider", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ], + "created_at": "2025-12-09T12:23:14.388072786Z", + "updated_at": "2025-12-09T12:30:12.225370374Z", + "current_version": { + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "runtime": "node22", + "status": "BUILT", + "number": 3, + "build_time": "2025-12-09T12:30:13.066221969Z", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z" + }, + "deployed_version": { + "code": "/**\n* Handler to be executed while sending a phone notification\n* @param {Event} event - Details about the user and the context in which they are logging in.\n* @param {CustomPhoneProviderAPI} api - Methods and utilities to help change the behavior of sending a phone notification.\n*/\nexports.onExecuteCustomPhoneProvider = async (event, api) => {\n // Code goes here\n return;\n};", + "dependencies": [], + "id": "23bfff1b-d5bb-4f29-bcd5-d5a8779a6843", + "deployed": true, + "number": 3, + "built_at": "2025-12-09T12:30:13.066221969Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-09T12:30:12.977011820Z", + "updated_at": "2025-12-09T12:30:13.067900742Z", + "runtime": "node22", + "supported_triggers": [ + { + "id": "custom-phone-provider", + "version": "v1" + } + ] + }, + "all_changes_deployed": false + }, + "created_at": "2025-12-09T12:30:40.877571889Z", + "updated_at": "2025-12-09T12:30:40.877571889Z", + "display_name": "Custom Phone Provider" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -15032,14 +15760,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/flows?page=0&per_page=100&include_totals=true", + "path": "/api/v2/flows/vault/connections?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { - "limit": 100, + "limit": 50, "start": 0, "total": 0, - "flows": [] + "connections": [] }, "rawHeaders": [], "responseIsBinary": false @@ -15047,14 +15775,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/flows/vault/connections?page=0&per_page=50&include_totals=true", + "path": "/api/v2/flows?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "limit": 50, + "limit": 100, "start": 0, "total": 0, - "connections": [] + "flows": [] }, "rawHeaders": [], "responseIsBinary": false @@ -15105,7 +15833,7 @@ "name": "Blank-form", "flow_count": 0, "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T14:19:17.478Z" + "updated_at": "2025-12-05T14:24:57.289Z" } ] }, @@ -15191,7 +15919,7 @@ } }, "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T14:19:17.478Z" + "updated_at": "2025-12-05T14:24:57.289Z" }, "rawHeaders": [], "responseIsBinary": false @@ -15316,7 +16044,7 @@ } }, "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T14:24:57.289Z" + "updated_at": "2025-12-09T12:30:43.698Z" }, "rawHeaders": [], "responseIsBinary": false 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 bd077cdc4..de506185e 100644 --- a/test/e2e/recordings/should-dump-without-throwing-an-error.json +++ b/test/e2e/recordings/should-dump-without-throwing-an-error.json @@ -1120,7 +1120,7 @@ "body": "", "status": 200, "response": { - "total": 2, + "total": 9, "start": 0, "limit": 100, "clients": [ @@ -1185,6 +1185,7 @@ "is_token_endpoint_ip_header_trusted": false, "name": "Default App", "callbacks": [], + "cross_origin_auth": false, "is_first_party": true, "oidc_conformant": true, "refresh_token": { @@ -1198,7 +1199,6 @@ }, "sso_disabled": false, "cross_origin_authentication": false, - "cross_origin_auth": false, "signing_keys": [ { "cert": "[REDACTED]", @@ -1206,7 +1206,7 @@ "subject": "deprecated" } ], - "client_id": "VTTBLf4Y7vX3tpTVj0TuGPLPXGsAMUrj", + "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", "callback_url_template": false, "client_secret": "[REDACTED]", "jwt_configuration": { @@ -1221,157 +1221,765 @@ "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?take=50&strategy=auth0", - "body": "", - "status": 200, - "response": { - "connections": [ + }, { - "id": "con_LyQ8Ql8u6kYDmUkh", - "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, - "api_behavior": "required" - } + "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 }, - "brute_force_protection": true + "facebook": { + "enabled": false + } }, - "strategy": "auth0", - "name": "Username-Password-Authentication", - "is_domain_connection": false, - "authentication": { - "active": 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" }, - "connected_accounts": { - "active": false + "sso_disabled": false, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false }, - "realms": [ - "Username-Password-Authentication" + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials" ], - "enabled_clients": [ - "VTTBLf4Y7vX3tpTVj0TuGPLPXGsAMUrj", - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" - ] - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/connections/con_LyQ8Ql8u6kYDmUkh/clients?take=50", - "body": "", - "status": 200, - "response": { - "clients": [ - { - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + "custom_login_page_on": true }, { - "client_id": "VTTBLf4Y7vX3tpTVj0TuGPLPXGsAMUrj" - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/connections/con_LyQ8Ql8u6kYDmUkh/clients?take=50", - "body": "", - "status": 200, - "response": { - "clients": [ - { - "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", + "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 }, { - "client_id": "VTTBLf4Y7vX3tpTVj0TuGPLPXGsAMUrj" - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/connections?take=50", - "body": "", - "status": 200, - "response": { - "connections": [ - { - "id": "con_LyQ8Ql8u6kYDmUkh", - "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, - "api_behavior": "required" - } + "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 }, - "brute_force_protection": true + "facebook": { + "enabled": false + } }, - "strategy": "auth0", - "name": "Username-Password-Authentication", - "is_domain_connection": false, - "authentication": { - "active": 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" }, - "connected_accounts": { - "active": false + "sso_disabled": false, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "allowed_origins": [], + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "callback_url_template": false, + "client_secret": "[REDACTED]", + "jwt_configuration": { + "alg": "RS256", + "lifetime_in_seconds": 36000, + "secret_encoded": false }, - "realms": [ - "Username-Password-Authentication" + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "regular_web", + "grant_types": [ + "authorization_code", + "implicit", + "refresh_token", + "client_credentials" ], - "enabled_clients": [ - "VTTBLf4Y7vX3tpTVj0TuGPLPXGsAMUrj", - "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" - ] - } - ] - }, + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "3fBUyX06CDDuksAP7TNZKYONbfYDLZMA", + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } + ], + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", + "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?take=50&strategy=auth0", + "body": "", + "status": 200, + "response": { + "connections": [ + { + "id": "con_bBSD5AQUW0Q5aLuE", + "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, + "api_behavior": "required" + } + }, + "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, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "realms": [ + "boo-baz-db-connection-test" + ], + "enabled_clients": [ + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + ] + }, + { + "id": "con_CfDqv7jPXpFqETeK", + "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, + "api_behavior": "required" + } + }, + "brute_force_protection": true + }, + "strategy": "auth0", + "name": "Username-Password-Authentication", + "is_domain_connection": false, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "realms": [ + "Username-Password-Authentication" + ], + "enabled_clients": [ + "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + ] + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE/clients?take=50", + "body": "", + "status": 200, + "response": { + "clients": [ + { + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + }, + { + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_CfDqv7jPXpFqETeK/clients?take=50", + "body": "", + "status": 200, + "response": { + "clients": [ + { + "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + }, + { + "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_bBSD5AQUW0Q5aLuE/clients?take=50", + "body": "", + "status": 200, + "response": { + "clients": [ + { + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + }, + { + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_CfDqv7jPXpFqETeK/clients?take=50", + "body": "", + "status": 200, + "response": { + "clients": [ + { + "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX" + }, + { + "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections?take=50", + "body": "", + "status": 200, + "response": { + "connections": [ + { + "id": "con_bBSD5AQUW0Q5aLuE", + "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, + "api_behavior": "required" + } + }, + "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, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "realms": [ + "boo-baz-db-connection-test" + ], + "enabled_clients": [ + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", + "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB" + ] + }, + { + "id": "con_yGZ6rzfkdR6mMBoE", + "options": { + "email": true, + "scope": [ + "email", + "profile" + ], + "profile": true + }, + "strategy": "google-oauth2", + "name": "google-oauth2", + "is_domain_connection": false, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "realms": [ + "google-oauth2" + ], + "enabled_clients": [ + "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", + "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz" + ] + }, + { + "id": "con_CfDqv7jPXpFqETeK", + "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, + "api_behavior": "required" + } + }, + "brute_force_protection": true + }, + "strategy": "auth0", + "name": "Username-Password-Authentication", + "is_domain_connection": false, + "authentication": { + "active": true + }, + "connected_accounts": { + "active": false + }, + "realms": [ + "Username-Password-Authentication" + ], + "enabled_clients": [ + "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE" + ] + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_yGZ6rzfkdR6mMBoE/clients?take=50", + "body": "", + "status": 200, + "response": { + "clients": [ + { + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + }, + { + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz" + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/connections/con_yGZ6rzfkdR6mMBoE/clients?take=50", + "body": "", + "status": 200, + "response": { + "clients": [ + { + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa" + }, + { + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz" + } + ] + }, "rawHeaders": [], "responseIsBinary": false }, @@ -1483,7 +2091,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/reset_email_by_code", + "path": "/api/v2/email-templates/verify_email_by_code", "body": "", "status": 404, "response": { @@ -1498,7 +2106,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/async_approval", + "path": "/api/v2/email-templates/mfa_oob_code", "body": "", "status": 404, "response": { @@ -1513,7 +2121,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_by_code", "body": "", "status": 404, "response": { @@ -1528,18 +2136,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 @@ -1547,7 +2151,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/stolen_credentials", + "path": "/api/v2/email-templates/user_invitation", "body": "", "status": 404, "response": { @@ -1562,7 +2166,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": { @@ -1577,14 +2181,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!

\n \n\n", + "from": "", + "resultUrl": "https://example.com/welcome", + "subject": "Welcome", + "syntax": "liquid", + "urlLifetimeInSeconds": 3600, + "enabled": false }, "rawHeaders": [], "responseIsBinary": false @@ -1592,7 +2200,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/change_password", "body": "", "status": 404, "response": { @@ -1607,7 +2215,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/enrollment_email", + "path": "/api/v2/email-templates/async_approval", "body": "", "status": 404, "response": { @@ -1622,7 +2230,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/user_invitation", + "path": "/api/v2/email-templates/password_reset", "body": "", "status": 404, "response": { @@ -1652,7 +2260,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/email-templates/blocked_account", + "path": "/api/v2/email-templates/stolen_credentials", "body": "", "status": 404, "response": { @@ -1672,6 +2280,282 @@ "status": 200, "response": { "client_grants": [ + { + "id": "cgr_JYmQHwQEXGDCc53P", + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", + "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" + ], + "subject_type": "client" + }, + { + "id": "cgr_ReJeayDzA8FTvFPY", + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", + "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" + ], + "subject_type": "client" + }, { "id": "cgr_pbwejzhwoujrsNE8", "client_id": "Vp0gMRF8PtMzekil38qWoj4Fjw2VjRZE", @@ -1915,58 +2799,481 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/guardian/factors", + "path": "/api/v2/guardian/factors", + "body": "", + "status": 200, + "response": [ + { + "name": "sms", + "enabled": false, + "trial_expired": false + }, + { + "name": "push-notification", + "enabled": false, + "trial_expired": false + }, + { + "name": "otp", + "enabled": false, + "trial_expired": false + }, + { + "name": "email", + "enabled": false, + "trial_expired": false + }, + { + "name": "duo", + "enabled": false, + "trial_expired": false + }, + { + "name": "webauthn-roaming", + "enabled": false, + "trial_expired": false + }, + { + "name": "webauthn-platform", + "enabled": false, + "trial_expired": false + }, + { + "name": "recovery-code", + "enabled": false, + "trial_expired": false + } + ], + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/guardian/factors/sms/providers/twilio", + "body": "", + "status": 200, + "response": {}, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/guardian/factors/push-notification/providers/sns", + "body": "", + "status": 200, + "response": {}, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/guardian/factors/sms/templates", + "body": "", + "status": 200, + "response": { + "enrollment_message": "enroll foo", + "verification_message": "verify foo" + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/guardian/policies", + "body": "", + "status": 200, + "response": [], + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/guardian/factors/phone/selected-provider", + "body": "", + "status": 200, + "response": { + "provider": "auth0" + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/guardian/factors/phone/message-types", + "body": "", + "status": 200, + "response": { + "message_types": [] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/roles?per_page=100&page=0&include_totals=true", + "body": "", + "status": 200, + "response": { + "roles": [ + { + "id": "rol_EH7ASyHIXKqKPc4X", + "name": "Admin", + "description": "Can read and write things" + }, + { + "id": "rol_WHMW5tI8GYuTShEL", + "name": "Reader", + "description": "Can only read things" + }, + { + "id": "rol_dkoJYFPEbm4fBQUa", + "name": "read_only", + "description": "Read Only" + }, + { + "id": "rol_6mNIPtAC2wBSBD7S", + "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_EH7ASyHIXKqKPc4X/permissions?per_page=100&page=0&include_totals=true", + "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_EH7ASyHIXKqKPc4X/permissions?per_page=100&page=0&include_totals=true", + "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_WHMW5tI8GYuTShEL/permissions?per_page=100&page=0&include_totals=true", + "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_WHMW5tI8GYuTShEL/permissions?per_page=100&page=0&include_totals=true", + "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_dkoJYFPEbm4fBQUa/permissions?per_page=100&page=0&include_totals=true", + "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_dkoJYFPEbm4fBQUa/permissions?per_page=100&page=0&include_totals=true", + "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_6mNIPtAC2wBSBD7S/permissions?per_page=100&page=0&include_totals=true", + "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_6mNIPtAC2wBSBD7S/permissions?per_page=100&page=0&include_totals=true", + "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/branding", + "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/branding/phone/providers", + "body": "", + "status": 200, + "response": { + "providers": [] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/branding/phone/templates", + "body": "", + "status": 200, + "response": { + "templates": [ + { + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "blocked_account", + "disabled": false, + "created_at": "2025-12-09T12:15:10.084Z", + "updated_at": "2025-12-09T12:15:10.084Z", + "content": { + "syntax": "liquid", + "body": { + "text": "We detected suspicious activity on your account from the ip {{user.source_ip}}{% if user.city %} from {{user.city}}, {{user.country}}{% elsif user.country %} from {{user.country}}{% endif %}. Logins from this IP have been blocked on your account. If this is your IP, please reset your password to unblock your account. Otherwise, disregard this message.", + "voice": "We detected suspicious activity on your account from the ip {{user.source_ip}}{% if user.city %} from {{user.city}}, {{user.country}}{% elsif user.country %} from {{user.country}}{% endif %}. Logins from this IP have been blocked on your account. If this is your IP, please reset your password to unblock your account. Otherwise, disregard this message." + }, + "from": "" + } + }, + { + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "change_password", + "disabled": false, + "created_at": "2025-12-09T12:15:10.084Z", + "updated_at": "2025-12-09T12:15:10.084Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your password change code for {{ friendly_name | escape }}", + "voice": "Hello. Your password change code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your password change code is {{ pause }} {{ code | escape }}" + }, + "from": "" + } + }, + { + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "otp_enroll", + "disabled": false, + "created_at": "2025-12-09T12:15:10.084Z", + "updated_at": "2025-12-09T12:15:10.084Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your verification code for {{ friendly_name | escape }}. Please enter this code to verify your enrollment.", + "voice": "Hello. Your verification code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your verification code is {{ pause }} {{ code | escape }}" + }, + "from": "" + } + }, + { + "tenant": "auth0-deploy-cli-e2e", + "channel": "phone", + "type": "otp_verify", + "disabled": false, + "created_at": "2025-12-09T12:15:10.084Z", + "updated_at": "2025-12-09T12:15:10.084Z", + "content": { + "syntax": "liquid", + "body": { + "text": "{{ code | escape }} is your verification code for {{ friendly_name | escape }}", + "voice": "Hello. Your verification code for {{ friendly_name | escape }} is {{ pause }} {{ code | escape }}. I repeat, your verification code is {{ pause }} {{ code | escape }}" + }, + "from": "" + } + } + ] + }, + "rawHeaders": [], + "responseIsBinary": false + }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/prompts", "body": "", "status": 200, - "response": [ - { - "name": "sms", - "enabled": false, - "trial_expired": false - }, - { - "name": "push-notification", - "enabled": false, - "trial_expired": false + "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://mycompany.org/logoutCallback" + ], + "change_password": { + "enabled": true, + "html": "Change Password\n" }, - { - "name": "otp", - "enabled": false, - "trial_expired": false + "enabled_locales": [ + "en" + ], + "error_page": { + "html": "Error Page\n", + "show_log_link": false, + "url": "https://mycompany.org/error" }, - { - "name": "email", - "enabled": false, - "trial_expired": false + "flags": { + "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_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 }, - { - "name": "duo", - "enabled": false, - "trial_expired": false + "friendly_name": "My Test Tenant", + "guardian_mfa_page": { + "enabled": true, + "html": "MFA\n" }, - { - "name": "webauthn-roaming", - "enabled": false, - "trial_expired": false + "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": { + "colors": { + "primary": "#F8F8F2", + "page_background": "#222221" + } }, - { - "name": "webauthn-platform", - "enabled": false, - "trial_expired": false + "resource_parameter_profile": "audience", + "session_cookie": { + "mode": "non-persistent" }, - { - "name": "recovery-code", - "enabled": false, - "trial_expired": false - } - ], + "sandbox_versions_available": [ + "22", + "18", + "12" + ] + }, "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/prompts/login/custom-text/en", "body": "", "status": 200, "response": {}, @@ -1976,7 +3283,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/guardian/factors/push-notification/providers/sns", + "path": "/api/v2/prompts/login-password/custom-text/en", "body": "", "status": 200, "response": {}, @@ -1986,192 +3293,127 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/guardian/factors/sms/templates", + "path": "/api/v2/prompts/login-id/custom-text/en", "body": "", "status": 200, - "response": { - "enrollment_message": "enroll foo", - "verification_message": "verify foo" - }, + "response": {}, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/guardian/policies", + "path": "/api/v2/prompts/login-passwordless/custom-text/en", "body": "", "status": 200, - "response": [], + "response": {}, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/guardian/factors/phone/selected-provider", + "path": "/api/v2/prompts/signup/custom-text/en", "body": "", "status": 200, - "response": { - "provider": "auth0" - }, + "response": {}, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/guardian/factors/phone/message-types", + "path": "/api/v2/prompts/login-email-verification/custom-text/en", "body": "", "status": 200, - "response": { - "message_types": [] - }, + "response": {}, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/roles?per_page=100&page=0&include_totals=true", + "path": "/api/v2/prompts/signup-id/custom-text/en", "body": "", "status": 200, - "response": { - "roles": [], - "start": 0, - "limit": 100, - "total": 0 - }, + "response": {}, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/branding", + "path": "/api/v2/prompts/signup-password/custom-text/en", "body": "", "status": 200, - "response": { - "colors": { - "primary": "#F8F8F2", - "page_background": "#222221" - }, - "logo_url": "https://upload.wikimedia.org/wikipedia/commons/0/0d/Grandmas_marathon_finishers.png" - }, + "response": {}, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/custom-domains", + "path": "/api/v2/prompts/phone-identifier-challenge/custom-text/en", "body": "", "status": 200, - "response": [], + "response": {}, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/branding/phone/providers", + "path": "/api/v2/prompts/phone-identifier-enrollment/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/email-identifier-challenge/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/reset-password/custom-text/en", "body": "", "status": 200, - "response": { - "providers": [] - }, + "response": {}, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts", + "path": "/api/v2/prompts/custom-form/custom-text/en", "body": "", "status": 200, - "response": { - "universal_login_experience": "new", - "identifier_first": true - }, + "response": {}, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/tenants/settings", + "path": "/api/v2/prompts/consent/custom-text/en", "body": "", "status": 200, - "response": { - "allowed_logout_urls": [ - "https://mycompany.org/logoutCallback" - ], - "change_password": { - "enabled": true, - "html": "Change Password\n" - }, - "enabled_locales": [ - "en" - ], - "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, - "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, - "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": "My Test 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": { - "colors": { - "primary": "#F8F8F2", - "page_background": "#222221" - } - }, - "resource_parameter_profile": "audience", - "session_cookie": { - "mode": "non-persistent" - }, - "sandbox_versions_available": [ - "22", - "18", - "12" - ] - }, + "response": {}, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-id/custom-text/en", + "path": "/api/v2/prompts/customized-consent/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2181,7 +3423,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login/custom-text/en", + "path": "/api/v2/prompts/logout/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2191,7 +3433,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/mfa-otp/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2201,7 +3443,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-passwordless/custom-text/en", + "path": "/api/v2/prompts/mfa-push/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2211,7 +3453,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/mfa-voice/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2221,7 +3463,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup/custom-text/en", + "path": "/api/v2/prompts/mfa-phone/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2231,7 +3473,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/mfa-webauthn/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2241,7 +3483,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/mfa-sms/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2251,7 +3493,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/phone-identifier-enrollment/custom-text/en", + "path": "/api/v2/prompts/mfa-email/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2261,7 +3503,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/email-identifier-challenge/custom-text/en", + "path": "/api/v2/prompts/mfa-recovery-code/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2271,7 +3513,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/phone-identifier-challenge/custom-text/en", + "path": "/api/v2/prompts/status/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2281,7 +3523,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/custom-form/custom-text/en", + "path": "/api/v2/prompts/mfa/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2291,7 +3533,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/device-flow/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2301,7 +3543,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/consent/custom-text/en", + "path": "/api/v2/prompts/email-verification/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2311,7 +3553,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/customized-consent/custom-text/en", + "path": "/api/v2/prompts/email-otp-challenge/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2321,7 +3563,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/logout/custom-text/en", + "path": "/api/v2/prompts/organizations/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2331,7 +3573,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/invitation/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2341,7 +3583,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/common/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2351,7 +3593,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/captcha/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2361,7 +3603,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/passkeys/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2371,7 +3613,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-sms/custom-text/en", + "path": "/api/v2/prompts/brute-force-protection/custom-text/en", "body": "", "status": 200, "response": {}, @@ -2381,7 +3623,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-email/custom-text/en", + "path": "/api/v2/prompts/login-password/partials", "body": "", "status": 200, "response": {}, @@ -2391,7 +3633,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa-recovery-code/custom-text/en", + "path": "/api/v2/prompts/login/partials", "body": "", "status": 200, "response": {}, @@ -2401,7 +3643,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/login-id/partials", "body": "", "status": 200, "response": {}, @@ -2411,7 +3653,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/mfa/custom-text/en", + "path": "/api/v2/prompts/login-passwordless/partials", "body": "", "status": 200, "response": {}, @@ -2421,7 +3663,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/signup/partials", "body": "", "status": 200, "response": {}, @@ -2431,7 +3673,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/status/custom-text/en", + "path": "/api/v2/prompts/signup-id/partials", "body": "", "status": 200, "response": {}, @@ -2441,7 +3683,7 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/email-verification/custom-text/en", + "path": "/api/v2/prompts/signup-password/partials", "body": "", "status": 200, "response": {}, @@ -2451,152 +3693,433 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/email-otp-challenge/custom-text/en", + "path": "/api/v2/actions/actions?page=0&per_page=100", "body": "", "status": 200, - "response": {}, + "response": { + "actions": [ + { + "id": "4273221d-f20e-44e6-aa9d-d45702782e4e", + "name": "My Custom Action", + "supported_triggers": [ + { + "id": "post-login", + "version": "v2" + } + ], + "created_at": "2025-12-05T14:18:53.100690661Z", + "updated_at": "2025-12-05T14:24:28.025061142Z", + "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": "node18", + "status": "built", + "secrets": [], + "current_version": { + "id": "f2b70924-49de-4b47-acbc-96602dd5e836", + "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": "node18", + "status": "BUILT", + "number": 2, + "build_time": "2025-12-05T14:24:28.911082680Z", + "created_at": "2025-12-05T14:24:28.826233092Z", + "updated_at": "2025-12-05T14:24:28.912158390Z" + }, + "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": "f2b70924-49de-4b47-acbc-96602dd5e836", + "deployed": true, + "number": 2, + "built_at": "2025-12-05T14:24:28.911082680Z", + "secrets": [], + "status": "built", + "created_at": "2025-12-05T14:24:28.826233092Z", + "updated_at": "2025-12-05T14:24:28.912158390Z", + "runtime": "node18", + "supported_triggers": [ + { + "id": "post-login", + "version": "v2" + } + ] + }, + "all_changes_deployed": true + } + ], + "total": 1, + "per_page": 100 + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/organizations/custom-text/en", + "path": "/api/v2/actions/triggers", "body": "", "status": 200, - "response": {}, + "response": { + "triggers": [ + { + "id": "post-login", + "version": "v2", + "status": "DEPRECATED", + "runtimes": [ + "node18" + ], + "default_runtime": "node16", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, + { + "id": "post-login", + "version": "v3", + "status": "CURRENT", + "runtimes": [ + "node12", + "node18-actions", + "node22" + ], + "default_runtime": "node22", + "binding_policy": "trigger-bound", + "compatible_triggers": [ + { + "id": "post-login", + "version": "v2" + } + ] + }, + { + "id": "credentials-exchange", + "version": "v2", + "status": "CURRENT", + "runtimes": [ + "node12", + "node18-actions", + "node22" + ], + "default_runtime": "node22", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, + { + "id": "pre-user-registration", + "version": "v2", + "status": "CURRENT", + "runtimes": [ + "node18-actions", + "node22" + ], + "default_runtime": "node22", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, + { + "id": "post-user-registration", + "version": "v2", + "status": "CURRENT", + "runtimes": [ + "node12", + "node18-actions", + "node22" + ], + "default_runtime": "node22", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, + { + "id": "post-change-password", + "version": "v2", + "status": "CURRENT", + "runtimes": [ + "node12", + "node18-actions", + "node22" + ], + "default_runtime": "node22", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, + { + "id": "send-phone-message", + "version": "v1", + "status": "DEPRECATED", + "runtimes": [ + "node12" + ], + "default_runtime": "node12", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, + { + "id": "send-phone-message", + "version": "v2", + "status": "CURRENT", + "runtimes": [ + "node18-actions", + "node22" + ], + "default_runtime": "node22", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, + { + "id": "password-reset-post-challenge", + "version": "v1", + "status": "CURRENT", + "runtimes": [ + "node18-actions", + "node22" + ], + "default_runtime": "node22", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, + { + "id": "login-post-identifier", + "version": "v1", + "status": "CURRENT", + "runtimes": [ + "node18", + "node22" + ], + "default_runtime": "node22", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, + { + "id": "custom-phone-provider", + "version": "v1", + "status": "CURRENT", + "runtimes": [ + "node18-actions", + "node22" + ], + "default_runtime": "node22", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, + { + "id": "custom-email-provider", + "version": "v1", + "status": "CURRENT", + "runtimes": [ + "node18-actions", + "node22" + ], + "default_runtime": "node22", + "binding_policy": "trigger-bound", + "compatible_triggers": [] + }, + { + "id": "custom-token-exchange", + "version": "v1", + "status": "CURRENT", + "runtimes": [ + "node18", + "node22" + ], + "default_runtime": "node22", + "binding_policy": "entity-bound", + "compatible_triggers": [] + }, + { + "id": "event-stream", + "version": "v1", + "status": "CURRENT", + "runtimes": [ + "node22" + ], + "default_runtime": "node22", + "binding_policy": "entity-bound", + "compatible_triggers": [] + } + ] + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/common/custom-text/en", + "path": "/api/v2/actions/triggers/post-login/bindings?page=0&per_page=50", "body": "", "status": 200, - "response": {}, + "response": { + "bindings": [], + "per_page": 50 + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/invitation/custom-text/en", + "path": "/api/v2/actions/triggers/credentials-exchange/bindings?page=0&per_page=50", "body": "", "status": 200, - "response": {}, + "response": { + "bindings": [], + "per_page": 50 + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/captcha/custom-text/en", + "path": "/api/v2/actions/triggers/pre-user-registration/bindings?page=0&per_page=50", "body": "", "status": 200, - "response": {}, + "response": { + "bindings": [], + "per_page": 50 + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/brute-force-protection/custom-text/en", + "path": "/api/v2/actions/triggers/post-user-registration/bindings?page=0&per_page=50", "body": "", "status": 200, - "response": {}, + "response": { + "bindings": [], + "per_page": 50 + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/passkeys/custom-text/en", + "path": "/api/v2/actions/triggers/post-change-password/bindings?page=0&per_page=50", "body": "", "status": 200, - "response": {}, + "response": { + "bindings": [], + "per_page": 50 + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-id/partials", + "path": "/api/v2/actions/triggers/send-phone-message/bindings?page=0&per_page=50", "body": "", "status": 200, - "response": {}, + "response": { + "bindings": [], + "per_page": 50 + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login/partials", + "path": "/api/v2/actions/triggers/password-reset-post-challenge/bindings?page=0&per_page=50", "body": "", "status": 200, - "response": {}, + "response": { + "bindings": [], + "per_page": 50 + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-password/partials", + "path": "/api/v2/actions/triggers/login-post-identifier/bindings?page=0&per_page=50", "body": "", "status": 200, - "response": {}, + "response": { + "bindings": [], + "per_page": 50 + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup/partials", + "path": "/api/v2/actions/triggers/custom-phone-provider/bindings?page=0&per_page=50", "body": "", "status": 200, - "response": {}, + "response": { + "bindings": [], + "per_page": 50 + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/login-passwordless/partials", + "path": "/api/v2/actions/triggers/custom-email-provider/bindings?page=0&per_page=50", "body": "", "status": 200, - "response": {}, + "response": { + "bindings": [], + "per_page": 50 + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup-id/partials", + "path": "/api/v2/actions/triggers/custom-token-exchange/bindings?page=0&per_page=50", "body": "", "status": 200, - "response": {}, + "response": { + "bindings": [], + "per_page": 50 + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/prompts/signup-password/partials", + "path": "/api/v2/actions/triggers/event-stream/bindings?page=0&per_page=50", "body": "", "status": 200, - "response": {}, + "response": { + "bindings": [], + "per_page": 50 + }, "rawHeaders": [], "responseIsBinary": false }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/actions?page=0&per_page=100", + "path": "/api/v2/organizations?take=50", "body": "", "status": 200, "response": { - "actions": [], - "per_page": 100 + "organizations": [ + { + "id": "org_fIRF1it8cTOyf2yS", + "name": "org1", + "display_name": "Organization", + "branding": { + "colors": { + "page_background": "#fff5f5", + "primary": "#57ddff" + } + } + }, + { + "id": "org_hWOYWXtnxIpJ0MX3", + "name": "org2", + "display_name": "Organization2" + } + ] }, "rawHeaders": [], "responseIsBinary": false @@ -2604,211 +4127,519 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/triggers", + "path": "/api/v2/clients?page=0&per_page=100&include_totals=true", "body": "", "status": 200, "response": { - "triggers": [ + "total": 10, + "start": 0, + "limit": 100, + "clients": [ { - "id": "post-login", - "version": "v3", - "status": "CURRENT", - "runtimes": [ - "node18-actions", - "node22" + "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, + "allowed_clients": [], + "callbacks": [], + "native_social_login": { + "apple": { + "enabled": false + }, + "facebook": { + "enabled": false + } + }, + "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 + }, + "client_aliases": [], + "token_endpoint_auth_method": "client_secret_post", + "app_type": "non_interactive", + "grant_types": [ + "client_credentials", + "implicit", + "authorization_code", + "refresh_token" + ], + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } ], - "default_runtime": "node22", - "binding_policy": "trigger-bound", - "compatible_triggers": [ + "client_id": "BKAbUN8rqBV7Wb1If7QC2sVfJixwCkbX", + "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, + "cross_origin_authentication": false, + "signing_keys": [ { - "id": "post-login", - "version": "v2" + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" } - ] + ], + "client_id": "feQM5cn65Wc73MmXBAgYLvKdBFe4kr4P", + "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 }, { - "id": "post-login", - "version": "v2", - "status": "DEPRECATED", - "runtimes": [ - "node18" + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } ], - "default_runtime": "node16", - "binding_policy": "trigger-bound", - "compatible_triggers": [] + "client_id": "c6dXPAiPCc040rCXxdNnn1678f7pwEJ2", + "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 }, { - "id": "credentials-exchange", - "version": "v1", - "status": "DEPRECATED", - "runtimes": [ - "node12" + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } ], - "default_runtime": "node12", - "binding_policy": "trigger-bound", - "compatible_triggers": [] + "allowed_origins": [], + "client_id": "xneAseAKU3kXsVKuSFxuJdHYlJGOTfMB", + "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 }, { - "id": "credentials-exchange", - "version": "v2", - "status": "CURRENT", - "runtimes": [ - "node18-actions", - "node22" + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } ], - "default_runtime": "node22", - "binding_policy": "trigger-bound", - "compatible_triggers": [] + "client_id": "3ie2KAClpqVPPhY9ip1yJLo2G2ev1LWu", + "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 }, { - "id": "pre-user-registration", - "version": "v2", - "status": "CURRENT", - "runtimes": [ - "node18-actions", - "node22" + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } ], - "default_runtime": "node22", - "binding_policy": "trigger-bound", - "compatible_triggers": [] - }, - { - "id": "post-user-registration", - "version": "v2", - "status": "CURRENT", - "runtimes": [ - "node12", - "node18-actions", - "node22" + "client_id": "ZGU3Hwdo54Y3TwO1f9n8NTNNJV6Te1Sz", + "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" ], - "default_runtime": "node22", - "binding_policy": "trigger-bound", - "compatible_triggers": [] + "custom_login_page_on": true }, { - "id": "post-change-password", - "version": "v2", - "status": "CURRENT", - "runtimes": [ - "node12", - "node18-actions", - "node22" + "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" ], - "default_runtime": "node22", - "binding_policy": "trigger-bound", - "compatible_triggers": [] - }, - { - "id": "send-phone-message", - "version": "v2", - "status": "CURRENT", - "runtimes": [ - "node12", - "node18-actions", - "node22" + "callbacks": [ + "http://localhost:3000" ], - "default_runtime": "node22", - "binding_policy": "trigger-bound", - "compatible_triggers": [] - }, - { - "id": "password-reset-post-challenge", - "version": "v1", - "status": "CURRENT", - "runtimes": [ - "node18-actions", - "node22" + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } ], - "default_runtime": "node22", - "binding_policy": "trigger-bound", - "compatible_triggers": [] - }, - { - "id": "login-post-identifier", - "version": "v1", - "status": "CURRENT", - "runtimes": [ - "node18", - "node22" + "client_id": "3fBUyX06CDDuksAP7TNZKYONbfYDLZMA", + "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" ], - "default_runtime": "node22", - "binding_policy": "trigger-bound", - "compatible_triggers": [] - }, - { - "id": "custom-phone-provider", - "version": "v1", - "status": "CURRENT", - "runtimes": [ - "node18-actions", - "node22" + "web_origins": [ + "http://localhost:3000" ], - "default_runtime": "node22", - "binding_policy": "trigger-bound", - "compatible_triggers": [] + "custom_login_page_on": true }, { - "id": "custom-email-provider", - "version": "v1", - "status": "CURRENT", - "runtimes": [ - "node18-actions", - "node22" + "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, + "cross_origin_authentication": false, + "signing_keys": [ + { + "cert": "[REDACTED]", + "pkcs7": "[REDACTED]", + "subject": "deprecated" + } ], - "default_runtime": "node22", - "binding_policy": "trigger-bound", - "compatible_triggers": [] - }, - { - "id": "custom-token-exchange", - "version": "v1", - "status": "CURRENT", - "runtimes": [ - "node18", - "node22" + "client_id": "XuJD8qCiLHgeKXvUhoIUlpJ9qC1T3Rpa", + "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" ], - "default_runtime": "node22", - "binding_policy": "entity-bound", - "compatible_triggers": [] + "custom_login_page_on": true }, { - "id": "event-stream", - "version": "v1", - "status": "CURRENT", - "runtimes": [ - "node22" + "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", + "mr|google-oauth2|112839029247827700155", + "mr|samlp|okta|ewan.harris@auth0.com" ], - "default_runtime": "node22", - "binding_policy": "entity-bound", - "compatible_triggers": [] - } - ] - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/actions/triggers/post-login/bindings?page=0&per_page=50", - "body": "", - "status": 200, - "response": { - "bindings": [], - "per_page": 50 - }, - "rawHeaders": [], - "responseIsBinary": false - }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/actions/triggers/credentials-exchange/bindings?page=0&per_page=50", - "body": "", - "status": 200, - "response": { - "bindings": [], - "per_page": 50 + "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 @@ -2816,12 +4647,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/triggers/pre-user-registration/bindings?page=0&per_page=50", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/enabled_connections?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { - "bindings": [], - "per_page": 50 + "enabled_connections": [], + "start": 0, + "limit": 0, + "total": 0 }, "rawHeaders": [], "responseIsBinary": false @@ -2829,12 +4662,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/triggers/post-user-registration/bindings?page=0&per_page=50", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/enabled_connections?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { - "bindings": [], - "per_page": 50 + "enabled_connections": [], + "start": 0, + "limit": 0, + "total": 0 }, "rawHeaders": [], "responseIsBinary": false @@ -2842,12 +4677,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/triggers/post-change-password/bindings?page=0&per_page=50", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/client-grants?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { - "bindings": [], - "per_page": 50 + "client_grants": [], + "start": 0, + "limit": 50, + "total": 0 }, "rawHeaders": [], "responseIsBinary": false @@ -2855,12 +4692,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/triggers/send-phone-message/bindings?page=0&per_page=50", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/client-grants?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { - "bindings": [], - "per_page": 50 + "client_grants": [], + "start": 0, + "limit": 50, + "total": 0 }, "rawHeaders": [], "responseIsBinary": false @@ -2868,12 +4707,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/triggers/password-reset-post-challenge/bindings?page=0&per_page=50", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/discovery-domains?take=50", "body": "", "status": 200, "response": { - "bindings": [], - "per_page": 50 + "domains": [] }, "rawHeaders": [], "responseIsBinary": false @@ -2881,12 +4719,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/triggers/login-post-identifier/bindings?page=0&per_page=50", + "path": "/api/v2/organizations/org_fIRF1it8cTOyf2yS/discovery-domains?take=50", "body": "", "status": 200, "response": { - "bindings": [], - "per_page": 50 + "domains": [] }, "rawHeaders": [], "responseIsBinary": false @@ -2894,12 +4731,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/triggers/custom-phone-provider/bindings?page=0&per_page=50", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/enabled_connections?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { - "bindings": [], - "per_page": 50 + "enabled_connections": [], + "start": 0, + "limit": 0, + "total": 0 }, "rawHeaders": [], "responseIsBinary": false @@ -2907,12 +4746,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/triggers/custom-email-provider/bindings?page=0&per_page=50", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/enabled_connections?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { - "bindings": [], - "per_page": 50 + "enabled_connections": [], + "start": 0, + "limit": 0, + "total": 0 }, "rawHeaders": [], "responseIsBinary": false @@ -2920,12 +4761,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/triggers/custom-token-exchange/bindings?page=0&per_page=50", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/client-grants?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { - "bindings": [], - "per_page": 50 + "client_grants": [], + "start": 0, + "limit": 50, + "total": 0 }, "rawHeaders": [], "responseIsBinary": false @@ -2933,12 +4776,14 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/actions/triggers/event-stream/bindings?page=0&per_page=50", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/client-grants?page=0&per_page=50&include_totals=true", "body": "", "status": 200, "response": { - "bindings": [], - "per_page": 50 + "client_grants": [], + "start": 0, + "limit": 50, + "total": 0 }, "rawHeaders": [], "responseIsBinary": false @@ -2946,11 +4791,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/organizations?take=50", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/discovery-domains?take=50", "body": "", "status": 200, "response": { - "organizations": [] + "domains": [] }, "rawHeaders": [], "responseIsBinary": false @@ -2958,150 +4803,11 @@ { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", - "path": "/api/v2/clients?page=0&per_page=100&include_totals=true", + "path": "/api/v2/organizations/org_hWOYWXtnxIpJ0MX3/discovery-domains?take=50", "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", - "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, - "allowed_clients": [], - "callbacks": [], - "native_social_login": { - "apple": { - "enabled": false - }, - "facebook": { - "enabled": false - } - }, - "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 - }, - "client_aliases": [], - "token_endpoint_auth_method": "client_secret_post", - "app_type": "non_interactive", - "grant_types": [ - "client_credentials", - "implicit", - "authorization_code", - "refresh_token" - ], - "custom_login_page_on": true - }, - { - "tenant": "auth0-deploy-cli-e2e", - "global": false, - "is_token_endpoint_ip_header_trusted": false, - "name": "Default App", - "callbacks": [], - "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": false, - "cross_origin_auth": false, - "signing_keys": [ - { - "cert": "[REDACTED]", - "pkcs7": "[REDACTED]", - "subject": "deprecated" - } - ], - "client_id": "VTTBLf4Y7vX3tpTVj0TuGPLPXGsAMUrj", - "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", - "mr|google-oauth2|112839029247827700155", - "mr|samlp|okta|ewan.harris@auth0.com" - ], - "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 - } - ] + "domains": [] }, "rawHeaders": [], "responseIsBinary": false @@ -3175,6 +4881,23 @@ "rawHeaders": [], "responseIsBinary": false }, + { + "scope": "https://deploy-cli-dev.eu.auth0.com:443", + "method": "GET", + "path": "/api/v2/attack-protection/bot-detection", + "body": "", + "status": 200, + "response": { + "challenge_password_policy": "never", + "challenge_passwordless_policy": "never", + "challenge_password_reset_policy": "never", + "allowlist": [], + "bot_detection_level": "medium", + "monitoring_mode_enabled": false + }, + "rawHeaders": [], + "responseIsBinary": false + }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", @@ -3210,30 +4933,75 @@ "rawHeaders": [], "responseIsBinary": false }, - { - "scope": "https://deploy-cli-dev.eu.auth0.com:443", - "method": "GET", - "path": "/api/v2/attack-protection/bot-detection", - "body": "", - "status": 200, - "response": { - "challenge_password_policy": "never", - "challenge_passwordless_policy": "never", - "challenge_password_reset_policy": "never", - "allowlist": [], - "bot_detection_level": "medium", - "monitoring_mode_enabled": false - }, - "rawHeaders": [], - "responseIsBinary": false - }, { "scope": "https://deploy-cli-dev.eu.auth0.com:443", "method": "GET", "path": "/api/v2/log-streams", "body": "", "status": 200, - "response": [], + "response": [ + { + "id": "lst_0000000000025431", + "name": "Suspended DD Log Stream", + "type": "datadog", + "status": "active", + "sink": { + "datadogApiKey": "##LOGSTREAMS_DATADOG_SECRET##", + "datadogRegion": "us" + }, + "isPriority": false + }, + { + "id": "lst_0000000000025432", + "name": "Amazon EventBridge", + "type": "eventbridge", + "status": "active", + "sink": { + "awsAccountId": "123456789012", + "awsRegion": "us-east-2", + "awsPartnerEventSource": "aws.partner/auth0.com/auth0-deploy-cli-e2e-84b807b2-8a87-4d4b-87eb-ff1b56370b3a/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 }, @@ -3278,7 +5046,7 @@ "name": "Blank-form", "flow_count": 0, "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T09:38:30.169Z" + "updated_at": "2025-12-05T14:24:57.289Z" } ] }, @@ -3364,7 +5132,7 @@ } }, "created_at": "2024-11-26T11:58:18.187Z", - "updated_at": "2025-12-05T09:38:30.169Z" + "updated_at": "2025-12-05T14:24:57.289Z" }, "rawHeaders": [], "responseIsBinary": false @@ -3473,7 +5241,7 @@ "okta" ], "created_at": "2024-11-26T11:58:18.962Z", - "updated_at": "2025-12-05T07:04:31.162Z", + "updated_at": "2025-12-05T14:24:44.076Z", "branding": { "colors": { "primary": "#19aecc" @@ -3525,7 +5293,7 @@ } }, "created_at": "2025-09-09T04:41:43.671Z", - "updated_at": "2025-12-05T07:04:15.756Z", + "updated_at": "2025-12-05T14:24:30.497Z", "id": "acl_wpZ6oScRU5L6QKAxMUMHmx" } ] diff --git a/test/tools/auth0/handlers/phoneTemplates.test.ts b/test/tools/auth0/handlers/phoneTemplates.test.ts new file mode 100644 index 000000000..b9345296d --- /dev/null +++ b/test/tools/auth0/handlers/phoneTemplates.test.ts @@ -0,0 +1,313 @@ +import { expect } from 'chai'; + +import phoneTemplatesHandler from '../../../../src/tools/auth0/handlers/phoneTemplates'; + +const mockTemplates = { + templates: [ + { + id: 'pntm_1234567890', + type: 'otp_verify', + disabled: false, + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: 'Your verification code is ##OTP_VERIFICATION_TEXT## {{ code }}', + voice: 'Your verification code is ##OTP_VERIFICATION_TEXT## {{ code }}', + }, + }, + }, + { + id: 'pntm_0987654321', + type: 'otp_enroll', + disabled: false, + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: 'Your enrollment code is ##OTP_ENROLL_TEXT## {{ code }}', + voice: 'Your enrollment code is ##OTP_ENROLL_TEXT## {{ code }}', + }, + }, + }, + ], +}; + +const mockPool = { + addEachTask: function (data) { + return { + promise: () => Promise.all(data.data.map(data.generator)), + }; + }, +}; + +describe('#phoneTemplates handler', () => { + describe('#phoneTemplates getType', () => { + it('should get phoneTemplates', async () => { + const auth0 = { + branding: { + phone: { + templates: { + list: () => Promise.resolve(mockTemplates), + }, + }, + }, + }; + + const handler = new phoneTemplatesHandler({ client: auth0 }); + const data = await handler.getType(); + + expect(data).to.deep.equal(mockTemplates.templates); + }); + + it('should return empty array if there are no phone templates', async () => { + const auth0 = { + branding: { + phone: { + templates: { + list: () => Promise.resolve({ templates: [] }), + }, + }, + }, + }; + + const handler = new phoneTemplatesHandler({ client: auth0 }); + const data = await handler.getType(); + + expect(data).to.deep.equal([]); + }); + + it('should return empty array if templates is undefined', async () => { + const auth0 = { + branding: { + phone: { + templates: { + list: () => Promise.resolve({}), + }, + }, + }, + }; + + const handler = new phoneTemplatesHandler({ client: auth0 }); + const data = await handler.getType(); + + expect(data).to.deep.equal([]); + }); + + it('should fail for unexpected api errors', async () => { + const auth0 = { + branding: { + phone: { + templates: { + list: () => Promise.reject(new Error('Unexpected API error')), + }, + }, + }, + }; + + const handler = new phoneTemplatesHandler({ client: auth0 }); + + try { + await handler.getType(); + } catch (error) { + expect(error).to.be.an('error'); + expect(error.message).to.equal('Unexpected API error'); + } + }); + }); + + describe('#phoneTemplates processChanges', () => { + it('should create phone template', async () => { + let createCalled = false; + const auth0 = { + branding: { + phone: { + templates: { + list: () => Promise.resolve({ templates: [] }), + create: (data) => { + createCalled = true; + expect(data.type).to.equal('otp_verify'); + expect(data.disabled).to.equal(false); + return Promise.resolve({ id: 'pntm_new', ...data }); + }, + }, + }, + }, + pool: mockPool, + }; + + const handler = new phoneTemplatesHandler({ client: auth0, config: () => false }); + const stageFn = Object.getPrototypeOf(handler).processChanges; + + const newTemplate = { + type: 'otp_verify', + disabled: false, + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: 'Your verification code is ##OTP_VERIFICATION_TEXT## {{ code }}', + }, + }, + }; + + await stageFn.apply(handler, [{ phoneTemplates: [newTemplate] }]); + expect(createCalled).to.equal(true); + }); + + it('should update phone template', async () => { + let updateCalled = false; + const existingTemplate = { + id: 'pntm_1234567890', + type: 'otp_verify', + disabled: false, + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: 'Your verification code is ##OTP_VERIFICATION_TEXT## {{ code }}', + }, + }, + }; + + const auth0 = { + branding: { + phone: { + templates: { + list: () => Promise.resolve({ templates: [existingTemplate] }), + update: (id, updatePayload) => { + updateCalled = true; + expect(id).to.equal('pntm_1234567890'); + expect(updatePayload.content.body.text).to.equal( + 'Your verification code is ##OTP_VERIFICATION_TEXT## {{ code }}' + ); + expect(updatePayload.disabled).to.equal(true); + return Promise.resolve({ id, ...updatePayload }); + }, + }, + }, + }, + pool: mockPool, + }; + + const handler = new phoneTemplatesHandler({ client: auth0, config: () => false }); + const stageFn = Object.getPrototypeOf(handler).processChanges; + + const updatedTemplate = { + type: 'otp_verify', + disabled: true, + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: 'Your verification code is ##OTP_VERIFICATION_TEXT## {{ code }}', + }, + }, + }; + + await stageFn.apply(handler, [{ phoneTemplates: [updatedTemplate] }]); + expect(updateCalled).to.equal(true); + }); + + it('should delete phone template when AUTH0_ALLOW_DELETE is true', async () => { + let deleteCalled = false; + const AUTH0_ALLOW_DELETE = true; + + const existingTemplate = { + id: 'pntm_1234567890', + type: 'otp_verify', + disabled: false, + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: 'Some text', + }, + }, + }; + + const auth0 = { + branding: { + phone: { + templates: { + list: () => Promise.resolve({ templates: [existingTemplate] }), + delete: (id) => { + deleteCalled = true; + expect(id).to.equal('pntm_1234567890'); + return Promise.resolve(); + }, + }, + }, + }, + pool: mockPool, + }; + + const handler = new phoneTemplatesHandler({ + client: auth0, + config: () => AUTH0_ALLOW_DELETE, + }); + const stageFn = Object.getPrototypeOf(handler).processChanges; + + await stageFn.apply(handler, [{ phoneTemplates: [] }]); + expect(deleteCalled).to.equal(true); + }); + + it('should not delete phone template when AUTH0_ALLOW_DELETE is false', async () => { + const AUTH0_ALLOW_DELETE = false; + + const existingTemplate = { + id: 'pntm_1234567890', + type: 'otp_verify', + disabled: false, + content: { + syntax: 'liquid', + from: '+15551234567', + body: { + text: 'Some text', + }, + }, + }; + + const auth0 = { + branding: { + phone: { + templates: { + list: () => Promise.resolve({ templates: [existingTemplate] }), + delete: () => { + throw new Error('was not expecting delete to be called'); + }, + }, + }, + }, + pool: mockPool, + }; + + const handler = new phoneTemplatesHandler({ + client: auth0, + config: () => AUTH0_ALLOW_DELETE, + }); + const stageFn = Object.getPrototypeOf(handler).processChanges; + + await stageFn.apply(handler, [{ phoneTemplates: [] }]); + }); + + it('should do nothing when phoneTemplates is not provided', async () => { + const auth0 = { + branding: { + phone: { + templates: { + list: () => { + throw new Error('was not expecting list to be called'); + }, + }, + }, + }, + }; + + const handler = new phoneTemplatesHandler({ client: auth0 }); + const stageFn = Object.getPrototypeOf(handler).processChanges; + + await stageFn.apply(handler, [{}]); + }); + }); +}); diff --git a/test/utils.js b/test/utils.js index 7e4b0198c..f951b8405 100644 --- a/test/utils.js +++ b/test/utils.js @@ -165,6 +165,12 @@ export function mockMgmtClient() { update: (_id, data) => Promise.resolve(data), delete: (_id) => Promise.resolve(), }, + templates: { + list: () => Promise.resolve({ templates: [] }), + create: (data) => Promise.resolve(data), + update: (_id, data) => Promise.resolve(data), + delete: (_id) => Promise.resolve(), + }, }, }, logStreams: { list: () => Promise.resolve([]) },