diff --git a/src/Umbraco.Web.UI.Client/.github/workflows/azure-static-web-apps-ambitious-stone-0033b3603.yml b/src/Umbraco.Web.UI.Client/.github/workflows/azure-static-web-apps-ambitious-stone-0033b3603.yml index cce252608c..e618f4da80 100644 --- a/src/Umbraco.Web.UI.Client/.github/workflows/azure-static-web-apps-ambitious-stone-0033b3603.yml +++ b/src/Umbraco.Web.UI.Client/.github/workflows/azure-static-web-apps-ambitious-stone-0033b3603.yml @@ -5,11 +5,13 @@ on: branches: - main - release/* + - v*/dev pull_request: types: [opened, synchronize, reopened, closed] branches: - main - release/* + - v*/dev workflow_dispatch: inputs: issue_number: diff --git a/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml b/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml index b90c5f86d1..8e70477ef8 100644 --- a/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml +++ b/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml @@ -8,10 +8,12 @@ on: branches: - main - release/* + - v*/dev pull_request: branches: - main - release/* + - v*/dev # Allows GitHub to use this workflow to validate the merge queue merge_group: diff --git a/src/Umbraco.Web.UI.Client/.github/workflows/codeql.yml b/src/Umbraco.Web.UI.Client/.github/workflows/codeql.yml index ac5f4990ff..f3f3a37812 100644 --- a/src/Umbraco.Web.UI.Client/.github/workflows/codeql.yml +++ b/src/Umbraco.Web.UI.Client/.github/workflows/codeql.yml @@ -16,10 +16,12 @@ on: branches: - main - release/* + - v*/dev pull_request: branches: - main - release/* + - v*/dev schedule: - cron: '33 2 * * 1' diff --git a/src/Umbraco.Web.UI.Client/.sonarlint/connectedMode.json b/src/Umbraco.Web.UI.Client/.sonarlint/connectedMode.json new file mode 100644 index 0000000000..e9cefa00a5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/.sonarlint/connectedMode.json @@ -0,0 +1,4 @@ +{ + "sonarCloudOrganization": "umbraco", + "projectKey": "umbraco_Umbraco.CMS.Backoffice" +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 1f042effe8..748cbad4ba 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -9,35 +9,7 @@ "version": "14.3.0", "license": "MIT", "workspaces": [ - "./src/packages/block", - "./src/packages/code-editor", - "./src/packages/core", - "./src/packages/data-type", - "./src/packages/dictionary", - "./src/packages/documents", - "./src/packages/health-check", - "./src/packages/language", - "./src/packages/log-viewer", - "./src/packages/markdown-editor", - "./src/packages/media", - "./src/packages/members", - "./src/packages/models-builder", - "./src/packages/multi-url-picker", - "./src/packages/packages", - "./src/packages/performance-profiling", - "./src/packages/property-editors", - "./src/packages/publish-cache", - "./src/packages/relations", - "./src/packages/search", - "./src/packages/static-file", - "./src/packages/tags", - "./src/packages/telemetry", - "./src/packages/templating", - "./src/packages/tiny-mce", - "./src/packages/ufm", - "./src/packages/umbraco-news", - "./src/packages/user", - "./src/packages/webhook" + "./src/packages/*" ], "dependencies": { "@tiptap/core": "^2.6.6", @@ -8239,6 +8211,10 @@ "resolved": "src/packages/static-file", "link": true }, + "node_modules/@umbraco-backoffice/sysinfo": { + "resolved": "src/packages/sysinfo", + "link": true + }, "node_modules/@umbraco-backoffice/tag": { "resolved": "src/packages/tags", "link": true @@ -10788,9 +10764,9 @@ } }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "dependencies": { "bytes": "3.1.2", @@ -10801,7 +10777,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -10835,21 +10811,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/bplist-parser": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", @@ -13349,37 +13310,37 @@ } }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -13399,27 +13360,21 @@ "ms": "2.0.0" } }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -13713,13 +13668,13 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -13739,6 +13694,15 @@ "ms": "2.0.0" } }, + "node_modules/finalhandler/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -17034,10 +16998,13 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -18899,9 +18866,9 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", "dev": true }, "node_modules/path-type": { @@ -20666,9 +20633,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, "dependencies": { "debug": "2.6.9", @@ -20711,20 +20678,29 @@ "dev": true }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/set-cookie-parser": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.0.tgz", @@ -23693,6 +23669,9 @@ "src/packages/static-file": { "name": "@umbraco-backoffice/static-file" }, + "src/packages/sysinfo": { + "name": "@umbraco-backoffice/sysinfo" + }, "src/packages/tags": { "name": "@umbraco-backoffice/tag" }, diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index e8c1739816..c90fe7a11f 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -1,7 +1,7 @@ { "name": "@umbraco-cms/backoffice", "license": "MIT", - "version": "14.3.0", + "version": "15.0.0", "type": "module", "exports": { ".": null, @@ -83,6 +83,7 @@ "./store": "./dist-cms/packages/core/store/index.js", "./style": "./dist-cms/packages/core/style/index.js", "./stylesheet": "./dist-cms/packages/templating/stylesheets/index.js", + "./sysinfo": "./dist-cms/packages/sysinfo/index.js", "./tags": "./dist-cms/packages/tags/index.js", "./template": "./dist-cms/packages/templating/templates/index.js", "./temporary-file": "./dist-cms/packages/core/temporary-file/index.js", @@ -132,35 +133,7 @@ "url": "https://umbraco.com" }, "workspaces": [ - "./src/packages/block", - "./src/packages/code-editor", - "./src/packages/core", - "./src/packages/data-type", - "./src/packages/dictionary", - "./src/packages/documents", - "./src/packages/health-check", - "./src/packages/language", - "./src/packages/log-viewer", - "./src/packages/markdown-editor", - "./src/packages/media", - "./src/packages/members", - "./src/packages/models-builder", - "./src/packages/multi-url-picker", - "./src/packages/packages", - "./src/packages/performance-profiling", - "./src/packages/property-editors", - "./src/packages/publish-cache", - "./src/packages/relations", - "./src/packages/search", - "./src/packages/static-file", - "./src/packages/tags", - "./src/packages/telemetry", - "./src/packages/templating", - "./src/packages/tiny-mce", - "./src/packages/ufm", - "./src/packages/umbraco-news", - "./src/packages/user", - "./src/packages/webhook" + "./src/packages/*" ], "scripts": { "backoffice:test:e2e": "npx playwright test", diff --git a/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts b/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts index 21a07f340f..2d8d931319 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts @@ -34,6 +34,7 @@ const CORE_PACKAGES = [ import('../../packages/search/umbraco-package.js'), import('../../packages/settings/umbraco-package.js'), import('../../packages/static-file/umbraco-package.js'), + import('../../packages/sysinfo/umbraco-package.js'), import('../../packages/tags/umbraco-package.js'), import('../../packages/telemetry/umbraco-package.js'), import('../../packages/templating/umbraco-package.js'), diff --git a/src/Umbraco.Web.UI.Client/src/apps/backoffice/components/backoffice-header-logo.element.ts b/src/Umbraco.Web.UI.Client/src/apps/backoffice/components/backoffice-header-logo.element.ts index e7f82483b0..48a93afc79 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/backoffice/components/backoffice-header-logo.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/backoffice/components/backoffice-header-logo.element.ts @@ -1,13 +1,19 @@ +import { isCurrentUserAnAdmin } from '@umbraco-cms/backoffice/current-user'; import { UMB_BACKOFFICE_CONTEXT } from '../backoffice.context.js'; import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UMB_SYSINFO_MODAL } from '@umbraco-cms/backoffice/sysinfo'; @customElement('umb-backoffice-header-logo') export class UmbBackofficeHeaderLogoElement extends UmbLitElement { @state() private _version?: string; + @state() + private _isUserAdmin = false; + constructor() { super(); @@ -21,6 +27,12 @@ export class UmbBackofficeHeaderLogoElement extends UmbLitElement { '_observeVersion', ); }); + + this.#isAdmin(); + } + + async #isAdmin() { + this._isUserAdmin = await isCurrentUserAnAdmin(this); } override render() { @@ -31,15 +43,35 @@ export class UmbBackofficeHeaderLogoElement extends UmbLitElement { `; } + async #openSystemInformation() { + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + modalManager + .open(this, UMB_SYSINFO_MODAL) + .onSubmit() + .catch(() => {}); + } + static override styles = [ UmbTextStyles, css` diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts index 29ba011438..9c5adb6e7c 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts @@ -357,6 +357,7 @@ export default { member: { createNewMember: 'Opret et nyt medlem', allMembers: 'Alle medlemmer', + kind: 'Slags', memberGroupNoProperties: 'Medlemgrupper har ingen yderligere egenskaber til redigering.', '2fa': 'Totrinsbekræftelse', duplicateMemberLogin: 'A member with this login already exists', @@ -364,6 +365,8 @@ export default { memberHasPassword: 'The member already has a password set', memberLockoutNotEnabled: 'Lockout is not enabled for this member', memberNotInGroup: "The member is not in group '%0%'", + memberKindDefault: 'Bruger', + memberKindApi: 'API Bruger', }, contentType: { copyFailed: 'Kopiering af indholdstypen fejlede', @@ -1831,6 +1834,9 @@ export default { administrators: 'Administrator', categoryField: 'Kategorifelt', createDate: 'Bruger oprettet', + createUserHeadline: (kind: string) => { + return kind === 'Api' ? 'Opret API bruger' : 'Opret bruger'; + }, changePassword: 'Skift dit kodeord', changePhoto: 'Skift billede', newPassword: 'Nyt kodeord', @@ -1857,6 +1863,7 @@ export default { inviteAnotherUser: 'Invitér anden bruger', inviteUserHelp: 'Invitér nye brugere til at give dem adgang til Umbraco. En invitation vil blive sendt\n via e-mail til brugeren med oplysninger om, hvordan man logger ind i Umbraco.\n ', + kind: 'Slags', language: 'Sprog', languageHelp: 'Indstil det sprog, du vil se i menuer og dialoger', lastLockoutDate: 'Senest låst ude', @@ -1952,6 +1959,8 @@ export default { sortNameDescending: 'Navn (Å-A)', sortCreateDateAscending: 'Nyeste', sortCreateDateDescending: 'Ældste', + userKindDefault: 'Bruger', + userKindApi: 'API Bruger', sortLastLoginDateDescending: 'Sidst logget ind', noUserGroupsAdded: 'Ingen brugere er blevet tilføjet', '2faDisableText': 'Hvis du ønsker at slå denne totrinsbekræftelse fra, så skal du nu indtaste koden fra din enhed:', @@ -2223,6 +2232,7 @@ export default { labelForArrayOfItems: 'Samling af %0%', labelForRemoveAllEntries: 'Fjern alle elementer', labelForClearClipboard: 'Ryd udklipsholder', + labelForCopyToClipboard: 'Kopier til udklipsholder', }, propertyActions: { tooltipForPropertyActionsMenu: 'Åben egenskabshandlinger', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/de-de.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/de-de.ts index 50fbf86afe..98b445f5a6 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/de-de.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/de-de.ts @@ -1967,6 +1967,14 @@ export default { selectAllLogLevelFilters: 'Wählen Sie Alle', deselectAllLogLevelFilters: 'Alle abwählen', }, + clipboard: { + labelForCopyAllEntries: '%0% kopieren', + labelForArrayOfItemsFrom: '%0% von %1%', + labelForArrayOfItems: 'Sammlung von %0%', + labelForRemoveAllEntries: 'Alle Elemente entfernen', + labelForClearClipboard: 'Zwischenablage löschen', + labelForCopyToClipboard: 'Kopieren in Zwischenablage', + }, formsDashboard: { formsHeadline: 'Umbraco Forms', formsDescription: diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts index a212371ec1..bbb8146db3 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts @@ -364,12 +364,15 @@ export default { createNewMember: 'Create a new member', allMembers: 'All Members', duplicateMemberLogin: 'A member with this login already exists', + kind: 'Kind', memberGroupNoProperties: 'Member groups have no additional properties for editing.', memberHasGroup: "The member is already in group '%0%'", memberHasPassword: 'The member already has a password set', memberLockoutNotEnabled: 'Lockout is not enabled for this member', memberNotInGroup: "The member is not in group '%0%'", '2fa': 'Two-Factor Authentication', + memberKindDefault: 'Member', + memberKindApi: 'API Member', }, contentType: { copyFailed: 'Failed to copy content type', @@ -1839,8 +1842,16 @@ export default { assignAccess: 'Assign access', administrators: 'Administrator', categoryField: 'Category field', - createDate: 'User created', - changePassword: 'Change your password', + createDate: 'Created', + createUserHeadline: (kind: string) => { + return kind === 'Api' ? 'Create API user' : 'Create user'; + }, + createUserDescription: (kind: string) => { + const defaultUserText = `Create a user to give them access to Umbraco. When a user is created a password will be generated that you can share with them.`; + const apiUserText = `Create an Api User to allow external services to authenticate with the Umbraco Management API.`; + return kind === 'Api' ? apiUserText : defaultUserText; + }, + changePassword: 'Change password', changePhoto: 'Change photo', configureMfa: 'Configure MFA', emailRequired: 'Required - enter an email address for this user', @@ -1849,6 +1860,7 @@ export default { ? 'The email address is used for notifications, password recovery, and as the username for logging in' : 'The email address is used for notifications and password recovery'; }, + kind: 'Kind', newPassword: 'New password', newPasswordFormatLengthTip: 'Minimum %0% character(s) to go!', newPasswordFormatNonAlphaTip: 'There should be at least %0% special character(s) in there.', @@ -1935,7 +1947,7 @@ export default { startnodehelp: 'Limit the content tree to a specific start node', startnodes: 'Content start nodes', startnodeshelp: 'Limit the content tree to specific start nodes', - updateDate: 'User last updated', + updateDate: 'Updated', userCreated: 'has been created', userCreatedSuccessHelp: 'The new user has successfully been created. To log in to Umbraco use the\n password below.\n ', @@ -1982,6 +1994,8 @@ export default { sortCreateDateDescending: 'Newest', sortCreateDateAscending: 'Oldest', sortLastLoginDateDescending: 'Last login', + userKindDefault: 'User', + userKindApi: 'API User', noUserGroupsAdded: 'No user groups have been added', '2faDisableText': 'If you wish to disable this two-factor provider, then you must enter the code shown on your authentication device:', @@ -2288,6 +2302,7 @@ export default { labelForArrayOfItems: 'Collection of %0%', labelForRemoveAllEntries: 'Remove all items', labelForClearClipboard: 'Clear clipboard', + labelForCopyToClipboard: 'Copy to clipboard', }, propertyActions: { tooltipForPropertyActionsMenu: 'Open Property Actions', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts index 551e778e96..532405afd9 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts @@ -2354,6 +2354,7 @@ export default { labelForArrayOfItems: 'Collection of %0%', labelForRemoveAllEntries: 'Remove all items', labelForClearClipboard: 'Clear clipboard', + labelForCopyToClipboard: 'Copy to clipboard', }, propertyActions: { tooltipForPropertyActionsMenu: 'Open Property Actions', diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/core/ApiRequestOptions.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/core/ApiRequestOptions.ts index 939a0aa4c8..1758d98c4d 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/core/ApiRequestOptions.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/core/ApiRequestOptions.ts @@ -1,21 +1,14 @@ export type ApiRequestOptions = { - readonly body?: any; - readonly cookies?: Record; - readonly errors?: Record; - readonly formData?: Record | any[] | Blob | File; - readonly headers?: Record; - readonly mediaType?: string; - readonly method: - | 'DELETE' - | 'GET' - | 'HEAD' - | 'OPTIONS' - | 'PATCH' - | 'POST' - | 'PUT'; + readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'PATCH'; + readonly url: string; readonly path?: Record; + readonly cookies?: Record; + readonly headers?: Record; readonly query?: Record; + readonly formData?: Record; + readonly body?: any; + readonly mediaType?: string; readonly responseHeader?: string; readonly responseTransformer?: (data: unknown) => Promise; - readonly url: string; + readonly errors?: Record; }; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts index 7a132b3073..63fb202bed 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts @@ -3,7 +3,7 @@ import type { CancelablePromise } from './core/CancelablePromise'; import { OpenAPI } from './core/OpenAPI'; import { request as __request } from './core/request'; -import type { GetCultureData, GetCultureResponse, PostDataTypeData, PostDataTypeResponse, GetDataTypeByIdData, GetDataTypeByIdResponse, DeleteDataTypeByIdData, DeleteDataTypeByIdResponse, PutDataTypeByIdData, PutDataTypeByIdResponse, PostDataTypeByIdCopyData, PostDataTypeByIdCopyResponse, GetDataTypeByIdIsUsedData, GetDataTypeByIdIsUsedResponse, PutDataTypeByIdMoveData, PutDataTypeByIdMoveResponse, GetDataTypeByIdReferencesData, GetDataTypeByIdReferencesResponse, GetDataTypeConfigurationResponse, PostDataTypeFolderData, PostDataTypeFolderResponse, GetDataTypeFolderByIdData, GetDataTypeFolderByIdResponse, DeleteDataTypeFolderByIdData, DeleteDataTypeFolderByIdResponse, PutDataTypeFolderByIdData, PutDataTypeFolderByIdResponse, GetFilterDataTypeData, GetFilterDataTypeResponse, GetItemDataTypeData, GetItemDataTypeResponse, GetItemDataTypeSearchData, GetItemDataTypeSearchResponse, GetTreeDataTypeAncestorsData, GetTreeDataTypeAncestorsResponse, GetTreeDataTypeChildrenData, GetTreeDataTypeChildrenResponse, GetTreeDataTypeRootData, GetTreeDataTypeRootResponse, GetDictionaryData, GetDictionaryResponse, PostDictionaryData, PostDictionaryResponse, GetDictionaryByIdData, GetDictionaryByIdResponse, DeleteDictionaryByIdData, DeleteDictionaryByIdResponse, PutDictionaryByIdData, PutDictionaryByIdResponse, GetDictionaryByIdExportData, GetDictionaryByIdExportResponse, PutDictionaryByIdMoveData, PutDictionaryByIdMoveResponse, PostDictionaryImportData, PostDictionaryImportResponse, GetItemDictionaryData, GetItemDictionaryResponse, GetTreeDictionaryAncestorsData, GetTreeDictionaryAncestorsResponse, GetTreeDictionaryChildrenData, GetTreeDictionaryChildrenResponse, GetTreeDictionaryRootData, GetTreeDictionaryRootResponse, PostDocumentBlueprintData, PostDocumentBlueprintResponse, GetDocumentBlueprintByIdData, GetDocumentBlueprintByIdResponse, DeleteDocumentBlueprintByIdData, DeleteDocumentBlueprintByIdResponse, PutDocumentBlueprintByIdData, PutDocumentBlueprintByIdResponse, PutDocumentBlueprintByIdMoveData, PutDocumentBlueprintByIdMoveResponse, PostDocumentBlueprintFolderData, PostDocumentBlueprintFolderResponse, GetDocumentBlueprintFolderByIdData, GetDocumentBlueprintFolderByIdResponse, DeleteDocumentBlueprintFolderByIdData, DeleteDocumentBlueprintFolderByIdResponse, PutDocumentBlueprintFolderByIdData, PutDocumentBlueprintFolderByIdResponse, PostDocumentBlueprintFromDocumentData, PostDocumentBlueprintFromDocumentResponse, GetItemDocumentBlueprintData, GetItemDocumentBlueprintResponse, GetTreeDocumentBlueprintAncestorsData, GetTreeDocumentBlueprintAncestorsResponse, GetTreeDocumentBlueprintChildrenData, GetTreeDocumentBlueprintChildrenResponse, GetTreeDocumentBlueprintRootData, GetTreeDocumentBlueprintRootResponse, PostDocumentTypeData, PostDocumentTypeResponse, GetDocumentTypeByIdData, GetDocumentTypeByIdResponse, DeleteDocumentTypeByIdData, DeleteDocumentTypeByIdResponse, PutDocumentTypeByIdData, PutDocumentTypeByIdResponse, GetDocumentTypeByIdAllowedChildrenData, GetDocumentTypeByIdAllowedChildrenResponse, GetDocumentTypeByIdBlueprintData, GetDocumentTypeByIdBlueprintResponse, GetDocumentTypeByIdCompositionReferencesData, GetDocumentTypeByIdCompositionReferencesResponse, PostDocumentTypeByIdCopyData, PostDocumentTypeByIdCopyResponse, GetDocumentTypeByIdExportData, GetDocumentTypeByIdExportResponse, PutDocumentTypeByIdImportData, PutDocumentTypeByIdImportResponse, PutDocumentTypeByIdMoveData, PutDocumentTypeByIdMoveResponse, GetDocumentTypeAllowedAtRootData, GetDocumentTypeAllowedAtRootResponse, PostDocumentTypeAvailableCompositionsData, PostDocumentTypeAvailableCompositionsResponse, GetDocumentTypeConfigurationResponse, PostDocumentTypeFolderData, PostDocumentTypeFolderResponse, GetDocumentTypeFolderByIdData, GetDocumentTypeFolderByIdResponse, DeleteDocumentTypeFolderByIdData, DeleteDocumentTypeFolderByIdResponse, PutDocumentTypeFolderByIdData, PutDocumentTypeFolderByIdResponse, PostDocumentTypeImportData, PostDocumentTypeImportResponse, GetItemDocumentTypeData, GetItemDocumentTypeResponse, GetItemDocumentTypeSearchData, GetItemDocumentTypeSearchResponse, GetTreeDocumentTypeAncestorsData, GetTreeDocumentTypeAncestorsResponse, GetTreeDocumentTypeChildrenData, GetTreeDocumentTypeChildrenResponse, GetTreeDocumentTypeRootData, GetTreeDocumentTypeRootResponse, GetDocumentVersionData, GetDocumentVersionResponse, GetDocumentVersionByIdData, GetDocumentVersionByIdResponse, PutDocumentVersionByIdPreventCleanupData, PutDocumentVersionByIdPreventCleanupResponse, PostDocumentVersionByIdRollbackData, PostDocumentVersionByIdRollbackResponse, GetCollectionDocumentByIdData, GetCollectionDocumentByIdResponse, PostDocumentData, PostDocumentResponse, GetDocumentByIdData, GetDocumentByIdResponse, DeleteDocumentByIdData, DeleteDocumentByIdResponse, PutDocumentByIdData, PutDocumentByIdResponse, GetDocumentByIdAuditLogData, GetDocumentByIdAuditLogResponse, PostDocumentByIdCopyData, PostDocumentByIdCopyResponse, GetDocumentByIdDomainsData, GetDocumentByIdDomainsResponse, PutDocumentByIdDomainsData, PutDocumentByIdDomainsResponse, PutDocumentByIdMoveData, PutDocumentByIdMoveResponse, PutDocumentByIdMoveToRecycleBinData, PutDocumentByIdMoveToRecycleBinResponse, GetDocumentByIdNotificationsData, GetDocumentByIdNotificationsResponse, PutDocumentByIdNotificationsData, PutDocumentByIdNotificationsResponse, PostDocumentByIdPublicAccessData, PostDocumentByIdPublicAccessResponse, DeleteDocumentByIdPublicAccessData, DeleteDocumentByIdPublicAccessResponse, GetDocumentByIdPublicAccessData, GetDocumentByIdPublicAccessResponse, PutDocumentByIdPublicAccessData, PutDocumentByIdPublicAccessResponse, PutDocumentByIdPublishData, PutDocumentByIdPublishResponse, PutDocumentByIdPublishWithDescendantsData, PutDocumentByIdPublishWithDescendantsResponse, GetDocumentByIdReferencedByData, GetDocumentByIdReferencedByResponse, GetDocumentByIdReferencedDescendantsData, GetDocumentByIdReferencedDescendantsResponse, PutDocumentByIdUnpublishData, PutDocumentByIdUnpublishResponse, PutDocumentByIdValidateData, PutDocumentByIdValidateResponse, GetDocumentAreReferencedData, GetDocumentAreReferencedResponse, GetDocumentConfigurationResponse, PutDocumentSortData, PutDocumentSortResponse, GetDocumentUrlsData, GetDocumentUrlsResponse, PostDocumentValidateData, PostDocumentValidateResponse, GetItemDocumentData, GetItemDocumentResponse, GetItemDocumentSearchData, GetItemDocumentSearchResponse, DeleteRecycleBinDocumentResponse, DeleteRecycleBinDocumentByIdData, DeleteRecycleBinDocumentByIdResponse, GetRecycleBinDocumentByIdOriginalParentData, GetRecycleBinDocumentByIdOriginalParentResponse, PutRecycleBinDocumentByIdRestoreData, PutRecycleBinDocumentByIdRestoreResponse, GetRecycleBinDocumentChildrenData, GetRecycleBinDocumentChildrenResponse, GetRecycleBinDocumentRootData, GetRecycleBinDocumentRootResponse, GetTreeDocumentAncestorsData, GetTreeDocumentAncestorsResponse, GetTreeDocumentChildrenData, GetTreeDocumentChildrenResponse, GetTreeDocumentRootData, GetTreeDocumentRootResponse, PostDynamicRootQueryData, PostDynamicRootQueryResponse, GetDynamicRootStepsResponse, GetHealthCheckGroupData, GetHealthCheckGroupResponse, GetHealthCheckGroupByNameData, GetHealthCheckGroupByNameResponse, PostHealthCheckGroupByNameCheckData, PostHealthCheckGroupByNameCheckResponse, PostHealthCheckExecuteActionData, PostHealthCheckExecuteActionResponse, GetHelpData, GetHelpResponse, GetImagingResizeUrlsData, GetImagingResizeUrlsResponse, GetImportAnalyzeData, GetImportAnalyzeResponse, GetIndexerData, GetIndexerResponse, GetIndexerByIndexNameData, GetIndexerByIndexNameResponse, PostIndexerByIndexNameRebuildData, PostIndexerByIndexNameRebuildResponse, GetInstallSettingsResponse, PostInstallSetupData, PostInstallSetupResponse, PostInstallValidateDatabaseData, PostInstallValidateDatabaseResponse, GetItemLanguageData, GetItemLanguageResponse, GetItemLanguageDefaultResponse, GetLanguageData, GetLanguageResponse, PostLanguageData, PostLanguageResponse, GetLanguageByIsoCodeData, GetLanguageByIsoCodeResponse, DeleteLanguageByIsoCodeData, DeleteLanguageByIsoCodeResponse, PutLanguageByIsoCodeData, PutLanguageByIsoCodeResponse, GetLogViewerLevelData, GetLogViewerLevelResponse, GetLogViewerLevelCountData, GetLogViewerLevelCountResponse, GetLogViewerLogData, GetLogViewerLogResponse, GetLogViewerMessageTemplateData, GetLogViewerMessageTemplateResponse, GetLogViewerSavedSearchData, GetLogViewerSavedSearchResponse, PostLogViewerSavedSearchData, PostLogViewerSavedSearchResponse, GetLogViewerSavedSearchByNameData, GetLogViewerSavedSearchByNameResponse, DeleteLogViewerSavedSearchByNameData, DeleteLogViewerSavedSearchByNameResponse, GetLogViewerValidateLogsSizeData, GetLogViewerValidateLogsSizeResponse, GetManifestManifestResponse, GetManifestManifestPrivateResponse, GetManifestManifestPublicResponse, GetItemMediaTypeData, GetItemMediaTypeResponse, GetItemMediaTypeAllowedData, GetItemMediaTypeAllowedResponse, GetItemMediaTypeFoldersData, GetItemMediaTypeFoldersResponse, GetItemMediaTypeSearchData, GetItemMediaTypeSearchResponse, PostMediaTypeData, PostMediaTypeResponse, GetMediaTypeByIdData, GetMediaTypeByIdResponse, DeleteMediaTypeByIdData, DeleteMediaTypeByIdResponse, PutMediaTypeByIdData, PutMediaTypeByIdResponse, GetMediaTypeByIdAllowedChildrenData, GetMediaTypeByIdAllowedChildrenResponse, GetMediaTypeByIdCompositionReferencesData, GetMediaTypeByIdCompositionReferencesResponse, PostMediaTypeByIdCopyData, PostMediaTypeByIdCopyResponse, GetMediaTypeByIdExportData, GetMediaTypeByIdExportResponse, PutMediaTypeByIdImportData, PutMediaTypeByIdImportResponse, PutMediaTypeByIdMoveData, PutMediaTypeByIdMoveResponse, GetMediaTypeAllowedAtRootData, GetMediaTypeAllowedAtRootResponse, PostMediaTypeAvailableCompositionsData, PostMediaTypeAvailableCompositionsResponse, GetMediaTypeConfigurationResponse, PostMediaTypeFolderData, PostMediaTypeFolderResponse, GetMediaTypeFolderByIdData, GetMediaTypeFolderByIdResponse, DeleteMediaTypeFolderByIdData, DeleteMediaTypeFolderByIdResponse, PutMediaTypeFolderByIdData, PutMediaTypeFolderByIdResponse, PostMediaTypeImportData, PostMediaTypeImportResponse, GetTreeMediaTypeAncestorsData, GetTreeMediaTypeAncestorsResponse, GetTreeMediaTypeChildrenData, GetTreeMediaTypeChildrenResponse, GetTreeMediaTypeRootData, GetTreeMediaTypeRootResponse, GetCollectionMediaData, GetCollectionMediaResponse, GetItemMediaData, GetItemMediaResponse, GetItemMediaSearchData, GetItemMediaSearchResponse, PostMediaData, PostMediaResponse, GetMediaByIdData, GetMediaByIdResponse, DeleteMediaByIdData, DeleteMediaByIdResponse, PutMediaByIdData, PutMediaByIdResponse, GetMediaByIdAuditLogData, GetMediaByIdAuditLogResponse, PutMediaByIdMoveData, PutMediaByIdMoveResponse, PutMediaByIdMoveToRecycleBinData, PutMediaByIdMoveToRecycleBinResponse, GetMediaByIdReferencedByData, GetMediaByIdReferencedByResponse, GetMediaByIdReferencedDescendantsData, GetMediaByIdReferencedDescendantsResponse, PutMediaByIdValidateData, PutMediaByIdValidateResponse, GetMediaAreReferencedData, GetMediaAreReferencedResponse, GetMediaConfigurationResponse, PutMediaSortData, PutMediaSortResponse, GetMediaUrlsData, GetMediaUrlsResponse, PostMediaValidateData, PostMediaValidateResponse, DeleteRecycleBinMediaResponse, DeleteRecycleBinMediaByIdData, DeleteRecycleBinMediaByIdResponse, GetRecycleBinMediaByIdOriginalParentData, GetRecycleBinMediaByIdOriginalParentResponse, PutRecycleBinMediaByIdRestoreData, PutRecycleBinMediaByIdRestoreResponse, GetRecycleBinMediaChildrenData, GetRecycleBinMediaChildrenResponse, GetRecycleBinMediaRootData, GetRecycleBinMediaRootResponse, GetTreeMediaAncestorsData, GetTreeMediaAncestorsResponse, GetTreeMediaChildrenData, GetTreeMediaChildrenResponse, GetTreeMediaRootData, GetTreeMediaRootResponse, GetItemMemberGroupData, GetItemMemberGroupResponse, GetMemberGroupData, GetMemberGroupResponse, PostMemberGroupData, PostMemberGroupResponse, GetMemberGroupByIdData, GetMemberGroupByIdResponse, DeleteMemberGroupByIdData, DeleteMemberGroupByIdResponse, PutMemberGroupByIdData, PutMemberGroupByIdResponse, GetTreeMemberGroupRootData, GetTreeMemberGroupRootResponse, GetItemMemberTypeData, GetItemMemberTypeResponse, GetItemMemberTypeSearchData, GetItemMemberTypeSearchResponse, PostMemberTypeData, PostMemberTypeResponse, GetMemberTypeByIdData, GetMemberTypeByIdResponse, DeleteMemberTypeByIdData, DeleteMemberTypeByIdResponse, PutMemberTypeByIdData, PutMemberTypeByIdResponse, GetMemberTypeByIdCompositionReferencesData, GetMemberTypeByIdCompositionReferencesResponse, PostMemberTypeByIdCopyData, PostMemberTypeByIdCopyResponse, PostMemberTypeAvailableCompositionsData, PostMemberTypeAvailableCompositionsResponse, GetMemberTypeConfigurationResponse, GetTreeMemberTypeRootData, GetTreeMemberTypeRootResponse, GetFilterMemberData, GetFilterMemberResponse, GetItemMemberData, GetItemMemberResponse, GetItemMemberSearchData, GetItemMemberSearchResponse, PostMemberData, PostMemberResponse, GetMemberByIdData, GetMemberByIdResponse, DeleteMemberByIdData, DeleteMemberByIdResponse, PutMemberByIdData, PutMemberByIdResponse, PutMemberByIdValidateData, PutMemberByIdValidateResponse, GetMemberConfigurationResponse, PostMemberValidateData, PostMemberValidateResponse, PostModelsBuilderBuildResponse, GetModelsBuilderDashboardResponse, GetModelsBuilderStatusResponse, GetObjectTypesData, GetObjectTypesResponse, GetOembedQueryData, GetOembedQueryResponse, PostPackageByNameRunMigrationData, PostPackageByNameRunMigrationResponse, GetPackageConfigurationResponse, GetPackageCreatedData, GetPackageCreatedResponse, PostPackageCreatedData, PostPackageCreatedResponse, GetPackageCreatedByIdData, GetPackageCreatedByIdResponse, DeletePackageCreatedByIdData, DeletePackageCreatedByIdResponse, PutPackageCreatedByIdData, PutPackageCreatedByIdResponse, GetPackageCreatedByIdDownloadData, GetPackageCreatedByIdDownloadResponse, GetPackageMigrationStatusData, GetPackageMigrationStatusResponse, GetItemPartialViewData, GetItemPartialViewResponse, PostPartialViewData, PostPartialViewResponse, GetPartialViewByPathData, GetPartialViewByPathResponse, DeletePartialViewByPathData, DeletePartialViewByPathResponse, PutPartialViewByPathData, PutPartialViewByPathResponse, PutPartialViewByPathRenameData, PutPartialViewByPathRenameResponse, PostPartialViewFolderData, PostPartialViewFolderResponse, GetPartialViewFolderByPathData, GetPartialViewFolderByPathResponse, DeletePartialViewFolderByPathData, DeletePartialViewFolderByPathResponse, GetPartialViewSnippetData, GetPartialViewSnippetResponse, GetPartialViewSnippetByIdData, GetPartialViewSnippetByIdResponse, GetTreePartialViewAncestorsData, GetTreePartialViewAncestorsResponse, GetTreePartialViewChildrenData, GetTreePartialViewChildrenResponse, GetTreePartialViewRootData, GetTreePartialViewRootResponse, DeletePreviewResponse, PostPreviewResponse, GetProfilingStatusResponse, PutProfilingStatusData, PutProfilingStatusResponse, GetPropertyTypeIsUsedData, GetPropertyTypeIsUsedResponse, PostPublishedCacheCollectResponse, PostPublishedCacheRebuildResponse, PostPublishedCacheReloadResponse, GetPublishedCacheStatusResponse, GetRedirectManagementData, GetRedirectManagementResponse, GetRedirectManagementByIdData, GetRedirectManagementByIdResponse, DeleteRedirectManagementByIdData, DeleteRedirectManagementByIdResponse, GetRedirectManagementStatusResponse, PostRedirectManagementStatusData, PostRedirectManagementStatusResponse, GetItemRelationTypeData, GetItemRelationTypeResponse, GetRelationTypeData, GetRelationTypeResponse, GetRelationTypeByIdData, GetRelationTypeByIdResponse, GetRelationByRelationTypeIdData, GetRelationByRelationTypeIdResponse, GetItemScriptData, GetItemScriptResponse, PostScriptData, PostScriptResponse, GetScriptByPathData, GetScriptByPathResponse, DeleteScriptByPathData, DeleteScriptByPathResponse, PutScriptByPathData, PutScriptByPathResponse, PutScriptByPathRenameData, PutScriptByPathRenameResponse, PostScriptFolderData, PostScriptFolderResponse, GetScriptFolderByPathData, GetScriptFolderByPathResponse, DeleteScriptFolderByPathData, DeleteScriptFolderByPathResponse, GetTreeScriptAncestorsData, GetTreeScriptAncestorsResponse, GetTreeScriptChildrenData, GetTreeScriptChildrenResponse, GetTreeScriptRootData, GetTreeScriptRootResponse, GetSearcherData, GetSearcherResponse, GetSearcherBySearcherNameQueryData, GetSearcherBySearcherNameQueryResponse, GetSecurityConfigurationResponse, PostSecurityForgotPasswordData, PostSecurityForgotPasswordResponse, PostSecurityForgotPasswordResetData, PostSecurityForgotPasswordResetResponse, PostSecurityForgotPasswordVerifyData, PostSecurityForgotPasswordVerifyResponse, GetSegmentData, GetSegmentResponse, GetServerConfigurationResponse, GetServerInformationResponse, GetServerStatusResponse, GetServerTroubleshootingResponse, GetItemStaticFileData, GetItemStaticFileResponse, GetTreeStaticFileAncestorsData, GetTreeStaticFileAncestorsResponse, GetTreeStaticFileChildrenData, GetTreeStaticFileChildrenResponse, GetTreeStaticFileRootData, GetTreeStaticFileRootResponse, GetItemStylesheetData, GetItemStylesheetResponse, PostStylesheetData, PostStylesheetResponse, GetStylesheetByPathData, GetStylesheetByPathResponse, DeleteStylesheetByPathData, DeleteStylesheetByPathResponse, PutStylesheetByPathData, PutStylesheetByPathResponse, PutStylesheetByPathRenameData, PutStylesheetByPathRenameResponse, PostStylesheetFolderData, PostStylesheetFolderResponse, GetStylesheetFolderByPathData, GetStylesheetFolderByPathResponse, DeleteStylesheetFolderByPathData, DeleteStylesheetFolderByPathResponse, GetTreeStylesheetAncestorsData, GetTreeStylesheetAncestorsResponse, GetTreeStylesheetChildrenData, GetTreeStylesheetChildrenResponse, GetTreeStylesheetRootData, GetTreeStylesheetRootResponse, GetTagData, GetTagResponse, GetTelemetryData, GetTelemetryResponse, GetTelemetryLevelResponse, PostTelemetryLevelData, PostTelemetryLevelResponse, GetItemTemplateData, GetItemTemplateResponse, GetItemTemplateSearchData, GetItemTemplateSearchResponse, PostTemplateData, PostTemplateResponse, GetTemplateByIdData, GetTemplateByIdResponse, DeleteTemplateByIdData, DeleteTemplateByIdResponse, PutTemplateByIdData, PutTemplateByIdResponse, GetTemplateConfigurationResponse, PostTemplateQueryExecuteData, PostTemplateQueryExecuteResponse, GetTemplateQuerySettingsResponse, GetTreeTemplateAncestorsData, GetTreeTemplateAncestorsResponse, GetTreeTemplateChildrenData, GetTreeTemplateChildrenResponse, GetTreeTemplateRootData, GetTreeTemplateRootResponse, PostTemporaryFileData, PostTemporaryFileResponse, GetTemporaryFileByIdData, GetTemporaryFileByIdResponse, DeleteTemporaryFileByIdData, DeleteTemporaryFileByIdResponse, GetTemporaryFileConfigurationResponse, PostUpgradeAuthorizeResponse, GetUpgradeSettingsResponse, PostUserDataData, PostUserDataResponse, GetUserDataData, GetUserDataResponse, PutUserDataData, PutUserDataResponse, GetUserDataByIdData, GetUserDataByIdResponse, GetFilterUserGroupData, GetFilterUserGroupResponse, GetItemUserGroupData, GetItemUserGroupResponse, DeleteUserGroupData, DeleteUserGroupResponse, PostUserGroupData, PostUserGroupResponse, GetUserGroupData, GetUserGroupResponse, GetUserGroupByIdData, GetUserGroupByIdResponse, DeleteUserGroupByIdData, DeleteUserGroupByIdResponse, PutUserGroupByIdData, PutUserGroupByIdResponse, DeleteUserGroupByIdUsersData, DeleteUserGroupByIdUsersResponse, PostUserGroupByIdUsersData, PostUserGroupByIdUsersResponse, GetFilterUserData, GetFilterUserResponse, GetItemUserData, GetItemUserResponse, PostUserData, PostUserResponse, DeleteUserData, DeleteUserResponse, GetUserData, GetUserResponse, GetUserByIdData, GetUserByIdResponse, DeleteUserByIdData, DeleteUserByIdResponse, PutUserByIdData, PutUserByIdResponse, GetUserById2FaData, GetUserById2FaResponse, DeleteUserById2FaByProviderNameData, DeleteUserById2FaByProviderNameResponse, GetUserByIdCalculateStartNodesData, GetUserByIdCalculateStartNodesResponse, PostUserByIdChangePasswordData, PostUserByIdChangePasswordResponse, PostUserByIdResetPasswordData, PostUserByIdResetPasswordResponse, DeleteUserAvatarByIdData, DeleteUserAvatarByIdResponse, PostUserAvatarByIdData, PostUserAvatarByIdResponse, GetUserConfigurationResponse, GetUserCurrentResponse, GetUserCurrent2FaResponse, DeleteUserCurrent2FaByProviderNameData, DeleteUserCurrent2FaByProviderNameResponse, PostUserCurrent2FaByProviderNameData, PostUserCurrent2FaByProviderNameResponse, GetUserCurrent2FaByProviderNameData, GetUserCurrent2FaByProviderNameResponse, PostUserCurrentAvatarData, PostUserCurrentAvatarResponse, PostUserCurrentChangePasswordData, PostUserCurrentChangePasswordResponse, GetUserCurrentConfigurationResponse, GetUserCurrentLoginProvidersResponse, GetUserCurrentPermissionsData, GetUserCurrentPermissionsResponse, GetUserCurrentPermissionsDocumentData, GetUserCurrentPermissionsDocumentResponse, GetUserCurrentPermissionsMediaData, GetUserCurrentPermissionsMediaResponse, PostUserDisableData, PostUserDisableResponse, PostUserEnableData, PostUserEnableResponse, PostUserInviteData, PostUserInviteResponse, PostUserInviteCreatePasswordData, PostUserInviteCreatePasswordResponse, PostUserInviteResendData, PostUserInviteResendResponse, PostUserInviteVerifyData, PostUserInviteVerifyResponse, PostUserSetUserGroupsData, PostUserSetUserGroupsResponse, PostUserUnlockData, PostUserUnlockResponse, GetItemWebhookData, GetItemWebhookResponse, GetWebhookData, GetWebhookResponse, PostWebhookData, PostWebhookResponse, GetWebhookByIdData, GetWebhookByIdResponse, DeleteWebhookByIdData, DeleteWebhookByIdResponse, PutWebhookByIdData, PutWebhookByIdResponse, GetWebhookEventsData, GetWebhookEventsResponse } from './types.gen'; +import type { GetCultureData, GetCultureResponse, PostDataTypeData, PostDataTypeResponse, GetDataTypeByIdData, GetDataTypeByIdResponse, DeleteDataTypeByIdData, DeleteDataTypeByIdResponse, PutDataTypeByIdData, PutDataTypeByIdResponse, PostDataTypeByIdCopyData, PostDataTypeByIdCopyResponse, GetDataTypeByIdIsUsedData, GetDataTypeByIdIsUsedResponse, PutDataTypeByIdMoveData, PutDataTypeByIdMoveResponse, GetDataTypeByIdReferencesData, GetDataTypeByIdReferencesResponse, GetDataTypeConfigurationResponse, PostDataTypeFolderData, PostDataTypeFolderResponse, GetDataTypeFolderByIdData, GetDataTypeFolderByIdResponse, DeleteDataTypeFolderByIdData, DeleteDataTypeFolderByIdResponse, PutDataTypeFolderByIdData, PutDataTypeFolderByIdResponse, GetFilterDataTypeData, GetFilterDataTypeResponse, GetItemDataTypeData, GetItemDataTypeResponse, GetItemDataTypeSearchData, GetItemDataTypeSearchResponse, GetTreeDataTypeAncestorsData, GetTreeDataTypeAncestorsResponse, GetTreeDataTypeChildrenData, GetTreeDataTypeChildrenResponse, GetTreeDataTypeRootData, GetTreeDataTypeRootResponse, GetDictionaryData, GetDictionaryResponse, PostDictionaryData, PostDictionaryResponse, GetDictionaryByIdData, GetDictionaryByIdResponse, DeleteDictionaryByIdData, DeleteDictionaryByIdResponse, PutDictionaryByIdData, PutDictionaryByIdResponse, GetDictionaryByIdExportData, GetDictionaryByIdExportResponse, PutDictionaryByIdMoveData, PutDictionaryByIdMoveResponse, PostDictionaryImportData, PostDictionaryImportResponse, GetItemDictionaryData, GetItemDictionaryResponse, GetTreeDictionaryAncestorsData, GetTreeDictionaryAncestorsResponse, GetTreeDictionaryChildrenData, GetTreeDictionaryChildrenResponse, GetTreeDictionaryRootData, GetTreeDictionaryRootResponse, PostDocumentBlueprintData, PostDocumentBlueprintResponse, GetDocumentBlueprintByIdData, GetDocumentBlueprintByIdResponse, DeleteDocumentBlueprintByIdData, DeleteDocumentBlueprintByIdResponse, PutDocumentBlueprintByIdData, PutDocumentBlueprintByIdResponse, PutDocumentBlueprintByIdMoveData, PutDocumentBlueprintByIdMoveResponse, PostDocumentBlueprintFolderData, PostDocumentBlueprintFolderResponse, GetDocumentBlueprintFolderByIdData, GetDocumentBlueprintFolderByIdResponse, DeleteDocumentBlueprintFolderByIdData, DeleteDocumentBlueprintFolderByIdResponse, PutDocumentBlueprintFolderByIdData, PutDocumentBlueprintFolderByIdResponse, PostDocumentBlueprintFromDocumentData, PostDocumentBlueprintFromDocumentResponse, GetItemDocumentBlueprintData, GetItemDocumentBlueprintResponse, GetTreeDocumentBlueprintAncestorsData, GetTreeDocumentBlueprintAncestorsResponse, GetTreeDocumentBlueprintChildrenData, GetTreeDocumentBlueprintChildrenResponse, GetTreeDocumentBlueprintRootData, GetTreeDocumentBlueprintRootResponse, PostDocumentTypeData, PostDocumentTypeResponse, GetDocumentTypeByIdData, GetDocumentTypeByIdResponse, DeleteDocumentTypeByIdData, DeleteDocumentTypeByIdResponse, PutDocumentTypeByIdData, PutDocumentTypeByIdResponse, GetDocumentTypeByIdAllowedChildrenData, GetDocumentTypeByIdAllowedChildrenResponse, GetDocumentTypeByIdBlueprintData, GetDocumentTypeByIdBlueprintResponse, GetDocumentTypeByIdCompositionReferencesData, GetDocumentTypeByIdCompositionReferencesResponse, PostDocumentTypeByIdCopyData, PostDocumentTypeByIdCopyResponse, GetDocumentTypeByIdExportData, GetDocumentTypeByIdExportResponse, PutDocumentTypeByIdImportData, PutDocumentTypeByIdImportResponse, PutDocumentTypeByIdMoveData, PutDocumentTypeByIdMoveResponse, GetDocumentTypeAllowedAtRootData, GetDocumentTypeAllowedAtRootResponse, PostDocumentTypeAvailableCompositionsData, PostDocumentTypeAvailableCompositionsResponse, GetDocumentTypeConfigurationResponse, PostDocumentTypeFolderData, PostDocumentTypeFolderResponse, GetDocumentTypeFolderByIdData, GetDocumentTypeFolderByIdResponse, DeleteDocumentTypeFolderByIdData, DeleteDocumentTypeFolderByIdResponse, PutDocumentTypeFolderByIdData, PutDocumentTypeFolderByIdResponse, PostDocumentTypeImportData, PostDocumentTypeImportResponse, GetItemDocumentTypeData, GetItemDocumentTypeResponse, GetItemDocumentTypeSearchData, GetItemDocumentTypeSearchResponse, GetTreeDocumentTypeAncestorsData, GetTreeDocumentTypeAncestorsResponse, GetTreeDocumentTypeChildrenData, GetTreeDocumentTypeChildrenResponse, GetTreeDocumentTypeRootData, GetTreeDocumentTypeRootResponse, GetDocumentVersionData, GetDocumentVersionResponse, GetDocumentVersionByIdData, GetDocumentVersionByIdResponse, PutDocumentVersionByIdPreventCleanupData, PutDocumentVersionByIdPreventCleanupResponse, PostDocumentVersionByIdRollbackData, PostDocumentVersionByIdRollbackResponse, GetCollectionDocumentByIdData, GetCollectionDocumentByIdResponse, PostDocumentData, PostDocumentResponse, GetDocumentByIdData, GetDocumentByIdResponse, DeleteDocumentByIdData, DeleteDocumentByIdResponse, PutDocumentByIdData, PutDocumentByIdResponse, GetDocumentByIdAuditLogData, GetDocumentByIdAuditLogResponse, PostDocumentByIdCopyData, PostDocumentByIdCopyResponse, GetDocumentByIdDomainsData, GetDocumentByIdDomainsResponse, PutDocumentByIdDomainsData, PutDocumentByIdDomainsResponse, PutDocumentByIdMoveData, PutDocumentByIdMoveResponse, PutDocumentByIdMoveToRecycleBinData, PutDocumentByIdMoveToRecycleBinResponse, GetDocumentByIdNotificationsData, GetDocumentByIdNotificationsResponse, PutDocumentByIdNotificationsData, PutDocumentByIdNotificationsResponse, PostDocumentByIdPublicAccessData, PostDocumentByIdPublicAccessResponse, DeleteDocumentByIdPublicAccessData, DeleteDocumentByIdPublicAccessResponse, GetDocumentByIdPublicAccessData, GetDocumentByIdPublicAccessResponse, PutDocumentByIdPublicAccessData, PutDocumentByIdPublicAccessResponse, PutDocumentByIdPublishData, PutDocumentByIdPublishResponse, PutDocumentByIdPublishWithDescendantsData, PutDocumentByIdPublishWithDescendantsResponse, GetDocumentByIdReferencedByData, GetDocumentByIdReferencedByResponse, GetDocumentByIdReferencedDescendantsData, GetDocumentByIdReferencedDescendantsResponse, PutDocumentByIdUnpublishData, PutDocumentByIdUnpublishResponse, PutDocumentByIdValidateData, PutDocumentByIdValidateResponse, GetDocumentAreReferencedData, GetDocumentAreReferencedResponse, GetDocumentConfigurationResponse, PutDocumentSortData, PutDocumentSortResponse, GetDocumentUrlsData, GetDocumentUrlsResponse, PostDocumentValidateData, PostDocumentValidateResponse, GetItemDocumentData, GetItemDocumentResponse, GetItemDocumentSearchData, GetItemDocumentSearchResponse, DeleteRecycleBinDocumentResponse, DeleteRecycleBinDocumentByIdData, DeleteRecycleBinDocumentByIdResponse, GetRecycleBinDocumentByIdOriginalParentData, GetRecycleBinDocumentByIdOriginalParentResponse, PutRecycleBinDocumentByIdRestoreData, PutRecycleBinDocumentByIdRestoreResponse, GetRecycleBinDocumentChildrenData, GetRecycleBinDocumentChildrenResponse, GetRecycleBinDocumentRootData, GetRecycleBinDocumentRootResponse, GetTreeDocumentAncestorsData, GetTreeDocumentAncestorsResponse, GetTreeDocumentChildrenData, GetTreeDocumentChildrenResponse, GetTreeDocumentRootData, GetTreeDocumentRootResponse, PostDynamicRootQueryData, PostDynamicRootQueryResponse, GetDynamicRootStepsResponse, GetHealthCheckGroupData, GetHealthCheckGroupResponse, GetHealthCheckGroupByNameData, GetHealthCheckGroupByNameResponse, PostHealthCheckGroupByNameCheckData, PostHealthCheckGroupByNameCheckResponse, PostHealthCheckExecuteActionData, PostHealthCheckExecuteActionResponse, GetHelpData, GetHelpResponse, GetImagingResizeUrlsData, GetImagingResizeUrlsResponse, GetImportAnalyzeData, GetImportAnalyzeResponse, GetIndexerData, GetIndexerResponse, GetIndexerByIndexNameData, GetIndexerByIndexNameResponse, PostIndexerByIndexNameRebuildData, PostIndexerByIndexNameRebuildResponse, GetInstallSettingsResponse, PostInstallSetupData, PostInstallSetupResponse, PostInstallValidateDatabaseData, PostInstallValidateDatabaseResponse, GetItemLanguageData, GetItemLanguageResponse, GetItemLanguageDefaultResponse, GetLanguageData, GetLanguageResponse, PostLanguageData, PostLanguageResponse, GetLanguageByIsoCodeData, GetLanguageByIsoCodeResponse, DeleteLanguageByIsoCodeData, DeleteLanguageByIsoCodeResponse, PutLanguageByIsoCodeData, PutLanguageByIsoCodeResponse, GetLogViewerLevelData, GetLogViewerLevelResponse, GetLogViewerLevelCountData, GetLogViewerLevelCountResponse, GetLogViewerLogData, GetLogViewerLogResponse, GetLogViewerMessageTemplateData, GetLogViewerMessageTemplateResponse, GetLogViewerSavedSearchData, GetLogViewerSavedSearchResponse, PostLogViewerSavedSearchData, PostLogViewerSavedSearchResponse, GetLogViewerSavedSearchByNameData, GetLogViewerSavedSearchByNameResponse, DeleteLogViewerSavedSearchByNameData, DeleteLogViewerSavedSearchByNameResponse, GetLogViewerValidateLogsSizeData, GetLogViewerValidateLogsSizeResponse, GetManifestManifestResponse, GetManifestManifestPrivateResponse, GetManifestManifestPublicResponse, GetItemMediaTypeData, GetItemMediaTypeResponse, GetItemMediaTypeAllowedData, GetItemMediaTypeAllowedResponse, GetItemMediaTypeFoldersData, GetItemMediaTypeFoldersResponse, GetItemMediaTypeSearchData, GetItemMediaTypeSearchResponse, PostMediaTypeData, PostMediaTypeResponse, GetMediaTypeByIdData, GetMediaTypeByIdResponse, DeleteMediaTypeByIdData, DeleteMediaTypeByIdResponse, PutMediaTypeByIdData, PutMediaTypeByIdResponse, GetMediaTypeByIdAllowedChildrenData, GetMediaTypeByIdAllowedChildrenResponse, GetMediaTypeByIdCompositionReferencesData, GetMediaTypeByIdCompositionReferencesResponse, PostMediaTypeByIdCopyData, PostMediaTypeByIdCopyResponse, GetMediaTypeByIdExportData, GetMediaTypeByIdExportResponse, PutMediaTypeByIdImportData, PutMediaTypeByIdImportResponse, PutMediaTypeByIdMoveData, PutMediaTypeByIdMoveResponse, GetMediaTypeAllowedAtRootData, GetMediaTypeAllowedAtRootResponse, PostMediaTypeAvailableCompositionsData, PostMediaTypeAvailableCompositionsResponse, GetMediaTypeConfigurationResponse, PostMediaTypeFolderData, PostMediaTypeFolderResponse, GetMediaTypeFolderByIdData, GetMediaTypeFolderByIdResponse, DeleteMediaTypeFolderByIdData, DeleteMediaTypeFolderByIdResponse, PutMediaTypeFolderByIdData, PutMediaTypeFolderByIdResponse, PostMediaTypeImportData, PostMediaTypeImportResponse, GetTreeMediaTypeAncestorsData, GetTreeMediaTypeAncestorsResponse, GetTreeMediaTypeChildrenData, GetTreeMediaTypeChildrenResponse, GetTreeMediaTypeRootData, GetTreeMediaTypeRootResponse, GetCollectionMediaData, GetCollectionMediaResponse, GetItemMediaData, GetItemMediaResponse, GetItemMediaSearchData, GetItemMediaSearchResponse, PostMediaData, PostMediaResponse, GetMediaByIdData, GetMediaByIdResponse, DeleteMediaByIdData, DeleteMediaByIdResponse, PutMediaByIdData, PutMediaByIdResponse, GetMediaByIdAuditLogData, GetMediaByIdAuditLogResponse, PutMediaByIdMoveData, PutMediaByIdMoveResponse, PutMediaByIdMoveToRecycleBinData, PutMediaByIdMoveToRecycleBinResponse, GetMediaByIdReferencedByData, GetMediaByIdReferencedByResponse, GetMediaByIdReferencedDescendantsData, GetMediaByIdReferencedDescendantsResponse, PutMediaByIdValidateData, PutMediaByIdValidateResponse, GetMediaAreReferencedData, GetMediaAreReferencedResponse, GetMediaConfigurationResponse, PutMediaSortData, PutMediaSortResponse, GetMediaUrlsData, GetMediaUrlsResponse, PostMediaValidateData, PostMediaValidateResponse, DeleteRecycleBinMediaResponse, DeleteRecycleBinMediaByIdData, DeleteRecycleBinMediaByIdResponse, GetRecycleBinMediaByIdOriginalParentData, GetRecycleBinMediaByIdOriginalParentResponse, PutRecycleBinMediaByIdRestoreData, PutRecycleBinMediaByIdRestoreResponse, GetRecycleBinMediaChildrenData, GetRecycleBinMediaChildrenResponse, GetRecycleBinMediaRootData, GetRecycleBinMediaRootResponse, GetTreeMediaAncestorsData, GetTreeMediaAncestorsResponse, GetTreeMediaChildrenData, GetTreeMediaChildrenResponse, GetTreeMediaRootData, GetTreeMediaRootResponse, GetItemMemberGroupData, GetItemMemberGroupResponse, GetMemberGroupData, GetMemberGroupResponse, PostMemberGroupData, PostMemberGroupResponse, GetMemberGroupByIdData, GetMemberGroupByIdResponse, DeleteMemberGroupByIdData, DeleteMemberGroupByIdResponse, PutMemberGroupByIdData, PutMemberGroupByIdResponse, GetTreeMemberGroupRootData, GetTreeMemberGroupRootResponse, GetItemMemberTypeData, GetItemMemberTypeResponse, GetItemMemberTypeSearchData, GetItemMemberTypeSearchResponse, PostMemberTypeData, PostMemberTypeResponse, GetMemberTypeByIdData, GetMemberTypeByIdResponse, DeleteMemberTypeByIdData, DeleteMemberTypeByIdResponse, PutMemberTypeByIdData, PutMemberTypeByIdResponse, GetMemberTypeByIdCompositionReferencesData, GetMemberTypeByIdCompositionReferencesResponse, PostMemberTypeByIdCopyData, PostMemberTypeByIdCopyResponse, PostMemberTypeAvailableCompositionsData, PostMemberTypeAvailableCompositionsResponse, GetMemberTypeConfigurationResponse, GetTreeMemberTypeRootData, GetTreeMemberTypeRootResponse, GetFilterMemberData, GetFilterMemberResponse, GetItemMemberData, GetItemMemberResponse, GetItemMemberSearchData, GetItemMemberSearchResponse, PostMemberData, PostMemberResponse, GetMemberByIdData, GetMemberByIdResponse, DeleteMemberByIdData, DeleteMemberByIdResponse, PutMemberByIdData, PutMemberByIdResponse, PutMemberByIdValidateData, PutMemberByIdValidateResponse, GetMemberConfigurationResponse, PostMemberValidateData, PostMemberValidateResponse, PostModelsBuilderBuildResponse, GetModelsBuilderDashboardResponse, GetModelsBuilderStatusResponse, GetObjectTypesData, GetObjectTypesResponse, GetOembedQueryData, GetOembedQueryResponse, PostPackageByNameRunMigrationData, PostPackageByNameRunMigrationResponse, GetPackageConfigurationResponse, GetPackageCreatedData, GetPackageCreatedResponse, PostPackageCreatedData, PostPackageCreatedResponse, GetPackageCreatedByIdData, GetPackageCreatedByIdResponse, DeletePackageCreatedByIdData, DeletePackageCreatedByIdResponse, PutPackageCreatedByIdData, PutPackageCreatedByIdResponse, GetPackageCreatedByIdDownloadData, GetPackageCreatedByIdDownloadResponse, GetPackageMigrationStatusData, GetPackageMigrationStatusResponse, GetItemPartialViewData, GetItemPartialViewResponse, PostPartialViewData, PostPartialViewResponse, GetPartialViewByPathData, GetPartialViewByPathResponse, DeletePartialViewByPathData, DeletePartialViewByPathResponse, PutPartialViewByPathData, PutPartialViewByPathResponse, PutPartialViewByPathRenameData, PutPartialViewByPathRenameResponse, PostPartialViewFolderData, PostPartialViewFolderResponse, GetPartialViewFolderByPathData, GetPartialViewFolderByPathResponse, DeletePartialViewFolderByPathData, DeletePartialViewFolderByPathResponse, GetPartialViewSnippetData, GetPartialViewSnippetResponse, GetPartialViewSnippetByIdData, GetPartialViewSnippetByIdResponse, GetTreePartialViewAncestorsData, GetTreePartialViewAncestorsResponse, GetTreePartialViewChildrenData, GetTreePartialViewChildrenResponse, GetTreePartialViewRootData, GetTreePartialViewRootResponse, DeletePreviewResponse, PostPreviewResponse, GetProfilingStatusResponse, PutProfilingStatusData, PutProfilingStatusResponse, GetPropertyTypeIsUsedData, GetPropertyTypeIsUsedResponse, PostPublishedCacheCollectResponse, PostPublishedCacheRebuildResponse, PostPublishedCacheReloadResponse, GetPublishedCacheStatusResponse, GetRedirectManagementData, GetRedirectManagementResponse, GetRedirectManagementByIdData, GetRedirectManagementByIdResponse, DeleteRedirectManagementByIdData, DeleteRedirectManagementByIdResponse, GetRedirectManagementStatusResponse, PostRedirectManagementStatusData, PostRedirectManagementStatusResponse, GetItemRelationTypeData, GetItemRelationTypeResponse, GetRelationTypeData, GetRelationTypeResponse, GetRelationTypeByIdData, GetRelationTypeByIdResponse, GetRelationByRelationTypeIdData, GetRelationByRelationTypeIdResponse, GetItemScriptData, GetItemScriptResponse, PostScriptData, PostScriptResponse, GetScriptByPathData, GetScriptByPathResponse, DeleteScriptByPathData, DeleteScriptByPathResponse, PutScriptByPathData, PutScriptByPathResponse, PutScriptByPathRenameData, PutScriptByPathRenameResponse, PostScriptFolderData, PostScriptFolderResponse, GetScriptFolderByPathData, GetScriptFolderByPathResponse, DeleteScriptFolderByPathData, DeleteScriptFolderByPathResponse, GetTreeScriptAncestorsData, GetTreeScriptAncestorsResponse, GetTreeScriptChildrenData, GetTreeScriptChildrenResponse, GetTreeScriptRootData, GetTreeScriptRootResponse, GetSearcherData, GetSearcherResponse, GetSearcherBySearcherNameQueryData, GetSearcherBySearcherNameQueryResponse, GetSecurityConfigurationResponse, PostSecurityForgotPasswordData, PostSecurityForgotPasswordResponse, PostSecurityForgotPasswordResetData, PostSecurityForgotPasswordResetResponse, PostSecurityForgotPasswordVerifyData, PostSecurityForgotPasswordVerifyResponse, GetSegmentData, GetSegmentResponse, GetServerConfigurationResponse, GetServerInformationResponse, GetServerStatusResponse, GetServerTroubleshootingResponse, GetItemStaticFileData, GetItemStaticFileResponse, GetTreeStaticFileAncestorsData, GetTreeStaticFileAncestorsResponse, GetTreeStaticFileChildrenData, GetTreeStaticFileChildrenResponse, GetTreeStaticFileRootData, GetTreeStaticFileRootResponse, GetItemStylesheetData, GetItemStylesheetResponse, PostStylesheetData, PostStylesheetResponse, GetStylesheetByPathData, GetStylesheetByPathResponse, DeleteStylesheetByPathData, DeleteStylesheetByPathResponse, PutStylesheetByPathData, PutStylesheetByPathResponse, PutStylesheetByPathRenameData, PutStylesheetByPathRenameResponse, PostStylesheetFolderData, PostStylesheetFolderResponse, GetStylesheetFolderByPathData, GetStylesheetFolderByPathResponse, DeleteStylesheetFolderByPathData, DeleteStylesheetFolderByPathResponse, GetTreeStylesheetAncestorsData, GetTreeStylesheetAncestorsResponse, GetTreeStylesheetChildrenData, GetTreeStylesheetChildrenResponse, GetTreeStylesheetRootData, GetTreeStylesheetRootResponse, GetTagData, GetTagResponse, GetTelemetryData, GetTelemetryResponse, GetTelemetryLevelResponse, PostTelemetryLevelData, PostTelemetryLevelResponse, GetItemTemplateData, GetItemTemplateResponse, GetItemTemplateSearchData, GetItemTemplateSearchResponse, PostTemplateData, PostTemplateResponse, GetTemplateByIdData, GetTemplateByIdResponse, DeleteTemplateByIdData, DeleteTemplateByIdResponse, PutTemplateByIdData, PutTemplateByIdResponse, GetTemplateConfigurationResponse, PostTemplateQueryExecuteData, PostTemplateQueryExecuteResponse, GetTemplateQuerySettingsResponse, GetTreeTemplateAncestorsData, GetTreeTemplateAncestorsResponse, GetTreeTemplateChildrenData, GetTreeTemplateChildrenResponse, GetTreeTemplateRootData, GetTreeTemplateRootResponse, PostTemporaryFileData, PostTemporaryFileResponse, GetTemporaryFileByIdData, GetTemporaryFileByIdResponse, DeleteTemporaryFileByIdData, DeleteTemporaryFileByIdResponse, GetTemporaryFileConfigurationResponse, PostUpgradeAuthorizeResponse, GetUpgradeSettingsResponse, PostUserDataData, PostUserDataResponse, GetUserDataData, GetUserDataResponse, PutUserDataData, PutUserDataResponse, GetUserDataByIdData, GetUserDataByIdResponse, GetFilterUserGroupData, GetFilterUserGroupResponse, GetItemUserGroupData, GetItemUserGroupResponse, DeleteUserGroupData, DeleteUserGroupResponse, PostUserGroupData, PostUserGroupResponse, GetUserGroupData, GetUserGroupResponse, GetUserGroupByIdData, GetUserGroupByIdResponse, DeleteUserGroupByIdData, DeleteUserGroupByIdResponse, PutUserGroupByIdData, PutUserGroupByIdResponse, DeleteUserGroupByIdUsersData, DeleteUserGroupByIdUsersResponse, PostUserGroupByIdUsersData, PostUserGroupByIdUsersResponse, GetFilterUserData, GetFilterUserResponse, GetItemUserData, GetItemUserResponse, PostUserData, PostUserResponse, DeleteUserData, DeleteUserResponse, GetUserData, GetUserResponse, GetUserByIdData, GetUserByIdResponse, DeleteUserByIdData, DeleteUserByIdResponse, PutUserByIdData, PutUserByIdResponse, GetUserById2FaData, GetUserById2FaResponse, DeleteUserById2FaByProviderNameData, DeleteUserById2FaByProviderNameResponse, GetUserByIdCalculateStartNodesData, GetUserByIdCalculateStartNodesResponse, PostUserByIdChangePasswordData, PostUserByIdChangePasswordResponse, PostUserByIdClientCredentialsData, PostUserByIdClientCredentialsResponse, GetUserByIdClientCredentialsData, GetUserByIdClientCredentialsResponse, DeleteUserByIdClientCredentialsByClientIdData, DeleteUserByIdClientCredentialsByClientIdResponse, PostUserByIdResetPasswordData, PostUserByIdResetPasswordResponse, DeleteUserAvatarByIdData, DeleteUserAvatarByIdResponse, PostUserAvatarByIdData, PostUserAvatarByIdResponse, GetUserConfigurationResponse, GetUserCurrentResponse, GetUserCurrent2FaResponse, DeleteUserCurrent2FaByProviderNameData, DeleteUserCurrent2FaByProviderNameResponse, PostUserCurrent2FaByProviderNameData, PostUserCurrent2FaByProviderNameResponse, GetUserCurrent2FaByProviderNameData, GetUserCurrent2FaByProviderNameResponse, PostUserCurrentAvatarData, PostUserCurrentAvatarResponse, PostUserCurrentChangePasswordData, PostUserCurrentChangePasswordResponse, GetUserCurrentConfigurationResponse, GetUserCurrentLoginProvidersResponse, GetUserCurrentPermissionsData, GetUserCurrentPermissionsResponse, GetUserCurrentPermissionsDocumentData, GetUserCurrentPermissionsDocumentResponse, GetUserCurrentPermissionsMediaData, GetUserCurrentPermissionsMediaResponse, PostUserDisableData, PostUserDisableResponse, PostUserEnableData, PostUserEnableResponse, PostUserInviteData, PostUserInviteResponse, PostUserInviteCreatePasswordData, PostUserInviteCreatePasswordResponse, PostUserInviteResendData, PostUserInviteResendResponse, PostUserInviteVerifyData, PostUserInviteVerifyResponse, PostUserSetUserGroupsData, PostUserSetUserGroupsResponse, PostUserUnlockData, PostUserUnlockResponse, GetItemWebhookData, GetItemWebhookResponse, GetWebhookData, GetWebhookResponse, PostWebhookData, PostWebhookResponse, GetWebhookByIdData, GetWebhookByIdResponse, DeleteWebhookByIdData, DeleteWebhookByIdResponse, PutWebhookByIdData, PutWebhookByIdResponse, GetWebhookEventsData, GetWebhookEventsResponse } from './types.gen'; export class CultureService { /** @@ -2425,6 +2425,7 @@ export class DocumentService { * @param data.query * @param data.skip * @param data.take + * @param data.parentId * @returns unknown OK * @throws ApiError */ @@ -2435,7 +2436,8 @@ export class DocumentService { query: { query: data.query, skip: data.skip, - take: data.take + take: data.take, + parentId: data.parentId }, errors: { 401: 'The resource is protected and requires an authentication token' @@ -4014,6 +4016,7 @@ export class MediaService { * @param data.query * @param data.skip * @param data.take + * @param data.parentId * @returns unknown OK * @throws ApiError */ @@ -4024,7 +4027,8 @@ export class MediaService { query: { query: data.query, skip: data.skip, - take: data.take + take: data.take, + parentId: data.parentId }, errors: { 401: 'The resource is protected and requires an authentication token' @@ -8103,6 +8107,75 @@ export class UserService { }); } + /** + * @param data The data for the request. + * @param data.id + * @param data.requestBody + * @returns string OK + * @throws ApiError + */ + public static postUserByIdClientCredentials(data: PostUserByIdClientCredentialsData): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/umbraco/management/api/v1/user/{id}/client-credentials', + path: { + id: data.id + }, + body: data.requestBody, + mediaType: 'application/json', + responseHeader: 'Umb-Notifications', + errors: { + 400: 'Bad Request', + 401: 'The resource is protected and requires an authentication token', + 403: 'The authenticated user do not have access to this resource' + } + }); + } + + /** + * @param data The data for the request. + * @param data.id + * @returns string OK + * @throws ApiError + */ + public static getUserByIdClientCredentials(data: GetUserByIdClientCredentialsData): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/user/{id}/client-credentials', + path: { + id: data.id + }, + errors: { + 401: 'The resource is protected and requires an authentication token', + 403: 'The authenticated user do not have access to this resource' + } + }); + } + + /** + * @param data The data for the request. + * @param data.id + * @param data.clientId + * @returns string OK + * @throws ApiError + */ + public static deleteUserByIdClientCredentialsByClientId(data: DeleteUserByIdClientCredentialsByClientIdData): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/umbraco/management/api/v1/user/{id}/client-credentials/{clientId}', + path: { + id: data.id, + clientId: data.clientId + }, + responseHeader: 'Umb-Notifications', + errors: { + 400: 'Bad Request', + 401: 'The resource is protected and requires an authentication token', + 403: 'The authenticated user do not have access to this resource' + } + }); + } + /** * @param data The data for the request. * @param data.id diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts index 6a1ac2dca6..8a194b70f5 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts @@ -3,23 +3,23 @@ export type AllowedDocumentTypeModel = { id: string; name: string; - description?: (string) | null; - icon?: (string) | null; + description?: string | null; + icon?: string | null; }; export type AllowedMediaTypeModel = { id: string; name: string; - description?: (string) | null; - icon?: (string) | null; + description?: string | null; + icon?: string | null; }; export type AuditLogResponseModel = { - user: (ReferenceByIdModel); + user: ReferenceByIdModel; timestamp: string; logType: AuditTypeModel; - comment?: (string) | null; - parameters?: (string) | null; + comment?: string | null; + parameters?: string | null; }; export enum AuditTypeModel { @@ -83,7 +83,7 @@ export type CalculatedUserStartNodesResponseModel = { export type ChangePasswordCurrentUserRequestModel = { newPassword: string; - oldPassword?: (string) | null; + oldPassword?: string | null; }; export type ChangePasswordUserRequestModel = { @@ -101,21 +101,21 @@ export type ConsentLevelPresentationModel = { }; export type CopyDataTypeRequestModel = { - target?: ((ReferenceByIdModel) | null); + target?: ReferenceByIdModel | null; }; export type CopyDocumentRequestModel = { - target?: ((ReferenceByIdModel) | null); + target?: ReferenceByIdModel | null; relateToOriginal: boolean; includeDescendants: boolean; }; export type CopyDocumentTypeRequestModel = { - target?: ((ReferenceByIdModel) | null); + target?: ReferenceByIdModel | null; }; export type CopyMediaTypeRequestModel = { - target?: ((ReferenceByIdModel) | null); + target?: ReferenceByIdModel | null; }; export type CreateDataTypeRequestModel = { @@ -123,92 +123,92 @@ export type CreateDataTypeRequestModel = { editorAlias: string; editorUiAlias: string; values: Array<(DataTypePropertyPresentationModel)>; - id?: (string) | null; - parent?: ((ReferenceByIdModel) | null); + id?: string | null; + parent?: ReferenceByIdModel | null; }; export type CreateDictionaryItemRequestModel = { name: string; translations: Array<(DictionaryItemTranslationModel)>; - id?: (string) | null; - parent?: ((ReferenceByIdModel) | null); + id?: string | null; + parent?: ReferenceByIdModel | null; }; export type CreateDocumentBlueprintFromDocumentRequestModel = { - document: (ReferenceByIdModel); - id?: (string) | null; + document: ReferenceByIdModel; + id?: string | null; name: string; - parent?: ((ReferenceByIdModel) | null); + parent?: ReferenceByIdModel | null; }; export type CreateDocumentBlueprintRequestModel = { values: Array<(DocumentValueModel)>; variants: Array<(DocumentVariantRequestModel)>; - id?: (string) | null; - parent?: ((ReferenceByIdModel) | null); - documentType: (ReferenceByIdModel); + id?: string | null; + parent?: ReferenceByIdModel | null; + documentType: ReferenceByIdModel; }; export type CreateDocumentRequestModel = { values: Array<(DocumentValueModel)>; variants: Array<(DocumentVariantRequestModel)>; - id?: (string) | null; - parent?: ((ReferenceByIdModel) | null); - documentType: (ReferenceByIdModel); - template: ((ReferenceByIdModel) | null); + id?: string | null; + parent?: ReferenceByIdModel | null; + documentType: ReferenceByIdModel; + template: ReferenceByIdModel | null; }; export type CreateDocumentTypePropertyTypeContainerRequestModel = { id: string; - parent?: ((ReferenceByIdModel) | null); - name?: (string) | null; + parent?: ReferenceByIdModel | null; + name?: string | null; type: string; sortOrder: number; }; export type CreateDocumentTypePropertyTypeRequestModel = { id: string; - container?: ((ReferenceByIdModel) | null); + container?: ReferenceByIdModel | null; sortOrder: number; alias: string; name: string; - description?: (string) | null; - dataType: (ReferenceByIdModel); + description?: string | null; + dataType: ReferenceByIdModel; variesByCulture: boolean; variesBySegment: boolean; - validation: (PropertyTypeValidationModel); - appearance: (PropertyTypeAppearanceModel); + validation: PropertyTypeValidationModel; + appearance: PropertyTypeAppearanceModel; }; export type CreateDocumentTypeRequestModel = { alias: string; name: string; - description?: (string) | null; + description?: string | null; icon: string; allowedAsRoot: boolean; variesByCulture: boolean; variesBySegment: boolean; - collection?: ((ReferenceByIdModel) | null); + collection?: ReferenceByIdModel | null; isElement: boolean; properties: Array<(CreateDocumentTypePropertyTypeRequestModel)>; containers: Array<(CreateDocumentTypePropertyTypeContainerRequestModel)>; - id?: (string) | null; - parent?: ((ReferenceByIdModel) | null); + id?: string | null; + parent?: ReferenceByIdModel | null; allowedTemplates: Array<(ReferenceByIdModel)>; - defaultTemplate?: ((ReferenceByIdModel) | null); - cleanup: (DocumentTypeCleanupModel); + defaultTemplate?: ReferenceByIdModel | null; + cleanup: DocumentTypeCleanupModel; allowedDocumentTypes: Array<(DocumentTypeSortModel)>; compositions: Array<(DocumentTypeCompositionModel)>; }; export type CreateFolderRequestModel = { name: string; - id?: (string) | null; - parent?: ((ReferenceByIdModel) | null); + id?: string | null; + parent?: ReferenceByIdModel | null; }; export type CreateInitialPasswordUserRequestModel = { - user: (ReferenceByIdModel); + user: ReferenceByIdModel; token: string; password: string; }; @@ -217,44 +217,44 @@ export type CreateLanguageRequestModel = { name: string; isDefault: boolean; isMandatory: boolean; - fallbackIsoCode?: (string) | null; + fallbackIsoCode?: string | null; isoCode: string; }; export type CreateMediaRequestModel = { values: Array<(MediaValueModel)>; variants: Array<(MediaVariantRequestModel)>; - id?: (string) | null; - parent?: ((ReferenceByIdModel) | null); - mediaType: (ReferenceByIdModel); + id?: string | null; + parent?: ReferenceByIdModel | null; + mediaType: ReferenceByIdModel; }; export type CreateMediaTypePropertyTypeContainerRequestModel = { id: string; - parent?: ((ReferenceByIdModel) | null); - name?: (string) | null; + parent?: ReferenceByIdModel | null; + name?: string | null; type: string; sortOrder: number; }; export type CreateMediaTypePropertyTypeRequestModel = { id: string; - container?: ((ReferenceByIdModel) | null); + container?: ReferenceByIdModel | null; sortOrder: number; alias: string; name: string; - description?: (string) | null; - dataType: (ReferenceByIdModel); + description?: string | null; + dataType: ReferenceByIdModel; variesByCulture: boolean; variesBySegment: boolean; - validation: (PropertyTypeValidationModel); - appearance: (PropertyTypeAppearanceModel); + validation: PropertyTypeValidationModel; + appearance: PropertyTypeAppearanceModel; }; export type CreateMediaTypeRequestModel = { alias: string; name: string; - description?: (string) | null; + description?: string | null; icon: string; allowedAsRoot: boolean; variesByCulture: boolean; @@ -262,73 +262,73 @@ export type CreateMediaTypeRequestModel = { isElement: boolean; properties: Array<(CreateMediaTypePropertyTypeRequestModel)>; containers: Array<(CreateMediaTypePropertyTypeContainerRequestModel)>; - id?: (string) | null; - parent?: ((ReferenceByIdModel) | null); + id?: string | null; + parent?: ReferenceByIdModel | null; allowedMediaTypes: Array<(MediaTypeSortModel)>; compositions: Array<(MediaTypeCompositionModel)>; - collection?: ((ReferenceByIdModel) | null); + collection?: ReferenceByIdModel | null; }; export type CreateMemberGroupRequestModel = { name: string; - id?: (string) | null; + id?: string | null; }; export type CreateMemberRequestModel = { values: Array<(MemberValueModel)>; variants: Array<(MemberVariantRequestModel)>; - id?: (string) | null; + id?: string | null; email: string; username: string; password: string; - memberType: (ReferenceByIdModel); + memberType: ReferenceByIdModel; groups?: Array<(string)> | null; isApproved: boolean; }; export type CreateMemberTypePropertyTypeContainerRequestModel = { id: string; - parent?: ((ReferenceByIdModel) | null); - name?: (string) | null; + parent?: ReferenceByIdModel | null; + name?: string | null; type: string; sortOrder: number; }; export type CreateMemberTypePropertyTypeRequestModel = { id: string; - container?: ((ReferenceByIdModel) | null); + container?: ReferenceByIdModel | null; sortOrder: number; alias: string; name: string; - description?: (string) | null; - dataType: (ReferenceByIdModel); + description?: string | null; + dataType: ReferenceByIdModel; variesByCulture: boolean; variesBySegment: boolean; - validation: (PropertyTypeValidationModel); - appearance: (PropertyTypeAppearanceModel); + validation: PropertyTypeValidationModel; + appearance: PropertyTypeAppearanceModel; isSensitive: boolean; - visibility: (MemberTypePropertyTypeVisibilityModel); + visibility: MemberTypePropertyTypeVisibilityModel; }; export type CreateMemberTypeRequestModel = { alias: string; name: string; - description?: (string) | null; + description?: string | null; icon: string; allowedAsRoot: boolean; variesByCulture: boolean; variesBySegment: boolean; - collection?: ((ReferenceByIdModel) | null); + collection?: ReferenceByIdModel | null; isElement: boolean; properties: Array<(CreateMemberTypePropertyTypeRequestModel)>; containers: Array<(CreateMemberTypePropertyTypeContainerRequestModel)>; - id?: (string) | null; + id?: string | null; compositions: Array<(MemberTypeCompositionModel)>; }; export type CreatePackageRequestModel = { name: string; - contentNodeId?: (string) | null; + contentNodeId?: string | null; contentLoadChildNodes: boolean; mediaIds: Array<(string)>; mediaLoadChildNodes: boolean; @@ -341,70 +341,75 @@ export type CreatePackageRequestModel = { scripts: Array<(string)>; languages: Array<(string)>; dictionaryItems: Array<(string)>; - id?: (string) | null; + id?: string | null; }; export type CreatePartialViewFolderRequestModel = { name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; }; export type CreatePartialViewRequestModel = { name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; content: string; }; export type CreateScriptFolderRequestModel = { name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; }; export type CreateScriptRequestModel = { name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; content: string; }; export type CreateStylesheetFolderRequestModel = { name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; }; export type CreateStylesheetRequestModel = { name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; content: string; }; export type CreateTemplateRequestModel = { name: string; alias: string; - content?: (string) | null; - id?: (string) | null; + content?: string | null; + id?: string | null; +}; + +export type CreateUserClientCredentialsRequestModel = { + clientId: string; + clientSecret: string; }; export type CreateUserDataRequestModel = { group: string; identifier: string; value: string; - key?: (string) | null; + key?: string | null; }; export type CreateUserGroupRequestModel = { name: string; alias: string; - icon?: (string) | null; + icon?: string | null; sections: Array<(string)>; languages: Array<(string)>; hasAccessToAllLanguages: boolean; - documentStartNode?: ((ReferenceByIdModel) | null); + documentStartNode?: ReferenceByIdModel | null; documentRootAccess: boolean; - mediaStartNode?: ((ReferenceByIdModel) | null); + mediaStartNode?: ReferenceByIdModel | null; mediaRootAccess: boolean; fallbackPermissions: Array<(string)>; permissions: Array<(DocumentPermissionPresentationModel | UnknownTypePermissionPresentationModel)>; - id?: (string) | null; + id?: string | null; }; export type CreateUserRequestModel = { @@ -412,7 +417,8 @@ export type CreateUserRequestModel = { userName: string; name: string; userGroupIds: Array<(ReferenceByIdModel)>; - id?: (string) | null; + id?: string | null; + kind: UserKindModel; }; export type CreateWebhookRequestModel = { @@ -422,13 +428,13 @@ export type CreateWebhookRequestModel = { headers: { [key: string]: (string); }; - id?: (string) | null; + id?: string | null; events: Array<(string)>; }; export type CultureAndScheduleRequestModel = { - culture?: (string) | null; - schedule?: ((ScheduleRequestModel) | null); + culture?: string | null; + schedule?: ScheduleRequestModel | null; }; export type CultureReponseModel = { @@ -442,7 +448,7 @@ export type CurrenUserConfigurationResponseModel = { * @deprecated */ usernameIsEmail: boolean; - passwordConfiguration: (PasswordConfigurationResponseModel); + passwordConfiguration: PasswordConfigurationResponseModel; }; export type CurrentUserResponseModel = { @@ -450,7 +456,7 @@ export type CurrentUserResponseModel = { email: string; userName: string; name: string; - languageIsoCode: (string) | null; + languageIsoCode: string | null; documentStartNodeIds: Array<(ReferenceByIdModel)>; hasDocumentRootAccess: boolean; mediaStartNodeIds: Array<(ReferenceByIdModel)>; @@ -473,15 +479,15 @@ export enum DataTypeChangeModeModel { export type DataTypeContentTypeReferenceModel = { id: string; - type: (string) | null; - name: (string) | null; - icon: (string) | null; + type: string | null; + name: string | null; + icon: string | null; }; export type DataTypeItemResponseModel = { id: string; name: string; - editorUiAlias?: (string) | null; + editorUiAlias?: string | null; isDeletable: boolean; }; @@ -496,7 +502,7 @@ export type DataTypePropertyReferenceModel = { }; export type DataTypeReferenceResponseModel = { - contentType: (DataTypeContentTypeReferenceModel); + contentType: DataTypeContentTypeReferenceModel; properties: Array<(DataTypePropertyReferenceModel)>; }; @@ -513,22 +519,22 @@ export type DataTypeResponseModel = { export type DataTypeTreeItemResponseModel = { hasChildren: boolean; id: string; - parent?: ((ReferenceByIdModel) | null); + parent?: ReferenceByIdModel | null; name: string; isFolder: boolean; - editorUiAlias?: (string) | null; + editorUiAlias?: string | null; isDeletable: boolean; }; export type DatabaseInstallRequestModel = { id: string; providerName: string; - server?: (string) | null; - name?: (string) | null; - username?: (string) | null; - password?: (string) | null; + server?: string | null; + name?: string | null; + username?: string | null; + password?: string | null; useIntegratedAuthentication: boolean; - connectionString?: (string) | null; + connectionString?: string | null; trustServerCertificate: boolean; }; @@ -554,9 +560,9 @@ export type DatatypeConfigurationResponseModel = { export type DefaultReferenceResponseModel = { id: string; - name?: (string) | null; - type?: (string) | null; - icon?: (string) | null; + name?: string | null; + type?: string | null; + icon?: string | null; }; export type DeleteUserGroupsRequestModel = { @@ -584,9 +590,9 @@ export type DictionaryItemTranslationModel = { }; export type DictionaryOverviewResponseModel = { - name?: (string) | null; + name?: string | null; id: string; - parent?: ((ReferenceByIdModel) | null); + parent?: ReferenceByIdModel | null; translatedIsoCodes: Array<(string)>; }; @@ -602,33 +608,33 @@ export type DisableUserRequestModel = { export type DocumentBlueprintItemResponseModel = { id: string; name: string; - documentType: (DocumentTypeReferenceResponseModel); + documentType: DocumentTypeReferenceResponseModel; }; export type DocumentBlueprintResponseModel = { values: Array<(DocumentValueModel)>; variants: Array<(DocumentVariantResponseModel)>; id: string; - documentType: (DocumentTypeReferenceResponseModel); + documentType: DocumentTypeReferenceResponseModel; }; export type DocumentBlueprintTreeItemResponseModel = { hasChildren: boolean; id: string; - parent?: ((ReferenceByIdModel) | null); + parent?: ReferenceByIdModel | null; name: string; isFolder: boolean; - documentType?: ((DocumentTypeReferenceResponseModel) | null); + documentType?: DocumentTypeReferenceResponseModel | null; }; export type DocumentCollectionResponseModel = { values: Array<(DocumentValueModel)>; variants: Array<(DocumentVariantResponseModel)>; id: string; - creator?: (string) | null; + creator?: string | null; sortOrder: number; - documentType: (DocumentTypeCollectionReferenceResponseModel); - updater?: (string) | null; + documentType: DocumentTypeCollectionReferenceResponseModel; + updater?: string | null; }; export type DocumentConfigurationResponseModel = { @@ -646,7 +652,7 @@ export type DocumentItemResponseModel = { id: string; isTrashed: boolean; isProtected: boolean; - documentType: (DocumentTypeReferenceResponseModel); + documentType: DocumentTypeReferenceResponseModel; variants: Array<(DocumentVariantItemResponseModel)>; }; @@ -657,43 +663,43 @@ export type DocumentNotificationResponseModel = { export type DocumentPermissionPresentationModel = { $type: string; - document: (ReferenceByIdModel); + document: ReferenceByIdModel; verbs: Array<(string)>; }; export type DocumentRecycleBinItemResponseModel = { id: string; hasChildren: boolean; - parent?: ((ItemReferenceByIdResponseModel) | null); - documentType: (DocumentTypeReferenceResponseModel); + parent?: ItemReferenceByIdResponseModel | null; + documentType: DocumentTypeReferenceResponseModel; variants: Array<(DocumentVariantItemResponseModel)>; }; export type DocumentReferenceResponseModel = { id: string; - name?: (string) | null; - published?: (boolean) | null; - documentType: (TrackedReferenceDocumentTypeModel); + name?: string | null; + published?: boolean | null; + documentType: TrackedReferenceDocumentTypeModel; }; export type DocumentResponseModel = { values: Array<(DocumentValueModel)>; variants: Array<(DocumentVariantResponseModel)>; id: string; - documentType: (DocumentTypeReferenceResponseModel); + documentType: DocumentTypeReferenceResponseModel; urls: Array<(DocumentUrlInfoModel)>; - template?: ((ReferenceByIdModel) | null); + template?: ReferenceByIdModel | null; isTrashed: boolean; }; export type DocumentTreeItemResponseModel = { hasChildren: boolean; - parent?: ((ReferenceByIdModel) | null); + parent?: ReferenceByIdModel | null; noAccess: boolean; isTrashed: boolean; id: string; isProtected: boolean; - documentType: (DocumentTypeReferenceResponseModel); + documentType: DocumentTypeReferenceResponseModel; variants: Array<(DocumentVariantItemResponseModel)>; }; @@ -704,8 +710,8 @@ export type DocumentTypeBlueprintItemResponseModel = { export type DocumentTypeCleanupModel = { preventCleanup: boolean; - keepAllVersionsNewerThanDays?: (number) | null; - keepLatestVersionPerDayForDays?: (number) | null; + keepAllVersionsNewerThanDays?: number | null; + keepLatestVersionPerDayForDays?: number | null; }; export type DocumentTypeCollectionReferenceResponseModel = { @@ -715,12 +721,12 @@ export type DocumentTypeCollectionReferenceResponseModel = { }; export type DocumentTypeCompositionModel = { - documentType: (ReferenceByIdModel); + documentType: ReferenceByIdModel; compositionType: CompositionTypeModel; }; export type DocumentTypeCompositionRequestModel = { - id?: (string) | null; + id?: string | null; currentPropertyAliases: Array<(string)>; currentCompositeIds: Array<(string)>; isElement: boolean; @@ -743,67 +749,67 @@ export type DocumentTypeItemResponseModel = { id: string; name: string; isElement: boolean; - icon?: (string) | null; - description?: (string) | null; + icon?: string | null; + description?: string | null; }; export type DocumentTypePropertyTypeContainerResponseModel = { id: string; - parent?: ((ReferenceByIdModel) | null); - name?: (string) | null; + parent?: ReferenceByIdModel | null; + name?: string | null; type: string; sortOrder: number; }; export type DocumentTypePropertyTypeResponseModel = { id: string; - container?: ((ReferenceByIdModel) | null); + container?: ReferenceByIdModel | null; sortOrder: number; alias: string; name: string; - description?: (string) | null; - dataType: (ReferenceByIdModel); + description?: string | null; + dataType: ReferenceByIdModel; variesByCulture: boolean; variesBySegment: boolean; - validation: (PropertyTypeValidationModel); - appearance: (PropertyTypeAppearanceModel); + validation: PropertyTypeValidationModel; + appearance: PropertyTypeAppearanceModel; }; export type DocumentTypeReferenceResponseModel = { id: string; icon: string; - collection?: ((ReferenceByIdModel) | null); + collection?: ReferenceByIdModel | null; }; export type DocumentTypeResponseModel = { alias: string; name: string; - description?: (string) | null; + description?: string | null; icon: string; allowedAsRoot: boolean; variesByCulture: boolean; variesBySegment: boolean; - collection?: ((ReferenceByIdModel) | null); + collection?: ReferenceByIdModel | null; isElement: boolean; properties: Array<(DocumentTypePropertyTypeResponseModel)>; containers: Array<(DocumentTypePropertyTypeContainerResponseModel)>; id: string; allowedTemplates: Array<(ReferenceByIdModel)>; - defaultTemplate?: ((ReferenceByIdModel) | null); - cleanup: (DocumentTypeCleanupModel); + defaultTemplate?: ReferenceByIdModel | null; + cleanup: DocumentTypeCleanupModel; allowedDocumentTypes: Array<(DocumentTypeSortModel)>; compositions: Array<(DocumentTypeCompositionModel)>; }; export type DocumentTypeSortModel = { - documentType: (ReferenceByIdModel); + documentType: ReferenceByIdModel; sortOrder: number; }; export type DocumentTypeTreeItemResponseModel = { hasChildren: boolean; id: string; - parent?: ((ReferenceByIdModel) | null); + parent?: ReferenceByIdModel | null; name: string; isFolder: boolean; isElement: boolean; @@ -811,7 +817,7 @@ export type DocumentTypeTreeItemResponseModel = { }; export type DocumentUrlInfoModel = { - culture: (string) | null; + culture: string | null; url: string; }; @@ -821,32 +827,32 @@ export type DocumentUrlInfoResponseModel = { }; export type DocumentValueModel = { - culture?: (string) | null; - segment?: (string) | null; + culture?: string | null; + segment?: string | null; alias: string; value?: unknown; }; export type DocumentVariantItemResponseModel = { name: string; - culture?: (string) | null; + culture?: string | null; state: DocumentVariantStateModel; }; export type DocumentVariantRequestModel = { - culture?: (string) | null; - segment?: (string) | null; + culture?: string | null; + segment?: string | null; name: string; }; export type DocumentVariantResponseModel = { - culture?: (string) | null; - segment?: (string) | null; + culture?: string | null; + segment?: string | null; name: string; createDate: string; updateDate: string; state: DocumentVariantStateModel; - publishDate?: (string) | null; + publishDate?: string | null; }; export enum DocumentVariantStateModel { @@ -858,9 +864,9 @@ export enum DocumentVariantStateModel { export type DocumentVersionItemResponseModel = { id: string; - document: (ReferenceByIdModel); - documentType: (ReferenceByIdModel); - user: (ReferenceByIdModel); + document: ReferenceByIdModel; + documentType: ReferenceByIdModel; + user: ReferenceByIdModel; versionDate: string; isCurrentPublishedVersion: boolean; isCurrentDraftVersion: boolean; @@ -871,8 +877,8 @@ export type DocumentVersionResponseModel = { values: Array<(DocumentValueModel)>; variants: Array<(DocumentVariantResponseModel)>; id: string; - documentType: (DocumentTypeReferenceResponseModel); - document?: ((ReferenceByIdModel) | null); + documentType: DocumentTypeReferenceResponseModel; + document?: ReferenceByIdModel | null; }; export type DomainPresentationModel = { @@ -881,24 +887,24 @@ export type DomainPresentationModel = { }; export type DomainsResponseModel = { - defaultIsoCode?: (string) | null; + defaultIsoCode?: string | null; domains: Array<(DomainPresentationModel)>; }; export type DynamicRootContextRequestModel = { - id?: (string) | null; - parent: (ReferenceByIdModel); - culture?: (string) | null; - segment?: (string) | null; + id?: string | null; + parent: ReferenceByIdModel; + culture?: string | null; + segment?: string | null; }; export type DynamicRootQueryOriginRequestModel = { alias: string; - id?: (string) | null; + id?: string | null; }; export type DynamicRootQueryRequestModel = { - origin: (DynamicRootQueryOriginRequestModel); + origin: DynamicRootQueryOriginRequestModel; steps: Array<(DynamicRootQueryStepRequestModel)>; }; @@ -908,8 +914,8 @@ export type DynamicRootQueryStepRequestModel = { }; export type DynamicRootRequestModel = { - context: (DynamicRootContextRequestModel); - query: (DynamicRootQueryRequestModel); + context: DynamicRootContextRequestModel; + query: DynamicRootQueryRequestModel; }; export type DynamicRootResponseModel = { @@ -927,8 +933,8 @@ export type EnableUserRequestModel = { export type EntityImportAnalysisResponseModel = { entityType: string; - alias?: (string) | null; - key?: (string) | null; + alias?: string | null; + key?: string | null; }; export enum EventMessageTypeModel { @@ -952,7 +958,7 @@ export type FileSystemTreeItemPresentationModel = { hasChildren: boolean; name: string; path: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; isFolder: boolean; }; @@ -962,14 +968,14 @@ export type FolderResponseModel = { }; export type HealthCheckActionRequestModel = { - healthCheck: (ReferenceByIdModel); - alias?: (string) | null; - name?: (string) | null; - description?: (string) | null; + healthCheck: ReferenceByIdModel; + alias?: string | null; + name?: string | null; + description?: string | null; valueRequired: boolean; - providedValue?: (string) | null; - providedValueValidation?: (string) | null; - providedValueValidationRegex?: (string) | null; + providedValue?: string | null; + providedValueValidation?: string | null; + providedValueValidationRegex?: string | null; actionParameters?: { [key: string]: unknown; } | null; @@ -991,14 +997,14 @@ export type HealthCheckGroupWithResultResponseModel = { export type HealthCheckModel = { id: string; name: string; - description?: (string) | null; + description?: string | null; }; export type HealthCheckResultResponseModel = { message: string; resultType: StatusResultTypeModel; actions?: Array<(HealthCheckActionRequestModel)> | null; - readMoreLink?: (string) | null; + readMoreLink?: string | null; }; export type HealthCheckWithResultPresentationModel = { @@ -1014,14 +1020,14 @@ export enum HealthStatusModel { export type HealthStatusResponseModel = { status: HealthStatusModel; - message?: (string) | null; + message?: string | null; }; export type HelpPageResponseModel = { - name?: (string) | null; - description?: (string) | null; - url?: (string) | null; - type?: (string) | null; + name?: string | null; + description?: string | null; + url?: string | null; + type?: string | null; }; export enum ImageCropModeModel { @@ -1034,21 +1040,21 @@ export enum ImageCropModeModel { } export type ImportDictionaryRequestModel = { - temporaryFile: (ReferenceByIdModel); - parent?: ((ReferenceByIdModel) | null); + temporaryFile: ReferenceByIdModel; + parent?: ReferenceByIdModel | null; }; export type ImportDocumentTypeRequestModel = { - file: (ReferenceByIdModel); + file: ReferenceByIdModel; }; export type ImportMediaTypeRequestModel = { - file: (ReferenceByIdModel); + file: ReferenceByIdModel; }; export type IndexResponseModel = { name: string; - healthStatus: (HealthStatusResponseModel); + healthStatus: HealthStatusResponseModel; canRebuild: boolean; searcherName: string; documentCount: number; @@ -1059,13 +1065,13 @@ export type IndexResponseModel = { }; export type InstallRequestModel = { - user: (UserInstallRequestModel); - database: (DatabaseInstallRequestModel); + user: UserInstallRequestModel; + database: DatabaseInstallRequestModel; telemetryLevel: TelemetryLevelModel; }; export type InstallSettingsResponseModel = { - user: (UserSettingsPresentationModel); + user: UserSettingsPresentationModel; databases: Array<(DatabaseSettingsPresentationModel)>; }; @@ -1074,8 +1080,8 @@ export type InviteUserRequestModel = { userName: string; name: string; userGroupIds: Array<(ReferenceByIdModel)>; - id?: (string) | null; - message?: (string) | null; + id?: string | null; + message?: string | null; }; export type ItemReferenceByIdResponseModel = { @@ -1096,7 +1102,7 @@ export type LanguageResponseModel = { name: string; isDefault: boolean; isMandatory: boolean; - fallbackIsoCode?: (string) | null; + fallbackIsoCode?: string | null; isoCode: string; }; @@ -1119,20 +1125,20 @@ export enum LogLevelModel { export type LogMessagePropertyPresentationModel = { name: string; - value?: (string) | null; + value?: string | null; }; export type LogMessageResponseModel = { timestamp: string; level: LogLevelModel; - messageTemplate?: (string) | null; - renderedMessage?: (string) | null; + messageTemplate?: string | null; + renderedMessage?: string | null; properties: Array<(LogMessagePropertyPresentationModel)>; - exception?: (string) | null; + exception?: string | null; }; export type LogTemplateResponseModel = { - messageTemplate?: (string) | null; + messageTemplate?: string | null; count: number; }; @@ -1143,8 +1149,8 @@ export type LoggerResponseModel = { export type ManifestResponseModel = { name: string; - id?: (string) | null; - version?: (string) | null; + id?: string | null; + version?: string | null; extensions: Array; }; @@ -1152,9 +1158,9 @@ export type MediaCollectionResponseModel = { values: Array<(MediaValueModel)>; variants: Array<(MediaVariantResponseModel)>; id: string; - creator?: (string) | null; + creator?: string | null; sortOrder: number; - mediaType: (MediaTypeCollectionReferenceResponseModel); + mediaType: MediaTypeCollectionReferenceResponseModel; }; export type MediaConfigurationResponseModel = { @@ -1169,22 +1175,22 @@ export type MediaConfigurationResponseModel = { export type MediaItemResponseModel = { id: string; isTrashed: boolean; - mediaType: (MediaTypeReferenceResponseModel); + mediaType: MediaTypeReferenceResponseModel; variants: Array<(VariantItemResponseModel)>; }; export type MediaRecycleBinItemResponseModel = { id: string; hasChildren: boolean; - parent?: ((ItemReferenceByIdResponseModel) | null); - mediaType: (MediaTypeReferenceResponseModel); + parent?: ItemReferenceByIdResponseModel | null; + mediaType: MediaTypeReferenceResponseModel; variants: Array<(VariantItemResponseModel)>; }; export type MediaReferenceResponseModel = { id: string; - name?: (string) | null; - mediaType: (TrackedReferenceMediaTypeModel); + name?: string | null; + mediaType: TrackedReferenceMediaTypeModel; }; export type MediaResponseModel = { @@ -1193,16 +1199,16 @@ export type MediaResponseModel = { id: string; urls: Array<(MediaUrlInfoModel)>; isTrashed: boolean; - mediaType: (MediaTypeReferenceResponseModel); + mediaType: MediaTypeReferenceResponseModel; }; export type MediaTreeItemResponseModel = { hasChildren: boolean; - parent?: ((ReferenceByIdModel) | null); + parent?: ReferenceByIdModel | null; noAccess: boolean; isTrashed: boolean; id: string; - mediaType: (MediaTypeReferenceResponseModel); + mediaType: MediaTypeReferenceResponseModel; variants: Array<(VariantItemResponseModel)>; }; @@ -1213,12 +1219,12 @@ export type MediaTypeCollectionReferenceResponseModel = { }; export type MediaTypeCompositionModel = { - mediaType: (ReferenceByIdModel); + mediaType: ReferenceByIdModel; compositionType: CompositionTypeModel; }; export type MediaTypeCompositionRequestModel = { - id?: (string) | null; + id?: string | null; currentPropertyAliases: Array<(string)>; currentCompositeIds: Array<(string)>; }; @@ -1236,46 +1242,46 @@ export type MediaTypeConfigurationResponseModel = { export type MediaTypeItemResponseModel = { id: string; name: string; - icon?: (string) | null; + icon?: string | null; }; export type MediaTypePropertyTypeContainerResponseModel = { id: string; - parent?: ((ReferenceByIdModel) | null); - name?: (string) | null; + parent?: ReferenceByIdModel | null; + name?: string | null; type: string; sortOrder: number; }; export type MediaTypePropertyTypeResponseModel = { id: string; - container?: ((ReferenceByIdModel) | null); + container?: ReferenceByIdModel | null; sortOrder: number; alias: string; name: string; - description?: (string) | null; - dataType: (ReferenceByIdModel); + description?: string | null; + dataType: ReferenceByIdModel; variesByCulture: boolean; variesBySegment: boolean; - validation: (PropertyTypeValidationModel); - appearance: (PropertyTypeAppearanceModel); + validation: PropertyTypeValidationModel; + appearance: PropertyTypeAppearanceModel; }; export type MediaTypeReferenceResponseModel = { id: string; icon: string; - collection?: ((ReferenceByIdModel) | null); + collection?: ReferenceByIdModel | null; }; export type MediaTypeResponseModel = { alias: string; name: string; - description?: (string) | null; + description?: string | null; icon: string; allowedAsRoot: boolean; variesByCulture: boolean; variesBySegment: boolean; - collection?: ((ReferenceByIdModel) | null); + collection?: ReferenceByIdModel | null; isElement: boolean; properties: Array<(MediaTypePropertyTypeResponseModel)>; containers: Array<(MediaTypePropertyTypeContainerResponseModel)>; @@ -1287,14 +1293,14 @@ export type MediaTypeResponseModel = { }; export type MediaTypeSortModel = { - mediaType: (ReferenceByIdModel); + mediaType: ReferenceByIdModel; sortOrder: number; }; export type MediaTypeTreeItemResponseModel = { hasChildren: boolean; id: string; - parent?: ((ReferenceByIdModel) | null); + parent?: ReferenceByIdModel | null; name: string; isFolder: boolean; icon: string; @@ -1302,7 +1308,7 @@ export type MediaTypeTreeItemResponseModel = { }; export type MediaUrlInfoModel = { - culture: (string) | null; + culture: string | null; url: string; }; @@ -1312,21 +1318,21 @@ export type MediaUrlInfoResponseModel = { }; export type MediaValueModel = { - culture?: (string) | null; - segment?: (string) | null; + culture?: string | null; + segment?: string | null; alias: string; value?: unknown; }; export type MediaVariantRequestModel = { - culture?: (string) | null; - segment?: (string) | null; + culture?: string | null; + segment?: string | null; name: string; }; export type MediaVariantResponseModel = { - culture?: (string) | null; - segment?: (string) | null; + culture?: string | null; + segment?: string | null; name: string; createDate: string; updateDate: string; @@ -1351,34 +1357,41 @@ export type MemberGroupResponseModel = { export type MemberItemResponseModel = { id: string; - memberType: (MemberTypeReferenceResponseModel); + memberType: MemberTypeReferenceResponseModel; variants: Array<(VariantItemResponseModel)>; + kind: MemberKindModel; }; +export enum MemberKindModel { + DEFAULT = 'Default', + API = 'Api' +} + export type MemberResponseModel = { values: Array<(MemberValueModel)>; variants: Array<(MemberVariantResponseModel)>; id: string; email: string; username: string; - memberType: (MemberTypeReferenceResponseModel); + memberType: MemberTypeReferenceResponseModel; isApproved: boolean; isLockedOut: boolean; isTwoFactorEnabled: boolean; failedPasswordAttempts: number; - lastLoginDate?: (string) | null; - lastLockoutDate?: (string) | null; - lastPasswordChangeDate?: (string) | null; + lastLoginDate?: string | null; + lastLockoutDate?: string | null; + lastPasswordChangeDate?: string | null; groups: Array<(string)>; + kind: MemberKindModel; }; export type MemberTypeCompositionModel = { - memberType: (ReferenceByIdModel); + memberType: ReferenceByIdModel; compositionType: CompositionTypeModel; }; export type MemberTypeCompositionRequestModel = { - id?: (string) | null; + id?: string | null; currentPropertyAliases: Array<(string)>; currentCompositeIds: Array<(string)>; }; @@ -1396,31 +1409,31 @@ export type MemberTypeConfigurationResponseModel = { export type MemberTypeItemResponseModel = { id: string; name: string; - icon?: (string) | null; + icon?: string | null; }; export type MemberTypePropertyTypeContainerResponseModel = { id: string; - parent?: ((ReferenceByIdModel) | null); - name?: (string) | null; + parent?: ReferenceByIdModel | null; + name?: string | null; type: string; sortOrder: number; }; export type MemberTypePropertyTypeResponseModel = { id: string; - container?: ((ReferenceByIdModel) | null); + container?: ReferenceByIdModel | null; sortOrder: number; alias: string; name: string; - description?: (string) | null; - dataType: (ReferenceByIdModel); + description?: string | null; + dataType: ReferenceByIdModel; variesByCulture: boolean; variesBySegment: boolean; - validation: (PropertyTypeValidationModel); - appearance: (PropertyTypeAppearanceModel); + validation: PropertyTypeValidationModel; + appearance: PropertyTypeAppearanceModel; isSensitive: boolean; - visibility: (MemberTypePropertyTypeVisibilityModel); + visibility: MemberTypePropertyTypeVisibilityModel; }; export type MemberTypePropertyTypeVisibilityModel = { @@ -1431,18 +1444,18 @@ export type MemberTypePropertyTypeVisibilityModel = { export type MemberTypeReferenceResponseModel = { id: string; icon: string; - collection?: ((ReferenceByIdModel) | null); + collection?: ReferenceByIdModel | null; }; export type MemberTypeResponseModel = { alias: string; name: string; - description?: (string) | null; + description?: string | null; icon: string; allowedAsRoot: boolean; variesByCulture: boolean; variesBySegment: boolean; - collection?: ((ReferenceByIdModel) | null); + collection?: ReferenceByIdModel | null; isElement: boolean; properties: Array<(MemberTypePropertyTypeResponseModel)>; containers: Array<(MemberTypePropertyTypeContainerResponseModel)>; @@ -1453,27 +1466,27 @@ export type MemberTypeResponseModel = { export type MemberTypeTreeItemResponseModel = { hasChildren: boolean; id: string; - parent?: ((ReferenceByIdModel) | null); + parent?: ReferenceByIdModel | null; name: string; icon: string; }; export type MemberValueModel = { - culture?: (string) | null; - segment?: (string) | null; + culture?: string | null; + segment?: string | null; alias: string; value?: unknown; }; export type MemberVariantRequestModel = { - culture?: (string) | null; - segment?: (string) | null; + culture?: string | null; + segment?: string | null; name: string; }; export type MemberVariantResponseModel = { - culture?: (string) | null; - segment?: (string) | null; + culture?: string | null; + segment?: string | null; name: string; createDate: string; updateDate: string; @@ -1483,9 +1496,9 @@ export type ModelsBuilderResponseModel = { mode: ModelsModeModel; canGenerate: boolean; outOfDateModels: boolean; - lastError?: (string) | null; - version?: (string) | null; - modelsNamespace?: (string) | null; + lastError?: string | null; + version?: string | null; + modelsNamespace?: string | null; trackingOutOfDateModels: boolean; }; @@ -1497,37 +1510,37 @@ export enum ModelsModeModel { } export type MoveDataTypeRequestModel = { - target?: ((ReferenceByIdModel) | null); + target?: ReferenceByIdModel | null; }; export type MoveDictionaryRequestModel = { - target?: ((ReferenceByIdModel) | null); + target?: ReferenceByIdModel | null; }; export type MoveDocumentBlueprintRequestModel = { - target?: ((ReferenceByIdModel) | null); + target?: ReferenceByIdModel | null; }; export type MoveDocumentRequestModel = { - target?: ((ReferenceByIdModel) | null); + target?: ReferenceByIdModel | null; }; export type MoveDocumentTypeRequestModel = { - target?: ((ReferenceByIdModel) | null); + target?: ReferenceByIdModel | null; }; export type MoveMediaRequestModel = { - target?: ((ReferenceByIdModel) | null); + target?: ReferenceByIdModel | null; }; export type MoveMediaTypeRequestModel = { - target?: ((ReferenceByIdModel) | null); + target?: ReferenceByIdModel | null; }; export type NamedEntityTreeItemResponseModel = { hasChildren: boolean; id: string; - parent?: ((ReferenceByIdModel) | null); + parent?: ReferenceByIdModel | null; name: string; }; @@ -1546,7 +1559,7 @@ export type OEmbedResponseModel = { }; export type ObjectTypeResponseModel = { - name?: (string) | null; + name?: string | null; id: string; }; @@ -1577,7 +1590,7 @@ export type PackageConfigurationResponseModel = { export type PackageDefinitionResponseModel = { name: string; - contentNodeId?: (string) | null; + contentNodeId?: string | null; contentLoadChildNodes: boolean; mediaIds: Array<(string)>; mediaLoadChildNodes: boolean; @@ -1897,20 +1910,20 @@ export type PagedWebhookResponseModel = { export type PartialViewFolderResponseModel = { path: string; name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; }; export type PartialViewItemResponseModel = { path: string; name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; isFolder: boolean; }; export type PartialViewResponseModel = { path: string; name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; content: string; }; @@ -1934,11 +1947,11 @@ export type PasswordConfigurationResponseModel = { }; export type ProblemDetails = { - type?: (string) | null; - title?: (string) | null; - status?: (number) | null; - detail?: (string) | null; - instance?: (string) | null; + type?: string | null; + title?: string | null; + status?: number | null; + detail?: string | null; + instance?: string | null; [key: string]: (unknown | string | number) | undefined; }; @@ -1960,21 +1973,21 @@ export type PropertyTypeAppearanceModel = { export type PropertyTypeValidationModel = { mandatory: boolean; - mandatoryMessage?: (string) | null; - regEx?: (string) | null; - regExMessage?: (string) | null; + mandatoryMessage?: string | null; + regEx?: string | null; + regExMessage?: string | null; }; export type PublicAccessRequestModel = { - loginDocument: (ReferenceByIdModel); - errorDocument: (ReferenceByIdModel); + loginDocument: ReferenceByIdModel; + errorDocument: ReferenceByIdModel; memberUserNames: Array<(string)>; memberGroupNames: Array<(string)>; }; export type PublicAccessResponseModel = { - loginDocument: (ReferenceByIdModel); - errorDocument: (ReferenceByIdModel); + loginDocument: ReferenceByIdModel; + errorDocument: ReferenceByIdModel; members: Array<(MemberItemResponseModel)>; groups: Array<(MemberGroupItemResponseModel)>; }; @@ -1998,8 +2011,8 @@ export type RedirectUrlResponseModel = { originalUrl: string; destinationUrl: string; created: string; - document: (ReferenceByIdModel); - culture?: (string) | null; + document: ReferenceByIdModel; + culture?: string | null; }; export type RedirectUrlStatusResponseModel = { @@ -2013,16 +2026,16 @@ export type ReferenceByIdModel = { export type RelationReferenceModel = { id: string; - name?: (string) | null; + name?: string | null; }; export type RelationResponseModel = { id: string; - relationType: (ReferenceByIdModel); - parent: (RelationReferenceModel); - child: (RelationReferenceModel); + relationType: ReferenceByIdModel; + parent: RelationReferenceModel; + child: RelationReferenceModel; createDate: string; - comment?: (string) | null; + comment?: string | null; }; export type RelationTypeItemResponseModel = { @@ -2036,9 +2049,9 @@ export type RelationTypeResponseModel = { isBidirectional: boolean; isDependency: boolean; id: string; - alias?: (string) | null; - parentObject?: ((ObjectTypeResponseModel) | null); - childObject?: ((ObjectTypeResponseModel) | null); + alias?: string | null; + parentObject?: ObjectTypeResponseModel | null; + childObject?: ObjectTypeResponseModel | null; }; export type RenamePartialViewRequestModel = { @@ -2054,8 +2067,8 @@ export type RenameStylesheetRequestModel = { }; export type ResendInviteUserRequestModel = { - user: (ReferenceByIdModel); - message?: (string) | null; + user: ReferenceByIdModel; + message?: string | null; }; export type ResetPasswordRequestModel = { @@ -2063,13 +2076,13 @@ export type ResetPasswordRequestModel = { }; export type ResetPasswordTokenRequestModel = { - user: (ReferenceByIdModel); + user: ReferenceByIdModel; resetCode: string; password: string; }; export type ResetPasswordUserResponseModel = { - resetPassword?: (string) | null; + resetPassword?: string | null; }; export enum RuntimeLevelModel { @@ -2098,27 +2111,27 @@ export type SavedLogSearchResponseModel = { }; export type ScheduleRequestModel = { - publishTime?: (string) | null; - unpublishTime?: (string) | null; + publishTime?: string | null; + unpublishTime?: string | null; }; export type ScriptFolderResponseModel = { path: string; name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; }; export type ScriptItemResponseModel = { path: string; name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; isFolder: boolean; }; export type ScriptResponseModel = { path: string; name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; content: string; }; @@ -2134,7 +2147,7 @@ export type SearcherResponseModel = { }; export type SecurityConfigurationResponseModel = { - passwordConfiguration: (PasswordConfigurationResponseModel); + passwordConfiguration: PasswordConfigurationResponseModel; }; export type SegmentResponseModel = { @@ -2167,18 +2180,18 @@ export type ServerTroubleshootingResponseModel = { }; export type SetAvatarRequestModel = { - file: (ReferenceByIdModel); + file: ReferenceByIdModel; }; export type SortingRequestModel = { - parent?: ((ReferenceByIdModel) | null); + parent?: ReferenceByIdModel | null; sorting: Array<(ItemSortingRequestModel)>; }; export type StaticFileItemResponseModel = { path: string; name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; isFolder: boolean; }; @@ -2192,27 +2205,27 @@ export enum StatusResultTypeModel { export type StylesheetFolderResponseModel = { path: string; name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; }; export type StylesheetItemResponseModel = { path: string; name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; isFolder: boolean; }; export type StylesheetResponseModel = { path: string; name: string; - parent?: ((FileSystemFolderModel) | null); + parent?: FileSystemFolderModel | null; content: string; }; export type TagResponseModel = { id: string; - text?: (string) | null; - group?: (string) | null; + text?: string | null; + group?: string | null; nodeCount: number; }; @@ -2247,16 +2260,16 @@ export type TemplateQueryExecuteFilterPresentationModel = { }; export type TemplateQueryExecuteModel = { - rootDocument?: ((ReferenceByIdModel) | null); - documentTypeAlias?: (string) | null; + rootDocument?: ReferenceByIdModel | null; + documentTypeAlias?: string | null; filters?: Array<(TemplateQueryExecuteFilterPresentationModel)> | null; - sort?: ((TemplateQueryExecuteSortModel) | null); + sort?: TemplateQueryExecuteSortModel | null; take: number; }; export type TemplateQueryExecuteSortModel = { propertyAlias: string; - direction?: (string) | null; + direction?: string | null; }; export type TemplateQueryOperatorModel = { @@ -2296,34 +2309,34 @@ export type TemplateQuerySettingsResponseModel = { export type TemplateResponseModel = { name: string; alias: string; - content?: (string) | null; + content?: string | null; id: string; - masterTemplate?: ((ReferenceByIdModel) | null); + masterTemplate?: ReferenceByIdModel | null; }; export type TemporaryFileConfigurationResponseModel = { imageFileTypes: Array<(string)>; disallowedUploadedFilesExtensions: Array<(string)>; allowedUploadedFileExtensions: Array<(string)>; - maxFileSize?: (number) | null; + maxFileSize?: number | null; }; export type TemporaryFileResponseModel = { id: string; - availableUntil?: (string) | null; + availableUntil?: string | null; fileName: string; }; export type TrackedReferenceDocumentTypeModel = { - icon?: (string) | null; - alias?: (string) | null; - name?: (string) | null; + icon?: string | null; + alias?: string | null; + name?: string | null; }; export type TrackedReferenceMediaTypeModel = { - icon?: (string) | null; - alias?: (string) | null; - name?: (string) | null; + icon?: string | null; + alias?: string | null; + name?: string | null; }; export type UnknownTypePermissionPresentationModel = { @@ -2364,52 +2377,52 @@ export type UpdateDocumentNotificationsRequestModel = { export type UpdateDocumentRequestModel = { values: Array<(DocumentValueModel)>; variants: Array<(DocumentVariantRequestModel)>; - template?: ((ReferenceByIdModel) | null); + template?: ReferenceByIdModel | null; }; export type UpdateDocumentTypePropertyTypeContainerRequestModel = { id: string; - parent?: ((ReferenceByIdModel) | null); - name?: (string) | null; + parent?: ReferenceByIdModel | null; + name?: string | null; type: string; sortOrder: number; }; export type UpdateDocumentTypePropertyTypeRequestModel = { id: string; - container?: ((ReferenceByIdModel) | null); + container?: ReferenceByIdModel | null; sortOrder: number; alias: string; name: string; - description?: (string) | null; - dataType: (ReferenceByIdModel); + description?: string | null; + dataType: ReferenceByIdModel; variesByCulture: boolean; variesBySegment: boolean; - validation: (PropertyTypeValidationModel); - appearance: (PropertyTypeAppearanceModel); + validation: PropertyTypeValidationModel; + appearance: PropertyTypeAppearanceModel; }; export type UpdateDocumentTypeRequestModel = { alias: string; name: string; - description?: (string) | null; + description?: string | null; icon: string; allowedAsRoot: boolean; variesByCulture: boolean; variesBySegment: boolean; - collection?: ((ReferenceByIdModel) | null); + collection?: ReferenceByIdModel | null; isElement: boolean; properties: Array<(UpdateDocumentTypePropertyTypeRequestModel)>; containers: Array<(UpdateDocumentTypePropertyTypeContainerRequestModel)>; allowedTemplates: Array<(ReferenceByIdModel)>; - defaultTemplate?: ((ReferenceByIdModel) | null); - cleanup: (DocumentTypeCleanupModel); + defaultTemplate?: ReferenceByIdModel | null; + cleanup: DocumentTypeCleanupModel; allowedDocumentTypes: Array<(DocumentTypeSortModel)>; compositions: Array<(DocumentTypeCompositionModel)>; }; export type UpdateDomainsRequestModel = { - defaultIsoCode?: (string) | null; + defaultIsoCode?: string | null; domains: Array<(DomainPresentationModel)>; }; @@ -2421,7 +2434,7 @@ export type UpdateLanguageRequestModel = { name: string; isDefault: boolean; isMandatory: boolean; - fallbackIsoCode?: (string) | null; + fallbackIsoCode?: string | null; }; export type UpdateMediaRequestModel = { @@ -2431,35 +2444,35 @@ export type UpdateMediaRequestModel = { export type UpdateMediaTypePropertyTypeContainerRequestModel = { id: string; - parent?: ((ReferenceByIdModel) | null); - name?: (string) | null; + parent?: ReferenceByIdModel | null; + name?: string | null; type: string; sortOrder: number; }; export type UpdateMediaTypePropertyTypeRequestModel = { id: string; - container?: ((ReferenceByIdModel) | null); + container?: ReferenceByIdModel | null; sortOrder: number; alias: string; name: string; - description?: (string) | null; - dataType: (ReferenceByIdModel); + description?: string | null; + dataType: ReferenceByIdModel; variesByCulture: boolean; variesBySegment: boolean; - validation: (PropertyTypeValidationModel); - appearance: (PropertyTypeAppearanceModel); + validation: PropertyTypeValidationModel; + appearance: PropertyTypeAppearanceModel; }; export type UpdateMediaTypeRequestModel = { alias: string; name: string; - description?: (string) | null; + description?: string | null; icon: string; allowedAsRoot: boolean; variesByCulture: boolean; variesBySegment: boolean; - collection?: ((ReferenceByIdModel) | null); + collection?: ReferenceByIdModel | null; isElement: boolean; properties: Array<(UpdateMediaTypePropertyTypeRequestModel)>; containers: Array<(UpdateMediaTypePropertyTypeContainerRequestModel)>; @@ -2476,8 +2489,8 @@ export type UpdateMemberRequestModel = { variants: Array<(MemberVariantRequestModel)>; email: string; username: string; - oldPassword?: (string) | null; - newPassword?: (string) | null; + oldPassword?: string | null; + newPassword?: string | null; groups?: Array<(string)> | null; isApproved: boolean; isLockedOut: boolean; @@ -2486,37 +2499,37 @@ export type UpdateMemberRequestModel = { export type UpdateMemberTypePropertyTypeContainerRequestModel = { id: string; - parent?: ((ReferenceByIdModel) | null); - name?: (string) | null; + parent?: ReferenceByIdModel | null; + name?: string | null; type: string; sortOrder: number; }; export type UpdateMemberTypePropertyTypeRequestModel = { id: string; - container?: ((ReferenceByIdModel) | null); + container?: ReferenceByIdModel | null; sortOrder: number; alias: string; name: string; - description?: (string) | null; - dataType: (ReferenceByIdModel); + description?: string | null; + dataType: ReferenceByIdModel; variesByCulture: boolean; variesBySegment: boolean; - validation: (PropertyTypeValidationModel); - appearance: (PropertyTypeAppearanceModel); + validation: PropertyTypeValidationModel; + appearance: PropertyTypeAppearanceModel; isSensitive: boolean; - visibility: (MemberTypePropertyTypeVisibilityModel); + visibility: MemberTypePropertyTypeVisibilityModel; }; export type UpdateMemberTypeRequestModel = { alias: string; name: string; - description?: (string) | null; + description?: string | null; icon: string; allowedAsRoot: boolean; variesByCulture: boolean; variesBySegment: boolean; - collection?: ((ReferenceByIdModel) | null); + collection?: ReferenceByIdModel | null; isElement: boolean; properties: Array<(UpdateMemberTypePropertyTypeRequestModel)>; containers: Array<(UpdateMemberTypePropertyTypeContainerRequestModel)>; @@ -2525,7 +2538,7 @@ export type UpdateMemberTypeRequestModel = { export type UpdatePackageRequestModel = { name: string; - contentNodeId?: (string) | null; + contentNodeId?: string | null; contentLoadChildNodes: boolean; mediaIds: Array<(string)>; mediaLoadChildNodes: boolean; @@ -2556,7 +2569,7 @@ export type UpdateStylesheetRequestModel = { export type UpdateTemplateRequestModel = { name: string; alias: string; - content?: (string) | null; + content?: string | null; }; export type UpdateUserDataRequestModel = { @@ -2569,13 +2582,13 @@ export type UpdateUserDataRequestModel = { export type UpdateUserGroupRequestModel = { name: string; alias: string; - icon?: (string) | null; + icon?: string | null; sections: Array<(string)>; languages: Array<(string)>; hasAccessToAllLanguages: boolean; - documentStartNode?: ((ReferenceByIdModel) | null); + documentStartNode?: ReferenceByIdModel | null; documentRootAccess: boolean; - mediaStartNode?: ((ReferenceByIdModel) | null); + mediaStartNode?: ReferenceByIdModel | null; mediaRootAccess: boolean; fallbackPermissions: Array<(string)>; permissions: Array<(DocumentPermissionPresentationModel | UnknownTypePermissionPresentationModel)>; @@ -2619,7 +2632,7 @@ export type UpgradeSettingsResponseModel = { export type UserConfigurationResponseModel = { canInviteUsers: boolean; usernameIsEmail: boolean; - passwordConfiguration: (PasswordConfigurationResponseModel); + passwordConfiguration: PasswordConfigurationResponseModel; }; export type UserDataModel = { @@ -2644,7 +2657,7 @@ export type UserDataResponseModel = { export type UserExternalLoginProviderModel = { providerSchemeName: string; - providerKey?: (string) | null; + providerKey?: string | null; isLinkedOnUser: boolean; hasManualLinkingEnabled: boolean; }; @@ -2652,20 +2665,20 @@ export type UserExternalLoginProviderModel = { export type UserGroupItemResponseModel = { id: string; name: string; - icon?: (string) | null; - alias?: (string) | null; + icon?: string | null; + alias?: string | null; }; export type UserGroupResponseModel = { name: string; alias: string; - icon?: (string) | null; + icon?: string | null; sections: Array<(string)>; languages: Array<(string)>; hasAccessToAllLanguages: boolean; - documentStartNode?: ((ReferenceByIdModel) | null); + documentStartNode?: ReferenceByIdModel | null; documentRootAccess: boolean; - mediaStartNode?: ((ReferenceByIdModel) | null); + mediaStartNode?: ReferenceByIdModel | null; mediaRootAccess: boolean; fallbackPermissions: Array<(string)>; permissions: Array<(DocumentPermissionPresentationModel | UnknownTypePermissionPresentationModel)>; @@ -2685,8 +2698,14 @@ export type UserItemResponseModel = { id: string; name: string; avatarUrls: Array<(string)>; + kind: UserKindModel; }; +export enum UserKindModel { + DEFAULT = 'Default', + API = 'Api' +} + export enum UserOrderModel { USER_NAME = 'UserName', LANGUAGE = 'Language', @@ -2715,7 +2734,7 @@ export type UserResponseModel = { name: string; userGroupIds: Array<(ReferenceByIdModel)>; id: string; - languageIsoCode?: (string) | null; + languageIsoCode?: string | null; documentStartNodeIds: Array<(ReferenceByIdModel)>; hasDocumentRootAccess: boolean; mediaStartNodeIds: Array<(ReferenceByIdModel)>; @@ -2725,10 +2744,11 @@ export type UserResponseModel = { failedLoginAttempts: number; createDate: string; updateDate: string; - lastLoginDate?: (string) | null; - lastLockoutDate?: (string) | null; - lastPasswordChangeDate?: (string) | null; + lastLoginDate?: string | null; + lastLockoutDate?: string | null; + lastPasswordChangeDate?: string | null; isAdmin: boolean; + kind: UserKindModel; }; export type UserSettingsPresentationModel = { @@ -2753,24 +2773,24 @@ export type UserTwoFactorProviderModel = { export type VariantItemResponseModel = { name: string; - culture?: (string) | null; + culture?: string | null; }; export type VerifyInviteUserRequestModel = { - user: (ReferenceByIdModel); + user: ReferenceByIdModel; token: string; }; export type VerifyInviteUserResponseModel = { - passwordConfiguration: (PasswordConfigurationResponseModel); + passwordConfiguration: PasswordConfigurationResponseModel; }; export type VerifyResetPasswordResponseModel = { - passwordConfiguration: (PasswordConfigurationResponseModel); + passwordConfiguration: PasswordConfigurationResponseModel; }; export type VerifyResetPasswordTokenRequestModel = { - user: (ReferenceByIdModel); + user: ReferenceByIdModel; resetCode: string; }; @@ -2810,85 +2830,85 @@ export type GetCultureData = { take?: number; }; -export type GetCultureResponse = ((PagedCultureReponseModel)); +export type GetCultureResponse = PagedCultureReponseModel; export type PostDataTypeData = { - requestBody?: (CreateDataTypeRequestModel); + requestBody?: CreateDataTypeRequestModel; }; -export type PostDataTypeResponse = (string); +export type PostDataTypeResponse = string; export type GetDataTypeByIdData = { id: string; }; -export type GetDataTypeByIdResponse = ((DataTypeResponseModel)); +export type GetDataTypeByIdResponse = DataTypeResponseModel; export type DeleteDataTypeByIdData = { id: string; }; -export type DeleteDataTypeByIdResponse = (string); +export type DeleteDataTypeByIdResponse = string; export type PutDataTypeByIdData = { id: string; - requestBody?: (UpdateDataTypeRequestModel); + requestBody?: UpdateDataTypeRequestModel; }; -export type PutDataTypeByIdResponse = (string); +export type PutDataTypeByIdResponse = string; export type PostDataTypeByIdCopyData = { id: string; - requestBody?: (CopyDataTypeRequestModel); + requestBody?: CopyDataTypeRequestModel; }; -export type PostDataTypeByIdCopyResponse = (string); +export type PostDataTypeByIdCopyResponse = string; export type GetDataTypeByIdIsUsedData = { id: string; }; -export type GetDataTypeByIdIsUsedResponse = (boolean); +export type GetDataTypeByIdIsUsedResponse = boolean; export type PutDataTypeByIdMoveData = { id: string; - requestBody?: (MoveDataTypeRequestModel); + requestBody?: MoveDataTypeRequestModel; }; -export type PutDataTypeByIdMoveResponse = (string); +export type PutDataTypeByIdMoveResponse = string; export type GetDataTypeByIdReferencesData = { id: string; }; -export type GetDataTypeByIdReferencesResponse = (Array<(DataTypeReferenceResponseModel)>); +export type GetDataTypeByIdReferencesResponse = Array<(DataTypeReferenceResponseModel)>; -export type GetDataTypeConfigurationResponse = ((DatatypeConfigurationResponseModel)); +export type GetDataTypeConfigurationResponse = DatatypeConfigurationResponseModel; export type PostDataTypeFolderData = { - requestBody?: (CreateFolderRequestModel); + requestBody?: CreateFolderRequestModel; }; -export type PostDataTypeFolderResponse = (string); +export type PostDataTypeFolderResponse = string; export type GetDataTypeFolderByIdData = { id: string; }; -export type GetDataTypeFolderByIdResponse = ((FolderResponseModel)); +export type GetDataTypeFolderByIdResponse = FolderResponseModel; export type DeleteDataTypeFolderByIdData = { id: string; }; -export type DeleteDataTypeFolderByIdResponse = (string); +export type DeleteDataTypeFolderByIdResponse = string; export type PutDataTypeFolderByIdData = { id: string; - requestBody?: (UpdateFolderResponseModel); + requestBody?: UpdateFolderResponseModel; }; -export type PutDataTypeFolderByIdResponse = (string); +export type PutDataTypeFolderByIdResponse = string; export type GetFilterDataTypeData = { editorAlias?: string; @@ -2898,13 +2918,13 @@ export type GetFilterDataTypeData = { take?: number; }; -export type GetFilterDataTypeResponse = ((PagedDataTypeItemResponseModel)); +export type GetFilterDataTypeResponse = PagedDataTypeItemResponseModel; export type GetItemDataTypeData = { id?: Array<(string)>; }; -export type GetItemDataTypeResponse = (Array<(DataTypeItemResponseModel)>); +export type GetItemDataTypeResponse = Array<(DataTypeItemResponseModel)>; export type GetItemDataTypeSearchData = { query?: string; @@ -2912,13 +2932,13 @@ export type GetItemDataTypeSearchData = { take?: number; }; -export type GetItemDataTypeSearchResponse = ((PagedModelDataTypeItemResponseModel)); +export type GetItemDataTypeSearchResponse = PagedModelDataTypeItemResponseModel; export type GetTreeDataTypeAncestorsData = { descendantId?: string; }; -export type GetTreeDataTypeAncestorsResponse = (Array<(DataTypeTreeItemResponseModel)>); +export type GetTreeDataTypeAncestorsResponse = Array<(DataTypeTreeItemResponseModel)>; export type GetTreeDataTypeChildrenData = { foldersOnly?: boolean; @@ -2927,7 +2947,7 @@ export type GetTreeDataTypeChildrenData = { take?: number; }; -export type GetTreeDataTypeChildrenResponse = ((PagedDataTypeTreeItemResponseModel)); +export type GetTreeDataTypeChildrenResponse = PagedDataTypeTreeItemResponseModel; export type GetTreeDataTypeRootData = { foldersOnly?: boolean; @@ -2935,7 +2955,7 @@ export type GetTreeDataTypeRootData = { take?: number; }; -export type GetTreeDataTypeRootResponse = ((PagedDataTypeTreeItemResponseModel)); +export type GetTreeDataTypeRootResponse = PagedDataTypeTreeItemResponseModel; export type GetDictionaryData = { filter?: string; @@ -2943,64 +2963,64 @@ export type GetDictionaryData = { take?: number; }; -export type GetDictionaryResponse = ((PagedDictionaryOverviewResponseModel)); +export type GetDictionaryResponse = PagedDictionaryOverviewResponseModel; export type PostDictionaryData = { - requestBody?: (CreateDictionaryItemRequestModel); + requestBody?: CreateDictionaryItemRequestModel; }; -export type PostDictionaryResponse = (string); +export type PostDictionaryResponse = string; export type GetDictionaryByIdData = { id: string; }; -export type GetDictionaryByIdResponse = ((DictionaryItemResponseModel)); +export type GetDictionaryByIdResponse = DictionaryItemResponseModel; export type DeleteDictionaryByIdData = { id: string; }; -export type DeleteDictionaryByIdResponse = (string); +export type DeleteDictionaryByIdResponse = string; export type PutDictionaryByIdData = { id: string; - requestBody?: (UpdateDictionaryItemRequestModel); + requestBody?: UpdateDictionaryItemRequestModel; }; -export type PutDictionaryByIdResponse = (string); +export type PutDictionaryByIdResponse = string; export type GetDictionaryByIdExportData = { id: string; includeChildren?: boolean; }; -export type GetDictionaryByIdExportResponse = (((Blob | File))); +export type GetDictionaryByIdExportResponse = (Blob | File); export type PutDictionaryByIdMoveData = { id: string; - requestBody?: (MoveDictionaryRequestModel); + requestBody?: MoveDictionaryRequestModel; }; -export type PutDictionaryByIdMoveResponse = (string); +export type PutDictionaryByIdMoveResponse = string; export type PostDictionaryImportData = { - requestBody?: (ImportDictionaryRequestModel); + requestBody?: ImportDictionaryRequestModel; }; -export type PostDictionaryImportResponse = (string); +export type PostDictionaryImportResponse = string; export type GetItemDictionaryData = { id?: Array<(string)>; }; -export type GetItemDictionaryResponse = (Array<(DictionaryItemItemResponseModel)>); +export type GetItemDictionaryResponse = Array<(DictionaryItemItemResponseModel)>; export type GetTreeDictionaryAncestorsData = { descendantId?: string; }; -export type GetTreeDictionaryAncestorsResponse = (Array<(NamedEntityTreeItemResponseModel)>); +export type GetTreeDictionaryAncestorsResponse = Array<(NamedEntityTreeItemResponseModel)>; export type GetTreeDictionaryChildrenData = { parentId?: string; @@ -3008,89 +3028,89 @@ export type GetTreeDictionaryChildrenData = { take?: number; }; -export type GetTreeDictionaryChildrenResponse = ((PagedNamedEntityTreeItemResponseModel)); +export type GetTreeDictionaryChildrenResponse = PagedNamedEntityTreeItemResponseModel; export type GetTreeDictionaryRootData = { skip?: number; take?: number; }; -export type GetTreeDictionaryRootResponse = ((PagedNamedEntityTreeItemResponseModel)); +export type GetTreeDictionaryRootResponse = PagedNamedEntityTreeItemResponseModel; export type PostDocumentBlueprintData = { - requestBody?: (CreateDocumentBlueprintRequestModel); + requestBody?: CreateDocumentBlueprintRequestModel; }; -export type PostDocumentBlueprintResponse = (string); +export type PostDocumentBlueprintResponse = string; export type GetDocumentBlueprintByIdData = { id: string; }; -export type GetDocumentBlueprintByIdResponse = ((DocumentBlueprintResponseModel)); +export type GetDocumentBlueprintByIdResponse = DocumentBlueprintResponseModel; export type DeleteDocumentBlueprintByIdData = { id: string; }; -export type DeleteDocumentBlueprintByIdResponse = (string); +export type DeleteDocumentBlueprintByIdResponse = string; export type PutDocumentBlueprintByIdData = { id: string; - requestBody?: (UpdateDocumentBlueprintRequestModel); + requestBody?: UpdateDocumentBlueprintRequestModel; }; -export type PutDocumentBlueprintByIdResponse = (string); +export type PutDocumentBlueprintByIdResponse = string; export type PutDocumentBlueprintByIdMoveData = { id: string; - requestBody?: (MoveDocumentBlueprintRequestModel); + requestBody?: MoveDocumentBlueprintRequestModel; }; -export type PutDocumentBlueprintByIdMoveResponse = (string); +export type PutDocumentBlueprintByIdMoveResponse = string; export type PostDocumentBlueprintFolderData = { - requestBody?: (CreateFolderRequestModel); + requestBody?: CreateFolderRequestModel; }; -export type PostDocumentBlueprintFolderResponse = (string); +export type PostDocumentBlueprintFolderResponse = string; export type GetDocumentBlueprintFolderByIdData = { id: string; }; -export type GetDocumentBlueprintFolderByIdResponse = ((FolderResponseModel)); +export type GetDocumentBlueprintFolderByIdResponse = FolderResponseModel; export type DeleteDocumentBlueprintFolderByIdData = { id: string; }; -export type DeleteDocumentBlueprintFolderByIdResponse = (string); +export type DeleteDocumentBlueprintFolderByIdResponse = string; export type PutDocumentBlueprintFolderByIdData = { id: string; - requestBody?: (UpdateFolderResponseModel); + requestBody?: UpdateFolderResponseModel; }; -export type PutDocumentBlueprintFolderByIdResponse = (string); +export type PutDocumentBlueprintFolderByIdResponse = string; export type PostDocumentBlueprintFromDocumentData = { - requestBody?: (CreateDocumentBlueprintFromDocumentRequestModel); + requestBody?: CreateDocumentBlueprintFromDocumentRequestModel; }; -export type PostDocumentBlueprintFromDocumentResponse = (string); +export type PostDocumentBlueprintFromDocumentResponse = string; export type GetItemDocumentBlueprintData = { id?: Array<(string)>; }; -export type GetItemDocumentBlueprintResponse = (Array<(DocumentBlueprintItemResponseModel)>); +export type GetItemDocumentBlueprintResponse = Array<(DocumentBlueprintItemResponseModel)>; export type GetTreeDocumentBlueprintAncestorsData = { descendantId?: string; }; -export type GetTreeDocumentBlueprintAncestorsResponse = (Array<(DocumentBlueprintTreeItemResponseModel)>); +export type GetTreeDocumentBlueprintAncestorsResponse = Array<(DocumentBlueprintTreeItemResponseModel)>; export type GetTreeDocumentBlueprintChildrenData = { foldersOnly?: boolean; @@ -3099,7 +3119,7 @@ export type GetTreeDocumentBlueprintChildrenData = { take?: number; }; -export type GetTreeDocumentBlueprintChildrenResponse = ((PagedDocumentBlueprintTreeItemResponseModel)); +export type GetTreeDocumentBlueprintChildrenResponse = PagedDocumentBlueprintTreeItemResponseModel; export type GetTreeDocumentBlueprintRootData = { foldersOnly?: boolean; @@ -3107,32 +3127,32 @@ export type GetTreeDocumentBlueprintRootData = { take?: number; }; -export type GetTreeDocumentBlueprintRootResponse = ((PagedDocumentBlueprintTreeItemResponseModel)); +export type GetTreeDocumentBlueprintRootResponse = PagedDocumentBlueprintTreeItemResponseModel; export type PostDocumentTypeData = { - requestBody?: (CreateDocumentTypeRequestModel); + requestBody?: CreateDocumentTypeRequestModel; }; -export type PostDocumentTypeResponse = (string); +export type PostDocumentTypeResponse = string; export type GetDocumentTypeByIdData = { id: string; }; -export type GetDocumentTypeByIdResponse = ((DocumentTypeResponseModel)); +export type GetDocumentTypeByIdResponse = DocumentTypeResponseModel; export type DeleteDocumentTypeByIdData = { id: string; }; -export type DeleteDocumentTypeByIdResponse = (string); +export type DeleteDocumentTypeByIdResponse = string; export type PutDocumentTypeByIdData = { id: string; - requestBody?: (UpdateDocumentTypeRequestModel); + requestBody?: UpdateDocumentTypeRequestModel; }; -export type PutDocumentTypeByIdResponse = (string); +export type PutDocumentTypeByIdResponse = string; export type GetDocumentTypeByIdAllowedChildrenData = { id: string; @@ -3140,7 +3160,7 @@ export type GetDocumentTypeByIdAllowedChildrenData = { take?: number; }; -export type GetDocumentTypeByIdAllowedChildrenResponse = ((PagedAllowedDocumentTypeModel)); +export type GetDocumentTypeByIdAllowedChildrenResponse = PagedAllowedDocumentTypeModel; export type GetDocumentTypeByIdBlueprintData = { id: string; @@ -3148,92 +3168,92 @@ export type GetDocumentTypeByIdBlueprintData = { take?: number; }; -export type GetDocumentTypeByIdBlueprintResponse = ((PagedDocumentTypeBlueprintItemResponseModel)); +export type GetDocumentTypeByIdBlueprintResponse = PagedDocumentTypeBlueprintItemResponseModel; export type GetDocumentTypeByIdCompositionReferencesData = { id: string; }; -export type GetDocumentTypeByIdCompositionReferencesResponse = (Array<(DocumentTypeCompositionResponseModel)>); +export type GetDocumentTypeByIdCompositionReferencesResponse = Array<(DocumentTypeCompositionResponseModel)>; export type PostDocumentTypeByIdCopyData = { id: string; - requestBody?: (CopyDocumentTypeRequestModel); + requestBody?: CopyDocumentTypeRequestModel; }; -export type PostDocumentTypeByIdCopyResponse = (string); +export type PostDocumentTypeByIdCopyResponse = string; export type GetDocumentTypeByIdExportData = { id: string; }; -export type GetDocumentTypeByIdExportResponse = (((Blob | File))); +export type GetDocumentTypeByIdExportResponse = (Blob | File); export type PutDocumentTypeByIdImportData = { id: string; - requestBody?: (ImportDocumentTypeRequestModel); + requestBody?: ImportDocumentTypeRequestModel; }; -export type PutDocumentTypeByIdImportResponse = (string); +export type PutDocumentTypeByIdImportResponse = string; export type PutDocumentTypeByIdMoveData = { id: string; - requestBody?: (MoveDocumentTypeRequestModel); + requestBody?: MoveDocumentTypeRequestModel; }; -export type PutDocumentTypeByIdMoveResponse = (string); +export type PutDocumentTypeByIdMoveResponse = string; export type GetDocumentTypeAllowedAtRootData = { skip?: number; take?: number; }; -export type GetDocumentTypeAllowedAtRootResponse = ((PagedAllowedDocumentTypeModel)); +export type GetDocumentTypeAllowedAtRootResponse = PagedAllowedDocumentTypeModel; export type PostDocumentTypeAvailableCompositionsData = { - requestBody?: (DocumentTypeCompositionRequestModel); + requestBody?: DocumentTypeCompositionRequestModel; }; -export type PostDocumentTypeAvailableCompositionsResponse = (Array<(AvailableDocumentTypeCompositionResponseModel)>); +export type PostDocumentTypeAvailableCompositionsResponse = Array<(AvailableDocumentTypeCompositionResponseModel)>; -export type GetDocumentTypeConfigurationResponse = ((DocumentTypeConfigurationResponseModel)); +export type GetDocumentTypeConfigurationResponse = DocumentTypeConfigurationResponseModel; export type PostDocumentTypeFolderData = { - requestBody?: (CreateFolderRequestModel); + requestBody?: CreateFolderRequestModel; }; -export type PostDocumentTypeFolderResponse = (string); +export type PostDocumentTypeFolderResponse = string; export type GetDocumentTypeFolderByIdData = { id: string; }; -export type GetDocumentTypeFolderByIdResponse = ((FolderResponseModel)); +export type GetDocumentTypeFolderByIdResponse = FolderResponseModel; export type DeleteDocumentTypeFolderByIdData = { id: string; }; -export type DeleteDocumentTypeFolderByIdResponse = (string); +export type DeleteDocumentTypeFolderByIdResponse = string; export type PutDocumentTypeFolderByIdData = { id: string; - requestBody?: (UpdateFolderResponseModel); + requestBody?: UpdateFolderResponseModel; }; -export type PutDocumentTypeFolderByIdResponse = (string); +export type PutDocumentTypeFolderByIdResponse = string; export type PostDocumentTypeImportData = { - requestBody?: (ImportDocumentTypeRequestModel); + requestBody?: ImportDocumentTypeRequestModel; }; -export type PostDocumentTypeImportResponse = (string); +export type PostDocumentTypeImportResponse = string; export type GetItemDocumentTypeData = { id?: Array<(string)>; }; -export type GetItemDocumentTypeResponse = (Array<(DocumentTypeItemResponseModel)>); +export type GetItemDocumentTypeResponse = Array<(DocumentTypeItemResponseModel)>; export type GetItemDocumentTypeSearchData = { query?: string; @@ -3241,13 +3261,13 @@ export type GetItemDocumentTypeSearchData = { take?: number; }; -export type GetItemDocumentTypeSearchResponse = ((PagedModelDocumentTypeItemResponseModel)); +export type GetItemDocumentTypeSearchResponse = PagedModelDocumentTypeItemResponseModel; export type GetTreeDocumentTypeAncestorsData = { descendantId?: string; }; -export type GetTreeDocumentTypeAncestorsResponse = (Array<(DocumentTypeTreeItemResponseModel)>); +export type GetTreeDocumentTypeAncestorsResponse = Array<(DocumentTypeTreeItemResponseModel)>; export type GetTreeDocumentTypeChildrenData = { foldersOnly?: boolean; @@ -3256,7 +3276,7 @@ export type GetTreeDocumentTypeChildrenData = { take?: number; }; -export type GetTreeDocumentTypeChildrenResponse = ((PagedDocumentTypeTreeItemResponseModel)); +export type GetTreeDocumentTypeChildrenResponse = PagedDocumentTypeTreeItemResponseModel; export type GetTreeDocumentTypeRootData = { foldersOnly?: boolean; @@ -3264,7 +3284,7 @@ export type GetTreeDocumentTypeRootData = { take?: number; }; -export type GetTreeDocumentTypeRootResponse = ((PagedDocumentTypeTreeItemResponseModel)); +export type GetTreeDocumentTypeRootResponse = PagedDocumentTypeTreeItemResponseModel; export type GetDocumentVersionData = { culture?: string; @@ -3273,27 +3293,27 @@ export type GetDocumentVersionData = { take?: number; }; -export type GetDocumentVersionResponse = ((PagedDocumentVersionItemResponseModel)); +export type GetDocumentVersionResponse = PagedDocumentVersionItemResponseModel; export type GetDocumentVersionByIdData = { id: string; }; -export type GetDocumentVersionByIdResponse = ((DocumentVersionResponseModel)); +export type GetDocumentVersionByIdResponse = DocumentVersionResponseModel; export type PutDocumentVersionByIdPreventCleanupData = { id: string; preventCleanup?: boolean; }; -export type PutDocumentVersionByIdPreventCleanupResponse = (string); +export type PutDocumentVersionByIdPreventCleanupResponse = string; export type PostDocumentVersionByIdRollbackData = { culture?: string; id: string; }; -export type PostDocumentVersionByIdRollbackResponse = (string); +export type PostDocumentVersionByIdRollbackResponse = string; export type GetCollectionDocumentByIdData = { dataTypeId?: string; @@ -3306,32 +3326,32 @@ export type GetCollectionDocumentByIdData = { take?: number; }; -export type GetCollectionDocumentByIdResponse = ((PagedDocumentCollectionResponseModel)); +export type GetCollectionDocumentByIdResponse = PagedDocumentCollectionResponseModel; export type PostDocumentData = { - requestBody?: (CreateDocumentRequestModel); + requestBody?: CreateDocumentRequestModel; }; -export type PostDocumentResponse = (string); +export type PostDocumentResponse = string; export type GetDocumentByIdData = { id: string; }; -export type GetDocumentByIdResponse = ((DocumentResponseModel)); +export type GetDocumentByIdResponse = DocumentResponseModel; export type DeleteDocumentByIdData = { id: string; }; -export type DeleteDocumentByIdResponse = (string); +export type DeleteDocumentByIdResponse = string; export type PutDocumentByIdData = { id: string; - requestBody?: (UpdateDocumentRequestModel); + requestBody?: UpdateDocumentRequestModel; }; -export type PutDocumentByIdResponse = (string); +export type PutDocumentByIdResponse = string; export type GetDocumentByIdAuditLogData = { id: string; @@ -3341,93 +3361,93 @@ export type GetDocumentByIdAuditLogData = { take?: number; }; -export type GetDocumentByIdAuditLogResponse = ((PagedAuditLogResponseModel)); +export type GetDocumentByIdAuditLogResponse = PagedAuditLogResponseModel; export type PostDocumentByIdCopyData = { id: string; - requestBody?: (CopyDocumentRequestModel); + requestBody?: CopyDocumentRequestModel; }; -export type PostDocumentByIdCopyResponse = (string); +export type PostDocumentByIdCopyResponse = string; export type GetDocumentByIdDomainsData = { id: string; }; -export type GetDocumentByIdDomainsResponse = ((DomainsResponseModel)); +export type GetDocumentByIdDomainsResponse = DomainsResponseModel; export type PutDocumentByIdDomainsData = { id: string; - requestBody?: (UpdateDomainsRequestModel); + requestBody?: UpdateDomainsRequestModel; }; -export type PutDocumentByIdDomainsResponse = (string); +export type PutDocumentByIdDomainsResponse = string; export type PutDocumentByIdMoveData = { id: string; - requestBody?: (MoveDocumentRequestModel); + requestBody?: MoveDocumentRequestModel; }; -export type PutDocumentByIdMoveResponse = (string); +export type PutDocumentByIdMoveResponse = string; export type PutDocumentByIdMoveToRecycleBinData = { id: string; }; -export type PutDocumentByIdMoveToRecycleBinResponse = (string); +export type PutDocumentByIdMoveToRecycleBinResponse = string; export type GetDocumentByIdNotificationsData = { id: string; }; -export type GetDocumentByIdNotificationsResponse = (Array<(DocumentNotificationResponseModel)>); +export type GetDocumentByIdNotificationsResponse = Array<(DocumentNotificationResponseModel)>; export type PutDocumentByIdNotificationsData = { id: string; - requestBody?: (UpdateDocumentNotificationsRequestModel); + requestBody?: UpdateDocumentNotificationsRequestModel; }; -export type PutDocumentByIdNotificationsResponse = (string); +export type PutDocumentByIdNotificationsResponse = string; export type PostDocumentByIdPublicAccessData = { id: string; - requestBody?: (PublicAccessRequestModel); + requestBody?: PublicAccessRequestModel; }; -export type PostDocumentByIdPublicAccessResponse = (string); +export type PostDocumentByIdPublicAccessResponse = string; export type DeleteDocumentByIdPublicAccessData = { id: string; }; -export type DeleteDocumentByIdPublicAccessResponse = (string); +export type DeleteDocumentByIdPublicAccessResponse = string; export type GetDocumentByIdPublicAccessData = { id: string; }; -export type GetDocumentByIdPublicAccessResponse = ((PublicAccessResponseModel)); +export type GetDocumentByIdPublicAccessResponse = PublicAccessResponseModel; export type PutDocumentByIdPublicAccessData = { id: string; - requestBody?: (PublicAccessRequestModel); + requestBody?: PublicAccessRequestModel; }; -export type PutDocumentByIdPublicAccessResponse = (string); +export type PutDocumentByIdPublicAccessResponse = string; export type PutDocumentByIdPublishData = { id: string; - requestBody?: (PublishDocumentRequestModel); + requestBody?: PublishDocumentRequestModel; }; -export type PutDocumentByIdPublishResponse = (string); +export type PutDocumentByIdPublishResponse = string; export type PutDocumentByIdPublishWithDescendantsData = { id: string; - requestBody?: (PublishDocumentWithDescendantsRequestModel); + requestBody?: PublishDocumentWithDescendantsRequestModel; }; -export type PutDocumentByIdPublishWithDescendantsResponse = (string); +export type PutDocumentByIdPublishWithDescendantsResponse = string; export type GetDocumentByIdReferencedByData = { id: string; @@ -3435,7 +3455,7 @@ export type GetDocumentByIdReferencedByData = { take?: number; }; -export type GetDocumentByIdReferencedByResponse = ((PagedIReferenceResponseModel)); +export type GetDocumentByIdReferencedByResponse = PagedIReferenceResponseModel; export type GetDocumentByIdReferencedDescendantsData = { id: string; @@ -3443,21 +3463,21 @@ export type GetDocumentByIdReferencedDescendantsData = { take?: number; }; -export type GetDocumentByIdReferencedDescendantsResponse = ((PagedReferenceByIdModel)); +export type GetDocumentByIdReferencedDescendantsResponse = PagedReferenceByIdModel; export type PutDocumentByIdUnpublishData = { id: string; - requestBody?: (UnpublishDocumentRequestModel); + requestBody?: UnpublishDocumentRequestModel; }; -export type PutDocumentByIdUnpublishResponse = (string); +export type PutDocumentByIdUnpublishResponse = string; export type PutDocumentByIdValidateData = { id: string; - requestBody?: (UpdateDocumentRequestModel); + requestBody?: UpdateDocumentRequestModel; }; -export type PutDocumentByIdValidateResponse = (string); +export type PutDocumentByIdValidateResponse = string; export type GetDocumentAreReferencedData = { id?: Array<(string)>; @@ -3465,62 +3485,63 @@ export type GetDocumentAreReferencedData = { take?: number; }; -export type GetDocumentAreReferencedResponse = ((PagedReferenceByIdModel)); +export type GetDocumentAreReferencedResponse = PagedReferenceByIdModel; -export type GetDocumentConfigurationResponse = ((DocumentConfigurationResponseModel)); +export type GetDocumentConfigurationResponse = DocumentConfigurationResponseModel; export type PutDocumentSortData = { - requestBody?: (SortingRequestModel); + requestBody?: SortingRequestModel; }; -export type PutDocumentSortResponse = (string); +export type PutDocumentSortResponse = string; export type GetDocumentUrlsData = { id?: Array<(string)>; }; -export type GetDocumentUrlsResponse = (Array<(DocumentUrlInfoResponseModel)>); +export type GetDocumentUrlsResponse = Array<(DocumentUrlInfoResponseModel)>; export type PostDocumentValidateData = { - requestBody?: (CreateDocumentRequestModel); + requestBody?: CreateDocumentRequestModel; }; -export type PostDocumentValidateResponse = (string); +export type PostDocumentValidateResponse = string; export type GetItemDocumentData = { id?: Array<(string)>; }; -export type GetItemDocumentResponse = (Array<(DocumentItemResponseModel)>); +export type GetItemDocumentResponse = Array<(DocumentItemResponseModel)>; export type GetItemDocumentSearchData = { + parentId?: string; query?: string; skip?: number; take?: number; }; -export type GetItemDocumentSearchResponse = ((PagedModelDocumentItemResponseModel)); +export type GetItemDocumentSearchResponse = PagedModelDocumentItemResponseModel; -export type DeleteRecycleBinDocumentResponse = (string); +export type DeleteRecycleBinDocumentResponse = string; export type DeleteRecycleBinDocumentByIdData = { id: string; }; -export type DeleteRecycleBinDocumentByIdResponse = (string); +export type DeleteRecycleBinDocumentByIdResponse = string; export type GetRecycleBinDocumentByIdOriginalParentData = { id: string; }; -export type GetRecycleBinDocumentByIdOriginalParentResponse = ((ReferenceByIdModel)); +export type GetRecycleBinDocumentByIdOriginalParentResponse = ReferenceByIdModel; export type PutRecycleBinDocumentByIdRestoreData = { id: string; - requestBody?: (MoveMediaRequestModel); + requestBody?: MoveMediaRequestModel; }; -export type PutRecycleBinDocumentByIdRestoreResponse = (string); +export type PutRecycleBinDocumentByIdRestoreResponse = string; export type GetRecycleBinDocumentChildrenData = { parentId?: string; @@ -3528,20 +3549,20 @@ export type GetRecycleBinDocumentChildrenData = { take?: number; }; -export type GetRecycleBinDocumentChildrenResponse = ((PagedDocumentRecycleBinItemResponseModel)); +export type GetRecycleBinDocumentChildrenResponse = PagedDocumentRecycleBinItemResponseModel; export type GetRecycleBinDocumentRootData = { skip?: number; take?: number; }; -export type GetRecycleBinDocumentRootResponse = ((PagedDocumentRecycleBinItemResponseModel)); +export type GetRecycleBinDocumentRootResponse = PagedDocumentRecycleBinItemResponseModel; export type GetTreeDocumentAncestorsData = { descendantId?: string; }; -export type GetTreeDocumentAncestorsResponse = (Array<(DocumentTreeItemResponseModel)>); +export type GetTreeDocumentAncestorsResponse = Array<(DocumentTreeItemResponseModel)>; export type GetTreeDocumentChildrenData = { dataTypeId?: string; @@ -3550,7 +3571,7 @@ export type GetTreeDocumentChildrenData = { take?: number; }; -export type GetTreeDocumentChildrenResponse = ((PagedDocumentTreeItemResponseModel)); +export type GetTreeDocumentChildrenResponse = PagedDocumentTreeItemResponseModel; export type GetTreeDocumentRootData = { dataTypeId?: string; @@ -3558,40 +3579,40 @@ export type GetTreeDocumentRootData = { take?: number; }; -export type GetTreeDocumentRootResponse = ((PagedDocumentTreeItemResponseModel)); +export type GetTreeDocumentRootResponse = PagedDocumentTreeItemResponseModel; export type PostDynamicRootQueryData = { - requestBody?: (DynamicRootRequestModel); + requestBody?: DynamicRootRequestModel; }; -export type PostDynamicRootQueryResponse = ((DynamicRootResponseModel)); +export type PostDynamicRootQueryResponse = DynamicRootResponseModel; -export type GetDynamicRootStepsResponse = (Array<(string)>); +export type GetDynamicRootStepsResponse = Array<(string)>; export type GetHealthCheckGroupData = { skip?: number; take?: number; }; -export type GetHealthCheckGroupResponse = ((PagedHealthCheckGroupResponseModel)); +export type GetHealthCheckGroupResponse = PagedHealthCheckGroupResponseModel; export type GetHealthCheckGroupByNameData = { name: string; }; -export type GetHealthCheckGroupByNameResponse = ((HealthCheckGroupPresentationModel)); +export type GetHealthCheckGroupByNameResponse = HealthCheckGroupPresentationModel; export type PostHealthCheckGroupByNameCheckData = { name: string; }; -export type PostHealthCheckGroupByNameCheckResponse = ((HealthCheckGroupWithResultResponseModel)); +export type PostHealthCheckGroupByNameCheckResponse = HealthCheckGroupWithResultResponseModel; export type PostHealthCheckExecuteActionData = { - requestBody?: (HealthCheckActionRequestModel); + requestBody?: HealthCheckActionRequestModel; }; -export type PostHealthCheckExecuteActionResponse = ((HealthCheckResultResponseModel)); +export type PostHealthCheckExecuteActionResponse = HealthCheckResultResponseModel; export type GetHelpData = { baseUrl?: string; @@ -3601,7 +3622,7 @@ export type GetHelpData = { tree?: string; }; -export type GetHelpResponse = ((PagedHelpPageResponseModel)); +export type GetHelpResponse = PagedHelpPageResponseModel; export type GetImagingResizeUrlsData = { height?: number; @@ -3610,100 +3631,100 @@ export type GetImagingResizeUrlsData = { width?: number; }; -export type GetImagingResizeUrlsResponse = (Array<(MediaUrlInfoResponseModel)>); +export type GetImagingResizeUrlsResponse = Array<(MediaUrlInfoResponseModel)>; export type GetImportAnalyzeData = { temporaryFileId?: string; }; -export type GetImportAnalyzeResponse = ((EntityImportAnalysisResponseModel)); +export type GetImportAnalyzeResponse = EntityImportAnalysisResponseModel; export type GetIndexerData = { skip?: number; take?: number; }; -export type GetIndexerResponse = ((PagedIndexResponseModel)); +export type GetIndexerResponse = PagedIndexResponseModel; export type GetIndexerByIndexNameData = { indexName: string; }; -export type GetIndexerByIndexNameResponse = ((IndexResponseModel)); +export type GetIndexerByIndexNameResponse = IndexResponseModel; export type PostIndexerByIndexNameRebuildData = { indexName: string; }; -export type PostIndexerByIndexNameRebuildResponse = (string); +export type PostIndexerByIndexNameRebuildResponse = string; -export type GetInstallSettingsResponse = ((InstallSettingsResponseModel)); +export type GetInstallSettingsResponse = InstallSettingsResponseModel; export type PostInstallSetupData = { - requestBody?: (InstallRequestModel); + requestBody?: InstallRequestModel; }; -export type PostInstallSetupResponse = (string); +export type PostInstallSetupResponse = string; export type PostInstallValidateDatabaseData = { - requestBody?: (DatabaseInstallRequestModel); + requestBody?: DatabaseInstallRequestModel; }; -export type PostInstallValidateDatabaseResponse = (string); +export type PostInstallValidateDatabaseResponse = string; export type GetItemLanguageData = { isoCode?: Array<(string)>; }; -export type GetItemLanguageResponse = (Array<(LanguageItemResponseModel)>); +export type GetItemLanguageResponse = Array<(LanguageItemResponseModel)>; -export type GetItemLanguageDefaultResponse = ((LanguageItemResponseModel)); +export type GetItemLanguageDefaultResponse = LanguageItemResponseModel; export type GetLanguageData = { skip?: number; take?: number; }; -export type GetLanguageResponse = ((PagedLanguageResponseModel)); +export type GetLanguageResponse = PagedLanguageResponseModel; export type PostLanguageData = { - requestBody?: (CreateLanguageRequestModel); + requestBody?: CreateLanguageRequestModel; }; -export type PostLanguageResponse = (string); +export type PostLanguageResponse = string; export type GetLanguageByIsoCodeData = { isoCode: string; }; -export type GetLanguageByIsoCodeResponse = ((LanguageResponseModel)); +export type GetLanguageByIsoCodeResponse = LanguageResponseModel; export type DeleteLanguageByIsoCodeData = { isoCode: string; }; -export type DeleteLanguageByIsoCodeResponse = (string); +export type DeleteLanguageByIsoCodeResponse = string; export type PutLanguageByIsoCodeData = { isoCode: string; - requestBody?: (UpdateLanguageRequestModel); + requestBody?: UpdateLanguageRequestModel; }; -export type PutLanguageByIsoCodeResponse = (string); +export type PutLanguageByIsoCodeResponse = string; export type GetLogViewerLevelData = { skip?: number; take?: number; }; -export type GetLogViewerLevelResponse = ((PagedLoggerResponseModel)); +export type GetLogViewerLevelResponse = PagedLoggerResponseModel; export type GetLogViewerLevelCountData = { endDate?: string; startDate?: string; }; -export type GetLogViewerLevelCountResponse = ((LogLevelCountsReponseModel)); +export type GetLogViewerLevelCountResponse = LogLevelCountsReponseModel; export type GetLogViewerLogData = { endDate?: string; @@ -3715,7 +3736,7 @@ export type GetLogViewerLogData = { take?: number; }; -export type GetLogViewerLogResponse = ((PagedLogMessageResponseModel)); +export type GetLogViewerLogResponse = PagedLogMessageResponseModel; export type GetLogViewerMessageTemplateData = { endDate?: string; @@ -3724,51 +3745,51 @@ export type GetLogViewerMessageTemplateData = { take?: number; }; -export type GetLogViewerMessageTemplateResponse = ((PagedLogTemplateResponseModel)); +export type GetLogViewerMessageTemplateResponse = PagedLogTemplateResponseModel; export type GetLogViewerSavedSearchData = { skip?: number; take?: number; }; -export type GetLogViewerSavedSearchResponse = ((PagedSavedLogSearchResponseModel)); +export type GetLogViewerSavedSearchResponse = PagedSavedLogSearchResponseModel; export type PostLogViewerSavedSearchData = { - requestBody?: (SavedLogSearchRequestModel); + requestBody?: SavedLogSearchRequestModel; }; -export type PostLogViewerSavedSearchResponse = (string); +export type PostLogViewerSavedSearchResponse = string; export type GetLogViewerSavedSearchByNameData = { name: string; }; -export type GetLogViewerSavedSearchByNameResponse = ((SavedLogSearchResponseModel)); +export type GetLogViewerSavedSearchByNameResponse = SavedLogSearchResponseModel; export type DeleteLogViewerSavedSearchByNameData = { name: string; }; -export type DeleteLogViewerSavedSearchByNameResponse = (string); +export type DeleteLogViewerSavedSearchByNameResponse = string; export type GetLogViewerValidateLogsSizeData = { endDate?: string; startDate?: string; }; -export type GetLogViewerValidateLogsSizeResponse = (unknown); +export type GetLogViewerValidateLogsSizeResponse = unknown; -export type GetManifestManifestResponse = (Array<(ManifestResponseModel)>); +export type GetManifestManifestResponse = Array<(ManifestResponseModel)>; -export type GetManifestManifestPrivateResponse = (Array<(ManifestResponseModel)>); +export type GetManifestManifestPrivateResponse = Array<(ManifestResponseModel)>; -export type GetManifestManifestPublicResponse = (Array<(ManifestResponseModel)>); +export type GetManifestManifestPublicResponse = Array<(ManifestResponseModel)>; export type GetItemMediaTypeData = { id?: Array<(string)>; }; -export type GetItemMediaTypeResponse = (Array<(MediaTypeItemResponseModel)>); +export type GetItemMediaTypeResponse = Array<(MediaTypeItemResponseModel)>; export type GetItemMediaTypeAllowedData = { fileExtension?: string; @@ -3776,14 +3797,14 @@ export type GetItemMediaTypeAllowedData = { take?: number; }; -export type GetItemMediaTypeAllowedResponse = ((PagedModelMediaTypeItemResponseModel)); +export type GetItemMediaTypeAllowedResponse = PagedModelMediaTypeItemResponseModel; export type GetItemMediaTypeFoldersData = { skip?: number; take?: number; }; -export type GetItemMediaTypeFoldersResponse = ((PagedModelMediaTypeItemResponseModel)); +export type GetItemMediaTypeFoldersResponse = PagedModelMediaTypeItemResponseModel; export type GetItemMediaTypeSearchData = { query?: string; @@ -3791,32 +3812,32 @@ export type GetItemMediaTypeSearchData = { take?: number; }; -export type GetItemMediaTypeSearchResponse = ((PagedModelMediaTypeItemResponseModel)); +export type GetItemMediaTypeSearchResponse = PagedModelMediaTypeItemResponseModel; export type PostMediaTypeData = { - requestBody?: (CreateMediaTypeRequestModel); + requestBody?: CreateMediaTypeRequestModel; }; -export type PostMediaTypeResponse = (string); +export type PostMediaTypeResponse = string; export type GetMediaTypeByIdData = { id: string; }; -export type GetMediaTypeByIdResponse = ((MediaTypeResponseModel)); +export type GetMediaTypeByIdResponse = MediaTypeResponseModel; export type DeleteMediaTypeByIdData = { id: string; }; -export type DeleteMediaTypeByIdResponse = (string); +export type DeleteMediaTypeByIdResponse = string; export type PutMediaTypeByIdData = { id: string; - requestBody?: (UpdateMediaTypeRequestModel); + requestBody?: UpdateMediaTypeRequestModel; }; -export type PutMediaTypeByIdResponse = (string); +export type PutMediaTypeByIdResponse = string; export type GetMediaTypeByIdAllowedChildrenData = { id: string; @@ -3824,92 +3845,92 @@ export type GetMediaTypeByIdAllowedChildrenData = { take?: number; }; -export type GetMediaTypeByIdAllowedChildrenResponse = ((PagedAllowedMediaTypeModel)); +export type GetMediaTypeByIdAllowedChildrenResponse = PagedAllowedMediaTypeModel; export type GetMediaTypeByIdCompositionReferencesData = { id: string; }; -export type GetMediaTypeByIdCompositionReferencesResponse = (Array<(MediaTypeCompositionResponseModel)>); +export type GetMediaTypeByIdCompositionReferencesResponse = Array<(MediaTypeCompositionResponseModel)>; export type PostMediaTypeByIdCopyData = { id: string; - requestBody?: (CopyMediaTypeRequestModel); + requestBody?: CopyMediaTypeRequestModel; }; -export type PostMediaTypeByIdCopyResponse = (string); +export type PostMediaTypeByIdCopyResponse = string; export type GetMediaTypeByIdExportData = { id: string; }; -export type GetMediaTypeByIdExportResponse = (((Blob | File))); +export type GetMediaTypeByIdExportResponse = (Blob | File); export type PutMediaTypeByIdImportData = { id: string; - requestBody?: (ImportMediaTypeRequestModel); + requestBody?: ImportMediaTypeRequestModel; }; -export type PutMediaTypeByIdImportResponse = (string); +export type PutMediaTypeByIdImportResponse = string; export type PutMediaTypeByIdMoveData = { id: string; - requestBody?: (MoveMediaTypeRequestModel); + requestBody?: MoveMediaTypeRequestModel; }; -export type PutMediaTypeByIdMoveResponse = (string); +export type PutMediaTypeByIdMoveResponse = string; export type GetMediaTypeAllowedAtRootData = { skip?: number; take?: number; }; -export type GetMediaTypeAllowedAtRootResponse = ((PagedAllowedMediaTypeModel)); +export type GetMediaTypeAllowedAtRootResponse = PagedAllowedMediaTypeModel; export type PostMediaTypeAvailableCompositionsData = { - requestBody?: (MediaTypeCompositionRequestModel); + requestBody?: MediaTypeCompositionRequestModel; }; -export type PostMediaTypeAvailableCompositionsResponse = (Array<(AvailableMediaTypeCompositionResponseModel)>); +export type PostMediaTypeAvailableCompositionsResponse = Array<(AvailableMediaTypeCompositionResponseModel)>; -export type GetMediaTypeConfigurationResponse = ((MediaTypeConfigurationResponseModel)); +export type GetMediaTypeConfigurationResponse = MediaTypeConfigurationResponseModel; export type PostMediaTypeFolderData = { - requestBody?: (CreateFolderRequestModel); + requestBody?: CreateFolderRequestModel; }; -export type PostMediaTypeFolderResponse = (string); +export type PostMediaTypeFolderResponse = string; export type GetMediaTypeFolderByIdData = { id: string; }; -export type GetMediaTypeFolderByIdResponse = ((FolderResponseModel)); +export type GetMediaTypeFolderByIdResponse = FolderResponseModel; export type DeleteMediaTypeFolderByIdData = { id: string; }; -export type DeleteMediaTypeFolderByIdResponse = (string); +export type DeleteMediaTypeFolderByIdResponse = string; export type PutMediaTypeFolderByIdData = { id: string; - requestBody?: (UpdateFolderResponseModel); + requestBody?: UpdateFolderResponseModel; }; -export type PutMediaTypeFolderByIdResponse = (string); +export type PutMediaTypeFolderByIdResponse = string; export type PostMediaTypeImportData = { - requestBody?: (ImportMediaTypeRequestModel); + requestBody?: ImportMediaTypeRequestModel; }; -export type PostMediaTypeImportResponse = (string); +export type PostMediaTypeImportResponse = string; export type GetTreeMediaTypeAncestorsData = { descendantId?: string; }; -export type GetTreeMediaTypeAncestorsResponse = (Array<(MediaTypeTreeItemResponseModel)>); +export type GetTreeMediaTypeAncestorsResponse = Array<(MediaTypeTreeItemResponseModel)>; export type GetTreeMediaTypeChildrenData = { foldersOnly?: boolean; @@ -3918,7 +3939,7 @@ export type GetTreeMediaTypeChildrenData = { take?: number; }; -export type GetTreeMediaTypeChildrenResponse = ((PagedMediaTypeTreeItemResponseModel)); +export type GetTreeMediaTypeChildrenResponse = PagedMediaTypeTreeItemResponseModel; export type GetTreeMediaTypeRootData = { foldersOnly?: boolean; @@ -3926,7 +3947,7 @@ export type GetTreeMediaTypeRootData = { take?: number; }; -export type GetTreeMediaTypeRootResponse = ((PagedMediaTypeTreeItemResponseModel)); +export type GetTreeMediaTypeRootResponse = PagedMediaTypeTreeItemResponseModel; export type GetCollectionMediaData = { dataTypeId?: string; @@ -3938,46 +3959,47 @@ export type GetCollectionMediaData = { take?: number; }; -export type GetCollectionMediaResponse = ((PagedMediaCollectionResponseModel)); +export type GetCollectionMediaResponse = PagedMediaCollectionResponseModel; export type GetItemMediaData = { id?: Array<(string)>; }; -export type GetItemMediaResponse = (Array<(MediaItemResponseModel)>); +export type GetItemMediaResponse = Array<(MediaItemResponseModel)>; export type GetItemMediaSearchData = { + parentId?: string; query?: string; skip?: number; take?: number; }; -export type GetItemMediaSearchResponse = ((PagedModelMediaItemResponseModel)); +export type GetItemMediaSearchResponse = PagedModelMediaItemResponseModel; export type PostMediaData = { - requestBody?: (CreateMediaRequestModel); + requestBody?: CreateMediaRequestModel; }; -export type PostMediaResponse = (string); +export type PostMediaResponse = string; export type GetMediaByIdData = { id: string; }; -export type GetMediaByIdResponse = ((MediaResponseModel)); +export type GetMediaByIdResponse = MediaResponseModel; export type DeleteMediaByIdData = { id: string; }; -export type DeleteMediaByIdResponse = (string); +export type DeleteMediaByIdResponse = string; export type PutMediaByIdData = { id: string; - requestBody?: (UpdateMediaRequestModel); + requestBody?: UpdateMediaRequestModel; }; -export type PutMediaByIdResponse = (string); +export type PutMediaByIdResponse = string; export type GetMediaByIdAuditLogData = { id: string; @@ -3987,20 +4009,20 @@ export type GetMediaByIdAuditLogData = { take?: number; }; -export type GetMediaByIdAuditLogResponse = ((PagedAuditLogResponseModel)); +export type GetMediaByIdAuditLogResponse = PagedAuditLogResponseModel; export type PutMediaByIdMoveData = { id: string; - requestBody?: (MoveMediaRequestModel); + requestBody?: MoveMediaRequestModel; }; -export type PutMediaByIdMoveResponse = (string); +export type PutMediaByIdMoveResponse = string; export type PutMediaByIdMoveToRecycleBinData = { id: string; }; -export type PutMediaByIdMoveToRecycleBinResponse = (string); +export type PutMediaByIdMoveToRecycleBinResponse = string; export type GetMediaByIdReferencedByData = { id: string; @@ -4008,7 +4030,7 @@ export type GetMediaByIdReferencedByData = { take?: number; }; -export type GetMediaByIdReferencedByResponse = ((PagedIReferenceResponseModel)); +export type GetMediaByIdReferencedByResponse = PagedIReferenceResponseModel; export type GetMediaByIdReferencedDescendantsData = { id: string; @@ -4016,14 +4038,14 @@ export type GetMediaByIdReferencedDescendantsData = { take?: number; }; -export type GetMediaByIdReferencedDescendantsResponse = ((PagedReferenceByIdModel)); +export type GetMediaByIdReferencedDescendantsResponse = PagedReferenceByIdModel; export type PutMediaByIdValidateData = { id: string; - requestBody?: (UpdateMediaRequestModel); + requestBody?: UpdateMediaRequestModel; }; -export type PutMediaByIdValidateResponse = (string); +export type PutMediaByIdValidateResponse = string; export type GetMediaAreReferencedData = { id?: Array<(string)>; @@ -4031,48 +4053,48 @@ export type GetMediaAreReferencedData = { take?: number; }; -export type GetMediaAreReferencedResponse = ((PagedReferenceByIdModel)); +export type GetMediaAreReferencedResponse = PagedReferenceByIdModel; -export type GetMediaConfigurationResponse = ((MediaConfigurationResponseModel)); +export type GetMediaConfigurationResponse = MediaConfigurationResponseModel; export type PutMediaSortData = { - requestBody?: (SortingRequestModel); + requestBody?: SortingRequestModel; }; -export type PutMediaSortResponse = (string); +export type PutMediaSortResponse = string; export type GetMediaUrlsData = { id?: Array<(string)>; }; -export type GetMediaUrlsResponse = (Array<(MediaUrlInfoResponseModel)>); +export type GetMediaUrlsResponse = Array<(MediaUrlInfoResponseModel)>; export type PostMediaValidateData = { - requestBody?: (CreateMediaRequestModel); + requestBody?: CreateMediaRequestModel; }; -export type PostMediaValidateResponse = (string); +export type PostMediaValidateResponse = string; -export type DeleteRecycleBinMediaResponse = (string); +export type DeleteRecycleBinMediaResponse = string; export type DeleteRecycleBinMediaByIdData = { id: string; }; -export type DeleteRecycleBinMediaByIdResponse = (string); +export type DeleteRecycleBinMediaByIdResponse = string; export type GetRecycleBinMediaByIdOriginalParentData = { id: string; }; -export type GetRecycleBinMediaByIdOriginalParentResponse = ((ReferenceByIdModel)); +export type GetRecycleBinMediaByIdOriginalParentResponse = ReferenceByIdModel; export type PutRecycleBinMediaByIdRestoreData = { id: string; - requestBody?: (MoveMediaRequestModel); + requestBody?: MoveMediaRequestModel; }; -export type PutRecycleBinMediaByIdRestoreResponse = (string); +export type PutRecycleBinMediaByIdRestoreResponse = string; export type GetRecycleBinMediaChildrenData = { parentId?: string; @@ -4080,20 +4102,20 @@ export type GetRecycleBinMediaChildrenData = { take?: number; }; -export type GetRecycleBinMediaChildrenResponse = ((PagedMediaRecycleBinItemResponseModel)); +export type GetRecycleBinMediaChildrenResponse = PagedMediaRecycleBinItemResponseModel; export type GetRecycleBinMediaRootData = { skip?: number; take?: number; }; -export type GetRecycleBinMediaRootResponse = ((PagedMediaRecycleBinItemResponseModel)); +export type GetRecycleBinMediaRootResponse = PagedMediaRecycleBinItemResponseModel; export type GetTreeMediaAncestorsData = { descendantId?: string; }; -export type GetTreeMediaAncestorsResponse = (Array<(MediaTreeItemResponseModel)>); +export type GetTreeMediaAncestorsResponse = Array<(MediaTreeItemResponseModel)>; export type GetTreeMediaChildrenData = { dataTypeId?: string; @@ -4102,7 +4124,7 @@ export type GetTreeMediaChildrenData = { take?: number; }; -export type GetTreeMediaChildrenResponse = ((PagedMediaTreeItemResponseModel)); +export type GetTreeMediaChildrenResponse = PagedMediaTreeItemResponseModel; export type GetTreeMediaRootData = { dataTypeId?: string; @@ -4110,58 +4132,58 @@ export type GetTreeMediaRootData = { take?: number; }; -export type GetTreeMediaRootResponse = ((PagedMediaTreeItemResponseModel)); +export type GetTreeMediaRootResponse = PagedMediaTreeItemResponseModel; export type GetItemMemberGroupData = { id?: Array<(string)>; }; -export type GetItemMemberGroupResponse = (Array<(MemberGroupItemResponseModel)>); +export type GetItemMemberGroupResponse = Array<(MemberGroupItemResponseModel)>; export type GetMemberGroupData = { skip?: number; take?: number; }; -export type GetMemberGroupResponse = ((PagedMemberGroupResponseModel)); +export type GetMemberGroupResponse = PagedMemberGroupResponseModel; export type PostMemberGroupData = { - requestBody?: (CreateMemberGroupRequestModel); + requestBody?: CreateMemberGroupRequestModel; }; -export type PostMemberGroupResponse = (string); +export type PostMemberGroupResponse = string; export type GetMemberGroupByIdData = { id: string; }; -export type GetMemberGroupByIdResponse = ((MemberGroupResponseModel)); +export type GetMemberGroupByIdResponse = MemberGroupResponseModel; export type DeleteMemberGroupByIdData = { id: string; }; -export type DeleteMemberGroupByIdResponse = (string); +export type DeleteMemberGroupByIdResponse = string; export type PutMemberGroupByIdData = { id: string; - requestBody?: (UpdateMemberGroupRequestModel); + requestBody?: UpdateMemberGroupRequestModel; }; -export type PutMemberGroupByIdResponse = (string); +export type PutMemberGroupByIdResponse = string; export type GetTreeMemberGroupRootData = { skip?: number; take?: number; }; -export type GetTreeMemberGroupRootResponse = ((PagedNamedEntityTreeItemResponseModel)); +export type GetTreeMemberGroupRootResponse = PagedNamedEntityTreeItemResponseModel; export type GetItemMemberTypeData = { id?: Array<(string)>; }; -export type GetItemMemberTypeResponse = (Array<(MemberTypeItemResponseModel)>); +export type GetItemMemberTypeResponse = Array<(MemberTypeItemResponseModel)>; export type GetItemMemberTypeSearchData = { query?: string; @@ -4169,59 +4191,59 @@ export type GetItemMemberTypeSearchData = { take?: number; }; -export type GetItemMemberTypeSearchResponse = ((PagedModelMemberTypeItemResponseModel)); +export type GetItemMemberTypeSearchResponse = PagedModelMemberTypeItemResponseModel; export type PostMemberTypeData = { - requestBody?: (CreateMemberTypeRequestModel); + requestBody?: CreateMemberTypeRequestModel; }; -export type PostMemberTypeResponse = (string); +export type PostMemberTypeResponse = string; export type GetMemberTypeByIdData = { id: string; }; -export type GetMemberTypeByIdResponse = ((MemberTypeResponseModel)); +export type GetMemberTypeByIdResponse = MemberTypeResponseModel; export type DeleteMemberTypeByIdData = { id: string; }; -export type DeleteMemberTypeByIdResponse = (string); +export type DeleteMemberTypeByIdResponse = string; export type PutMemberTypeByIdData = { id: string; - requestBody?: (UpdateMemberTypeRequestModel); + requestBody?: UpdateMemberTypeRequestModel; }; -export type PutMemberTypeByIdResponse = (string); +export type PutMemberTypeByIdResponse = string; export type GetMemberTypeByIdCompositionReferencesData = { id: string; }; -export type GetMemberTypeByIdCompositionReferencesResponse = (Array<(MemberTypeCompositionResponseModel)>); +export type GetMemberTypeByIdCompositionReferencesResponse = Array<(MemberTypeCompositionResponseModel)>; export type PostMemberTypeByIdCopyData = { id: string; }; -export type PostMemberTypeByIdCopyResponse = (string); +export type PostMemberTypeByIdCopyResponse = string; export type PostMemberTypeAvailableCompositionsData = { - requestBody?: (MemberTypeCompositionRequestModel); + requestBody?: MemberTypeCompositionRequestModel; }; -export type PostMemberTypeAvailableCompositionsResponse = (Array<(AvailableMemberTypeCompositionResponseModel)>); +export type PostMemberTypeAvailableCompositionsResponse = Array<(AvailableMemberTypeCompositionResponseModel)>; -export type GetMemberTypeConfigurationResponse = ((MemberTypeConfigurationResponseModel)); +export type GetMemberTypeConfigurationResponse = MemberTypeConfigurationResponseModel; export type GetTreeMemberTypeRootData = { skip?: number; take?: number; }; -export type GetTreeMemberTypeRootResponse = ((PagedMemberTypeTreeItemResponseModel)); +export type GetTreeMemberTypeRootResponse = PagedMemberTypeTreeItemResponseModel; export type GetFilterMemberData = { filter?: string; @@ -4235,13 +4257,13 @@ export type GetFilterMemberData = { take?: number; }; -export type GetFilterMemberResponse = ((PagedMemberResponseModel)); +export type GetFilterMemberResponse = PagedMemberResponseModel; export type GetItemMemberData = { id?: Array<(string)>; }; -export type GetItemMemberResponse = (Array<(MemberItemResponseModel)>); +export type GetItemMemberResponse = Array<(MemberItemResponseModel)>; export type GetItemMemberSearchData = { query?: string; @@ -4249,60 +4271,60 @@ export type GetItemMemberSearchData = { take?: number; }; -export type GetItemMemberSearchResponse = ((PagedModelMemberItemResponseModel)); +export type GetItemMemberSearchResponse = PagedModelMemberItemResponseModel; export type PostMemberData = { - requestBody?: (CreateMemberRequestModel); + requestBody?: CreateMemberRequestModel; }; -export type PostMemberResponse = (string); +export type PostMemberResponse = string; export type GetMemberByIdData = { id: string; }; -export type GetMemberByIdResponse = ((MemberResponseModel)); +export type GetMemberByIdResponse = MemberResponseModel; export type DeleteMemberByIdData = { id: string; }; -export type DeleteMemberByIdResponse = (string); +export type DeleteMemberByIdResponse = string; export type PutMemberByIdData = { id: string; - requestBody?: (UpdateMemberRequestModel); + requestBody?: UpdateMemberRequestModel; }; -export type PutMemberByIdResponse = (string); +export type PutMemberByIdResponse = string; export type PutMemberByIdValidateData = { id: string; - requestBody?: (UpdateMemberRequestModel); + requestBody?: UpdateMemberRequestModel; }; -export type PutMemberByIdValidateResponse = (string); +export type PutMemberByIdValidateResponse = string; -export type GetMemberConfigurationResponse = ((MemberConfigurationResponseModel)); +export type GetMemberConfigurationResponse = MemberConfigurationResponseModel; export type PostMemberValidateData = { - requestBody?: (CreateMemberRequestModel); + requestBody?: CreateMemberRequestModel; }; -export type PostMemberValidateResponse = (string); +export type PostMemberValidateResponse = string; -export type PostModelsBuilderBuildResponse = (string); +export type PostModelsBuilderBuildResponse = string; -export type GetModelsBuilderDashboardResponse = ((ModelsBuilderResponseModel)); +export type GetModelsBuilderDashboardResponse = ModelsBuilderResponseModel; -export type GetModelsBuilderStatusResponse = ((OutOfDateStatusResponseModel)); +export type GetModelsBuilderStatusResponse = OutOfDateStatusResponseModel; export type GetObjectTypesData = { skip?: number; take?: number; }; -export type GetObjectTypesResponse = ((PagedObjectTypeResponseModel)); +export type GetObjectTypesResponse = PagedObjectTypeResponseModel; export type GetOembedQueryData = { maxHeight?: number; @@ -4310,135 +4332,135 @@ export type GetOembedQueryData = { url?: string; }; -export type GetOembedQueryResponse = ((OEmbedResponseModel)); +export type GetOembedQueryResponse = OEmbedResponseModel; export type PostPackageByNameRunMigrationData = { name: string; }; -export type PostPackageByNameRunMigrationResponse = (string); +export type PostPackageByNameRunMigrationResponse = string; -export type GetPackageConfigurationResponse = ((PackageConfigurationResponseModel)); +export type GetPackageConfigurationResponse = PackageConfigurationResponseModel; export type GetPackageCreatedData = { skip?: number; take?: number; }; -export type GetPackageCreatedResponse = ((PagedPackageDefinitionResponseModel)); +export type GetPackageCreatedResponse = PagedPackageDefinitionResponseModel; export type PostPackageCreatedData = { - requestBody?: (CreatePackageRequestModel); + requestBody?: CreatePackageRequestModel; }; -export type PostPackageCreatedResponse = (string); +export type PostPackageCreatedResponse = string; export type GetPackageCreatedByIdData = { id: string; }; -export type GetPackageCreatedByIdResponse = ((PackageDefinitionResponseModel)); +export type GetPackageCreatedByIdResponse = PackageDefinitionResponseModel; export type DeletePackageCreatedByIdData = { id: string; }; -export type DeletePackageCreatedByIdResponse = (string); +export type DeletePackageCreatedByIdResponse = string; export type PutPackageCreatedByIdData = { id: string; - requestBody?: (UpdatePackageRequestModel); + requestBody?: UpdatePackageRequestModel; }; -export type PutPackageCreatedByIdResponse = (string); +export type PutPackageCreatedByIdResponse = string; export type GetPackageCreatedByIdDownloadData = { id: string; }; -export type GetPackageCreatedByIdDownloadResponse = (((Blob | File))); +export type GetPackageCreatedByIdDownloadResponse = (Blob | File); export type GetPackageMigrationStatusData = { skip?: number; take?: number; }; -export type GetPackageMigrationStatusResponse = ((PagedPackageMigrationStatusResponseModel)); +export type GetPackageMigrationStatusResponse = PagedPackageMigrationStatusResponseModel; export type GetItemPartialViewData = { path?: Array<(string)>; }; -export type GetItemPartialViewResponse = (Array<(PartialViewItemResponseModel)>); +export type GetItemPartialViewResponse = Array<(PartialViewItemResponseModel)>; export type PostPartialViewData = { - requestBody?: (CreatePartialViewRequestModel); + requestBody?: CreatePartialViewRequestModel; }; -export type PostPartialViewResponse = (string); +export type PostPartialViewResponse = string; export type GetPartialViewByPathData = { path: string; }; -export type GetPartialViewByPathResponse = ((PartialViewResponseModel)); +export type GetPartialViewByPathResponse = PartialViewResponseModel; export type DeletePartialViewByPathData = { path: string; }; -export type DeletePartialViewByPathResponse = (string); +export type DeletePartialViewByPathResponse = string; export type PutPartialViewByPathData = { path: string; - requestBody?: (UpdatePartialViewRequestModel); + requestBody?: UpdatePartialViewRequestModel; }; -export type PutPartialViewByPathResponse = (string); +export type PutPartialViewByPathResponse = string; export type PutPartialViewByPathRenameData = { path: string; - requestBody?: (RenamePartialViewRequestModel); + requestBody?: RenamePartialViewRequestModel; }; -export type PutPartialViewByPathRenameResponse = (string); +export type PutPartialViewByPathRenameResponse = string; export type PostPartialViewFolderData = { - requestBody?: (CreatePartialViewFolderRequestModel); + requestBody?: CreatePartialViewFolderRequestModel; }; -export type PostPartialViewFolderResponse = (string); +export type PostPartialViewFolderResponse = string; export type GetPartialViewFolderByPathData = { path: string; }; -export type GetPartialViewFolderByPathResponse = ((PartialViewFolderResponseModel)); +export type GetPartialViewFolderByPathResponse = PartialViewFolderResponseModel; export type DeletePartialViewFolderByPathData = { path: string; }; -export type DeletePartialViewFolderByPathResponse = (string); +export type DeletePartialViewFolderByPathResponse = string; export type GetPartialViewSnippetData = { skip?: number; take?: number; }; -export type GetPartialViewSnippetResponse = ((PagedPartialViewSnippetItemResponseModel)); +export type GetPartialViewSnippetResponse = PagedPartialViewSnippetItemResponseModel; export type GetPartialViewSnippetByIdData = { id: string; }; -export type GetPartialViewSnippetByIdResponse = ((PartialViewSnippetResponseModel)); +export type GetPartialViewSnippetByIdResponse = PartialViewSnippetResponseModel; export type GetTreePartialViewAncestorsData = { descendantPath?: string; }; -export type GetTreePartialViewAncestorsResponse = (Array<(FileSystemTreeItemPresentationModel)>); +export type GetTreePartialViewAncestorsResponse = Array<(FileSystemTreeItemPresentationModel)>; export type GetTreePartialViewChildrenData = { parentPath?: string; @@ -4446,41 +4468,41 @@ export type GetTreePartialViewChildrenData = { take?: number; }; -export type GetTreePartialViewChildrenResponse = ((PagedFileSystemTreeItemPresentationModel)); +export type GetTreePartialViewChildrenResponse = PagedFileSystemTreeItemPresentationModel; export type GetTreePartialViewRootData = { skip?: number; take?: number; }; -export type GetTreePartialViewRootResponse = ((PagedFileSystemTreeItemPresentationModel)); +export type GetTreePartialViewRootResponse = PagedFileSystemTreeItemPresentationModel; -export type DeletePreviewResponse = (string); +export type DeletePreviewResponse = string; -export type PostPreviewResponse = (string); +export type PostPreviewResponse = string; -export type GetProfilingStatusResponse = ((ProfilingStatusResponseModel)); +export type GetProfilingStatusResponse = ProfilingStatusResponseModel; export type PutProfilingStatusData = { - requestBody?: (ProfilingStatusRequestModel); + requestBody?: ProfilingStatusRequestModel; }; -export type PutProfilingStatusResponse = (string); +export type PutProfilingStatusResponse = string; export type GetPropertyTypeIsUsedData = { contentTypeId?: string; propertyAlias?: string; }; -export type GetPropertyTypeIsUsedResponse = (boolean); +export type GetPropertyTypeIsUsedResponse = boolean; -export type PostPublishedCacheCollectResponse = (string); +export type PostPublishedCacheCollectResponse = string; -export type PostPublishedCacheRebuildResponse = (string); +export type PostPublishedCacheRebuildResponse = string; -export type PostPublishedCacheReloadResponse = (string); +export type PostPublishedCacheReloadResponse = string; -export type GetPublishedCacheStatusResponse = (string); +export type GetPublishedCacheStatusResponse = string; export type GetRedirectManagementData = { filter?: string; @@ -4488,7 +4510,7 @@ export type GetRedirectManagementData = { take?: number; }; -export type GetRedirectManagementResponse = ((PagedRedirectUrlResponseModel)); +export type GetRedirectManagementResponse = PagedRedirectUrlResponseModel; export type GetRedirectManagementByIdData = { id: string; @@ -4496,40 +4518,40 @@ export type GetRedirectManagementByIdData = { take?: number; }; -export type GetRedirectManagementByIdResponse = ((PagedRedirectUrlResponseModel)); +export type GetRedirectManagementByIdResponse = PagedRedirectUrlResponseModel; export type DeleteRedirectManagementByIdData = { id: string; }; -export type DeleteRedirectManagementByIdResponse = (string); +export type DeleteRedirectManagementByIdResponse = string; -export type GetRedirectManagementStatusResponse = ((RedirectUrlStatusResponseModel)); +export type GetRedirectManagementStatusResponse = RedirectUrlStatusResponseModel; export type PostRedirectManagementStatusData = { status?: RedirectStatusModel; }; -export type PostRedirectManagementStatusResponse = (string); +export type PostRedirectManagementStatusResponse = string; export type GetItemRelationTypeData = { id?: Array<(string)>; }; -export type GetItemRelationTypeResponse = (Array<(RelationTypeItemResponseModel)>); +export type GetItemRelationTypeResponse = Array<(RelationTypeItemResponseModel)>; export type GetRelationTypeData = { skip?: number; take?: number; }; -export type GetRelationTypeResponse = ((PagedRelationTypeResponseModel)); +export type GetRelationTypeResponse = PagedRelationTypeResponseModel; export type GetRelationTypeByIdData = { id: string; }; -export type GetRelationTypeByIdResponse = ((RelationTypeResponseModel)); +export type GetRelationTypeByIdResponse = RelationTypeResponseModel; export type GetRelationByRelationTypeIdData = { id: string; @@ -4537,69 +4559,69 @@ export type GetRelationByRelationTypeIdData = { take?: number; }; -export type GetRelationByRelationTypeIdResponse = ((PagedRelationResponseModel)); +export type GetRelationByRelationTypeIdResponse = PagedRelationResponseModel; export type GetItemScriptData = { path?: Array<(string)>; }; -export type GetItemScriptResponse = (Array<(ScriptItemResponseModel)>); +export type GetItemScriptResponse = Array<(ScriptItemResponseModel)>; export type PostScriptData = { - requestBody?: (CreateScriptRequestModel); + requestBody?: CreateScriptRequestModel; }; -export type PostScriptResponse = (string); +export type PostScriptResponse = string; export type GetScriptByPathData = { path: string; }; -export type GetScriptByPathResponse = ((ScriptResponseModel)); +export type GetScriptByPathResponse = ScriptResponseModel; export type DeleteScriptByPathData = { path: string; }; -export type DeleteScriptByPathResponse = (string); +export type DeleteScriptByPathResponse = string; export type PutScriptByPathData = { path: string; - requestBody?: (UpdateScriptRequestModel); + requestBody?: UpdateScriptRequestModel; }; -export type PutScriptByPathResponse = (string); +export type PutScriptByPathResponse = string; export type PutScriptByPathRenameData = { path: string; - requestBody?: (RenameScriptRequestModel); + requestBody?: RenameScriptRequestModel; }; -export type PutScriptByPathRenameResponse = (string); +export type PutScriptByPathRenameResponse = string; export type PostScriptFolderData = { - requestBody?: (CreateScriptFolderRequestModel); + requestBody?: CreateScriptFolderRequestModel; }; -export type PostScriptFolderResponse = (string); +export type PostScriptFolderResponse = string; export type GetScriptFolderByPathData = { path: string; }; -export type GetScriptFolderByPathResponse = ((ScriptFolderResponseModel)); +export type GetScriptFolderByPathResponse = ScriptFolderResponseModel; export type DeleteScriptFolderByPathData = { path: string; }; -export type DeleteScriptFolderByPathResponse = (string); +export type DeleteScriptFolderByPathResponse = string; export type GetTreeScriptAncestorsData = { descendantPath?: string; }; -export type GetTreeScriptAncestorsResponse = (Array<(FileSystemTreeItemPresentationModel)>); +export type GetTreeScriptAncestorsResponse = Array<(FileSystemTreeItemPresentationModel)>; export type GetTreeScriptChildrenData = { parentPath?: string; @@ -4607,21 +4629,21 @@ export type GetTreeScriptChildrenData = { take?: number; }; -export type GetTreeScriptChildrenResponse = ((PagedFileSystemTreeItemPresentationModel)); +export type GetTreeScriptChildrenResponse = PagedFileSystemTreeItemPresentationModel; export type GetTreeScriptRootData = { skip?: number; take?: number; }; -export type GetTreeScriptRootResponse = ((PagedFileSystemTreeItemPresentationModel)); +export type GetTreeScriptRootResponse = PagedFileSystemTreeItemPresentationModel; export type GetSearcherData = { skip?: number; take?: number; }; -export type GetSearcherResponse = ((PagedSearcherResponseModel)); +export type GetSearcherResponse = PagedSearcherResponseModel; export type GetSearcherBySearcherNameQueryData = { searcherName: string; @@ -4630,54 +4652,54 @@ export type GetSearcherBySearcherNameQueryData = { term?: string; }; -export type GetSearcherBySearcherNameQueryResponse = ((PagedSearchResultResponseModel)); +export type GetSearcherBySearcherNameQueryResponse = PagedSearchResultResponseModel; -export type GetSecurityConfigurationResponse = ((SecurityConfigurationResponseModel)); +export type GetSecurityConfigurationResponse = SecurityConfigurationResponseModel; export type PostSecurityForgotPasswordData = { - requestBody?: (ResetPasswordRequestModel); + requestBody?: ResetPasswordRequestModel; }; -export type PostSecurityForgotPasswordResponse = (string); +export type PostSecurityForgotPasswordResponse = string; export type PostSecurityForgotPasswordResetData = { - requestBody?: (ResetPasswordTokenRequestModel); + requestBody?: ResetPasswordTokenRequestModel; }; -export type PostSecurityForgotPasswordResetResponse = (string); +export type PostSecurityForgotPasswordResetResponse = string; export type PostSecurityForgotPasswordVerifyData = { - requestBody?: (VerifyResetPasswordTokenRequestModel); + requestBody?: VerifyResetPasswordTokenRequestModel; }; -export type PostSecurityForgotPasswordVerifyResponse = ((VerifyResetPasswordResponseModel)); +export type PostSecurityForgotPasswordVerifyResponse = VerifyResetPasswordResponseModel; export type GetSegmentData = { skip?: number; take?: number; }; -export type GetSegmentResponse = ((PagedSegmentResponseModel)); +export type GetSegmentResponse = PagedSegmentResponseModel; -export type GetServerConfigurationResponse = ((ServerConfigurationResponseModel)); +export type GetServerConfigurationResponse = ServerConfigurationResponseModel; -export type GetServerInformationResponse = ((ServerInformationResponseModel)); +export type GetServerInformationResponse = ServerInformationResponseModel; -export type GetServerStatusResponse = ((ServerStatusResponseModel)); +export type GetServerStatusResponse = ServerStatusResponseModel; -export type GetServerTroubleshootingResponse = ((ServerTroubleshootingResponseModel)); +export type GetServerTroubleshootingResponse = ServerTroubleshootingResponseModel; export type GetItemStaticFileData = { path?: Array<(string)>; }; -export type GetItemStaticFileResponse = (Array<(StaticFileItemResponseModel)>); +export type GetItemStaticFileResponse = Array<(StaticFileItemResponseModel)>; export type GetTreeStaticFileAncestorsData = { descendantPath?: string; }; -export type GetTreeStaticFileAncestorsResponse = (Array<(FileSystemTreeItemPresentationModel)>); +export type GetTreeStaticFileAncestorsResponse = Array<(FileSystemTreeItemPresentationModel)>; export type GetTreeStaticFileChildrenData = { parentPath?: string; @@ -4685,76 +4707,76 @@ export type GetTreeStaticFileChildrenData = { take?: number; }; -export type GetTreeStaticFileChildrenResponse = ((PagedFileSystemTreeItemPresentationModel)); +export type GetTreeStaticFileChildrenResponse = PagedFileSystemTreeItemPresentationModel; export type GetTreeStaticFileRootData = { skip?: number; take?: number; }; -export type GetTreeStaticFileRootResponse = ((PagedFileSystemTreeItemPresentationModel)); +export type GetTreeStaticFileRootResponse = PagedFileSystemTreeItemPresentationModel; export type GetItemStylesheetData = { path?: Array<(string)>; }; -export type GetItemStylesheetResponse = (Array<(StylesheetItemResponseModel)>); +export type GetItemStylesheetResponse = Array<(StylesheetItemResponseModel)>; export type PostStylesheetData = { - requestBody?: (CreateStylesheetRequestModel); + requestBody?: CreateStylesheetRequestModel; }; -export type PostStylesheetResponse = (string); +export type PostStylesheetResponse = string; export type GetStylesheetByPathData = { path: string; }; -export type GetStylesheetByPathResponse = ((StylesheetResponseModel)); +export type GetStylesheetByPathResponse = StylesheetResponseModel; export type DeleteStylesheetByPathData = { path: string; }; -export type DeleteStylesheetByPathResponse = (string); +export type DeleteStylesheetByPathResponse = string; export type PutStylesheetByPathData = { path: string; - requestBody?: (UpdateStylesheetRequestModel); + requestBody?: UpdateStylesheetRequestModel; }; -export type PutStylesheetByPathResponse = (string); +export type PutStylesheetByPathResponse = string; export type PutStylesheetByPathRenameData = { path: string; - requestBody?: (RenameStylesheetRequestModel); + requestBody?: RenameStylesheetRequestModel; }; -export type PutStylesheetByPathRenameResponse = (string); +export type PutStylesheetByPathRenameResponse = string; export type PostStylesheetFolderData = { - requestBody?: (CreateStylesheetFolderRequestModel); + requestBody?: CreateStylesheetFolderRequestModel; }; -export type PostStylesheetFolderResponse = (string); +export type PostStylesheetFolderResponse = string; export type GetStylesheetFolderByPathData = { path: string; }; -export type GetStylesheetFolderByPathResponse = ((StylesheetFolderResponseModel)); +export type GetStylesheetFolderByPathResponse = StylesheetFolderResponseModel; export type DeleteStylesheetFolderByPathData = { path: string; }; -export type DeleteStylesheetFolderByPathResponse = (string); +export type DeleteStylesheetFolderByPathResponse = string; export type GetTreeStylesheetAncestorsData = { descendantPath?: string; }; -export type GetTreeStylesheetAncestorsResponse = (Array<(FileSystemTreeItemPresentationModel)>); +export type GetTreeStylesheetAncestorsResponse = Array<(FileSystemTreeItemPresentationModel)>; export type GetTreeStylesheetChildrenData = { parentPath?: string; @@ -4762,14 +4784,14 @@ export type GetTreeStylesheetChildrenData = { take?: number; }; -export type GetTreeStylesheetChildrenResponse = ((PagedFileSystemTreeItemPresentationModel)); +export type GetTreeStylesheetChildrenResponse = PagedFileSystemTreeItemPresentationModel; export type GetTreeStylesheetRootData = { skip?: number; take?: number; }; -export type GetTreeStylesheetRootResponse = ((PagedFileSystemTreeItemPresentationModel)); +export type GetTreeStylesheetRootResponse = PagedFileSystemTreeItemPresentationModel; export type GetTagData = { culture?: string; @@ -4779,28 +4801,28 @@ export type GetTagData = { take?: number; }; -export type GetTagResponse = ((PagedTagResponseModel)); +export type GetTagResponse = PagedTagResponseModel; export type GetTelemetryData = { skip?: number; take?: number; }; -export type GetTelemetryResponse = ((PagedTelemetryResponseModel)); +export type GetTelemetryResponse = PagedTelemetryResponseModel; -export type GetTelemetryLevelResponse = ((TelemetryResponseModel)); +export type GetTelemetryLevelResponse = TelemetryResponseModel; export type PostTelemetryLevelData = { - requestBody?: (TelemetryRequestModel); + requestBody?: TelemetryRequestModel; }; -export type PostTelemetryLevelResponse = (string); +export type PostTelemetryLevelResponse = string; export type GetItemTemplateData = { id?: Array<(string)>; }; -export type GetItemTemplateResponse = (Array<(TemplateItemResponseModel)>); +export type GetItemTemplateResponse = Array<(TemplateItemResponseModel)>; export type GetItemTemplateSearchData = { query?: string; @@ -4808,48 +4830,48 @@ export type GetItemTemplateSearchData = { take?: number; }; -export type GetItemTemplateSearchResponse = ((PagedModelTemplateItemResponseModel)); +export type GetItemTemplateSearchResponse = PagedModelTemplateItemResponseModel; export type PostTemplateData = { - requestBody?: (CreateTemplateRequestModel); + requestBody?: CreateTemplateRequestModel; }; -export type PostTemplateResponse = (string); +export type PostTemplateResponse = string; export type GetTemplateByIdData = { id: string; }; -export type GetTemplateByIdResponse = ((TemplateResponseModel)); +export type GetTemplateByIdResponse = TemplateResponseModel; export type DeleteTemplateByIdData = { id: string; }; -export type DeleteTemplateByIdResponse = (string); +export type DeleteTemplateByIdResponse = string; export type PutTemplateByIdData = { id: string; - requestBody?: (UpdateTemplateRequestModel); + requestBody?: UpdateTemplateRequestModel; }; -export type PutTemplateByIdResponse = (string); +export type PutTemplateByIdResponse = string; -export type GetTemplateConfigurationResponse = ((TemplateConfigurationResponseModel)); +export type GetTemplateConfigurationResponse = TemplateConfigurationResponseModel; export type PostTemplateQueryExecuteData = { - requestBody?: (TemplateQueryExecuteModel); + requestBody?: TemplateQueryExecuteModel; }; -export type PostTemplateQueryExecuteResponse = ((TemplateQueryResultResponseModel)); +export type PostTemplateQueryExecuteResponse = TemplateQueryResultResponseModel; -export type GetTemplateQuerySettingsResponse = ((TemplateQuerySettingsResponseModel)); +export type GetTemplateQuerySettingsResponse = TemplateQuerySettingsResponseModel; export type GetTreeTemplateAncestorsData = { descendantId?: string; }; -export type GetTreeTemplateAncestorsResponse = (Array<(NamedEntityTreeItemResponseModel)>); +export type GetTreeTemplateAncestorsResponse = Array<(NamedEntityTreeItemResponseModel)>; export type GetTreeTemplateChildrenData = { parentId?: string; @@ -4857,14 +4879,14 @@ export type GetTreeTemplateChildrenData = { take?: number; }; -export type GetTreeTemplateChildrenResponse = ((PagedNamedEntityTreeItemResponseModel)); +export type GetTreeTemplateChildrenResponse = PagedNamedEntityTreeItemResponseModel; export type GetTreeTemplateRootData = { skip?: number; take?: number; }; -export type GetTreeTemplateRootResponse = ((PagedNamedEntityTreeItemResponseModel)); +export type GetTreeTemplateRootResponse = PagedNamedEntityTreeItemResponseModel; export type PostTemporaryFileData = { formData?: { @@ -4873,31 +4895,31 @@ export type PostTemporaryFileData = { }; }; -export type PostTemporaryFileResponse = (string); +export type PostTemporaryFileResponse = string; export type GetTemporaryFileByIdData = { id: string; }; -export type GetTemporaryFileByIdResponse = ((TemporaryFileResponseModel)); +export type GetTemporaryFileByIdResponse = TemporaryFileResponseModel; export type DeleteTemporaryFileByIdData = { id: string; }; -export type DeleteTemporaryFileByIdResponse = (string); +export type DeleteTemporaryFileByIdResponse = string; -export type GetTemporaryFileConfigurationResponse = ((TemporaryFileConfigurationResponseModel)); +export type GetTemporaryFileConfigurationResponse = TemporaryFileConfigurationResponseModel; -export type PostUpgradeAuthorizeResponse = (string); +export type PostUpgradeAuthorizeResponse = string; -export type GetUpgradeSettingsResponse = ((UpgradeSettingsResponseModel)); +export type GetUpgradeSettingsResponse = UpgradeSettingsResponseModel; export type PostUserDataData = { - requestBody?: (CreateUserDataRequestModel); + requestBody?: CreateUserDataRequestModel; }; -export type PostUserDataResponse = (string); +export type PostUserDataResponse = string; export type GetUserDataData = { groups?: Array<(string)>; @@ -4906,19 +4928,19 @@ export type GetUserDataData = { take?: number; }; -export type GetUserDataResponse = ((PagedUserDataResponseModel)); +export type GetUserDataResponse = PagedUserDataResponseModel; export type PutUserDataData = { - requestBody?: (UpdateUserDataRequestModel); + requestBody?: UpdateUserDataRequestModel; }; -export type PutUserDataResponse = (string); +export type PutUserDataResponse = string; export type GetUserDataByIdData = { id: string; }; -export type GetUserDataByIdResponse = ((UserDataModel)); +export type GetUserDataByIdResponse = UserDataModel; export type GetFilterUserGroupData = { filter?: string; @@ -4926,65 +4948,65 @@ export type GetFilterUserGroupData = { take?: number; }; -export type GetFilterUserGroupResponse = ((PagedUserGroupResponseModel)); +export type GetFilterUserGroupResponse = PagedUserGroupResponseModel; export type GetItemUserGroupData = { id?: Array<(string)>; }; -export type GetItemUserGroupResponse = (Array<(UserGroupItemResponseModel)>); +export type GetItemUserGroupResponse = Array<(UserGroupItemResponseModel)>; export type DeleteUserGroupData = { - requestBody?: (DeleteUserGroupsRequestModel); + requestBody?: DeleteUserGroupsRequestModel; }; -export type DeleteUserGroupResponse = (string); +export type DeleteUserGroupResponse = string; export type PostUserGroupData = { - requestBody?: (CreateUserGroupRequestModel); + requestBody?: CreateUserGroupRequestModel; }; -export type PostUserGroupResponse = (string); +export type PostUserGroupResponse = string; export type GetUserGroupData = { skip?: number; take?: number; }; -export type GetUserGroupResponse = ((PagedUserGroupResponseModel)); +export type GetUserGroupResponse = PagedUserGroupResponseModel; export type GetUserGroupByIdData = { id: string; }; -export type GetUserGroupByIdResponse = ((UserGroupResponseModel)); +export type GetUserGroupByIdResponse = UserGroupResponseModel; export type DeleteUserGroupByIdData = { id: string; }; -export type DeleteUserGroupByIdResponse = (string); +export type DeleteUserGroupByIdResponse = string; export type PutUserGroupByIdData = { id: string; - requestBody?: (UpdateUserGroupRequestModel); + requestBody?: UpdateUserGroupRequestModel; }; -export type PutUserGroupByIdResponse = (string); +export type PutUserGroupByIdResponse = string; export type DeleteUserGroupByIdUsersData = { id: string; requestBody?: Array<(ReferenceByIdModel)>; }; -export type DeleteUserGroupByIdUsersResponse = (string); +export type DeleteUserGroupByIdUsersResponse = string; export type PostUserGroupByIdUsersData = { id: string; requestBody?: Array<(ReferenceByIdModel)>; }; -export type PostUserGroupByIdUsersResponse = (string); +export type PostUserGroupByIdUsersResponse = string; export type GetFilterUserData = { filter?: string; @@ -4996,246 +5018,8696 @@ export type GetFilterUserData = { userStates?: Array; }; -export type GetFilterUserResponse = ((PagedUserResponseModel)); +export type GetFilterUserResponse = PagedUserResponseModel; export type GetItemUserData = { id?: Array<(string)>; }; -export type GetItemUserResponse = (Array<(UserItemResponseModel)>); +export type GetItemUserResponse = Array<(UserItemResponseModel)>; export type PostUserData = { - requestBody?: (CreateUserRequestModel); + requestBody?: CreateUserRequestModel; }; -export type PostUserResponse = (string); +export type PostUserResponse = string; export type DeleteUserData = { - requestBody?: (DeleteUsersRequestModel); + requestBody?: DeleteUsersRequestModel; }; -export type DeleteUserResponse = (string); +export type DeleteUserResponse = string; export type GetUserData = { skip?: number; take?: number; }; -export type GetUserResponse = ((PagedUserResponseModel)); +export type GetUserResponse = PagedUserResponseModel; export type GetUserByIdData = { id: string; }; -export type GetUserByIdResponse = ((UserResponseModel)); +export type GetUserByIdResponse = UserResponseModel; export type DeleteUserByIdData = { id: string; }; -export type DeleteUserByIdResponse = (string); +export type DeleteUserByIdResponse = string; export type PutUserByIdData = { id: string; - requestBody?: (UpdateUserRequestModel); + requestBody?: UpdateUserRequestModel; }; -export type PutUserByIdResponse = (string); +export type PutUserByIdResponse = string; export type GetUserById2FaData = { id: string; }; -export type GetUserById2FaResponse = (Array<(UserTwoFactorProviderModel)>); +export type GetUserById2FaResponse = Array<(UserTwoFactorProviderModel)>; export type DeleteUserById2FaByProviderNameData = { id: string; providerName: string; }; -export type DeleteUserById2FaByProviderNameResponse = (string); +export type DeleteUserById2FaByProviderNameResponse = string; export type GetUserByIdCalculateStartNodesData = { id: string; }; -export type GetUserByIdCalculateStartNodesResponse = ((CalculatedUserStartNodesResponseModel)); +export type GetUserByIdCalculateStartNodesResponse = CalculatedUserStartNodesResponseModel; export type PostUserByIdChangePasswordData = { id: string; - requestBody?: (ChangePasswordUserRequestModel); + requestBody?: ChangePasswordUserRequestModel; }; -export type PostUserByIdChangePasswordResponse = (string); +export type PostUserByIdChangePasswordResponse = string; + +export type PostUserByIdClientCredentialsData = { + id: string; + requestBody?: CreateUserClientCredentialsRequestModel; +}; + +export type PostUserByIdClientCredentialsResponse = string; + +export type GetUserByIdClientCredentialsData = { + id: string; +}; + +export type GetUserByIdClientCredentialsResponse = Array<(string)>; + +export type DeleteUserByIdClientCredentialsByClientIdData = { + clientId: string; + id: string; +}; + +export type DeleteUserByIdClientCredentialsByClientIdResponse = string; export type PostUserByIdResetPasswordData = { id: string; }; -export type PostUserByIdResetPasswordResponse = ((ResetPasswordUserResponseModel)); +export type PostUserByIdResetPasswordResponse = ResetPasswordUserResponseModel; export type DeleteUserAvatarByIdData = { id: string; }; -export type DeleteUserAvatarByIdResponse = (string); +export type DeleteUserAvatarByIdResponse = string; export type PostUserAvatarByIdData = { id: string; - requestBody?: (SetAvatarRequestModel); + requestBody?: SetAvatarRequestModel; }; -export type PostUserAvatarByIdResponse = (string); +export type PostUserAvatarByIdResponse = string; -export type GetUserConfigurationResponse = ((UserConfigurationResponseModel)); +export type GetUserConfigurationResponse = UserConfigurationResponseModel; -export type GetUserCurrentResponse = ((CurrentUserResponseModel)); +export type GetUserCurrentResponse = CurrentUserResponseModel; -export type GetUserCurrent2FaResponse = (Array<(UserTwoFactorProviderModel)>); +export type GetUserCurrent2FaResponse = Array<(UserTwoFactorProviderModel)>; export type DeleteUserCurrent2FaByProviderNameData = { code?: string; providerName: string; }; -export type DeleteUserCurrent2FaByProviderNameResponse = (string); +export type DeleteUserCurrent2FaByProviderNameResponse = string; export type PostUserCurrent2FaByProviderNameData = { providerName: string; - requestBody?: (EnableTwoFactorRequestModel); + requestBody?: EnableTwoFactorRequestModel; }; -export type PostUserCurrent2FaByProviderNameResponse = ((NoopSetupTwoFactorModel)); +export type PostUserCurrent2FaByProviderNameResponse = NoopSetupTwoFactorModel; export type GetUserCurrent2FaByProviderNameData = { providerName: string; }; -export type GetUserCurrent2FaByProviderNameResponse = ((NoopSetupTwoFactorModel)); +export type GetUserCurrent2FaByProviderNameResponse = NoopSetupTwoFactorModel; export type PostUserCurrentAvatarData = { - requestBody?: (SetAvatarRequestModel); + requestBody?: SetAvatarRequestModel; }; -export type PostUserCurrentAvatarResponse = (string); +export type PostUserCurrentAvatarResponse = string; export type PostUserCurrentChangePasswordData = { - requestBody?: (ChangePasswordCurrentUserRequestModel); + requestBody?: ChangePasswordCurrentUserRequestModel; }; -export type PostUserCurrentChangePasswordResponse = (string); +export type PostUserCurrentChangePasswordResponse = string; -export type GetUserCurrentConfigurationResponse = ((CurrenUserConfigurationResponseModel)); +export type GetUserCurrentConfigurationResponse = CurrenUserConfigurationResponseModel; -export type GetUserCurrentLoginProvidersResponse = (Array<(UserExternalLoginProviderModel)>); +export type GetUserCurrentLoginProvidersResponse = Array<(UserExternalLoginProviderModel)>; export type GetUserCurrentPermissionsData = { id?: Array<(string)>; }; -export type GetUserCurrentPermissionsResponse = ((UserPermissionsResponseModel)); +export type GetUserCurrentPermissionsResponse = UserPermissionsResponseModel; export type GetUserCurrentPermissionsDocumentData = { id?: Array<(string)>; }; -export type GetUserCurrentPermissionsDocumentResponse = (Array<(UserPermissionsResponseModel)>); +export type GetUserCurrentPermissionsDocumentResponse = Array<(UserPermissionsResponseModel)>; export type GetUserCurrentPermissionsMediaData = { id?: Array<(string)>; }; -export type GetUserCurrentPermissionsMediaResponse = ((UserPermissionsResponseModel)); +export type GetUserCurrentPermissionsMediaResponse = UserPermissionsResponseModel; export type PostUserDisableData = { - requestBody?: (DisableUserRequestModel); + requestBody?: DisableUserRequestModel; }; -export type PostUserDisableResponse = (string); +export type PostUserDisableResponse = string; export type PostUserEnableData = { - requestBody?: (EnableUserRequestModel); + requestBody?: EnableUserRequestModel; }; -export type PostUserEnableResponse = (string); +export type PostUserEnableResponse = string; export type PostUserInviteData = { - requestBody?: (InviteUserRequestModel); + requestBody?: InviteUserRequestModel; }; -export type PostUserInviteResponse = (string); +export type PostUserInviteResponse = string; export type PostUserInviteCreatePasswordData = { - requestBody?: (CreateInitialPasswordUserRequestModel); + requestBody?: CreateInitialPasswordUserRequestModel; }; -export type PostUserInviteCreatePasswordResponse = (string); +export type PostUserInviteCreatePasswordResponse = string; export type PostUserInviteResendData = { - requestBody?: (ResendInviteUserRequestModel); + requestBody?: ResendInviteUserRequestModel; }; -export type PostUserInviteResendResponse = (string); +export type PostUserInviteResendResponse = string; export type PostUserInviteVerifyData = { - requestBody?: (VerifyInviteUserRequestModel); + requestBody?: VerifyInviteUserRequestModel; }; -export type PostUserInviteVerifyResponse = ((VerifyInviteUserResponseModel)); +export type PostUserInviteVerifyResponse = VerifyInviteUserResponseModel; export type PostUserSetUserGroupsData = { - requestBody?: (UpdateUserGroupsOnUserRequestModel); + requestBody?: UpdateUserGroupsOnUserRequestModel; }; -export type PostUserSetUserGroupsResponse = (string); +export type PostUserSetUserGroupsResponse = string; export type PostUserUnlockData = { - requestBody?: (UnlockUsersRequestModel); + requestBody?: UnlockUsersRequestModel; }; -export type PostUserUnlockResponse = (string); +export type PostUserUnlockResponse = string; export type GetItemWebhookData = { id?: Array<(string)>; }; -export type GetItemWebhookResponse = (Array<(WebhookItemResponseModel)>); +export type GetItemWebhookResponse = Array<(WebhookItemResponseModel)>; export type GetWebhookData = { skip?: number; take?: number; }; -export type GetWebhookResponse = ((PagedWebhookResponseModel)); +export type GetWebhookResponse = PagedWebhookResponseModel; export type PostWebhookData = { - requestBody?: (CreateWebhookRequestModel); + requestBody?: CreateWebhookRequestModel; }; -export type PostWebhookResponse = (string); +export type PostWebhookResponse = string; export type GetWebhookByIdData = { id: string; }; -export type GetWebhookByIdResponse = ((WebhookResponseModel)); +export type GetWebhookByIdResponse = WebhookResponseModel; export type DeleteWebhookByIdData = { id: string; }; -export type DeleteWebhookByIdResponse = (string); +export type DeleteWebhookByIdResponse = string; export type PutWebhookByIdData = { id: string; - requestBody?: (UpdateWebhookRequestModel); + requestBody?: UpdateWebhookRequestModel; }; -export type PutWebhookByIdResponse = (string); +export type PutWebhookByIdResponse = string; export type GetWebhookEventsData = { skip?: number; take?: number; }; -export type GetWebhookEventsResponse = ((PagedWebhookEventModel)); \ No newline at end of file +export type GetWebhookEventsResponse = PagedWebhookEventModel; + +export type $OpenApiTs = { + '/umbraco/management/api/v1/culture': { + get: { + req: GetCultureData; + res: { + /** + * OK + */ + 200: PagedCultureReponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/data-type': { + post: { + req: PostDataTypeData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/data-type/{id}': { + get: { + req: GetDataTypeByIdData; + res: { + /** + * OK + */ + 200: DataTypeResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteDataTypeByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutDataTypeByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/data-type/{id}/copy': { + post: { + req: PostDataTypeByIdCopyData; + res: { + /** + * Created + */ + 201: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/data-type/{id}/is-used': { + get: { + req: GetDataTypeByIdIsUsedData; + res: { + /** + * OK + */ + 200: boolean; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/data-type/{id}/move': { + put: { + req: PutDataTypeByIdMoveData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/data-type/{id}/references': { + get: { + req: GetDataTypeByIdReferencesData; + res: { + /** + * OK + */ + 200: Array<(DataTypeReferenceResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/data-type/configuration': { + get: { + res: { + /** + * OK + */ + 200: DatatypeConfigurationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/data-type/folder': { + post: { + req: PostDataTypeFolderData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/data-type/folder/{id}': { + get: { + req: GetDataTypeFolderByIdData; + res: { + /** + * OK + */ + 200: FolderResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteDataTypeFolderByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutDataTypeFolderByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/filter/data-type': { + get: { + req: GetFilterDataTypeData; + res: { + /** + * OK + */ + 200: PagedDataTypeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/data-type': { + get: { + req: GetItemDataTypeData; + res: { + /** + * OK + */ + 200: Array<(DataTypeItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/data-type/search': { + get: { + req: GetItemDataTypeSearchData; + res: { + /** + * OK + */ + 200: PagedModelDataTypeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/data-type/ancestors': { + get: { + req: GetTreeDataTypeAncestorsData; + res: { + /** + * OK + */ + 200: Array<(DataTypeTreeItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/data-type/children': { + get: { + req: GetTreeDataTypeChildrenData; + res: { + /** + * OK + */ + 200: PagedDataTypeTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/data-type/root': { + get: { + req: GetTreeDataTypeRootData; + res: { + /** + * OK + */ + 200: PagedDataTypeTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/dictionary': { + get: { + req: GetDictionaryData; + res: { + /** + * OK + */ + 200: PagedDictionaryOverviewResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + post: { + req: PostDictionaryData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + /** + * Conflict + */ + 409: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/dictionary/{id}': { + get: { + req: GetDictionaryByIdData; + res: { + /** + * OK + */ + 200: DictionaryItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteDictionaryByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutDictionaryByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/dictionary/{id}/export': { + get: { + req: GetDictionaryByIdExportData; + res: { + /** + * OK + */ + 200: (Blob | File); + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/dictionary/{id}/move': { + put: { + req: PutDictionaryByIdMoveData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/dictionary/import': { + post: { + req: PostDictionaryImportData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/item/dictionary': { + get: { + req: GetItemDictionaryData; + res: { + /** + * OK + */ + 200: Array<(DictionaryItemItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/dictionary/ancestors': { + get: { + req: GetTreeDictionaryAncestorsData; + res: { + /** + * OK + */ + 200: Array<(NamedEntityTreeItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/dictionary/children': { + get: { + req: GetTreeDictionaryChildrenData; + res: { + /** + * OK + */ + 200: PagedNamedEntityTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/dictionary/root': { + get: { + req: GetTreeDictionaryRootData; + res: { + /** + * OK + */ + 200: PagedNamedEntityTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/document-blueprint': { + post: { + req: PostDocumentBlueprintData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-blueprint/{id}': { + get: { + req: GetDocumentBlueprintByIdData; + res: { + /** + * OK + */ + 200: DocumentBlueprintResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteDocumentBlueprintByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutDocumentBlueprintByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-blueprint/{id}/move': { + put: { + req: PutDocumentBlueprintByIdMoveData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-blueprint/folder': { + post: { + req: PostDocumentBlueprintFolderData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-blueprint/folder/{id}': { + get: { + req: GetDocumentBlueprintFolderByIdData; + res: { + /** + * OK + */ + 200: FolderResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteDocumentBlueprintFolderByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutDocumentBlueprintFolderByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-blueprint/from-document': { + post: { + req: PostDocumentBlueprintFromDocumentData; + res: { + /** + * Created + */ + 201: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/item/document-blueprint': { + get: { + req: GetItemDocumentBlueprintData; + res: { + /** + * OK + */ + 200: Array<(DocumentBlueprintItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/document-blueprint/ancestors': { + get: { + req: GetTreeDocumentBlueprintAncestorsData; + res: { + /** + * OK + */ + 200: Array<(DocumentBlueprintTreeItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/document-blueprint/children': { + get: { + req: GetTreeDocumentBlueprintChildrenData; + res: { + /** + * OK + */ + 200: PagedDocumentBlueprintTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/document-blueprint/root': { + get: { + req: GetTreeDocumentBlueprintRootData; + res: { + /** + * OK + */ + 200: PagedDocumentBlueprintTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/document-type': { + post: { + req: PostDocumentTypeData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-type/{id}': { + get: { + req: GetDocumentTypeByIdData; + res: { + /** + * OK + */ + 200: DocumentTypeResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteDocumentTypeByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutDocumentTypeByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-type/{id}/allowed-children': { + get: { + req: GetDocumentTypeByIdAllowedChildrenData; + res: { + /** + * OK + */ + 200: PagedAllowedDocumentTypeModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-type/{id}/blueprint': { + get: { + req: GetDocumentTypeByIdBlueprintData; + res: { + /** + * OK + */ + 200: PagedDocumentTypeBlueprintItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-type/{id}/composition-references': { + get: { + req: GetDocumentTypeByIdCompositionReferencesData; + res: { + /** + * OK + */ + 200: Array<(DocumentTypeCompositionResponseModel)>; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-type/{id}/copy': { + post: { + req: PostDocumentTypeByIdCopyData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-type/{id}/export': { + get: { + req: GetDocumentTypeByIdExportData; + res: { + /** + * OK + */ + 200: (Blob | File); + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-type/{id}/import': { + put: { + req: PutDocumentTypeByIdImportData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-type/{id}/move': { + put: { + req: PutDocumentTypeByIdMoveData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-type/allowed-at-root': { + get: { + req: GetDocumentTypeAllowedAtRootData; + res: { + /** + * OK + */ + 200: PagedAllowedDocumentTypeModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/document-type/available-compositions': { + post: { + req: PostDocumentTypeAvailableCompositionsData; + res: { + /** + * OK + */ + 200: Array<(AvailableDocumentTypeCompositionResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/document-type/configuration': { + get: { + res: { + /** + * OK + */ + 200: DocumentTypeConfigurationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/document-type/folder': { + post: { + req: PostDocumentTypeFolderData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-type/folder/{id}': { + get: { + req: GetDocumentTypeFolderByIdData; + res: { + /** + * OK + */ + 200: FolderResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteDocumentTypeFolderByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutDocumentTypeFolderByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-type/import': { + post: { + req: PostDocumentTypeImportData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/item/document-type': { + get: { + req: GetItemDocumentTypeData; + res: { + /** + * OK + */ + 200: Array<(DocumentTypeItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/document-type/search': { + get: { + req: GetItemDocumentTypeSearchData; + res: { + /** + * OK + */ + 200: PagedModelDocumentTypeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/document-type/ancestors': { + get: { + req: GetTreeDocumentTypeAncestorsData; + res: { + /** + * OK + */ + 200: Array<(DocumentTypeTreeItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/document-type/children': { + get: { + req: GetTreeDocumentTypeChildrenData; + res: { + /** + * OK + */ + 200: PagedDocumentTypeTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/document-type/root': { + get: { + req: GetTreeDocumentTypeRootData; + res: { + /** + * OK + */ + 200: PagedDocumentTypeTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/document-version': { + get: { + req: GetDocumentVersionData; + res: { + /** + * OK + */ + 200: PagedDocumentVersionItemResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-version/{id}': { + get: { + req: GetDocumentVersionByIdData; + res: { + /** + * OK + */ + 200: DocumentVersionResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-version/{id}/prevent-cleanup': { + put: { + req: PutDocumentVersionByIdPreventCleanupData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document-version/{id}/rollback': { + post: { + req: PostDocumentVersionByIdRollbackData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/collection/document/{id}': { + get: { + req: GetCollectionDocumentByIdData; + res: { + /** + * OK + */ + 200: PagedDocumentCollectionResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document': { + post: { + req: PostDocumentData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document/{id}': { + get: { + req: GetDocumentByIdData; + res: { + /** + * OK + */ + 200: DocumentResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteDocumentByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutDocumentByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document/{id}/audit-log': { + get: { + req: GetDocumentByIdAuditLogData; + res: { + /** + * OK + */ + 200: PagedAuditLogResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/document/{id}/copy': { + post: { + req: PostDocumentByIdCopyData; + res: { + /** + * Created + */ + 201: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document/{id}/domains': { + get: { + req: GetDocumentByIdDomainsData; + res: { + /** + * OK + */ + 200: DomainsResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutDocumentByIdDomainsData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + /** + * Conflict + */ + 409: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document/{id}/move': { + put: { + req: PutDocumentByIdMoveData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document/{id}/move-to-recycle-bin': { + put: { + req: PutDocumentByIdMoveToRecycleBinData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document/{id}/notifications': { + get: { + req: GetDocumentByIdNotificationsData; + res: { + /** + * OK + */ + 200: Array<(DocumentNotificationResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutDocumentByIdNotificationsData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document/{id}/public-access': { + post: { + req: PostDocumentByIdPublicAccessData; + res: { + /** + * Created + */ + 201: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteDocumentByIdPublicAccessData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + get: { + req: GetDocumentByIdPublicAccessData; + res: { + /** + * OK + */ + 200: PublicAccessResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutDocumentByIdPublicAccessData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document/{id}/publish': { + put: { + req: PutDocumentByIdPublishData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document/{id}/publish-with-descendants': { + put: { + req: PutDocumentByIdPublishWithDescendantsData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document/{id}/referenced-by': { + get: { + req: GetDocumentByIdReferencedByData; + res: { + /** + * OK + */ + 200: PagedIReferenceResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/document/{id}/referenced-descendants': { + get: { + req: GetDocumentByIdReferencedDescendantsData; + res: { + /** + * OK + */ + 200: PagedReferenceByIdModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/document/{id}/unpublish': { + put: { + req: PutDocumentByIdUnpublishData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document/{id}/validate': { + put: { + req: PutDocumentByIdValidateData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document/are-referenced': { + get: { + req: GetDocumentAreReferencedData; + res: { + /** + * OK + */ + 200: PagedReferenceByIdModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/document/configuration': { + get: { + res: { + /** + * OK + */ + 200: DocumentConfigurationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/document/sort': { + put: { + req: PutDocumentSortData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/document/urls': { + get: { + req: GetDocumentUrlsData; + res: { + /** + * OK + */ + 200: Array<(DocumentUrlInfoResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/document/validate': { + post: { + req: PostDocumentValidateData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/item/document': { + get: { + req: GetItemDocumentData; + res: { + /** + * OK + */ + 200: Array<(DocumentItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/document/search': { + get: { + req: GetItemDocumentSearchData; + res: { + /** + * OK + */ + 200: PagedModelDocumentItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/recycle-bin/document': { + delete: { + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/recycle-bin/document/{id}': { + delete: { + req: DeleteRecycleBinDocumentByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/recycle-bin/document/{id}/original-parent': { + get: { + req: GetRecycleBinDocumentByIdOriginalParentData; + res: { + /** + * OK + */ + 200: ReferenceByIdModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/recycle-bin/document/{id}/restore': { + put: { + req: PutRecycleBinDocumentByIdRestoreData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/recycle-bin/document/children': { + get: { + req: GetRecycleBinDocumentChildrenData; + res: { + /** + * OK + */ + 200: PagedDocumentRecycleBinItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/recycle-bin/document/root': { + get: { + req: GetRecycleBinDocumentRootData; + res: { + /** + * OK + */ + 200: PagedDocumentRecycleBinItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/document/ancestors': { + get: { + req: GetTreeDocumentAncestorsData; + res: { + /** + * OK + */ + 200: Array<(DocumentTreeItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/document/children': { + get: { + req: GetTreeDocumentChildrenData; + res: { + /** + * OK + */ + 200: PagedDocumentTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/document/root': { + get: { + req: GetTreeDocumentRootData; + res: { + /** + * OK + */ + 200: PagedDocumentTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/dynamic-root/query': { + post: { + req: PostDynamicRootQueryData; + res: { + /** + * OK + */ + 200: DynamicRootResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/dynamic-root/steps': { + get: { + res: { + /** + * OK + */ + 200: Array<(string)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/health-check-group': { + get: { + req: GetHealthCheckGroupData; + res: { + /** + * OK + */ + 200: PagedHealthCheckGroupResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/health-check-group/{name}': { + get: { + req: GetHealthCheckGroupByNameData; + res: { + /** + * OK + */ + 200: HealthCheckGroupPresentationModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/health-check-group/{name}/check': { + post: { + req: PostHealthCheckGroupByNameCheckData; + res: { + /** + * OK + */ + 200: HealthCheckGroupWithResultResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/health-check/execute-action': { + post: { + req: PostHealthCheckExecuteActionData; + res: { + /** + * OK + */ + 200: HealthCheckResultResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/help': { + get: { + req: GetHelpData; + res: { + /** + * OK + */ + 200: PagedHelpPageResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/imaging/resize/urls': { + get: { + req: GetImagingResizeUrlsData; + res: { + /** + * OK + */ + 200: Array<(MediaUrlInfoResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/import/analyze': { + get: { + req: GetImportAnalyzeData; + res: { + /** + * OK + */ + 200: EntityImportAnalysisResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/indexer': { + get: { + req: GetIndexerData; + res: { + /** + * OK + */ + 200: PagedIndexResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/indexer/{indexName}': { + get: { + req: GetIndexerByIndexNameData; + res: { + /** + * OK + */ + 200: IndexResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/indexer/{indexName}/rebuild': { + post: { + req: PostIndexerByIndexNameRebuildData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + /** + * Conflict + */ + 409: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/install/settings': { + get: { + res: { + /** + * OK + */ + 200: InstallSettingsResponseModel; + /** + * Precondition Required + */ + 428: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/install/setup': { + post: { + req: PostInstallSetupData; + res: { + /** + * OK + */ + 200: string; + /** + * Precondition Required + */ + 428: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/install/validate-database': { + post: { + req: PostInstallValidateDatabaseData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/item/language': { + get: { + req: GetItemLanguageData; + res: { + /** + * OK + */ + 200: Array<(LanguageItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/language/default': { + get: { + res: { + /** + * OK + */ + 200: LanguageItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/language': { + get: { + req: GetLanguageData; + res: { + /** + * OK + */ + 200: PagedLanguageResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + post: { + req: PostLanguageData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/language/{isoCode}': { + get: { + req: GetLanguageByIsoCodeData; + res: { + /** + * OK + */ + 200: LanguageResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteLanguageByIsoCodeData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutLanguageByIsoCodeData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/log-viewer/level': { + get: { + req: GetLogViewerLevelData; + res: { + /** + * OK + */ + 200: PagedLoggerResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/log-viewer/level-count': { + get: { + req: GetLogViewerLevelCountData; + res: { + /** + * OK + */ + 200: LogLevelCountsReponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/log-viewer/log': { + get: { + req: GetLogViewerLogData; + res: { + /** + * OK + */ + 200: PagedLogMessageResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/log-viewer/message-template': { + get: { + req: GetLogViewerMessageTemplateData; + res: { + /** + * OK + */ + 200: PagedLogTemplateResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/log-viewer/saved-search': { + get: { + req: GetLogViewerSavedSearchData; + res: { + /** + * OK + */ + 200: PagedSavedLogSearchResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + post: { + req: PostLogViewerSavedSearchData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/log-viewer/saved-search/{name}': { + get: { + req: GetLogViewerSavedSearchByNameData; + res: { + /** + * OK + */ + 200: SavedLogSearchResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteLogViewerSavedSearchByNameData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/log-viewer/validate-logs-size': { + get: { + req: GetLogViewerValidateLogsSizeData; + res: { + /** + * OK + */ + 200: unknown; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/manifest/manifest': { + get: { + res: { + /** + * OK + */ + 200: Array<(ManifestResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/manifest/manifest/private': { + get: { + res: { + /** + * OK + */ + 200: Array<(ManifestResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/manifest/manifest/public': { + get: { + res: { + /** + * OK + */ + 200: Array<(ManifestResponseModel)>; + }; + }; + }; + '/umbraco/management/api/v1/item/media-type': { + get: { + req: GetItemMediaTypeData; + res: { + /** + * OK + */ + 200: Array<(MediaTypeItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/media-type/allowed': { + get: { + req: GetItemMediaTypeAllowedData; + res: { + /** + * OK + */ + 200: PagedModelMediaTypeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/media-type/folders': { + get: { + req: GetItemMediaTypeFoldersData; + res: { + /** + * OK + */ + 200: PagedModelMediaTypeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/media-type/search': { + get: { + req: GetItemMediaTypeSearchData; + res: { + /** + * OK + */ + 200: PagedModelMediaTypeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/media-type': { + post: { + req: PostMediaTypeData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media-type/{id}': { + get: { + req: GetMediaTypeByIdData; + res: { + /** + * OK + */ + 200: MediaTypeResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteMediaTypeByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutMediaTypeByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media-type/{id}/allowed-children': { + get: { + req: GetMediaTypeByIdAllowedChildrenData; + res: { + /** + * OK + */ + 200: PagedAllowedMediaTypeModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media-type/{id}/composition-references': { + get: { + req: GetMediaTypeByIdCompositionReferencesData; + res: { + /** + * OK + */ + 200: Array<(MediaTypeCompositionResponseModel)>; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media-type/{id}/copy': { + post: { + req: PostMediaTypeByIdCopyData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media-type/{id}/export': { + get: { + req: GetMediaTypeByIdExportData; + res: { + /** + * OK + */ + 200: (Blob | File); + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media-type/{id}/import': { + put: { + req: PutMediaTypeByIdImportData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media-type/{id}/move': { + put: { + req: PutMediaTypeByIdMoveData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media-type/allowed-at-root': { + get: { + req: GetMediaTypeAllowedAtRootData; + res: { + /** + * OK + */ + 200: PagedAllowedMediaTypeModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/media-type/available-compositions': { + post: { + req: PostMediaTypeAvailableCompositionsData; + res: { + /** + * OK + */ + 200: Array<(AvailableMediaTypeCompositionResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/media-type/configuration': { + get: { + res: { + /** + * OK + */ + 200: MediaTypeConfigurationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/media-type/folder': { + post: { + req: PostMediaTypeFolderData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media-type/folder/{id}': { + get: { + req: GetMediaTypeFolderByIdData; + res: { + /** + * OK + */ + 200: FolderResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteMediaTypeFolderByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutMediaTypeFolderByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media-type/import': { + post: { + req: PostMediaTypeImportData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/tree/media-type/ancestors': { + get: { + req: GetTreeMediaTypeAncestorsData; + res: { + /** + * OK + */ + 200: Array<(MediaTypeTreeItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/media-type/children': { + get: { + req: GetTreeMediaTypeChildrenData; + res: { + /** + * OK + */ + 200: PagedMediaTypeTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/media-type/root': { + get: { + req: GetTreeMediaTypeRootData; + res: { + /** + * OK + */ + 200: PagedMediaTypeTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/collection/media': { + get: { + req: GetCollectionMediaData; + res: { + /** + * OK + */ + 200: PagedMediaCollectionResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/item/media': { + get: { + req: GetItemMediaData; + res: { + /** + * OK + */ + 200: Array<(MediaItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/media/search': { + get: { + req: GetItemMediaSearchData; + res: { + /** + * OK + */ + 200: PagedModelMediaItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/media': { + post: { + req: PostMediaData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media/{id}': { + get: { + req: GetMediaByIdData; + res: { + /** + * OK + */ + 200: MediaResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteMediaByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutMediaByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media/{id}/audit-log': { + get: { + req: GetMediaByIdAuditLogData; + res: { + /** + * OK + */ + 200: PagedAuditLogResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/media/{id}/move': { + put: { + req: PutMediaByIdMoveData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media/{id}/move-to-recycle-bin': { + put: { + req: PutMediaByIdMoveToRecycleBinData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media/{id}/referenced-by': { + get: { + req: GetMediaByIdReferencedByData; + res: { + /** + * OK + */ + 200: PagedIReferenceResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/media/{id}/referenced-descendants': { + get: { + req: GetMediaByIdReferencedDescendantsData; + res: { + /** + * OK + */ + 200: PagedReferenceByIdModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/media/{id}/validate': { + put: { + req: PutMediaByIdValidateData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media/are-referenced': { + get: { + req: GetMediaAreReferencedData; + res: { + /** + * OK + */ + 200: PagedReferenceByIdModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/media/configuration': { + get: { + res: { + /** + * OK + */ + 200: MediaConfigurationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/media/sort': { + put: { + req: PutMediaSortData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/media/urls': { + get: { + req: GetMediaUrlsData; + res: { + /** + * OK + */ + 200: Array<(MediaUrlInfoResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/media/validate': { + post: { + req: PostMediaValidateData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/recycle-bin/media': { + delete: { + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/recycle-bin/media/{id}': { + delete: { + req: DeleteRecycleBinMediaByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/recycle-bin/media/{id}/original-parent': { + get: { + req: GetRecycleBinMediaByIdOriginalParentData; + res: { + /** + * OK + */ + 200: ReferenceByIdModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/recycle-bin/media/{id}/restore': { + put: { + req: PutRecycleBinMediaByIdRestoreData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/recycle-bin/media/children': { + get: { + req: GetRecycleBinMediaChildrenData; + res: { + /** + * OK + */ + 200: PagedMediaRecycleBinItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/recycle-bin/media/root': { + get: { + req: GetRecycleBinMediaRootData; + res: { + /** + * OK + */ + 200: PagedMediaRecycleBinItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/media/ancestors': { + get: { + req: GetTreeMediaAncestorsData; + res: { + /** + * OK + */ + 200: Array<(MediaTreeItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/media/children': { + get: { + req: GetTreeMediaChildrenData; + res: { + /** + * OK + */ + 200: PagedMediaTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/media/root': { + get: { + req: GetTreeMediaRootData; + res: { + /** + * OK + */ + 200: PagedMediaTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/member-group': { + get: { + req: GetItemMemberGroupData; + res: { + /** + * OK + */ + 200: Array<(MemberGroupItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/member-group': { + get: { + req: GetMemberGroupData; + res: { + /** + * OK + */ + 200: PagedMemberGroupResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + post: { + req: PostMemberGroupData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/member-group/{id}': { + get: { + req: GetMemberGroupByIdData; + res: { + /** + * OK + */ + 200: MemberGroupResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: unknown; + }; + }; + delete: { + req: DeleteMemberGroupByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutMemberGroupByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/tree/member-group/root': { + get: { + req: GetTreeMemberGroupRootData; + res: { + /** + * OK + */ + 200: PagedNamedEntityTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/member-type': { + get: { + req: GetItemMemberTypeData; + res: { + /** + * OK + */ + 200: Array<(MemberTypeItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/member-type/search': { + get: { + req: GetItemMemberTypeSearchData; + res: { + /** + * OK + */ + 200: PagedModelMemberTypeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/member-type': { + post: { + req: PostMemberTypeData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/member-type/{id}': { + get: { + req: GetMemberTypeByIdData; + res: { + /** + * OK + */ + 200: MemberTypeResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteMemberTypeByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutMemberTypeByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/member-type/{id}/composition-references': { + get: { + req: GetMemberTypeByIdCompositionReferencesData; + res: { + /** + * OK + */ + 200: Array<(MemberTypeCompositionResponseModel)>; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/member-type/{id}/copy': { + post: { + req: PostMemberTypeByIdCopyData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/member-type/available-compositions': { + post: { + req: PostMemberTypeAvailableCompositionsData; + res: { + /** + * OK + */ + 200: Array<(AvailableMemberTypeCompositionResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/member-type/configuration': { + get: { + res: { + /** + * OK + */ + 200: MemberTypeConfigurationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/member-type/root': { + get: { + req: GetTreeMemberTypeRootData; + res: { + /** + * OK + */ + 200: PagedMemberTypeTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/filter/member': { + get: { + req: GetFilterMemberData; + res: { + /** + * OK + */ + 200: PagedMemberResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/item/member': { + get: { + req: GetItemMemberData; + res: { + /** + * OK + */ + 200: Array<(MemberItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/member/search': { + get: { + req: GetItemMemberSearchData; + res: { + /** + * OK + */ + 200: PagedModelMemberItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/member': { + post: { + req: PostMemberData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/member/{id}': { + get: { + req: GetMemberByIdData; + res: { + /** + * OK + */ + 200: MemberResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteMemberByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutMemberByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/member/{id}/validate': { + put: { + req: PutMemberByIdValidateData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/member/configuration': { + get: { + res: { + /** + * OK + */ + 200: MemberConfigurationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/member/validate': { + post: { + req: PostMemberValidateData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/models-builder/build': { + post: { + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Precondition Required + */ + 428: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/models-builder/dashboard': { + get: { + res: { + /** + * OK + */ + 200: ModelsBuilderResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/models-builder/status': { + get: { + res: { + /** + * OK + */ + 200: OutOfDateStatusResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/object-types': { + get: { + req: GetObjectTypesData; + res: { + /** + * OK + */ + 200: PagedObjectTypeResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/oembed/query': { + get: { + req: GetOembedQueryData; + res: { + /** + * OK + */ + 200: OEmbedResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/package/{name}/run-migration': { + post: { + req: PostPackageByNameRunMigrationData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + /** + * Conflict + */ + 409: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/package/configuration': { + get: { + res: { + /** + * OK + */ + 200: PackageConfigurationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/package/created': { + get: { + req: GetPackageCreatedData; + res: { + /** + * OK + */ + 200: PagedPackageDefinitionResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + post: { + req: PostPackageCreatedData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/package/created/{id}': { + get: { + req: GetPackageCreatedByIdData; + res: { + /** + * OK + */ + 200: PackageDefinitionResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeletePackageCreatedByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutPackageCreatedByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/package/created/{id}/download': { + get: { + req: GetPackageCreatedByIdDownloadData; + res: { + /** + * OK + */ + 200: (Blob | File); + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/package/migration-status': { + get: { + req: GetPackageMigrationStatusData; + res: { + /** + * OK + */ + 200: PagedPackageMigrationStatusResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/partial-view': { + get: { + req: GetItemPartialViewData; + res: { + /** + * OK + */ + 200: Array<(PartialViewItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/partial-view': { + post: { + req: PostPartialViewData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/partial-view/{path}': { + get: { + req: GetPartialViewByPathData; + res: { + /** + * OK + */ + 200: PartialViewResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeletePartialViewByPathData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutPartialViewByPathData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/partial-view/{path}/rename': { + put: { + req: PutPartialViewByPathRenameData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/partial-view/folder': { + post: { + req: PostPartialViewFolderData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/partial-view/folder/{path}': { + get: { + req: GetPartialViewFolderByPathData; + res: { + /** + * OK + */ + 200: PartialViewFolderResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeletePartialViewFolderByPathData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/partial-view/snippet': { + get: { + req: GetPartialViewSnippetData; + res: { + /** + * OK + */ + 200: PagedPartialViewSnippetItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/partial-view/snippet/{id}': { + get: { + req: GetPartialViewSnippetByIdData; + res: { + /** + * OK + */ + 200: PartialViewSnippetResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/tree/partial-view/ancestors': { + get: { + req: GetTreePartialViewAncestorsData; + res: { + /** + * OK + */ + 200: Array<(FileSystemTreeItemPresentationModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/partial-view/children': { + get: { + req: GetTreePartialViewChildrenData; + res: { + /** + * OK + */ + 200: PagedFileSystemTreeItemPresentationModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/partial-view/root': { + get: { + req: GetTreePartialViewRootData; + res: { + /** + * OK + */ + 200: PagedFileSystemTreeItemPresentationModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/preview': { + delete: { + res: { + /** + * OK + */ + 200: string; + }; + }; + post: { + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/profiling/status': { + get: { + res: { + /** + * OK + */ + 200: ProfilingStatusResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + put: { + req: PutProfilingStatusData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/property-type/is-used': { + get: { + req: GetPropertyTypeIsUsedData; + res: { + /** + * OK + */ + 200: boolean; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/published-cache/collect': { + post: { + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/published-cache/rebuild': { + post: { + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/published-cache/reload': { + post: { + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/published-cache/status': { + get: { + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/redirect-management': { + get: { + req: GetRedirectManagementData; + res: { + /** + * OK + */ + 200: PagedRedirectUrlResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/redirect-management/{id}': { + get: { + req: GetRedirectManagementByIdData; + res: { + /** + * OK + */ + 200: PagedRedirectUrlResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + delete: { + req: DeleteRedirectManagementByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/redirect-management/status': { + get: { + res: { + /** + * OK + */ + 200: RedirectUrlStatusResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + post: { + req: PostRedirectManagementStatusData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/item/relation-type': { + get: { + req: GetItemRelationTypeData; + res: { + /** + * OK + */ + 200: Array<(RelationTypeItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/relation-type': { + get: { + req: GetRelationTypeData; + res: { + /** + * OK + */ + 200: PagedRelationTypeResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/relation-type/{id}': { + get: { + req: GetRelationTypeByIdData; + res: { + /** + * OK + */ + 200: RelationTypeResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/relation/type/{id}': { + get: { + req: GetRelationByRelationTypeIdData; + res: { + /** + * OK + */ + 200: PagedRelationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: PagedProblemDetailsModel; + }; + }; + }; + '/umbraco/management/api/v1/item/script': { + get: { + req: GetItemScriptData; + res: { + /** + * OK + */ + 200: Array<(ScriptItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/script': { + post: { + req: PostScriptData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/script/{path}': { + get: { + req: GetScriptByPathData; + res: { + /** + * OK + */ + 200: ScriptResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteScriptByPathData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutScriptByPathData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/script/{path}/rename': { + put: { + req: PutScriptByPathRenameData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/script/folder': { + post: { + req: PostScriptFolderData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/script/folder/{path}': { + get: { + req: GetScriptFolderByPathData; + res: { + /** + * OK + */ + 200: ScriptFolderResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteScriptFolderByPathData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/tree/script/ancestors': { + get: { + req: GetTreeScriptAncestorsData; + res: { + /** + * OK + */ + 200: Array<(FileSystemTreeItemPresentationModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/script/children': { + get: { + req: GetTreeScriptChildrenData; + res: { + /** + * OK + */ + 200: PagedFileSystemTreeItemPresentationModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/script/root': { + get: { + req: GetTreeScriptRootData; + res: { + /** + * OK + */ + 200: PagedFileSystemTreeItemPresentationModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/searcher': { + get: { + req: GetSearcherData; + res: { + /** + * OK + */ + 200: PagedSearcherResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/searcher/{searcherName}/query': { + get: { + req: GetSearcherBySearcherNameQueryData; + res: { + /** + * OK + */ + 200: PagedSearchResultResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/security/configuration': { + get: { + res: { + /** + * OK + */ + 200: SecurityConfigurationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/security/forgot-password': { + post: { + req: PostSecurityForgotPasswordData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/security/forgot-password/reset': { + post: { + req: PostSecurityForgotPasswordResetData; + res: { + /** + * No Content + */ + 204: string; + /** + * Bad Request + */ + 400: ProblemDetailsBuilderModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetailsBuilderModel; + }; + }; + }; + '/umbraco/management/api/v1/security/forgot-password/verify': { + post: { + req: PostSecurityForgotPasswordVerifyData; + res: { + /** + * OK + */ + 200: VerifyResetPasswordResponseModel; + /** + * Bad Request + */ + 400: ProblemDetailsBuilderModel; + /** + * Not Found + */ + 404: ProblemDetailsBuilderModel; + }; + }; + }; + '/umbraco/management/api/v1/segment': { + get: { + req: GetSegmentData; + res: { + /** + * OK + */ + 200: PagedSegmentResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/server/configuration': { + get: { + res: { + /** + * OK + */ + 200: ServerConfigurationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/server/information': { + get: { + res: { + /** + * OK + */ + 200: ServerInformationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/server/status': { + get: { + res: { + /** + * OK + */ + 200: ServerStatusResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/server/troubleshooting': { + get: { + res: { + /** + * OK + */ + 200: ServerTroubleshootingResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/static-file': { + get: { + req: GetItemStaticFileData; + res: { + /** + * OK + */ + 200: Array<(StaticFileItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/static-file/ancestors': { + get: { + req: GetTreeStaticFileAncestorsData; + res: { + /** + * OK + */ + 200: Array<(FileSystemTreeItemPresentationModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/static-file/children': { + get: { + req: GetTreeStaticFileChildrenData; + res: { + /** + * OK + */ + 200: PagedFileSystemTreeItemPresentationModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/static-file/root': { + get: { + req: GetTreeStaticFileRootData; + res: { + /** + * OK + */ + 200: PagedFileSystemTreeItemPresentationModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/stylesheet': { + get: { + req: GetItemStylesheetData; + res: { + /** + * OK + */ + 200: Array<(StylesheetItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/stylesheet': { + post: { + req: PostStylesheetData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/stylesheet/{path}': { + get: { + req: GetStylesheetByPathData; + res: { + /** + * OK + */ + 200: StylesheetResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteStylesheetByPathData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutStylesheetByPathData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/stylesheet/{path}/rename': { + put: { + req: PutStylesheetByPathRenameData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/stylesheet/folder': { + post: { + req: PostStylesheetFolderData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/stylesheet/folder/{path}': { + get: { + req: GetStylesheetFolderByPathData; + res: { + /** + * OK + */ + 200: StylesheetFolderResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteStylesheetFolderByPathData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/tree/stylesheet/ancestors': { + get: { + req: GetTreeStylesheetAncestorsData; + res: { + /** + * OK + */ + 200: Array<(FileSystemTreeItemPresentationModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/stylesheet/children': { + get: { + req: GetTreeStylesheetChildrenData; + res: { + /** + * OK + */ + 200: PagedFileSystemTreeItemPresentationModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/stylesheet/root': { + get: { + req: GetTreeStylesheetRootData; + res: { + /** + * OK + */ + 200: PagedFileSystemTreeItemPresentationModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tag': { + get: { + req: GetTagData; + res: { + /** + * OK + */ + 200: PagedTagResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/telemetry': { + get: { + req: GetTelemetryData; + res: { + /** + * OK + */ + 200: PagedTelemetryResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/telemetry/level': { + get: { + res: { + /** + * OK + */ + 200: TelemetryResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + post: { + req: PostTelemetryLevelData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/item/template': { + get: { + req: GetItemTemplateData; + res: { + /** + * OK + */ + 200: Array<(TemplateItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/item/template/search': { + get: { + req: GetItemTemplateSearchData; + res: { + /** + * OK + */ + 200: PagedModelTemplateItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/template': { + post: { + req: PostTemplateData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/template/{id}': { + get: { + req: GetTemplateByIdData; + res: { + /** + * OK + */ + 200: TemplateResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteTemplateByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutTemplateByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/template/configuration': { + get: { + res: { + /** + * OK + */ + 200: TemplateConfigurationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/template/query/execute': { + post: { + req: PostTemplateQueryExecuteData; + res: { + /** + * OK + */ + 200: TemplateQueryResultResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/template/query/settings': { + get: { + res: { + /** + * OK + */ + 200: TemplateQuerySettingsResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/template/ancestors': { + get: { + req: GetTreeTemplateAncestorsData; + res: { + /** + * OK + */ + 200: Array<(NamedEntityTreeItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/template/children': { + get: { + req: GetTreeTemplateChildrenData; + res: { + /** + * OK + */ + 200: PagedNamedEntityTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/tree/template/root': { + get: { + req: GetTreeTemplateRootData; + res: { + /** + * OK + */ + 200: PagedNamedEntityTreeItemResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/temporary-file': { + post: { + req: PostTemporaryFileData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/temporary-file/{id}': { + get: { + req: GetTemporaryFileByIdData; + res: { + /** + * OK + */ + 200: TemporaryFileResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteTemporaryFileByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/temporary-file/configuration': { + get: { + res: { + /** + * OK + */ + 200: TemporaryFileConfigurationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/upgrade/authorize': { + post: { + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Precondition Required + */ + 428: ProblemDetails; + /** + * Internal Server Error + */ + 500: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/upgrade/settings': { + get: { + res: { + /** + * OK + */ + 200: UpgradeSettingsResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Precondition Required + */ + 428: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user-data': { + post: { + req: PostUserDataData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: UserDataOperationStatusModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: UserDataOperationStatusModel; + }; + }; + get: { + req: GetUserDataData; + res: { + /** + * OK + */ + 200: PagedUserDataResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + put: { + req: PutUserDataData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: UserDataOperationStatusModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: UserDataOperationStatusModel; + }; + }; + }; + '/umbraco/management/api/v1/user-data/{id}': { + get: { + req: GetUserDataByIdData; + res: { + /** + * OK + */ + 200: UserDataModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: unknown; + }; + }; + }; + '/umbraco/management/api/v1/filter/user-group': { + get: { + req: GetFilterUserGroupData; + res: { + /** + * OK + */ + 200: PagedUserGroupResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/item/user-group': { + get: { + req: GetItemUserGroupData; + res: { + /** + * OK + */ + 200: Array<(UserGroupItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/user-group': { + delete: { + req: DeleteUserGroupData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + post: { + req: PostUserGroupData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + get: { + req: GetUserGroupData; + res: { + /** + * OK + */ + 200: PagedUserGroupResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/user-group/{id}': { + get: { + req: GetUserGroupByIdData; + res: { + /** + * OK + */ + 200: UserGroupResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteUserGroupByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutUserGroupByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user-group/{id}/users': { + delete: { + req: DeleteUserGroupByIdUsersData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + post: { + req: PostUserGroupByIdUsersData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/filter/user': { + get: { + req: GetFilterUserData; + res: { + /** + * OK + */ + 200: PagedUserResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/item/user': { + get: { + req: GetItemUserData; + res: { + /** + * OK + */ + 200: Array<(UserItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/user': { + post: { + req: PostUserData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteUserData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + get: { + req: GetUserData; + res: { + /** + * OK + */ + 200: PagedUserResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/{id}': { + get: { + req: GetUserByIdData; + res: { + /** + * OK + */ + 200: UserResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteUserByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutUserByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/{id}/2fa': { + get: { + req: GetUserById2FaData; + res: { + /** + * OK + */ + 200: Array<(UserTwoFactorProviderModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/{id}/2fa/{providerName}': { + delete: { + req: DeleteUserById2FaByProviderNameData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/{id}/calculate-start-nodes': { + get: { + req: GetUserByIdCalculateStartNodesData; + res: { + /** + * OK + */ + 200: CalculatedUserStartNodesResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/{id}/change-password': { + post: { + req: PostUserByIdChangePasswordData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/{id}/client-credentials': { + post: { + req: PostUserByIdClientCredentialsData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + get: { + req: GetUserByIdClientCredentialsData; + res: { + /** + * OK + */ + 200: Array<(string)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/user/{id}/client-credentials/{clientId}': { + delete: { + req: DeleteUserByIdClientCredentialsByClientIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/user/{id}/reset-password': { + post: { + req: PostUserByIdResetPasswordData; + res: { + /** + * OK + */ + 200: ResetPasswordUserResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/avatar/{id}': { + delete: { + req: DeleteUserAvatarByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + post: { + req: PostUserAvatarByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/configuration': { + get: { + res: { + /** + * OK + */ + 200: UserConfigurationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/user/current': { + get: { + res: { + /** + * OK + */ + 200: CurrentUserResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/user/current/2fa': { + get: { + res: { + /** + * OK + */ + 200: Array<(UserTwoFactorProviderModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/user/current/2fa/{providerName}': { + delete: { + req: DeleteUserCurrent2FaByProviderNameData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + post: { + req: PostUserCurrent2FaByProviderNameData; + res: { + /** + * OK + */ + 200: NoopSetupTwoFactorModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + get: { + req: GetUserCurrent2FaByProviderNameData; + res: { + /** + * OK + */ + 200: NoopSetupTwoFactorModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/current/avatar': { + post: { + req: PostUserCurrentAvatarData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/user/current/change-password': { + post: { + req: PostUserCurrentChangePasswordData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/user/current/configuration': { + get: { + res: { + /** + * OK + */ + 200: CurrenUserConfigurationResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: unknown; + }; + }; + }; + '/umbraco/management/api/v1/user/current/login-providers': { + get: { + res: { + /** + * OK + */ + 200: Array<(UserExternalLoginProviderModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/user/current/permissions': { + get: { + req: GetUserCurrentPermissionsData; + res: { + /** + * OK + */ + 200: UserPermissionsResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/current/permissions/document': { + get: { + req: GetUserCurrentPermissionsDocumentData; + res: { + /** + * OK + */ + 200: Array<(UserPermissionsResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/current/permissions/media': { + get: { + req: GetUserCurrentPermissionsMediaData; + res: { + /** + * OK + */ + 200: UserPermissionsResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/disable': { + post: { + req: PostUserDisableData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/enable': { + post: { + req: PostUserEnableData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/invite': { + post: { + req: PostUserInviteData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/invite/create-password': { + post: { + req: PostUserInviteCreatePasswordData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/invite/resend': { + post: { + req: PostUserInviteResendData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/invite/verify': { + post: { + req: PostUserInviteVerifyData; + res: { + /** + * OK + */ + 200: VerifyInviteUserResponseModel; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/user/set-user-groups': { + post: { + req: PostUserSetUserGroupsData; + res: { + /** + * OK + */ + 200: string; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/user/unlock': { + post: { + req: PostUserUnlockData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + }; + }; + }; + '/umbraco/management/api/v1/item/webhook': { + get: { + req: GetItemWebhookData; + res: { + /** + * OK + */ + 200: Array<(WebhookItemResponseModel)>; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; + '/umbraco/management/api/v1/webhook': { + get: { + req: GetWebhookData; + res: { + /** + * OK + */ + 200: PagedWebhookResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + post: { + req: PostWebhookData; + res: { + /** + * Created + */ + 201: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/webhook/{id}': { + get: { + req: GetWebhookByIdData; + res: { + /** + * OK + */ + 200: WebhookResponseModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + delete: { + req: DeleteWebhookByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + put: { + req: PutWebhookByIdData; + res: { + /** + * OK + */ + 200: string; + /** + * Bad Request + */ + 400: ProblemDetails; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + /** + * The authenticated user do not have access to this resource + */ + 403: string; + /** + * Not Found + */ + 404: ProblemDetails; + }; + }; + }; + '/umbraco/management/api/v1/webhook/events': { + get: { + req: GetWebhookEventsData; + res: { + /** + * OK + */ + 200: PagedWebhookEventModel; + /** + * The resource is protected and requires an authentication token + */ + 401: unknown; + }; + }; + }; +}; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts index a525c153fa..c8847d1eef 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts @@ -72,7 +72,7 @@ const handlers = [ ...userGroupsHandlers, ...userHandlers, ...documentBlueprintHandlers, - serverHandlers.serverInformationHandler, + ...serverHandlers.serverInformationHandlers, ]; switch (import.meta.env.VITE_UMBRACO_INSTALL_STATUS) { diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/member/member.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/member/member.data.ts index d82092d4a2..ee2d5c0e1d 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/member/member.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/member/member.data.ts @@ -1,4 +1,8 @@ -import type { MemberResponseModel, MemberItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api'; +import { + type MemberResponseModel, + type MemberItemResponseModel, + MemberKindModel, +} from '@umbraco-cms/backoffice/external/backend-api'; export type UmbMockMemberModel = MemberResponseModel & MemberItemResponseModel; @@ -26,6 +30,7 @@ export const data: Array = [ updateDate: '2023-02-06T15:32:24.957009', }, ], + kind: MemberKindModel.DEFAULT, }, { email: 'member2@member.com', @@ -50,6 +55,7 @@ export const data: Array = [ updateDate: '2023-02-06T15:32:24.957009', }, ], + kind: MemberKindModel.DEFAULT, }, { email: 'member3@member.com', @@ -74,5 +80,6 @@ export const data: Array = [ updateDate: '2023-02-06T15:31:51.354764', }, ], + kind: MemberKindModel.DEFAULT, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/member/member.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/member/member.db.ts index 59b36d0ead..ca5fb77e98 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/member/member.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/member/member.db.ts @@ -6,10 +6,11 @@ import { UmbMockContentCollectionManager } from '../utils/content/content-collec import type { UmbMockMemberModel } from './member.data.js'; import { data } from './member.data.js'; import { UmbId } from '@umbraco-cms/backoffice/id'; -import type { - CreateMemberRequestModel, - MemberItemResponseModel, - MemberResponseModel, +import { + MemberKindModel, + type CreateMemberRequestModel, + type MemberItemResponseModel, + type MemberResponseModel, } from '@umbraco-cms/backoffice/external/backend-api'; class UmbMemberMockDB extends UmbEntityMockDbBase { @@ -39,6 +40,7 @@ const createDetailMockMapper = (request: CreateMemberRequestModel): UmbMockMembe lastLockoutDate: null, lastLoginDate: null, lastPasswordChangeDate: null, + kind: MemberKindModel.DEFAULT, memberType: { id: memberType.id, icon: memberType.icon, @@ -66,6 +68,7 @@ const detailResponseMapper = (item: UmbMockMemberModel): MemberResponseModel => isApproved: item.isApproved, isLockedOut: item.isLockedOut, isTwoFactorEnabled: item.isTwoFactorEnabled, + kind: item.kind, lastLockoutDate: item.lastLockoutDate, lastLoginDate: item.lastLoginDate, lastPasswordChangeDate: item.lastPasswordChangeDate, @@ -79,6 +82,7 @@ const detailResponseMapper = (item: UmbMockMemberModel): MemberResponseModel => const itemResponseMapper = (item: UmbMockMemberModel): MemberItemResponseModel => { return { id: item.id, + kind: item.kind, memberType: item.memberType, variants: item.variants, }; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/user/user.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/user/user.data.ts index a1657a2531..2043e9d216 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/user/user.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/user/user.data.ts @@ -3,115 +3,120 @@ import type { UserResponseModel, UserTwoFactorProviderModel, } from '@umbraco-cms/backoffice/external/backend-api'; -import { UserStateModel } from '@umbraco-cms/backoffice/external/backend-api'; +import { UserKindModel, UserStateModel } from '@umbraco-cms/backoffice/external/backend-api'; export type UmbMockUserModel = UserResponseModel & UserItemResponseModel; export const data: Array = [ { - id: 'bca6c733-a63d-4353-a271-9a8b6bcca8bd', - documentStartNodeIds: [], - hasDocumentRootAccess: true, - mediaStartNodeIds: [], - hasMediaRootAccess: true, - name: 'Umbraco User', - email: 'noreply@umbraco.com', - languageIsoCode: 'en-us', - state: UserStateModel.ACTIVE, - lastLoginDate: '9/10/2022', - lastLockoutDate: '11/23/2021', - lastPasswordChangeDate: '1/10/2022', - updateDate: '2/10/2022', + avatarUrls: [], createDate: '3/13/2022', + documentStartNodeIds: [], + email: 'noreply@umbraco.com', failedLoginAttempts: 946, + hasDocumentRootAccess: true, + hasMediaRootAccess: true, + id: 'bca6c733-a63d-4353-a271-9a8b6bcca8bd', + isAdmin: true, + kind: UserKindModel.DEFAULT, + languageIsoCode: 'en-us', + lastLockoutDate: '11/23/2021', + lastLoginDate: '9/10/2022', + lastPasswordChangeDate: '1/10/2022', + mediaStartNodeIds: [], + name: 'Umbraco User', + state: UserStateModel.ACTIVE, + updateDate: '2/10/2022', userGroupIds: [{ id: 'user-group-administrators-id' }, { id: 'user-group-editors-id' }], userName: '', - avatarUrls: [], - isAdmin: true, }, { - id: '82e11d3d-b91d-43c9-9071-34d28e62e81d', - documentStartNodeIds: [{ id: 'simple-document-id' }], - hasDocumentRootAccess: true, - mediaStartNodeIds: [{ id: 'f2f81a40-c989-4b6b-84e2-057cecd3adc1' }], - hasMediaRootAccess: true, - name: 'Amelie Walker', - email: 'awalker1@domain.com', - languageIsoCode: 'da-dk', - state: UserStateModel.INACTIVE, - lastLoginDate: '2023-10-12T18:30:32.879Z', - lastLockoutDate: null, - lastPasswordChangeDate: '2023-10-12T18:30:32.879Z', - updateDate: '2023-10-12T18:30:32.879Z', + avatarUrls: [], createDate: '2023-10-12T18:30:32.879Z', + documentStartNodeIds: [{ id: 'simple-document-id' }], + email: 'awalker1@domain.com', failedLoginAttempts: 0, + hasDocumentRootAccess: true, + hasMediaRootAccess: true, + id: '82e11d3d-b91d-43c9-9071-34d28e62e81d', + isAdmin: true, + kind: UserKindModel.DEFAULT, + languageIsoCode: 'da-dk', + lastLockoutDate: null, + lastLoginDate: '2023-10-12T18:30:32.879Z', + lastPasswordChangeDate: '2023-10-12T18:30:32.879Z', + mediaStartNodeIds: [{ id: 'f2f81a40-c989-4b6b-84e2-057cecd3adc1' }], + name: 'Amelie Walker', + state: UserStateModel.INACTIVE, + updateDate: '2023-10-12T18:30:32.879Z', userGroupIds: [{ id: 'user-group-administrators-id' }], userName: '', - avatarUrls: [], - isAdmin: true, }, { - id: 'aa1d83a9-bc7f-47d2-b288-58d8a31f5017', + avatarUrls: [], + createDate: '2023-10-12T18:30:32.879Z', documentStartNodeIds: [], - mediaStartNodeIds: [], - hasDocumentRootAccess: true, - hasMediaRootAccess: true, - name: 'Oliver Kim', email: 'okim1@domain.com', + failedLoginAttempts: 0, + hasDocumentRootAccess: true, + hasMediaRootAccess: true, + id: 'aa1d83a9-bc7f-47d2-b288-58d8a31f5017', + isAdmin: false, + kind: UserKindModel.DEFAULT, languageIsoCode: 'da-dk', - state: UserStateModel.ACTIVE, - lastLoginDate: '2023-10-12T18:30:32.879Z', lastLockoutDate: null, + lastLoginDate: '2023-10-12T18:30:32.879Z', lastPasswordChangeDate: '2023-10-12T18:30:32.879Z', + mediaStartNodeIds: [], + name: 'Oliver Kim', + state: UserStateModel.ACTIVE, updateDate: '2023-10-12T18:30:32.879Z', - createDate: '2023-10-12T18:30:32.879Z', - failedLoginAttempts: 0, userGroupIds: [{ id: 'user-group-editors-id' }], userName: '', - avatarUrls: [], - isAdmin: false, }, { - id: 'ff2f4a50-d3d4-4bc4-869d-c7948c160e54', + avatarUrls: [], + createDate: '2023-10-12T18:30:32.879Z', documentStartNodeIds: [], - mediaStartNodeIds: [], - hasDocumentRootAccess: true, - hasMediaRootAccess: true, - name: 'Eliana Nieves', email: 'enieves1@domain.com', - languageIsoCode: 'en-us', - state: UserStateModel.INVITED, - lastLoginDate: '2023-10-12T18:30:32.879Z', - lastLockoutDate: null, - lastPasswordChangeDate: null, - updateDate: '2023-10-12T18:30:32.879Z', - createDate: '2023-10-12T18:30:32.879Z', failedLoginAttempts: 0, - userGroupIds: [{ id: 'user-group-editors-id' }], - userName: '', - avatarUrls: [], - isAdmin: false, - }, - { - id: 'c290c6d9-9f12-4838-8567-621b52a178de', - documentStartNodeIds: [], - mediaStartNodeIds: [], hasDocumentRootAccess: true, hasMediaRootAccess: true, - name: 'Jasmine Patel', - email: 'jpatel1@domain.com', + id: 'ff2f4a50-d3d4-4bc4-869d-c7948c160e54', + isAdmin: false, + kind: UserKindModel.DEFAULT, languageIsoCode: 'en-us', - state: UserStateModel.LOCKED_OUT, + lastLockoutDate: null, lastLoginDate: '2023-10-12T18:30:32.879Z', - lastLockoutDate: '2023-10-12T18:30:32.879Z', lastPasswordChangeDate: null, + mediaStartNodeIds: [], + name: 'Eliana Nieves', + state: UserStateModel.INVITED, updateDate: '2023-10-12T18:30:32.879Z', + userGroupIds: [{ id: 'user-group-editors-id' }], + userName: '', + }, + { + avatarUrls: [], createDate: '2023-10-12T18:30:32.879Z', + documentStartNodeIds: [], + email: 'jpatel1@domain.com', failedLoginAttempts: 25, + hasDocumentRootAccess: true, + hasMediaRootAccess: true, + id: 'c290c6d9-9f12-4838-8567-621b52a178de', + isAdmin: false, + kind: UserKindModel.DEFAULT, + languageIsoCode: 'en-us', + lastLockoutDate: '2023-10-12T18:30:32.879Z', + lastLoginDate: '2023-10-12T18:30:32.879Z', + lastPasswordChangeDate: null, + mediaStartNodeIds: [], + name: 'Jasmine Patel', + state: UserStateModel.LOCKED_OUT, + updateDate: '2023-10-12T18:30:32.879Z', userGroupIds: [{ id: 'user-group-editors-id' }, { id: 'user-group-sensitive-data-id' }], userName: '', - avatarUrls: [], - isAdmin: false, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/user/user.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/user/user.db.ts index 414f584edf..2416aeb899 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/user/user.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/user/user.db.ts @@ -195,9 +195,10 @@ class UmbUserMockDB extends UmbEntityMockDbBase { const itemMapper = (item: UmbMockUserModel): UserItemResponseModel => { return { - id: item.id, - name: item.name, avatarUrls: item.avatarUrls, + id: item.id, + kind: item.kind, + name: item.name, }; }; @@ -222,30 +223,32 @@ const createMockMapper = (item: CreateUserRequestModel): UmbMockUserModel => { lastLockoutDate: null, lastPasswordChangeDate: null, isAdmin: item.userGroupIds.map((reference) => reference.id).includes(umbUserGroupMockDb.getAll()[0].id), + kind: item.kind, }; }; const detailResponseMapper = (item: UmbMockUserModel): UserResponseModel => { return { - email: item.email, - userName: item.userName, - name: item.name, - userGroupIds: item.userGroupIds, - id: item.id, - languageIsoCode: item.languageIsoCode, + avatarUrls: item.avatarUrls, + createDate: item.createDate, documentStartNodeIds: item.documentStartNodeIds, - mediaStartNodeIds: item.mediaStartNodeIds, + email: item.email, + failedLoginAttempts: item.failedLoginAttempts, hasDocumentRootAccess: item.hasDocumentRootAccess, hasMediaRootAccess: item.hasMediaRootAccess, - avatarUrls: item.avatarUrls, - state: item.state, - failedLoginAttempts: item.failedLoginAttempts, - createDate: item.createDate, - updateDate: item.updateDate, - lastLoginDate: item.lastLoginDate, - lastLockoutDate: item.lastLockoutDate, - lastPasswordChangeDate: item.lastPasswordChangeDate, + id: item.id, isAdmin: item.isAdmin, + kind: item.kind, + languageIsoCode: item.languageIsoCode, + lastLockoutDate: item.lastLockoutDate, + lastLoginDate: item.lastLoginDate, + lastPasswordChangeDate: item.lastPasswordChangeDate, + mediaStartNodeIds: item.mediaStartNodeIds, + name: item.name, + state: item.state, + updateDate: item.updateDate, + userGroupIds: item.userGroupIds, + userName: item.userName, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/e2e-handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/e2e-handlers.ts index ab07ff2cc9..d63d6112b5 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/e2e-handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/e2e-handlers.ts @@ -18,7 +18,7 @@ import { handlers as configHandlers } from './handlers/config.handlers.js'; export const handlers = [ serverHandlers.serverRunningHandler, - serverHandlers.serverInformationHandler, + ...serverHandlers.serverInformationHandlers, ...manifestsHandlers.manifestEmptyHandlers, ...installHandlers, ...upgradeHandlers, diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/server.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/server.handlers.ts index 2be9975a71..6d4d62c268 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/server.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/server.handlers.ts @@ -1,9 +1,11 @@ const { rest } = window.MockServiceWorker; -import type { - ServerStatusResponseModel, - ServerInformationResponseModel, +import { + type ServerStatusResponseModel, + type ServerInformationResponseModel, + type ServerTroubleshootingResponseModel, + RuntimeLevelModel, + RuntimeModeModel, } from '@umbraco-cms/backoffice/external/backend-api'; -import { RuntimeLevelModel, RuntimeModeModel } from '@umbraco-cms/backoffice/external/backend-api'; import { umbracoPath } from '@umbraco-cms/backoffice/utils'; export const serverRunningHandler = rest.get(umbracoPath('/server/status'), (_req, res, ctx) => { @@ -36,15 +38,30 @@ export const serverMustUpgradeHandler = rest.get(umbracoPath('/server/status'), ); }); -export const serverInformationHandler = rest.get(umbracoPath('/server/information'), (_req, res, ctx) => { - return res( - // Respond with a 200 status code - ctx.status(200), - ctx.json({ - version: '14.0.0-preview004', - assemblyVersion: '14.0.0-preview004', - baseUtcOffset: '01:00:00', - runtimeMode: RuntimeModeModel.BACKOFFICE_DEVELOPMENT, - }), - ); -}); +export const serverInformationHandlers = [ + rest.get(umbracoPath('/server/information'), (_req, res, ctx) => { + return res( + // Respond with a 200 status code + ctx.status(200), + ctx.json({ + version: '14.0.0-preview004', + assemblyVersion: '14.0.0-preview004', + baseUtcOffset: '01:00:00', + runtimeMode: RuntimeModeModel.BACKOFFICE_DEVELOPMENT, + }), + ); + }), + rest.get(umbracoPath('/server/troubleshooting'), (_req, res, ctx) => { + return res( + // Respond with a 200 status code + ctx.status(200), + ctx.json({ + items: [ + { name: 'Umbraco base url', data: location.origin }, + { name: 'Mocked server', data: 'true' }, + { name: 'Umbraco version', data: '14.0.0-preview004' }, + ], + }), + ); + }), +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-inline-property-dataset.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-inline-property-dataset.context.ts index e8fdc7c13e..a320f9914a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-inline-property-dataset.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-inline-property-dataset.context.ts @@ -11,8 +11,8 @@ import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; export class UmbBlockGridInlinePropertyDatasetContext extends UmbControllerBase implements UmbPropertyDatasetContext { #entryContext: UmbBlockGridEntryContext; - #currentVariantCultureIsReadOnly = new UmbBooleanState(false); - public currentVariantCultureIsReadOnly = this.#currentVariantCultureIsReadOnly.asObservable(); + #readOnly = new UmbBooleanState(false); + public readOnly = this.#readOnly.asObservable(); // default data: @@ -67,7 +67,7 @@ export class UmbBlockGridInlinePropertyDatasetContext extends UmbControllerBase * @returns {*} {boolean} * @memberof UmbBlockGridInlinePropertyDatasetContext */ - getCurrentVariantCultureIsReadOnly(): boolean { - return this.#currentVariantCultureIsReadOnly.getValue(); + getReadOnly(): boolean { + return this.#readOnly.getValue(); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts index 66fbd90b8c..380b62b1b1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts @@ -59,14 +59,19 @@ export default class UmbTinyMceMultiUrlPickerPlugin extends UmbTinyMcePluginBase } #createBlock() { + if (!this.#entriesContext) { + console.error('[Block Picker] No entries context available.'); + return; + } + // TODO: Missing solution to skip catalogue if only one type available. [NL] let createPath: string | undefined = undefined; if (this._blocks?.length === 1) { const elementKey = this._blocks[0].contentElementTypeKey; - createPath = this.#entriesContext?.getPathForCreateBlock() + 'modal/umb-modal-workspace/create/' + elementKey; + createPath = this.#entriesContext.getPathForCreateBlock() + 'modal/umb-modal-workspace/create/' + elementKey; } else { - createPath = this.#entriesContext?.getPathForCreateBlock(); + createPath = this.#entriesContext.getPathForCreateBlock(); } if (createPath) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-property-dataset.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-property-dataset.context.ts index 4db36b5497..c6e72bcf0c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-property-dataset.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-property-dataset.context.ts @@ -12,8 +12,8 @@ import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; export class UmbBlockElementPropertyDatasetContext extends UmbControllerBase implements UmbPropertyDatasetContext { #elementManager: UmbBlockElementManager; - #currentVariantCultureIsReadOnly = new UmbBooleanState(false); - public currentVariantCultureIsReadOnly = this.#currentVariantCultureIsReadOnly.asObservable(); + #readOnly = new UmbBooleanState(false); + public readOnly = this.#readOnly.asObservable(); // default data: @@ -41,7 +41,7 @@ export class UmbBlockElementPropertyDatasetContext extends UmbControllerBase imp this.observe( workspace.readOnlyState.isOn, (value) => { - this.#currentVariantCultureIsReadOnly.setValue(value); + this.#readOnly.setValue(value); }, 'umbObserveReadOnlyStates', ); @@ -80,7 +80,7 @@ export class UmbBlockElementPropertyDatasetContext extends UmbControllerBase imp * @returns {*} {boolean} * @memberof UmbBlockGridInlinePropertyDatasetContext */ - getCurrentVariantCultureIsReadOnly(): boolean { - return this.#currentVariantCultureIsReadOnly.getValue(); + getReadOnly(): boolean { + return this.#readOnly.getValue(); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts index 9936840c15..651f524f46 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts @@ -159,6 +159,7 @@ export class UmbCollectionViewBundleElement extends UmbLitElement { :host { --uui-button-content-align: left; --uui-menu-item-flat-structure: 1; + display: contents; } .filter-dropdown { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/code-block/code-block.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/code-block/code-block.element.ts index 5bfa206456..b285a9d1d3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/code-block/code-block.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/code-block/code-block.element.ts @@ -5,7 +5,7 @@ import { css, customElement, html, property, state, when, LitElement } from '@um /** * A simple styled box for showing code-based error messages or blocks od code. - * @slot the full message + * @slot - the default slot where the full message resides */ @customElement('umb-code-block') export class UmbCodeBlockElement extends LitElement { @@ -44,7 +44,7 @@ export class UmbCodeBlockElement extends LitElement { ${when( this.copy, () => html` - + ${when( this._copyState === 'idle', () => html` Copy`, @@ -58,7 +58,7 @@ export class UmbCodeBlockElement extends LitElement { `; } - static override styles = [ + static override readonly styles = [ UmbTextStyles, css` :host { @@ -86,7 +86,7 @@ export class UmbCodeBlockElement extends LitElement { pre, code { word-wrap: normal; - white-space: pre; + white-space: pre-line; } #header { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/property-dataset-context/content-property-dataset.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/property-dataset-context/content-property-dataset.context.ts index ed41ea70d2..bbd9cb460d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/content/property-dataset-context/content-property-dataset.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/property-dataset-context/content-property-dataset.context.ts @@ -30,8 +30,8 @@ export class UmbContentPropertyDatasetContext< culture = this.#currentVariant.asObservablePart((x) => x?.culture); segment = this.#currentVariant.asObservablePart((x) => x?.segment); - #currentVariantCultureIsReadOnly = new UmbBooleanState(false); - public currentVariantCultureIsReadOnly = this.#currentVariantCultureIsReadOnly.asObservable(); + #readOnly = new UmbBooleanState(false); + public readOnly = this.#readOnly.asObservable(); getEntityType(): string { return this.#workspace.getEntityType(); @@ -49,8 +49,8 @@ export class UmbContentPropertyDatasetContext< return this.#workspace.getVariant(this.#variantId); } - getCurrentVariantCultureIsReadOnly() { - return this.#currentVariantCultureIsReadOnly.getValue(); + getReadOnly() { + return this.#readOnly.getValue(); } constructor( @@ -75,11 +75,8 @@ export class UmbContentPropertyDatasetContext< this.observe( this.#workspace.readOnlyState.states, (states) => { - const isReadOnly = states.some( - (state) => state.unique.startsWith('UMB_CULTURE_') && state.variantId.equal(this.#variantId), - ); - - this.#currentVariantCultureIsReadOnly.setValue(isReadOnly); + const isReadOnly = states.some((state) => state.variantId.equal(this.#variantId)); + this.#readOnly.setValue(isReadOnly); }, 'umbObserveReadOnlyStates', ); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts index adc53de04c..bcec4417ea 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts @@ -46,6 +46,7 @@ import type { ManifestTinyMcePlugin } from './tinymce-plugin.model.js'; import type { ManifestTree } from './tree.model.js'; import type { ManifestTreeItem } from './tree-item.model.js'; import type { ManifestUfmComponent } from './ufm-component.model.js'; +import type { ManifestUfmFilter } from './ufm-filter.model.js'; import type { ManifestUserProfileApp } from './user-profile-app.model.js'; import type { ManifestWorkspace, ManifestWorkspaceRoutableKind } from './workspace.model.js'; import type { ManifestWorkspaceAction, ManifestWorkspaceActionDefaultKind } from './workspace-action.model.js'; @@ -117,6 +118,7 @@ export type * from './tinymce-plugin.model.js'; export type * from './tree-item.model.js'; export type * from './tree.model.js'; export type * from './ufm-component.model.js'; +export type * from './ufm-filter.model.js'; export type * from './user-granular-permission.model.js'; export type * from './user-profile-app.model.js'; export type * from './workspace-action-menu-item.model.js'; @@ -210,6 +212,7 @@ export type ManifestTypes = | ManifestTreeItem | ManifestTreeStore | ManifestUfmComponent + | ManifestUfmFilter | ManifestUserProfileApp | ManifestWorkspaceActionMenuItem | ManifestWorkspaceActions diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/ufm-filter.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/ufm-filter.model.ts new file mode 100644 index 0000000000..8144601021 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/ufm-filter.model.ts @@ -0,0 +1,14 @@ +import type { ManifestApi, UmbApi } from '@umbraco-cms/backoffice/extension-api'; + +export interface UmbUfmFilterApi extends UmbApi { + filter(...args: Array): string | undefined | null; +} + +export interface MetaUfmFilter { + alias: string; +} + +export interface ManifestUfmFilter extends ManifestApi { + type: 'ufmFilter'; + meta: MetaUfmFilter; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-dictionary.json b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-dictionary.json index 4288bb4b7d..63d7dcceae 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-dictionary.json +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-dictionary.json @@ -2308,6 +2308,10 @@ "name": "icon-unlocked", "file": "lock-open.svg" }, + { + "name": "icon-unplug", + "file": "unplug.svg" + }, { "name": "icon-untitled", "file": "box.svg", diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons.ts index 5b8e14cb97..1300eed95e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons.ts @@ -1967,6 +1967,10 @@ name: "icon-unlocked", path: () => import("./icons/icon-unlocked.js"), },{ +name: "icon-unplug", + +path: () => import("./icons/icon-unplug.js"), +},{ name: "icon-untitled", legacy: true, path: () => import("./icons/icon-untitled.js"), diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-unplug.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-unplug.ts new file mode 100644 index 0000000000..be9a5e7702 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-unplug.ts @@ -0,0 +1,19 @@ +export default ` + + + + + + + + +`; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property/property-dataset/property-dataset-base-context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property/property-dataset/property-dataset-base-context.ts index b3309398d8..b48d71fd3d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property/property-dataset/property-dataset-base-context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property/property-dataset/property-dataset-base-context.ts @@ -24,8 +24,8 @@ export class UmbPropertyDatasetContextBase private _entityType!: string; private _unique!: string; - #currentVariantCultureIsReadOnly = new UmbBooleanState(false); - public currentVariantCultureIsReadOnly = this.#currentVariantCultureIsReadOnly.asObservable(); + #readOnly = new UmbBooleanState(false); + public readOnly = this.#readOnly.asObservable(); getEntityType() { return this._entityType; @@ -85,7 +85,7 @@ export class UmbPropertyDatasetContextBase * @return {*} {boolean} * @memberof UmbBlockGridInlinePropertyDatasetContext */ - getCurrentVariantCultureIsReadOnly(): boolean { - return this.#currentVariantCultureIsReadOnly.getValue(); + getReadOnly(): boolean { + return this.#readOnly.getValue(); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property/property-dataset/property-dataset-context.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property/property-dataset/property-dataset-context.interface.ts index eea0074e45..c33b0896ed 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property/property-dataset/property-dataset-context.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property/property-dataset/property-dataset-context.interface.ts @@ -25,8 +25,8 @@ export interface UmbPropertyDatasetContext extends UmbContext { getName(): string | undefined; readonly name: Observable; - getCurrentVariantCultureIsReadOnly(): boolean; - readonly currentVariantCultureIsReadOnly: Observable; + getReadOnly(): boolean; + readonly readOnly: Observable; // Should it be possible to get the properties as a list of property aliases? //readonly properties: Observable>; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property/property/property.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property/property/property.context.ts index 7ab44fcb52..7454dad43e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property/property/property.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property/property/property.context.ts @@ -128,7 +128,7 @@ export class UmbPropertyContext extends UmbContextBase { + this.observe(this.#datasetContext.readOnly, (value) => { this.#isReadOnly.setValue(value); }); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.ts index d5d9766a6b..bd59b6085b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.ts @@ -186,13 +186,7 @@ export class UmbWorkspaceSplitViewVariantSelectorElement extends UmbLitElement { #setReadOnlyCultures() { this._readOnlyCultures = this._variantOptions - .filter((variant) => { - const isReadOnly = this._readOnlyStates.some((state) => { - return state.unique.startsWith('UMB_CULTURE_') && state.variantId.compare(variant); - }); - - return isReadOnly; - }) + .filter((variant) => this._readOnlyStates.some((state) => state.variantId.compare(variant))) .map((variant) => variant.culture) .filter((item) => item !== null) as string[]; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-property-dataset/invariant-workspace-property-dataset-context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-property-dataset/invariant-workspace-property-dataset-context.ts index 224bab9cef..8039e78632 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-property-dataset/invariant-workspace-property-dataset-context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-property-dataset/invariant-workspace-property-dataset-context.ts @@ -15,8 +15,8 @@ export class UmbInvariantWorkspacePropertyDatasetContext< extends UmbContextBase implements UmbPropertyDatasetContext, UmbNameablePropertyDatasetContext { - #currentVariantCultureIsReadOnly = new UmbBooleanState(false); - public currentVariantCultureIsReadOnly = this.#currentVariantCultureIsReadOnly.asObservable(); + #readOnly = new UmbBooleanState(false); + public readOnly = this.#readOnly.asObservable(); #workspace: WorkspaceType; @@ -66,7 +66,7 @@ export class UmbInvariantWorkspacePropertyDatasetContext< return this.#workspace.setPropertyValue(propertyAlias, value); } - getCurrentVariantCultureIsReadOnly() { - return this.#currentVariantCultureIsReadOnly.getValue(); + getReadOnly() { + return this.#readOnly.getValue(); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-history.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-history.element.ts index a7745267f2..14802bbeca 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-history.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/views/info/document-workspace-view-info-history.element.ts @@ -3,7 +3,7 @@ import type { UmbDocumentAuditLogModel } from '../../../audit-log/types.js'; import { UmbDocumentAuditLogRepository } from '../../../audit-log/index.js'; import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../../document-workspace.context-token.js'; import { TimeOptions, getDocumentHistoryTagStyleAndText } from './utils.js'; -import { css, html, customElement, state, nothing, repeat, ifDefined } from '@umbraco-cms/backoffice/external/lit'; +import { css, html, customElement, state, nothing, repeat } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; @@ -120,13 +120,15 @@ export class UmbDocumentWorkspaceViewInfoHistoryElement extends UmbLitElement { (item) => { const { text, style } = getDocumentHistoryTagStyleAndText(item.logType); const user = this.#userMap.get(item.user.unique); - const userName = user?.name ?? 'Unknown'; - const avatarUrl = user && Array.isArray(user.avatarUrls) ? user.avatarUrls[1] : undefined; return html` - + diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/permissions/language-access.workspace-context.ts b/src/Umbraco.Web.UI.Client/src/packages/language/permissions/language-access.workspace-context.ts index 6264e78f50..656d0377ce 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/permissions/language-access.workspace-context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/permissions/language-access.workspace-context.ts @@ -56,7 +56,7 @@ export class UmbLanguageAccessWorkspaceContext extends UmbContextBase new UmbVariantId(variant.culture, variant.segment)) || []; // create a list of states for the disallowed languages - const identifier = 'UMB_CULTURE_'; + const identifier = 'UMB_LANGUAGE_PERMISSION_'; const readOnlyStates = variantIds.map((variantId) => { return { unique: identifier + variantId.culture, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/views/info/media-workspace-view-info-history.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/views/info/media-workspace-view-info-history.element.ts index f8b464808d..33ac9a609f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/views/info/media-workspace-view-info-history.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/views/info/media-workspace-view-info-history.element.ts @@ -2,7 +2,7 @@ import type { UmbMediaAuditLogModel } from '../../../audit-log/types.js'; import { UmbMediaAuditLogRepository } from '../../../audit-log/index.js'; import { UMB_MEDIA_WORKSPACE_CONTEXT } from '../../media-workspace.context-token.js'; import { TimeOptions, getMediaHistoryTagStyleAndText } from './utils.js'; -import { css, html, customElement, state, nothing, repeat, ifDefined } from '@umbraco-cms/backoffice/external/lit'; +import { css, html, customElement, state, nothing, repeat } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbPaginationManager } from '@umbraco-cms/backoffice/utils'; @@ -102,13 +102,15 @@ export class UmbMediaWorkspaceViewInfoHistoryElement extends UmbLitElement { (item) => { const { text, style } = getMediaHistoryTagStyleAndText(item.logType); const user = this.#userMap.get(item.user.unique); - const userName = user?.name ?? 'Unknown'; - const avatarUrl = user && Array.isArray(user.avatarUrls) ? user.avatarUrls[1] : undefined; return html` - + diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/repository/member-collection.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/repository/member-collection.server.data-source.ts index 3bfb088260..42376a93c3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/repository/member-collection.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/repository/member-collection.server.data-source.ts @@ -50,6 +50,7 @@ export class UmbMemberCollectionServerDataSource implements UmbCollectionDataSou email: item.email, variants: item.variants as UmbVariantModel[], unique: item.id, + kind: item.kind, lastLoginDate: item.lastLoginDate || null, lastLockoutDate: item.lastLockoutDate || null, lastPasswordChangeDate: item.lastPasswordChangeDate || null, diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/types.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/types.ts index bb3b83cc3b..76018d2a04 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/types.ts @@ -1,4 +1,4 @@ -import type { UmbMemberEntityType } from '../entity.js'; +import type { UmbMemberDetailModel } from '../types.js'; export interface UmbMemberCollectionFilterModel { skip?: number; @@ -7,8 +7,5 @@ export interface UmbMemberCollectionFilterModel { filter?: string; } -export interface UmbMemberCollectionModel { - unique: string; - entityType: UmbMemberEntityType; - variants: Array; -} +// eslint-disable-next-line @typescript-eslint/no-empty-object-type +export interface UmbMemberCollectionModel extends UmbMemberDetailModel {} diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/views/table/member-table-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/views/table/member-table-collection-view.element.ts index ea755050bc..ed4398313a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/views/table/member-table-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/views/table/member-table-collection-view.element.ts @@ -1,10 +1,12 @@ import type { UmbMemberCollectionModel } from '../../types.js'; import { UMB_MEMBER_COLLECTION_CONTEXT } from '../../member-collection.context-token.js'; import type { UmbMemberCollectionContext } from '../../member-collection.context.js'; +import { UmbMemberKind } from '../../../utils/index.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { UmbTableColumn, UmbTableConfig, UmbTableItem } from '@umbraco-cms/backoffice/components'; import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbMemberTypeItemRepository } from '@umbraco-cms/backoffice/member-type'; @customElement('umb-member-table-collection-view') export class UmbMemberTableCollectionViewElement extends UmbLitElement { @@ -19,12 +21,29 @@ export class UmbMemberTableCollectionViewElement extends UmbLitElement { name: this.localize.term('general_name'), alias: 'memberName', }, + { + name: this.localize.term('general_username'), + alias: 'memberUsername', + }, + { + name: this.localize.term('general_email'), + alias: 'memberEmail', + }, + { + name: this.localize.term('content_membertype'), + alias: 'memberType', + }, + { + name: this.localize.term('member_kind'), + alias: 'memberKind', + }, ]; @state() private _tableItems: Array = []; #collectionContext?: UmbMemberCollectionContext; + #memberTypeItemRepository = new UmbMemberTypeItemRepository(this); constructor() { super(); @@ -40,19 +59,44 @@ export class UmbMemberTableCollectionViewElement extends UmbLitElement { this.observe(this.#collectionContext.items, (items) => this.#createTableItems(items), 'umbCollectionItemsObserver'); } - #createTableItems(members: Array) { + async #createTableItems(members: Array) { + const memberTypeUniques = members.map((member) => member.memberType.unique); + const { data: memberTypes } = await this.#memberTypeItemRepository.requestItems(memberTypeUniques); + this._tableItems = members.map((member) => { // TODO: get correct variant name const name = member.variants[0].name; + const kind = + member.kind === UmbMemberKind.API + ? this.localize.term('member_memberKindApi') + : this.localize.term('member_memberKindDefault'); + + const memberType = memberTypes?.find((type) => type.unique === member.memberType.unique); return { id: member.unique, - icon: 'icon-user', + icon: memberType?.icon, data: [ { columnAlias: 'memberName', value: html`${name}`, }, + { + columnAlias: 'memberUsername', + value: member.username, + }, + { + columnAlias: 'memberEmail', + value: member.email, + }, + { + columnAlias: 'memberType', + value: memberType?.name, + }, + { + columnAlias: 'memberKind', + value: kind, + }, ], }; }); diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/detail/member-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/detail/member-detail.server.data-source.ts index 37303524ae..169e8e65fd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/detail/member-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/detail/member-detail.server.data-source.ts @@ -6,6 +6,7 @@ import type { CreateMemberRequestModel, UpdateMemberRequestModel } from '@umbrac import { MemberService } from '@umbraco-cms/backoffice/external/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; +import { UmbMemberKind } from '../../utils/index.js'; /** * A data source for the Member that fetches data from the server @@ -42,6 +43,7 @@ export class UmbMemberServerDataSource implements UmbDetailDataSource { entityType: UMB_MEMBER_ENTITY_TYPE, unique: item.id, name: item.variants[0].name || '', + kind: item.kind, memberType: { unique: item.memberType.id, icon: item.memberType.icon, diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/types.ts index 9b58f77ef6..660b7d84fc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/types.ts @@ -1,4 +1,5 @@ import type { UmbMemberEntityType } from '../../entity.js'; +import type { UmbMemberKindType } from '../../utils/index.js'; import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; export interface UmbMemberItemModel { @@ -11,6 +12,7 @@ export interface UmbMemberItemModel { collection: UmbReferenceByUnique | null; }; variants: Array; + kind: UmbMemberKindType; } export interface UmbMemberVariantItemModel { diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/search/member-search.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/search/member-search.server.data-source.ts index 4c8d4acdaf..febcdd024c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/search/member-search.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/search/member-search.server.data-source.ts @@ -43,6 +43,7 @@ export class UmbMemberSearchServerDataSource implements UmbSearchDataSource data?.variants[0].createDate); readonly updateDate = this.#currentData.asObservablePart((data) => data?.variants[0].updateDate); readonly contentTypeUnique = this.#currentData.asObservablePart((data) => data?.memberType.unique); + readonly kind = this.#currentData.asObservablePart((data) => data?.kind); readonly structure = new UmbContentTypeStructureManager(this, new UmbMemberTypeDetailRepository(this)); readonly varies = this.structure.ownerContentTypePart((x) => diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/views/member/member-workspace-view-member-info.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/views/member/member-workspace-view-member-info.element.ts index 2a8b77ddb3..4c3d0414c1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/views/member/member-workspace-view-member-info.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/views/member/member-workspace-view-member-info.element.ts @@ -1,5 +1,6 @@ // import { UMB_COMPOSITION_PICKER_MODAL, type UmbCompositionPickerModalData } from '../../../modals/index.js'; import { UMB_MEMBER_WORKSPACE_CONTEXT } from '../../member-workspace.context-token.js'; +import { UmbMemberKind, type UmbMemberKindType } from '../../../utils/index.js'; import { TimeFormatOptions } from './utils.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; @@ -13,8 +14,10 @@ import { UmbMemberTypeItemRepository } from '@umbraco-cms/backoffice/member-type export class UmbMemberWorkspaceViewMemberInfoElement extends UmbLitElement implements UmbWorkspaceViewElement { @state() private _memberTypeUnique = ''; + @state() private _memberTypeName = ''; + @state() private _memberTypeIcon = ''; @@ -30,6 +33,9 @@ export class UmbMemberWorkspaceViewMemberInfoElement extends UmbLitElement imple @state() private _unique = ''; + @state() + private _memberKind?: UmbMemberKindType; + #workspaceContext?: typeof UMB_MEMBER_WORKSPACE_CONTEXT.TYPE; #memberTypeItemRepository: UmbMemberTypeItemRepository = new UmbMemberTypeItemRepository(this); @@ -51,6 +57,7 @@ export class UmbMemberWorkspaceViewMemberInfoElement extends UmbLitElement imple this.observe(this.#workspaceContext.createDate, (date) => (this._createDate = this.#setDateFormat(date))); this.observe(this.#workspaceContext.updateDate, (date) => (this._updateDate = this.#setDateFormat(date))); this.observe(this.#workspaceContext.unique, (unique) => (this._unique = unique || '')); + this.observe(this.#workspaceContext.kind, (kind) => (this._memberKind = kind)); const memberType = (await this.#memberTypeItemRepository.requestItems([this._memberTypeUnique])).data?.[0]; if (!memberType) return; @@ -70,41 +77,45 @@ export class UmbMemberWorkspaceViewMemberInfoElement extends UmbLitElement imple #renderGeneralSection() { return html` -
- Created - ${this._createDate} -
-
- Last edited - ${this._updateDate} -
-
- Member Type - - - -
-
- Id - ${this._unique} -
+ +
+

Created

+ ${this._createDate} +
+
+

Last edited

+ ${this._updateDate} +
+
+

Member Type

+ + + +
+
+

+ ${this._memberKind === UmbMemberKind.API + ? this.localize.term('member_memberKindApi') + : this.localize.term('member_memberKindDefault')} +
+
+

Id

+ ${this._unique} +
+
`; } static override styles = [ UmbTextStyles, css` - .general-item { - display: flex; - flex-direction: column; - gap: var(--uui-size-space-1); - } - - .general-item:not(:last-child) { - margin-bottom: var(--uui-size-space-6); + h4 { + margin: 0; } `, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/views/member/member-workspace-view-member.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/views/member/member-workspace-view-member.element.ts index bb33e453b8..8573a9b9c4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/views/member/member-workspace-view-member.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/views/member/member-workspace-view-member.element.ts @@ -208,34 +208,36 @@ export class UmbMemberWorkspaceViewMemberElement extends UmbLitElement implement return html`
-
- Failed login attempts - ${this._workspaceContext.failedPasswordAttempts} -
-
- Last lockout date - - ${this._workspaceContext.lastLockOutDate - ? this.localize.date(this._workspaceContext.lastLockOutDate, TimeFormatOptions) - : this.localize.term('general_never')} - -
-
- Last login - - ${this._workspaceContext.lastLoginDate - ? this.localize.date(this._workspaceContext.lastLoginDate, TimeFormatOptions) - : this.localize.term('general_never')} - -
-
- Password changed - - ${this._workspaceContext.lastPasswordChangeDate - ? this.localize.date(this._workspaceContext.lastPasswordChangeDate, TimeFormatOptions) - : this.localize.term('general_never')} - -
+ +
+

Failed login attempts

+ ${this._workspaceContext.failedPasswordAttempts} +
+
+

Last lockout date

+ + ${this._workspaceContext.lastLockOutDate + ? this.localize.date(this._workspaceContext.lastLockOutDate, TimeFormatOptions) + : this.localize.term('general_never')} + +
+
+

Last login

+ + ${this._workspaceContext.lastLoginDate + ? this.localize.date(this._workspaceContext.lastLoginDate, TimeFormatOptions) + : this.localize.term('general_never')} + +
+
+

Password changed

+ + ${this._workspaceContext.lastPasswordChangeDate + ? this.localize.date(this._workspaceContext.lastPasswordChangeDate, TimeFormatOptions) + : this.localize.term('general_never')} + +
+
@@ -291,14 +293,8 @@ export class UmbMemberWorkspaceViewMemberElement extends UmbLitElement implement color: var(--uui-color-danger); } - .general-item { - display: flex; - flex-direction: column; - gap: var(--uui-size-space-1); - } - - .general-item:not(:last-child) { - margin-bottom: var(--uui-size-space-6); + h4 { + margin: 0; } `, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/sysinfo/components/sysinfo.element.ts b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/components/sysinfo.element.ts new file mode 100644 index 0000000000..50295c8b3b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/components/sysinfo.element.ts @@ -0,0 +1,147 @@ +import { UmbSysinfoRepository } from '../repository/index.js'; +import { css, customElement, html, state, when } from '@umbraco-cms/backoffice/external/lit'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import type { UUIButtonState } from '@umbraco-cms/backoffice/external/uui'; + +type ServerKeyValue = { + name: string; + data: string; +}; + +@customElement('umb-sysinfo') +export class UmbSysinfoElement extends UmbModalBaseElement { + @state() + private _systemInformation = ''; + + @state() + private _loading = false; + + @state() + private _buttonState?: UUIButtonState; + + #serverKeyValues: Array = []; + #sysinfoRepository = new UmbSysinfoRepository(this); + #notificationContext?: typeof UMB_NOTIFICATION_CONTEXT.TYPE; + + constructor() { + super(); + + this.consumeContext(UMB_NOTIFICATION_CONTEXT, (context) => { + this.#notificationContext = context; + }); + + this.#populate(); + } + + async #populate() { + this._loading = true; + this.#serverKeyValues = []; + + const [serverTroubleshooting, serverInformation] = await Promise.all([ + this.#sysinfoRepository.requestTroubleShooting(), + this.#sysinfoRepository.requestServerInformation(), + ]); + + if (serverTroubleshooting) { + this.#serverKeyValues = serverTroubleshooting.items; + } + + if (serverInformation) { + this.#serverKeyValues.push({ name: 'Umbraco build version', data: serverInformation.version }); + this.#serverKeyValues.push({ name: 'Server time offset', data: serverInformation.baseUtcOffset }); + this.#serverKeyValues.push({ name: 'Runtime mode', data: serverInformation.runtimeMode }); + } + + // Browser information + this.#serverKeyValues.push({ name: 'Browser (user agent)', data: navigator.userAgent }); + this.#serverKeyValues.push({ name: 'Browser language', data: navigator.language }); + this.#serverKeyValues.push({ name: 'Browser location', data: location.href }); + + this._systemInformation = this.#renderServerKeyValues(); + this._loading = false; + } + + #renderServerKeyValues() { + return this.#serverKeyValues + .map((serverKeyValue) => { + return `${serverKeyValue.name}: ${serverKeyValue.data}`; + }) + .join('\n'); + } + + override render() { + return html` + + + ${when( + this._loading, + () => html``, + () => html` ${this._systemInformation} `, + )} + + + + + + + `; + } + + async #copyToClipboard() { + try { + this._buttonState = 'waiting'; + const text = `Umbraco system information +-------------------------------- +${this._systemInformation}`; + const textAsCode = `\`\`\`\n${text}\n\`\`\`\n`; + await navigator.clipboard.writeText(textAsCode); + + setTimeout(() => { + this.#notificationContext?.peek('positive', { + data: { + headline: 'System information', + message: this.localize.term('speechBubbles_copySuccessMessage'), + }, + }); + this._buttonState = 'success'; + }, 250); + } catch { + this._buttonState = 'failed'; + this.#notificationContext?.peek('danger', { + data: { + headline: 'System information', + message: this.localize.term('speechBubbles_cannotCopyInformation'), + }, + }); + } + } + + static override readonly styles = [ + UmbTextStyles, + css` + #code-block { + max-height: 300px; + } + `, + ]; +} + +export default UmbSysinfoElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-sysinfo': UmbSysinfoElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/sysinfo/index.ts b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/index.ts new file mode 100644 index 0000000000..736a54915b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/index.ts @@ -0,0 +1,2 @@ +export * from './modals/index.js'; +export * from './repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/sysinfo/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/manifests.ts new file mode 100644 index 0000000000..8d6d1cec1a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/manifests.ts @@ -0,0 +1,10 @@ +import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const modalManifest: ManifestModal = { + type: 'modal', + alias: 'Umb.Modal.Sysinfo', + name: 'Sysinfo Modal', + js: () => import('./components/sysinfo.element.js'), +}; + +export const manifests: Array = [modalManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/sysinfo/modals/index.ts b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/modals/index.ts new file mode 100644 index 0000000000..575d63fbd5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/modals/index.ts @@ -0,0 +1 @@ +export * from './sysinfo-modal.token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/sysinfo/modals/sysinfo-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/modals/sysinfo-modal.token.ts new file mode 100644 index 0000000000..5d54b75c3c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/modals/sysinfo-modal.token.ts @@ -0,0 +1,8 @@ +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; + +export const UMB_SYSINFO_MODAL = new UmbModalToken('Umb.Modal.Sysinfo', { + modal: { + type: 'dialog', + size: 'medium', + }, +}); diff --git a/src/Umbraco.Web.UI.Client/src/packages/sysinfo/package.json b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/package.json new file mode 100644 index 0000000000..560e33a11f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/package.json @@ -0,0 +1,8 @@ +{ + "name": "@umbraco-backoffice/sysinfo", + "private": true, + "type": "module", + "scripts": { + "build": "vite build" + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/sysinfo/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/repository/index.ts new file mode 100644 index 0000000000..f13b59d5ac --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/repository/index.ts @@ -0,0 +1 @@ +export * from './sysinfo.repository.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/sysinfo/repository/sysinfo.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/repository/sysinfo.repository.ts new file mode 100644 index 0000000000..39ea64fbe9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/repository/sysinfo.repository.ts @@ -0,0 +1,20 @@ +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; +import { ServerService } from '@umbraco-cms/backoffice/external/backend-api'; + +export class UmbSysinfoRepository extends UmbRepositoryBase { + constructor(host: UmbControllerHost) { + super(host, 'Umb.Repository.Sysinfo'); + } + + async requestTroubleShooting() { + const { data } = await tryExecuteAndNotify(this, ServerService.getServerTroubleshooting()); + return data; + } + + async requestServerInformation() { + const { data } = await tryExecuteAndNotify(this, ServerService.getServerInformation()); + return data; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/sysinfo/umbraco-package.ts b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/umbraco-package.ts new file mode 100644 index 0000000000..0e9273dec4 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/umbraco-package.ts @@ -0,0 +1,10 @@ +export const name = 'Umbraco.Core.Sysinfo'; +export const version = '0.0.1'; +export const extensions = [ + { + name: 'Sysinfo Bundle', + alias: 'Umb.Bundle.Sysinfo', + type: 'bundle', + js: () => import('./manifests.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/sysinfo/vite.config.ts b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/vite.config.ts new file mode 100644 index 0000000000..6244c942d2 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/sysinfo/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite'; +import { rmSync } from 'fs'; +import { getDefaultConfig } from '../../vite-config-base'; + +const dist = '../../../dist-cms/packages/sysinfo'; + +// delete the unbundled dist folder +rmSync(dist, { recursive: true, force: true }); + +export default defineConfig({ + ...getDefaultConfig({ dist }), +}); diff --git a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/tiny-mce/property-editor-ui-tiny-mce.element.ts b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/tiny-mce/property-editor-ui-tiny-mce.element.ts index a548388d19..d40071b228 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/tiny-mce/property-editor-ui-tiny-mce.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/tiny-mce/property-editor-ui-tiny-mce.element.ts @@ -3,15 +3,16 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; - -import '../../components/input-tiny-mce/input-tiny-mce.element.js'; import { + UmbBlockRteEntriesContext, type UmbBlockRteLayoutModel, UmbBlockRteManagerContext, type UmbBlockRteTypeModel, } from '@umbraco-cms/backoffice/block-rte'; import type { UmbBlockValueType } from '@umbraco-cms/backoffice/block'; +import '../../components/input-tiny-mce/input-tiny-mce.element.js'; + export interface UmbRichTextEditorValueType { markup: string; blocks: UmbBlockValueType; @@ -83,10 +84,16 @@ export class UmbPropertyEditorUITinyMceElement extends UmbLitElement implements private _latestMarkup = ''; // The latest value gotten from the TinyMCE editor. #managerContext = new UmbBlockRteManagerContext(this); + #entriesContext = new UmbBlockRteEntriesContext(this); constructor() { super(); + this.observe(this.#entriesContext.layoutEntries, (layouts) => { + // Update manager: + this.#managerContext.setLayouts(layouts); + }); + this.observe(this.#managerContext.layouts, (layouts) => { this._value = { ...this._value, diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/components/content-name/content-name.component.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/content-name/content-name.component.ts new file mode 100644 index 0000000000..dfcd5c6e2b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/content-name/content-name.component.ts @@ -0,0 +1,15 @@ +import type { UfmToken } from '../../plugins/marked-ufm.plugin.js'; +import { UmbUfmComponentBase } from '../ufm-component-base.js'; + +import './content-name.element.js'; + +export class UmbUfmContentNameComponent extends UmbUfmComponentBase { + render(token: UfmToken) { + if (!token.text) return; + + const attributes = super.getAttributes(token.text); + return ``; + } +} + +export { UmbUfmContentNameComponent as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/components/content-name/content-name.element.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/content-name/content-name.element.ts new file mode 100644 index 0000000000..4335c2bb28 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/content-name/content-name.element.ts @@ -0,0 +1,74 @@ +import { UmbUfmElementBase } from '../ufm-element-base.js'; +import { UMB_UFM_RENDER_CONTEXT } from '../ufm-render/ufm-render.context.js'; +import { customElement, property } from '@umbraco-cms/backoffice/external/lit'; +import { UmbDocumentItemRepository } from '@umbraco-cms/backoffice/document'; +import { UmbMediaItemRepository } from '@umbraco-cms/backoffice/media'; +import { UmbMemberItemRepository } from '@umbraco-cms/backoffice/member'; + +const elementName = 'ufm-content-name'; + +@customElement(elementName) +export class UmbUfmContentNameElement extends UmbUfmElementBase { + @property() + alias?: string; + + #documentRepository?: UmbDocumentItemRepository; + #mediaRepository?: UmbMediaItemRepository; + #memberRepository?: UmbMemberItemRepository; + + constructor() { + super(); + + this.consumeContext(UMB_UFM_RENDER_CONTEXT, (context) => { + this.observe( + context.value, + async (value) => { + const temp = + this.alias && typeof value === 'object' + ? ((value as Record)[this.alias] as string) + : (value as string); + + const entityType = Array.isArray(temp) && temp.length > 0 ? temp[0].type : null; + const uniques = Array.isArray(temp) ? temp.map((x) => x.unique) : temp ? [temp] : []; + + if (uniques?.length) { + const repository = this.#getRepository(entityType); + if (repository) { + const { data } = await repository.requestItems(uniques); + this.value = data ? data.map((item) => item.name).join(', ') : ''; + return; + } + } + + this.value = ''; + }, + 'observeValue', + ); + }); + } + + #getRepository(entityType?: string | null) { + switch (entityType) { + case 'media': + if (!this.#mediaRepository) this.#mediaRepository = new UmbMediaItemRepository(this); + return this.#mediaRepository; + + case 'member': + if (!this.#memberRepository) this.#memberRepository = new UmbMemberItemRepository(this); + return this.#memberRepository; + + case 'document': + default: + if (!this.#documentRepository) this.#documentRepository = new UmbDocumentItemRepository(this); + return this.#documentRepository; + } + } +} + +export { UmbUfmContentNameElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbUfmContentNameElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/index.ts new file mode 100644 index 0000000000..7f1f30e709 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/index.ts @@ -0,0 +1,3 @@ +export * from './ufm-render/index.js'; +export * from './ufm-component-base.js'; +export * from './ufm-element-base.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/components/label-value/label-value.component.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/label-value/label-value.component.ts new file mode 100644 index 0000000000..bbadd36dc5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/label-value/label-value.component.ts @@ -0,0 +1,15 @@ +import type { UfmToken } from '../../plugins/marked-ufm.plugin.js'; +import { UmbUfmComponentBase } from '../ufm-component-base.js'; + +import './label-value.element.js'; + +export class UmbUfmLabelValueComponent extends UmbUfmComponentBase { + render(token: UfmToken) { + if (!token.text) return; + + const attributes = super.getAttributes(token.text); + return ``; + } +} + +export { UmbUfmLabelValueComponent as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/label-value.element.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/label-value/label-value.element.ts similarity index 51% rename from src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/label-value.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/ufm/components/label-value/label-value.element.ts index cb28e01989..64081048ac 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/label-value.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/label-value/label-value.element.ts @@ -1,17 +1,14 @@ -import { UMB_UFM_RENDER_CONTEXT } from '../components/ufm-render/index.js'; -import { customElement, nothing, property, state } from '@umbraco-cms/backoffice/external/lit'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UMB_UFM_RENDER_CONTEXT } from '../ufm-render/ufm-render.context.js'; +import { UmbUfmElementBase } from '../ufm-element-base.js'; +import { customElement, property } from '@umbraco-cms/backoffice/external/lit'; const elementName = 'ufm-label-value'; @customElement(elementName) -export class UmbUfmLabelValueElement extends UmbLitElement { +export class UmbUfmLabelValueElement extends UmbUfmElementBase { @property() alias?: string; - @state() - private _value?: unknown; - constructor() { super(); @@ -20,19 +17,15 @@ export class UmbUfmLabelValueElement extends UmbLitElement { context.value, (value) => { if (this.alias !== undefined && value !== undefined && typeof value === 'object') { - this._value = (value as Record)[this.alias]; + this.value = (value as Record)[this.alias]; } else { - this._value = value; + this.value = value; } }, 'observeValue', ); }); } - - override render() { - return this._value !== undefined ? this._value : nothing; - } } export { UmbUfmLabelValueElement as element }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/components/localize/localize.component.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/localize/localize.component.ts new file mode 100644 index 0000000000..8789e05455 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/localize/localize.component.ts @@ -0,0 +1,15 @@ +import type { UfmToken } from '../../plugins/marked-ufm.plugin.js'; +import { UmbUfmComponentBase } from '../ufm-component-base.js'; + +import './localize.element.js'; + +export class UmbUfmLocalizeComponent extends UmbUfmComponentBase { + render(token: UfmToken) { + if (!token.text) return; + + const attributes = super.getAttributes(token.text); + return ``; + } +} + +export { UmbUfmLocalizeComponent as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/components/localize/localize.element.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/localize/localize.element.ts new file mode 100644 index 0000000000..9f440de11a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/localize/localize.element.ts @@ -0,0 +1,26 @@ +import { UmbUfmElementBase } from '../ufm-element-base.js'; +import { customElement, property } from '@umbraco-cms/backoffice/external/lit'; + +const elementName = 'ufm-localize'; + +@customElement(elementName) +export class UmbUfmLocalizeElement extends UmbUfmElementBase { + @property() + public set alias(value: string | undefined) { + if (!value) return; + this.#alias = value; + this.value = this.localize.term(value); + } + public get alias(): string | undefined { + return this.#alias; + } + #alias?: string; +} + +export { UmbUfmLocalizeElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbUfmLocalizeElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/components/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/manifests.ts new file mode 100644 index 0000000000..a1120024a0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/manifests.ts @@ -0,0 +1,25 @@ +import type { ManifestUfmComponent } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'ufmComponent', + alias: 'Umb.Markdown.LabelValue', + name: 'Label Value UFM Component', + api: () => import('./label-value/label-value.component.js'), + meta: { marker: '=' }, + }, + { + type: 'ufmComponent', + alias: 'Umb.Markdown.Localize', + name: 'Localize UFM Component', + api: () => import('./localize/localize.component.js'), + meta: { marker: '#' }, + }, + { + type: 'ufmComponent', + alias: 'Umb.Markdown.ContentName', + name: 'Content Name UFM Component', + api: () => import('./content-name/content-name.component.js'), + meta: { marker: '~' }, + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/components/ufm-component-base.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/ufm-component-base.ts new file mode 100644 index 0000000000..6b1d35217d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/ufm-component-base.ts @@ -0,0 +1,25 @@ +import type { UfmToken } from '../plugins/marked-ufm.plugin.js'; +import type { UmbUfmComponentApi } from '@umbraco-cms/backoffice/extension-registry'; + +export abstract class UmbUfmComponentBase implements UmbUfmComponentApi { + protected getAttributes(text: string): string | null { + if (!text) return null; + + const pipeIndex = text.indexOf('|'); + + if (pipeIndex === -1) { + return `alias="${text.trim()}"`; + } + + const alias = text.substring(0, pipeIndex).trim(); + const filters = text.substring(pipeIndex + 1).trim(); + + return Object.entries({ alias, filters }) + .map(([key, value]) => (value ? `${key}="${value.trim()}"` : null)) + .join(' '); + } + + abstract render(token: UfmToken): string | undefined; + + destroy() {} +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/components/ufm-element-base.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/ufm-element-base.ts new file mode 100644 index 0000000000..524d281f81 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/ufm-element-base.ts @@ -0,0 +1,54 @@ +import { UMB_UFM_CONTEXT } from '../contexts/ufm.context.js'; +import { nothing, property, state } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; + +// eslint-disable-next-line local-rules/enforce-element-suffix-on-element-class-name +export abstract class UmbUfmElementBase extends UmbLitElement { + #filterFuncArgs?: Array<{ alias: string; args: Array }>; + + @property() + public set filters(value: string | undefined) { + this.#filters = value; + + this.#filterFuncArgs = value + ?.split('|') + .filter((item) => item) + .map((item) => { + const [alias, ...args] = item.split(':').map((x) => x.trim()); + return { alias, args }; + }); + } + public get filters(): string | undefined { + return this.#filters; + } + #filters?: string; + + @state() + value?: unknown; + + #ufmContext?: typeof UMB_UFM_CONTEXT.TYPE; + + constructor() { + super(); + + this.consumeContext(UMB_UFM_CONTEXT, (ufmContext) => { + this.#ufmContext = ufmContext; + }); + } + + override render() { + if (!this.#ufmContext) return nothing; + + let values = Array.isArray(this.value) ? this.value : [this.value]; + if (this.#filterFuncArgs) { + for (const item of this.#filterFuncArgs) { + const filter = this.#ufmContext.getFilterByAlias(item.alias); + if (filter) { + values = values.map((value) => filter(value, ...item.args)); + } + } + } + + return values.join(', '); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/components/ufm-render/ufm-render.context.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/ufm-render/ufm-render.context.ts index 1ba6e4fe14..77de0e84a0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/ufm/components/ufm-render/ufm-render.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/ufm-render/ufm-render.context.ts @@ -1,7 +1,7 @@ import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; export class UmbUfmRenderContext extends UmbContextBase { #value = new UmbObjectState(undefined); diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/components/ufm-render/ufm-render.element.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/ufm-render/ufm-render.element.ts index 56173caf27..6bf24160e5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/ufm/components/ufm-render/ufm-render.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/components/ufm-render/ufm-render.element.ts @@ -1,43 +1,8 @@ -import type { UfmPlugin } from '../../plugins/marked-ufm.plugin.js'; -import { ufm } from '../../plugins/marked-ufm.plugin.js'; +import { UMB_UFM_CONTEXT } from '../../contexts/ufm.context.js'; import { UmbUfmRenderContext } from './ufm-render.context.js'; import { css, customElement, nothing, property, unsafeHTML, until } from '@umbraco-cms/backoffice/external/lit'; -import { DOMPurify } from '@umbraco-cms/backoffice/external/dompurify'; -import { Marked } from '@umbraco-cms/backoffice/external/marked'; -import type { UmbExtensionApiInitializer } from '@umbraco-cms/backoffice/extension-api'; -import { UmbExtensionsApiInitializer } from '@umbraco-cms/backoffice/extension-api'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; -import type { ManifestUfmComponent } from '@umbraco-cms/backoffice/extension-registry'; - -const UmbDomPurify = DOMPurify(window); -const UmbDomPurifyConfig: DOMPurify.Config = { - USE_PROFILES: { html: true }, - CUSTOM_ELEMENT_HANDLING: { - tagNameCheck: /^(?:ufm|umb|uui)-.*$/, - attributeNameCheck: /.+/, - allowCustomizedBuiltInElements: false, - }, -}; - -UmbDomPurify.addHook('afterSanitizeAttributes', function (node) { - // set all elements owning target to target=_blank - if ('target' in node) { - node.setAttribute('target', '_blank'); - } -}); - -export const UmbMarked = new Marked({ - async: true, - gfm: true, - breaks: true, - hooks: { - postprocess: (markup) => { - return UmbDomPurify.sanitize(markup, UmbDomPurifyConfig) as string; - }, - }, -}); const elementName = 'umb-ufm-render'; @@ -59,26 +24,13 @@ export class UmbUfmRenderElement extends UmbLitElement { return this.#context.getValue(); } + #ufmContext?: typeof UMB_UFM_CONTEXT.TYPE; + constructor() { super(); - new UmbExtensionsApiInitializer(this, umbExtensionsRegistry, 'ufmComponent', [], undefined, (controllers) => { - UmbMarked.use( - ufm( - controllers - .map((controller) => { - const ctrl = controller as unknown as UmbExtensionApiInitializer; - if (!ctrl.manifest || !ctrl.api) return; - return { - alias: ctrl.manifest.alias, - marker: ctrl.manifest.meta.marker, - render: ctrl.api.render, - }; - }) - .filter((x) => x) as Array, - ), - ); - this.requestUpdate('markdown'); + this.consumeContext(UMB_UFM_CONTEXT, (ufmContext) => { + this.#ufmContext = ufmContext; }); } @@ -87,8 +39,8 @@ export class UmbUfmRenderElement extends UmbLitElement { } async #renderMarkdown() { - if (!this.markdown) return null; - const markup = !this.inline ? await UmbMarked.parse(this.markdown) : await UmbMarked.parseInline(this.markdown); + if (!this.#ufmContext || !this.markdown) return null; + const markup = await this.#ufmContext.parse(this.markdown, this.inline); return markup ? unsafeHTML(markup) : nothing; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/contexts/index.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/contexts/index.ts new file mode 100644 index 0000000000..dcc7961ddc --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/contexts/index.ts @@ -0,0 +1 @@ +export * from './ufm.context.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/contexts/manifest.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/contexts/manifest.ts new file mode 100644 index 0000000000..98c747273f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/contexts/manifest.ts @@ -0,0 +1,8 @@ +import type { ManifestGlobalContext } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifest: ManifestGlobalContext = { + type: 'globalContext', + alias: 'Umb.GlobalContext.Ufm', + name: 'UFM Context', + api: () => import('./ufm.context.js'), +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/contexts/ufm.context.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/contexts/ufm.context.ts new file mode 100644 index 0000000000..4a8512fc41 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/contexts/ufm.context.ts @@ -0,0 +1,96 @@ +import { ufm } from '../plugins/marked-ufm.plugin.js'; +import type { UfmPlugin } from '../plugins/marked-ufm.plugin.js'; +import { DOMPurify } from '@umbraco-cms/backoffice/external/dompurify'; +import { Marked } from '@umbraco-cms/backoffice/external/marked'; +import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; +import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; +import { UmbExtensionsApiInitializer } from '@umbraco-cms/backoffice/extension-api'; +import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestUfmFilter, ManifestUfmComponent } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import type { UmbExtensionApiInitializer } from '@umbraco-cms/backoffice/extension-api'; + +const UmbDomPurify = DOMPurify(window); +const UmbDomPurifyConfig: DOMPurify.Config = { + USE_PROFILES: { html: true }, + CUSTOM_ELEMENT_HANDLING: { + tagNameCheck: /^(?:ufm|umb|uui)-.*$/, + attributeNameCheck: /.+/, + allowCustomizedBuiltInElements: false, + }, +}; + +UmbDomPurify.addHook('afterSanitizeAttributes', function (node) { + // set all elements owning target to target=_blank + if ('target' in node) { + node.setAttribute('target', '_blank'); + } +}); + +export const UmbMarked = new Marked({ + async: true, + gfm: true, + breaks: true, + hooks: { + postprocess: (markup) => { + return UmbDomPurify.sanitize(markup, UmbDomPurifyConfig) as string; + }, + }, +}); + +type UmbUfmFilterType = { + alias: string; + filter: ((...args: Array) => string | undefined | null) | undefined; +}; + +export class UmbUfmContext extends UmbContextBase { + #filters = new UmbArrayState([], (x) => x.alias); + public readonly filters = this.#filters.asObservable(); + + constructor(host: UmbControllerHost) { + super(host, UMB_UFM_CONTEXT); + + new UmbExtensionsApiInitializer(this, umbExtensionsRegistry, 'ufmComponent', [], undefined, (controllers) => { + UmbMarked.use( + ufm( + controllers + .map((controller) => { + const ctrl = controller as unknown as UmbExtensionApiInitializer; + if (!ctrl.manifest || !ctrl.api) return; + return { + alias: ctrl.manifest.alias, + marker: ctrl.manifest.meta.marker, + render: ctrl.api.render, + }; + }) + .filter((x) => x) as Array, + ), + ); + }); + + new UmbExtensionsApiInitializer(this, umbExtensionsRegistry, 'ufmFilter', [], undefined, (controllers) => { + const filters = controllers + .map((controller) => { + const ctrl = controller as unknown as UmbExtensionApiInitializer; + if (!ctrl.manifest || !ctrl.api) return null; + return { alias: ctrl.manifest.meta.alias, filter: ctrl.api.filter }; + }) + .filter((x) => x) as Array; + + this.#filters.setValue(filters); + }); + } + + public getFilterByAlias(alias: string) { + return this.#filters.getValue().find((x) => x.alias === alias)?.filter; + } + + public async parse(markdown: string, inline: boolean) { + return !inline ? await UmbMarked.parse(markdown) : await UmbMarked.parseInline(markdown); + } +} + +export const UMB_UFM_CONTEXT = new UmbContextToken('UmbUfmContext'); + +export { UmbUfmContext as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/fallback.filter.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/fallback.filter.ts new file mode 100644 index 0000000000..ceb8001754 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/fallback.filter.ts @@ -0,0 +1,9 @@ +import { UmbUfmFilterBase } from '../types.js'; + +class UmbUfmFallbackFilterApi extends UmbUfmFilterBase { + filter(str: string, fallback: string) { + return typeof str !== 'string' || str ? str : fallback; + } +} + +export { UmbUfmFallbackFilterApi as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/lowercase.filter.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/lowercase.filter.ts new file mode 100644 index 0000000000..bf175a2a65 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/lowercase.filter.ts @@ -0,0 +1,9 @@ +import { UmbUfmFilterBase } from '../types.js'; + +class UmbUfmLowercaseFilterApi extends UmbUfmFilterBase { + filter(str?: string) { + return str?.toLocaleLowerCase(); + } +} + +export { UmbUfmLowercaseFilterApi as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/manifests.ts new file mode 100644 index 0000000000..c80c5ffd35 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/manifests.ts @@ -0,0 +1,53 @@ +import type { ManifestUfmFilter } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'ufmFilter', + alias: 'Umb.Filter.Fallback', + name: 'Fallback UFM Filter', + api: () => import('./fallback.filter.js'), + meta: { alias: 'fallback' }, + }, + { + type: 'ufmFilter', + alias: 'Umb.Filter.Lowercase', + name: 'Lowercase UFM Filter', + api: () => import('./lowercase.filter.js'), + meta: { alias: 'lowercase' }, + }, + { + type: 'ufmFilter', + alias: 'Umb.Filter.StripHtml', + name: 'Strip HTML UFM Filter', + api: () => import('./strip-html.filter.js'), + meta: { alias: 'strip-html' }, + }, + { + type: 'ufmFilter', + alias: 'Umb.Filter.TitleCase', + name: 'Title Case UFM Filter', + api: () => import('./title-case.filter.js'), + meta: { alias: 'title-case' }, + }, + { + type: 'ufmFilter', + alias: 'Umb.Filter.Truncate', + name: 'Truncate UFM Filter', + api: () => import('./truncate.filter.js'), + meta: { alias: 'truncate' }, + }, + { + type: 'ufmFilter', + alias: 'Umb.Filter.Uppercase', + name: 'Uppercase UFM Filter', + api: () => import('./uppercase.filter.js'), + meta: { alias: 'uppercase' }, + }, + { + type: 'ufmFilter', + alias: 'Umb.Filter.WordLimit', + name: 'Word Limit UFM Filter', + api: () => import('./word-limit.filter.js'), + meta: { alias: 'word-limit' }, + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/strip-html.filter.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/strip-html.filter.ts new file mode 100644 index 0000000000..6d19708e59 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/strip-html.filter.ts @@ -0,0 +1,15 @@ +import { UmbUfmFilterBase } from '../types.js'; + +class UmbUfmStripHtmlFilterApi extends UmbUfmFilterBase { + filter(value: string | { markup: string } | undefined | null) { + if (!value) return ''; + + const markup = typeof value === 'object' && Object.hasOwn(value, 'markup') ? value.markup : (value as string); + const parser = new DOMParser(); + const doc = parser.parseFromString(markup, 'text/html'); + + return doc.body.textContent ?? ''; + } +} + +export { UmbUfmStripHtmlFilterApi as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/title-case.filter.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/title-case.filter.ts new file mode 100644 index 0000000000..ab546b7ee3 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/title-case.filter.ts @@ -0,0 +1,9 @@ +import { UmbUfmFilterBase } from '../types.js'; + +class UmbUfmTitleCaseFilterApi extends UmbUfmFilterBase { + filter(str?: string) { + return str?.replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase()); + } +} + +export { UmbUfmTitleCaseFilterApi as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/truncate.filter.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/truncate.filter.ts new file mode 100644 index 0000000000..34360ae41d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/truncate.filter.ts @@ -0,0 +1,14 @@ +import { UmbUfmFilterBase } from '../types.js'; + +class UmbUfmTruncateFilterApi extends UmbUfmFilterBase { + filter(str: string, length: number, tail?: string) { + if (typeof str !== 'string' || !str.length) return str; + if (tail === 'false') tail = ''; + if (tail === 'true') tail = '…'; + tail = !tail && tail !== '' ? '…' : tail; + + return str.slice(0, length).trim() + tail; + } +} + +export { UmbUfmTruncateFilterApi as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/uppercase.filter.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/uppercase.filter.ts new file mode 100644 index 0000000000..76af187aa9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/uppercase.filter.ts @@ -0,0 +1,9 @@ +import { UmbUfmFilterBase } from '../types.js'; + +class UmbUfmUppercaseFilterApi extends UmbUfmFilterBase { + filter(str?: string) { + return str?.toLocaleUpperCase(); + } +} + +export { UmbUfmUppercaseFilterApi as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/word-limit.filter.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/word-limit.filter.ts new file mode 100644 index 0000000000..8924386638 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/filters/word-limit.filter.ts @@ -0,0 +1,10 @@ +import { UmbUfmFilterBase } from '../types.js'; + +class UmbUfmWordLimitFilterApi extends UmbUfmFilterBase { + filter(str: string, limit: number) { + const words = str?.split(/\s+/) ?? []; + return limit && words.length > limit ? words.slice(0, limit).join(' ') : str; + } +} + +export { UmbUfmWordLimitFilterApi as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/index.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/index.ts index 6ef5cd49bd..56ba93470c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/ufm/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/index.ts @@ -1,3 +1,4 @@ -export * from './components/ufm-render/index.js'; -export * from './plugins/marked-ufm.plugin.js'; -export * from './ufm-components/ufm-component-base.js'; +export * from './types.js'; +export * from './components/index.js'; +export * from './contexts/index.js'; +export * from './plugins/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/manifests.ts index ec604e0842..930ae37b3a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/ufm/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/manifests.ts @@ -1,18 +1,6 @@ -import type { ManifestUfmComponent } from '@umbraco-cms/backoffice/extension-registry'; +import { manifest as ufmContext } from './contexts/manifest.js'; +import { manifests as ufmComponents } from './components/manifests.js'; +import { manifests as ufmFilters } from './filters/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ - { - type: 'ufmComponent', - alias: 'Umb.Markdown.LabelValue', - name: 'Label Value UFM Component', - api: () => import('./ufm-components/label-value.component.js'), - meta: { marker: '=' }, - }, - { - type: 'ufmComponent', - alias: 'Umb.Markdown.Localize', - name: 'Localize UFM Component', - api: () => import('./ufm-components/localize.component.js'), - meta: { marker: '#' }, - }, -]; +export const manifests: Array = [ufmContext, ...ufmComponents, ...ufmFilters]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/plugins/index.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/plugins/index.ts new file mode 100644 index 0000000000..09836813d3 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/plugins/index.ts @@ -0,0 +1,2 @@ +export { ufm } from './marked-ufm.plugin.js'; +export type { UfmPlugin, UfmToken } from './marked-ufm.plugin.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/plugins/marked-ufm.plugin.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/plugins/marked-ufm.plugin.ts index 65b57912a0..edebdefcca 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/ufm/plugins/marked-ufm.plugin.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/plugins/marked-ufm.plugin.ts @@ -12,7 +12,8 @@ export interface UfmToken extends Tokens.Generic { /** * - * @param plugins + * @param {Array} plugins - An array of UFM plugins. + * @returns {MarkedExtension} A Marked extension object. */ export function ufm(plugins: Array = []): MarkedExtension { return { diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/plugins/marked-ufm.test.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/plugins/marked-ufm.test.ts index ef01944675..71a2177ddb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/ufm/plugins/marked-ufm.test.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/plugins/marked-ufm.test.ts @@ -1,8 +1,9 @@ import { expect } from '@open-wc/testing'; import { ufm } from './marked-ufm.plugin.js'; -import { UmbMarked } from '../index.js'; -import { UmbUfmLabelValueComponent } from '../ufm-components/label-value.component.js'; -import { UmbUfmLocalizeComponent } from '../ufm-components/localize.component.js'; +import { UmbMarked } from '../contexts/ufm.context.js'; +import { UmbUfmContentNameComponent } from '../components/content-name/content-name.component.js'; +import { UmbUfmLabelValueComponent } from '../components/label-value/label-value.component.js'; +import { UmbUfmLocalizeComponent } from '../components/localize/localize.component.js'; describe('UmbMarkedUfm', () => { describe('UFM parsing', () => { @@ -11,12 +12,18 @@ describe('UmbMarkedUfm', () => { { ufm: '{= prop1}', expected: '' }, { ufm: '{= prop1 }', expected: '' }, { ufm: '{{=prop1}}', expected: '{}' }, - { ufm: '{#general_add}', expected: '' }, + { + ufm: '{= prop1 | strip-html | truncate:30}', + expected: '', + }, + { ufm: '{#general_add}', expected: '' }, + { ufm: '{~contentPicker}', expected: '' }, ]; // Manually configuring the UFM components for testing. UmbMarked.use( ufm([ + { alias: 'Umb.Markdown.ContentName', marker: '~', render: new UmbUfmContentNameComponent().render }, { alias: 'Umb.Markdown.LabelValue', marker: '=', render: new UmbUfmLabelValueComponent().render }, { alias: 'Umb.Markdown.Localize', marker: '#', render: new UmbUfmLocalizeComponent().render }, ]), diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/types.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/types.ts new file mode 100644 index 0000000000..94c6966cc1 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/ufm/types.ts @@ -0,0 +1,6 @@ +import type { UmbUfmFilterApi } from '@umbraco-cms/backoffice/extension-registry'; + +export abstract class UmbUfmFilterBase implements UmbUfmFilterApi { + abstract filter(...args: Array): string | undefined | null; + destroy() {} +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/document-name.component.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/document-name.component.ts deleted file mode 100644 index 8b7e5ec47e..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/document-name.component.ts +++ /dev/null @@ -1,12 +0,0 @@ -// import { UmbUfmComponentBase } from './ufm-component-base.js'; -// import type { Tokens } from '@umbraco-cms/backoffice/external/marked'; - -// import './document-name.element.js'; - -// export class UmbUfmDocumentNameComponent extends UmbUfmComponentBase { -// render(token: Tokens.Generic) { -// return ``; -// } -// } - -// export { UmbUfmDocumentNameComponent as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/document-name.element.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/document-name.element.ts deleted file mode 100644 index d4f59d15cc..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/document-name.element.ts +++ /dev/null @@ -1,54 +0,0 @@ -// import { UMB_UFM_RENDER_CONTEXT } from '@umbraco-cms/backoffice/components'; -// import { UmbDocumentItemRepository } from '@umbraco-cms/backoffice/document'; -// import { customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; -// import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; - -// const elementName = 'ufm-document-name'; - -// @customElement(elementName) -// export class UmbUfmDocumentNameElement extends UmbLitElement { -// @property() -// alias?: string; - -// @state() -// private _value?: unknown; - -// #documentRepository = new UmbDocumentItemRepository(this); - -// constructor() { -// super(); - -// this.consumeContext(UMB_UFM_RENDER_CONTEXT, (context) => { -// this.observe( -// context.value, -// async (value) => { -// if (!value) return; - -// const unique = -// this.alias && typeof value === 'object' -// ? ((value as Record)[this.alias] as string) -// : (value as string); - -// if (!unique) return; - -// const { data } = await this.#documentRepository.requestItems([unique]); - -// this._value = data?.[0]?.name; -// }, -// 'observeValue', -// ); -// }); -// } - -// override render() { -// return this._value ?? this.alias; -// } -// } - -// export { UmbUfmDocumentNameElement as element }; - -// declare global { -// interface HTMLElementTagNameMap { -// [elementName]: UmbUfmDocumentNameElement; -// } -// } diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/label-value.component.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/label-value.component.ts deleted file mode 100644 index 7fa6b5d815..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/label-value.component.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { UfmToken } from '../plugins/marked-ufm.plugin.js'; -import { UmbUfmComponentBase } from './ufm-component-base.js'; - -import './label-value.element.js'; - -export class UmbUfmLabelValueComponent extends UmbUfmComponentBase { - render(token: UfmToken) { - if (!token.text) return; - return ``; - } -} - -export { UmbUfmLabelValueComponent as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/localize.component.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/localize.component.ts deleted file mode 100644 index 79890f75f5..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/localize.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { UfmToken } from '../plugins/marked-ufm.plugin.js'; -import { UmbUfmComponentBase } from './ufm-component-base.js'; - -export class UmbUfmLocalizeComponent extends UmbUfmComponentBase { - render(token: UfmToken) { - if (!token.text) return; - return ``; - } -} - -export { UmbUfmLocalizeComponent as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/ufm-component-base.ts b/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/ufm-component-base.ts deleted file mode 100644 index 71f552363e..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/ufm/ufm-components/ufm-component-base.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { UfmToken } from '../plugins/marked-ufm.plugin.js'; -import type { UmbUfmComponentApi } from '@umbraco-cms/backoffice/extension-registry'; - -export abstract class UmbUfmComponentBase implements UmbUfmComponentApi { - abstract render(token: UfmToken): string | undefined; - destroy() {} -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/manifests.ts index 083dc29663..0a16bdecd3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/change-password/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/change-password/manifests.ts @@ -14,6 +14,11 @@ export const manifests: Array = [ icon: 'icon-key', label: '#user_changePassword', }, + conditions: [ + { + alias: 'Umb.Condition.User.AllowChangePassword', + }, + ], }, { type: 'modal', diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user-header-app.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user-header-app.element.ts index 4349a8bec9..362d2d1e37 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user-header-app.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user-header-app.element.ts @@ -1,6 +1,6 @@ import { UMB_CURRENT_USER_MODAL } from './modals/current-user/current-user-modal.token.js'; import type { CSSResultGroup } from '@umbraco-cms/backoffice/external/lit'; -import { css, html, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; +import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import { UMB_CURRENT_USER_CONTEXT, type UmbCurrentUserModel } from '@umbraco-cms/backoffice/current-user'; import { UmbHeaderAppButtonElement } from '@umbraco-cms/backoffice/components'; @@ -10,9 +10,6 @@ export class UmbCurrentUserHeaderAppElement extends UmbHeaderAppButtonElement { @state() private _currentUser?: UmbCurrentUserModel; - @state() - private _userAvatarUrls: Array<{ url: string; descriptor: string }> = []; - #currentUserContext?: typeof UMB_CURRENT_USER_CONTEXT.TYPE; constructor() { @@ -31,8 +28,6 @@ export class UmbCurrentUserHeaderAppElement extends UmbHeaderAppButtonElement { this.#currentUserContext.currentUser, (currentUser) => { this._currentUser = currentUser; - if (!currentUser) return; - this.#setUserAvatarUrls(currentUser); }, 'umbCurrentUserObserver', ); @@ -43,41 +38,6 @@ export class UmbCurrentUserHeaderAppElement extends UmbHeaderAppButtonElement { modalManager.open(this, UMB_CURRENT_USER_MODAL); } - #setUserAvatarUrls = async (user: UmbCurrentUserModel | undefined) => { - if (!user || !user.avatarUrls || user.avatarUrls.length === 0) { - this._userAvatarUrls = []; - return; - } - - this._userAvatarUrls = [ - { - descriptor: '1x', - url: user.avatarUrls?.[0], - }, - { - descriptor: '2x', - url: user.avatarUrls?.[1], - }, - { - descriptor: '3x', - url: user.avatarUrls?.[2], - }, - ]; - }; - - #getAvatarSrcset() { - let string = ''; - - this._userAvatarUrls?.forEach((url) => { - string += `${url.url} ${url.descriptor},`; - }); - return string; - } - - #hasAvatar() { - return this._userAvatarUrls.length > 0; - } - override render() { return html` - + .name=${this._currentUser?.name} + .imgUrls=${this._currentUser?.avatarUrls || []}> `; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts index 6849d0c64e..b6836e70b7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts @@ -3,7 +3,7 @@ import { UmbCurrentUserRepository } from './repository/index.js'; import { UMB_CURRENT_USER_CONTEXT } from './current-user.context.token.js'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { firstValueFrom } from '@umbraco-cms/backoffice/external/rxjs'; +import { filter, firstValueFrom } from '@umbraco-cms/backoffice/external/rxjs'; import { UMB_AUTH_CONTEXT } from '@umbraco-cms/backoffice/auth'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import { umbLocalizationRegistry } from '@umbraco-cms/backoffice/localization'; @@ -14,7 +14,7 @@ import { ensurePathEndsWithSlash } from '@umbraco-cms/backoffice/utils'; export class UmbCurrentUserContext extends UmbContextBase { #currentUser = new UmbObjectState(undefined); - readonly currentUser = this.#currentUser.asObservable(); + readonly currentUser = this.#currentUser.asObservable().pipe(filter((user) => !!user)); readonly allowedSections = this.#currentUser.asObservablePart((user) => user?.allowedSections); readonly avatarUrls = this.#currentUser.asObservablePart((user) => user?.avatarUrls); readonly documentStartNodeUniques = this.#currentUser.asObservablePart((user) => user?.documentStartNodeUniques); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/components/user-group-table-name-column-layout.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/components/user-group-table-name-column-layout.element.ts index 1a1274620d..f320f8ef79 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/components/user-group-table-name-column-layout.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/components/user-group-table-name-column-layout.element.ts @@ -1,3 +1,4 @@ +import { UMB_USER_GROUP_WORKSPACE_PATH } from '../../paths.js'; import { css, html, LitElement, customElement, property } from '@umbraco-cms/backoffice/external/lit'; import type { UmbTableItem } from '@umbraco-cms/backoffice/components'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; @@ -11,7 +12,7 @@ export class UmbUserGroupTableNameColumnLayoutElement extends LitElement { value!: any; override render() { - const href = `section/user-management/view/user-groups/user-group/edit/${this.item.id}`; + const href = UMB_USER_GROUP_WORKSPACE_PATH + '/edit/' + this.item.id; return html`${this.value.name}`; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/paths.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/paths.ts new file mode 100644 index 0000000000..6fc1f8cc7e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/paths.ts @@ -0,0 +1,8 @@ +import { UMB_USER_SECTION_PATHNAME } from '../user-section/paths.js'; +import { UMB_USER_GROUP_ENTITY_TYPE } from './entity.js'; +import { UMB_WORKSPACE_PATH_PATTERN } from '@umbraco-cms/backoffice/workspace'; + +export const UMB_USER_GROUP_WORKSPACE_PATH = UMB_WORKSPACE_PATH_PATTERN.generateAbsolute({ + sectionName: UMB_USER_SECTION_PATHNAME, + entityType: UMB_USER_GROUP_ENTITY_TYPE, +}); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group-workspace-editor.element.ts index 4888285574..9374872d2a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group-workspace-editor.element.ts @@ -1,5 +1,4 @@ import type { UmbUserGroupDetailModel } from '../index.js'; -import { UMB_USER_GROUP_ENTITY_TYPE } from '../index.js'; import { UMB_USER_GROUP_WORKSPACE_CONTEXT } from './user-group-workspace.context-token.js'; import type { UUIBooleanInputEvent } from '@umbraco-cms/backoffice/external/uui'; import { css, html, nothing, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; @@ -174,11 +173,7 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { alias="Umb.Workspace.UserGroup" class="uui-text" back-path="/section/user-management/view/user-groups"> - ${this.#renderHeader()} -
-
${this.#renderLeftColumn()}
-
${this.#renderRightColumn()}
-
+ ${this.#renderHeader()} ${this.#renderMain()} `; } @@ -225,40 +220,46 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { ${umbFocus()}>
+ + `; } - #renderLeftColumn() { + #renderMain() { if (!this._unique) return nothing; return html` - -
+
+ + +
- - - + + + - ${this.#renderLanguageAccess()} ${this.#renderDocumentAccess()} ${this.#renderMediaAccess()} -
+ ${this.#renderLanguageAccess()} ${this.#renderDocumentAccess()} ${this.#renderMediaAccess()} + - -
+ +
- - - -
+ + + +
- -
- -
+ +
+ +
+
+
`; } @@ -338,15 +339,6 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { `; } - #renderRightColumn() { - return html` - - - - - `; - } - static override styles = [ UmbTextStyles, css` @@ -375,25 +367,9 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { } #main { - display: grid; - grid-template-columns: 1fr 350px; - gap: var(--uui-size-layout-1); padding: var(--uui-size-layout-1); } - #left-column, - #right-column { - display: flex; - flex-direction: column; - gap: var(--uui-size-space-4); - } - - #right-column > uui-box > div { - display: flex; - flex-direction: column; - gap: var(--uui-size-space-2); - } - uui-input { width: 100%; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-section/paths.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-section/paths.ts new file mode 100644 index 0000000000..f61a643ac5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-section/paths.ts @@ -0,0 +1,7 @@ +import { UMB_SECTION_PATH_PATTERN } from '@umbraco-cms/backoffice/section'; + +export const UMB_USER_SECTION_PATHNAME = 'user-management'; + +export const UMB_USER_SECTION_PATH = UMB_SECTION_PATH_PATTERN.generateAbsolute({ + sectionName: UMB_USER_SECTION_PATHNAME, +}); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/manifests.ts new file mode 100644 index 0000000000..420b53915c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/manifests.ts @@ -0,0 +1,5 @@ +import { manifests as modalManifests } from './modal/manifests.js'; + +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [...modalManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/constants.ts new file mode 100644 index 0000000000..955ffa9cd6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/constants.ts @@ -0,0 +1 @@ +export const UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL_ALIAS = 'Umb.Modal.User.ClientCredential.Create'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.element.ts new file mode 100644 index 0000000000..dc48873e55 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.element.ts @@ -0,0 +1,117 @@ +import type { UmbCreateUserClientCredentialRequestArgs } from '../../repository/index.js'; +import { UmbUserClientCredentialRepository } from '../../repository/index.js'; +import type { + UmbCreateUserClientCredentialModalData, + UmbCreateUserClientCredentialModalValue, +} from './create-user-client-credential-modal.token.js'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { css, html, customElement, query } from '@umbraco-cms/backoffice/external/lit'; +import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; + +const elementName = 'umb-create-user-client-credential-modal'; +@customElement(elementName) +export class UmbCreateUserModalElement extends UmbModalBaseElement< + UmbCreateUserClientCredentialModalData, + UmbCreateUserClientCredentialModalValue +> { + @query('#CreateUserClientCredentialForm') + _form?: HTMLFormElement; + + #userClientCredentialRepository = new UmbUserClientCredentialRepository(this); + + #uniquePrefix = 'umbraco-back-office-'; + + async #onSubmit(e: SubmitEvent) { + e.preventDefault(); + + if (this.data?.user?.unique === undefined) throw new Error('User unique is required'); + + const form = e.target as HTMLFormElement; + if (!form) return; + + const isValid = form.checkValidity(); + if (!isValid) return; + + const formData = new FormData(form); + + const unique = formData.get('unique') as string; + const secret = formData.get('secret') as string; + + const payload: UmbCreateUserClientCredentialRequestArgs = { + user: { unique: this.data.user.unique }, + client: { unique, secret }, + }; + + // TODO: figure out when to use email or username + const { data } = await this.#userClientCredentialRepository.requestCreate(payload); + + if (data) { + this.updateValue({ client: { unique: data.unique, secret } }); + this._submitModal(); + } + } + + override render() { + return html` + ${this.#renderForm()} + + + `; + } + + #renderForm() { + return html` +
+ + Id + +
${this.#uniquePrefix}
+
+
+ + +
The secret cannot be retrieved again.
+ Secret + +
+
+
`; + } + + static override styles = [ + UmbTextStyles, + css` + uui-input, + uui-input-password { + width: 580px; + } + + .prepend { + user-select: none; + height: 100%; + padding: 0 var(--uui-size-3); + border-right: 1px solid var(--uui-input-border-color, var(--uui-color-border)); + background: #f3f3f3; + color: grey; + display: flex; + justify-content: center; + align-items: center; + white-space: nowrap; + } + `, + ]; +} + +export { UmbCreateUserModalElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbCreateUserModalElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.token.ts new file mode 100644 index 0000000000..a0179a2ea7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.token.ts @@ -0,0 +1,25 @@ +import { UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL_ALIAS } from './constants.js'; +import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; + +export interface UmbCreateUserClientCredentialModalData { + user: { + unique: string; + }; +} + +export interface UmbCreateUserClientCredentialModalValue { + client: { + unique: string; + secret: string; + }; +} + +export const UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL = new UmbModalToken< + UmbCreateUserClientCredentialModalData, + UmbCreateUserClientCredentialModalValue +>(UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL_ALIAS, { + modal: { + type: 'dialog', + size: 'small', + }, +}); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/manifests.ts new file mode 100644 index 0000000000..662ecec620 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/manifests.ts @@ -0,0 +1,11 @@ +import { UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL_ALIAS } from './constants.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'modal', + alias: UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL_ALIAS, + name: 'Create User Client Credential Modal', + js: () => import('./create-user-client-credential-modal.element.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/index.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/index.ts new file mode 100644 index 0000000000..3d76f338dd --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/index.ts @@ -0,0 +1 @@ +export * from './repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/manifests.ts new file mode 100644 index 0000000000..eba4cdb996 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/manifests.ts @@ -0,0 +1,5 @@ +import { manifests as createManifests } from './create/manifests.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [...createManifests, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/constants.ts new file mode 100644 index 0000000000..6cbdba610a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/constants.ts @@ -0,0 +1 @@ +export const UMB_USER_CLIENT_CREDENTIAL_REPOSITORY_ALIAS = 'Umb.Repository.User.ClientCredential'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/data-source/index.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/data-source/index.ts new file mode 100644 index 0000000000..dd7152279d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/data-source/index.ts @@ -0,0 +1,2 @@ +export * from './types.js'; +export * from './user-client-credential.server.data-source.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/data-source/types.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/data-source/types.ts new file mode 100644 index 0000000000..6b3356f8f5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/data-source/types.ts @@ -0,0 +1,13 @@ +import type { + UmbCreateUserClientCredentialRequestArgs, + UmbDeleteUserClientCredentialRequestArgs, + UmbUserClientCredentialModel, + UmbUserClientCredentialRequestArgs, +} from '../types.js'; +import type { UmbDataSourceErrorResponse, UmbDataSourceResponse } from '@umbraco-cms/backoffice/repository'; + +export interface UmbUserClientCredentialDataSource { + create(args: UmbCreateUserClientCredentialRequestArgs): Promise>; + read(args: UmbUserClientCredentialRequestArgs): Promise>>; + delete: (args: UmbDeleteUserClientCredentialRequestArgs) => Promise; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/data-source/user-client-credential.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/data-source/user-client-credential.server.data-source.ts new file mode 100644 index 0000000000..af80fd15b6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/data-source/user-client-credential.server.data-source.ts @@ -0,0 +1,89 @@ +import type { + UmbCreateUserClientCredentialRequestArgs, + UmbDeleteUserClientCredentialRequestArgs, + UmbUserClientCredentialRequestArgs, +} from '../types.js'; +import type { UmbUserClientCredentialDataSource } from './types.js'; +import { UserService } from '@umbraco-cms/backoffice/external/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +/** + * Server data source for user client credentials + * @export + * @class UmbUserClientCredentialServerDataSource + * @implements {UmbUserClientCredentialDataSource} + */ +export class UmbUserClientCredentialServerDataSource implements UmbUserClientCredentialDataSource { + #host: UmbControllerHost; + + constructor(host: UmbControllerHost) { + this.#host = host; + } + + /** + * Creates a new client credentials for a user + * @param {UmbCreateUserClientCredentialRequestArgs} args - The user and client to create the credentials for + * @returns {*} + * @memberof UmbUserClientCredentialServerDataSource + */ + async create(args: UmbCreateUserClientCredentialRequestArgs) { + const { error } = await tryExecuteAndNotify( + this.#host, + UserService.postUserByIdClientCredentials({ + id: args.user.unique, + requestBody: { + clientId: args.client.unique, + clientSecret: args.client.secret, + }, + }), + ); + + if (!error) { + return { data: { unique: args.client.unique } }; + } + + return { error }; + } + + /** + * Reads the client credentials for a user + * @param {UmbUserClientCredentialRequestArgs} args - The user to read the credentials for + * @returns {*} + * @memberof UmbUserClientCredentialServerDataSource + */ + async read(args: UmbUserClientCredentialRequestArgs) { + const { data, error } = await tryExecuteAndNotify( + this.#host, + UserService.getUserByIdClientCredentials({ + id: args.user.unique, + }), + ); + + if (data) { + const credentials = data.map((clientId) => ({ + unique: clientId, + })); + + return { data: credentials }; + } + + return { error }; + } + + /** + * Deletes the client credentials for a user + * @param {UmbDeleteUserClientCredentialRequestArgs} args - The user and client unique to delete the credentials for + * @returns {*} + * @memberof UmbUserClientCredentialServerDataSource + */ + delete(args: UmbDeleteUserClientCredentialRequestArgs) { + return tryExecuteAndNotify( + this.#host, + UserService.deleteUserByIdClientCredentialsByClientId({ + id: args.user.unique, + clientId: args.client.unique, + }), + ); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/index.ts new file mode 100644 index 0000000000..ec915a3b12 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/index.ts @@ -0,0 +1,3 @@ +export * from './user-client-credential.repository.js'; +export * from './constants.js'; +export * from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/manifests.ts new file mode 100644 index 0000000000..a77e1c8998 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/manifests.ts @@ -0,0 +1,11 @@ +import { UMB_USER_CLIENT_CREDENTIAL_REPOSITORY_ALIAS } from './constants.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'repository', + alias: UMB_USER_CLIENT_CREDENTIAL_REPOSITORY_ALIAS, + name: 'User Client Credentials Repository', + api: () => import('./user-client-credential.repository.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/types.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/types.ts new file mode 100644 index 0000000000..900d6aadd5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/types.ts @@ -0,0 +1,17 @@ +export interface UmbCreateUserClientCredentialRequestArgs { + user: { unique: string }; + client: { unique: string; secret: string }; +} + +export interface UmbUserClientCredentialRequestArgs { + user: { unique: string }; +} + +export interface UmbDeleteUserClientCredentialRequestArgs { + user: { unique: string }; + client: { unique: string }; +} + +export interface UmbUserClientCredentialModel { + unique: string; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/user-client-credential.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/user-client-credential.repository.ts new file mode 100644 index 0000000000..4d25eedafa --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/repository/user-client-credential.repository.ts @@ -0,0 +1,61 @@ +import type { UmbUserClientCredentialDataSource } from './data-source/index.js'; +import { UmbUserClientCredentialServerDataSource } from './data-source/user-client-credential.server.data-source.js'; +import type { + UmbCreateUserClientCredentialRequestArgs, + UmbDeleteUserClientCredentialRequestArgs, + UmbUserClientCredentialRequestArgs, +} from './types.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; + +/** + * UmbUserClientCredentialRepository + * @export + * @class UmbUserClientCredentialRepository + * @extends {UmbRepositoryBase} + */ +export class UmbUserClientCredentialRepository extends UmbRepositoryBase { + #source: UmbUserClientCredentialDataSource; + + /** + * Creates an instance of UmbUserClientCredentialRepository. + * @param {UmbControllerHost} host - The controller host + * @memberof UmbUserClientCredentialRepository + */ + constructor(host: UmbControllerHost) { + super(host); + this.#source = new UmbUserClientCredentialServerDataSource(host); + } + + /** + * Creates a new client credentials for a user + * @param {UmbCreateUserClientCredentialRequestArgs} args - The user and client to create the credentials for + * @returns {*} + * @memberof UmbUserClientCredentialRepository + */ + async requestCreate(args: UmbCreateUserClientCredentialRequestArgs) { + return this.#source.create(args); + } + + /** + * Reads the client credentials for a user + * @param {UmbUserClientCredentialRequestArgs} args - The user to read the credentials for + * @returns {*} + * @memberof UmbUserClientCredentialRepository + */ + async requestClientCredentials(args: UmbUserClientCredentialRequestArgs) { + return this.#source.read(args); + } + + /** + * Deletes the client credentials for a user + * @param {UmbDeleteUserClientCredentialRequestArgs} args - The user and client unique to delete the credentials for + * @returns {*} + * @memberof UmbUserClientCredentialRepository + */ + async requestDelete(args: UmbDeleteUserClientCredentialRequestArgs) { + return this.#source.delete(args); + } +} + +export { UmbUserClientCredentialRepository as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/create-user-collection-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/create-user-collection-action.element.ts new file mode 100644 index 0000000000..4ffcc353d0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/create-user-collection-action.element.ts @@ -0,0 +1,103 @@ +import { UMB_CREATE_USER_MODAL } from '../../modals/create/create-user-modal.token.js'; +import type { UmbUserKindType } from '../../utils/index.js'; +import { UmbUserKind } from '../../utils/index.js'; +import { html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; +import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity'; +import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; +import { UmbRequestReloadChildrenOfEntityEvent } from '@umbraco-cms/backoffice/entity-action'; + +const elementName = 'umb-create-user-collection-action-button'; +@customElement(elementName) +export class UmbCollectionActionButtonElement extends UmbLitElement { + @state() + private _popoverOpen = false; + + async #onClick(event: Event, kind: UmbUserKindType) { + event.stopPropagation(); + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + const entityContext = await this.getContext(UMB_ENTITY_CONTEXT); + + const unique = entityContext.getUnique(); + const entityType = entityContext.getEntityType(); + + if (unique === undefined) throw new Error('Missing unique'); + if (!entityType) throw new Error('Missing entityType'); + + const modalContext = modalManager.open(this, UMB_CREATE_USER_MODAL, { + data: { + user: { + kind, + }, + }, + }); + + modalContext + ?.onSubmit() + .then(() => { + this.#requestReloadChildrenOfEntity({ entityType, unique }); + }) + .catch(async () => { + // modal is closed after creation instead of navigating to the new user. + // We therefore need to reload the children of the entity + this.#requestReloadChildrenOfEntity({ entityType, unique }); + }); + } + + async #requestReloadChildrenOfEntity({ entityType, unique }: UmbEntityModel) { + const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); + const event = new UmbRequestReloadChildrenOfEntityEvent({ + entityType, + unique, + }); + + eventContext.dispatchEvent(event); + } + + #onPopoverToggle(event: ToggleEvent) { + // TODO: This ignorer is just neede for JSON SCHEMA TO WORK, As its not updated with latest TS jet. + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + this._popoverOpen = event.newState === 'open'; + } + + override render() { + const label = this.localize.term('general_create'); + + return html` + + ${label} + + + + + + this.#onClick(event, UmbUserKind.DEFAULT)}> + + + this.#onClick(event, UmbUserKind.API)}> + + + + + + `; + } +} + +export { UmbCollectionActionButtonElement as element }; + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbCollectionActionButtonElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/create-user.collection-action.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/create-user.collection-action.ts deleted file mode 100644 index 73ac577b54..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/create-user.collection-action.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { UMB_CREATE_USER_MODAL } from '../../modals/create/create-user-modal.token.js'; -import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; -import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; -import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity'; -import { UmbRequestReloadChildrenOfEntityEvent } from '@umbraco-cms/backoffice/entity-action'; -import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; - -export class UmbCreateUserCollectionAction extends UmbControllerBase { - async execute() { - const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); - const entityContext = await this.getContext(UMB_ENTITY_CONTEXT); - - const unique = entityContext.getUnique(); - const entityType = entityContext.getEntityType(); - - if (unique === undefined) throw new Error('Missing unique'); - if (!entityType) throw new Error('Missing entityType'); - - const modalContext = modalManager.open(this, UMB_CREATE_USER_MODAL); - modalContext?.onSubmit().catch(async () => { - // modal is closed after creation instead of navigating to the new user. - // We therefore need to reload the children of the entity - const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT); - const event = new UmbRequestReloadChildrenOfEntityEvent({ - entityType, - unique, - }); - - eventContext.dispatchEvent(event); - }); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/index.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/index.ts deleted file mode 100644 index 807c9a6fee..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { UmbCreateUserCollectionAction } from './create-user.collection-action.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/manifests.ts index 7d2451635c..204d4cd117 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/manifests.ts @@ -1,17 +1,12 @@ -import { UmbCreateUserCollectionAction } from './create-user.collection-action.js'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const createManifest: ManifestTypes = { type: 'collectionAction', - kind: 'button', name: 'Create User Collection Action', alias: 'Umb.CollectionAction.User.Create', - api: UmbCreateUserCollectionAction, + element: () => import('./create-user-collection-action.element.js'), weight: 200, - meta: { - label: '#general_create', - }, conditions: [ { alias: UMB_COLLECTION_ALIAS_CONDITION, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/repository/user-collection.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/repository/user-collection.server.data-source.ts index 57af3559cc..de1a3a767f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/repository/user-collection.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/repository/user-collection.server.data-source.ts @@ -86,6 +86,7 @@ export class UmbUserCollectionServerDataSource implements UmbCollectionDataSourc lastLockoutDate: item.lastLockoutDate || null, lastPasswordChangeDate: item.lastPasswordChangeDate || null, isAdmin: item.isAdmin, + kind: item.kind, }; return userDetail; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/grid/user-grid-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/grid/user-grid-collection-view.element.ts index 7de4d20ea5..9bf21d2dfa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/grid/user-grid-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/grid/user-grid-collection-view.element.ts @@ -2,12 +2,14 @@ import { getDisplayStateFromUserStatus } from '../../../utils.js'; import type { UmbUserCollectionContext } from '../../user-collection.context.js'; import type { UmbUserDetailModel } from '../../../types.js'; import { UMB_USER_COLLECTION_CONTEXT } from '../../user-collection.context-token.js'; +import { UMB_USER_WORKSPACE_PATH } from '../../../paths.js'; import { css, html, nothing, customElement, state, repeat, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UserStateModel } from '@umbraco-cms/backoffice/external/backend-api'; import type { UmbUserGroupDetailModel } from '@umbraco-cms/backoffice/user-group'; import { UmbUserGroupCollectionRepository } from '@umbraco-cms/backoffice/user-group'; +import { UmbUserKind } from '../../../utils/index.js'; @customElement('umb-user-grid-collection-view') export class UmbUserGridCollectionViewElement extends UmbLitElement { @@ -50,12 +52,6 @@ export class UmbUserGridCollectionViewElement extends UmbLitElement { this._loading = false; } - //TODO How should we handle url stuff? - private _handleOpenCard(unique: string) { - //TODO this will not be needed when cards works as links with href - history.pushState(null, '', 'section/user-management/view/users/user/edit/' + unique); //TODO Change to a tag with href and make dynamic - } - #onSelect(user: UmbUserDetailModel) { this.#collectionContext?.selection.select(user.unique ?? ''); } @@ -78,44 +74,24 @@ export class UmbUserGridCollectionViewElement extends UmbLitElement { } #renderUserCard(user: UmbUserDetailModel) { - const avatarUrls = [ - { - scale: '1x', - url: user.avatarUrls?.[1], - }, - { - scale: '2x', - url: user.avatarUrls?.[2], - }, - { - scale: '3x', - url: user.avatarUrls?.[3], - }, - ]; - - let avatarSrcset = ''; - - avatarUrls.forEach((url) => { - avatarSrcset += `${url.url} ${url.scale},`; - }); + const href = UMB_USER_WORKSPACE_PATH + '/edit/' + user.unique; return html` 0} ?selected=${this.#collectionContext?.selection.isSelected(user.unique)} - @open=${() => this._handleOpenCard(user.unique)} @selected=${() => this.#onSelect(user)} @deselected=${() => this.#onDeselect(user)}> ${this.#renderUserTag(user)} ${this.#renderUserGroupNames(user)} ${this.#renderUserLoginDate(user)} - - 0 ? avatarUrls[0].url : undefined)} - img-srcset=${ifDefined(user.avatarUrls.length > 0 ? avatarSrcset : undefined)}> + .name=${user.name} + .kind=${user.kind} + .imgUrls=${user.avatarUrls} + style="font-size: 1.6rem;"> `; } @@ -145,12 +121,14 @@ export class UmbUserGridCollectionViewElement extends UmbLitElement { } #renderUserLoginDate(user: UmbUserDetailModel) { + if (user.kind === UmbUserKind.API) return nothing; + if (!user.lastLoginDate) { return html``; } return html``; } @@ -172,6 +150,8 @@ export class UmbUserGridCollectionViewElement extends UmbLitElement { uui-card-user { width: 100%; height: 180px; + justify-content: normal; + padding-top: var(--uui-size-space-5); } .user-login-time { diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/table/column-layouts/name/user-table-name-column-layout.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/table/column-layouts/name/user-table-name-column-layout.element.ts index b97ef2232e..15292958c7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/table/column-layouts/name/user-table-name-column-layout.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/table/column-layouts/name/user-table-name-column-layout.element.ts @@ -1,5 +1,7 @@ -import { html, LitElement, customElement, property, ifDefined } from '@umbraco-cms/backoffice/external/lit'; +import { UMB_USER_WORKSPACE_PATH } from '../../../../../paths.js'; +import { html, LitElement, customElement, property } from '@umbraco-cms/backoffice/external/lit'; import type { UmbTableColumn, UmbTableItem } from '@umbraco-cms/backoffice/components'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; @customElement('umb-user-table-name-column-layout') export class UmbUserTableNameColumnLayoutElement extends LitElement { @@ -13,38 +15,18 @@ export class UmbUserTableNameColumnLayoutElement extends LitElement { value!: any; override render() { - const avatarUrls = [ - { - scale: '1x', - url: this.value.avatarUrls?.[0], - }, - { - scale: '2x', - url: this.value.avatarUrls?.[1], - }, - { - scale: '3x', - url: this.value.avatarUrls?.[2], - }, - ]; - - let avatarSrcset = ''; - - avatarUrls.forEach((url) => { - avatarSrcset += `${url.url} ${url.scale},`; - }); + const href = UMB_USER_WORKSPACE_PATH + '/edit/' + this.value.unique; return html`
- 0 ? avatarUrls[0].url : undefined)} - img-srcset=${ifDefined(this.value.avatarUrls.length > 0 ? avatarSrcset : undefined)}> - ${this.value.name} + name=${this.value.name} + kind=${this.value.kind} + .imgUrls=${this.value.avatarUrls}> + ${this.value.name}
`; } + static override styles = [UmbTextStyles]; } export default UmbUserTableNameColumnLayoutElement; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/table/user-table-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/table/user-table-collection-view.element.ts index 375ca885b3..b0f1ab7fc2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/table/user-table-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/table/user-table-collection-view.element.ts @@ -19,6 +19,7 @@ import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; import './column-layouts/name/user-table-name-column-layout.element.js'; import './column-layouts/status/user-table-status-column-layout.element.js'; +import { UmbUserKind } from '../../../utils/index.js'; @customElement('umb-user-table-collection-view') export class UmbUserTableCollectionViewElement extends UmbLitElement { @@ -114,7 +115,7 @@ export class UmbUserTableCollectionViewElement extends UmbLitElement { this._tableItems = this._users.map((user) => { return { id: user.unique, - icon: 'icon-user', + icon: user.kind === UmbUserKind.API ? 'icon-unplug' : 'icon-user', data: [ { columnAlias: 'userName', @@ -122,6 +123,7 @@ export class UmbUserTableCollectionViewElement extends UmbLitElement { unique: user.unique, name: user.name, avatarUrls: user.avatarUrls, + kind: user.kind, }, }, { diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/index.ts index 6f97b68e0a..a3e23b4c87 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/index.ts @@ -1,5 +1,6 @@ -import './user-input/user-input.element.js'; +import './user-avatar/user-avatar.element.js'; import './user-document-start-node/user-document-start-node.element.js'; +import './user-input/user-input.element.js'; import './user-media-start-node/user-media-start-node.element.js'; export * from './user-input/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-avatar/user-avatar.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-avatar/user-avatar.element.ts new file mode 100644 index 0000000000..44661991dc --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-avatar/user-avatar.element.ts @@ -0,0 +1,139 @@ +import type { UmbUserKindType } from '../../utils/index.js'; +import { UmbUserKind } from '../../utils/index.js'; +import type { UUIAvatarElement } from '@umbraco-cms/backoffice/external/uui'; +import { + css, + html, + customElement, + property, + ifDefined, + state, + classMap, + query, +} from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; + +const elementName = 'umb-user-avatar'; +@customElement(elementName) +export class UmbUserAvatarElement extends UmbLitElement { + @property({ type: String }) + name?: string; + + @property({ type: String }) + kind?: UmbUserKindType = UmbUserKind.DEFAULT; + + @property({ type: Array, attribute: false }) + public get imgUrls(): Array { + return this.#imgUrls; + } + public set imgUrls(value: Array) { + this.#imgUrls = value; + this.hasImgUrls = value.length > 0; + this.#setImgSrcSizes(); + } + #imgUrls: Array = []; + + @state() + private _imgSrcSizes: Array<{ w: number; url: string }> = []; + + @state() + private _imgSrc = ''; + + @state() + private hasImgUrls = false; + + @query('uui-avatar') + avatarElement!: UUIAvatarElement; + + #setImgSrcSizes() { + if (this.#imgUrls.length === 0) { + this._imgSrcSizes = []; + return; + } + + this._imgSrcSizes = [ + { + w: 30, + url: this.#imgUrls[0], + }, + { + w: 60, + url: this.#imgUrls[1], + }, + { + w: 90, + url: this.#imgUrls[2], + }, + { + w: 150, + url: this.#imgUrls[3], + }, + { + w: 300, + url: this.#imgUrls[4], + }, + ]; + + this.#setImgSrc(); + } + + protected override firstUpdated(): void { + this.#setImgSrc(); + } + + async #setImgSrc() { + if (!this.hasImgUrls) return; + if (!this.avatarElement) return; + + setTimeout(() => { + // TODO: look into img sizes="auto" to let the browser handle the correct image size based on the element size + const elementSize = this.avatarElement.getBoundingClientRect(); + const elementWidth = elementSize.width; + + const matchingSizes = this._imgSrcSizes.filter((size) => { + // we multiply the element width to make sure we have a good quality image + return elementWidth * 1.5 <= size.w; + }); + + // We use the smallest image that is larger than the element width + this._imgSrc = matchingSizes[0]?.url; + }, 0); + } + + override render() { + const classes = { + default: this.kind === UmbUserKind.API, + api: this.kind === UmbUserKind.API, + 'has-image': this.hasImgUrls, + }; + + return html``; + } + + static override styles = [ + css` + uui-avatar { + background-color: transparent; + border: 1.5px solid var(--uui-color-border); + color: inherit; + } + + uui-avatar.has-image { + border-color: transparent; + } + + uui-avatar.api { + border-radius: 9%; + } + `, + ]; +} + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbUserAvatarElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-input/user-input.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-input/user-input.element.ts index 0ca83e9a7d..118cdc4a36 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-input/user-input.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-input/user-input.element.ts @@ -157,7 +157,11 @@ export class UmbUserInputElement extends UUIFormControlMixin(UmbLitElement, '') if (!item.unique) return nothing; return html` - + this.#removeItem(item)}> @@ -171,7 +175,7 @@ export class UmbUserInputElement extends UUIFormControlMixin(UmbLitElement, '') width: 100%; } - uui-avatar { + umb-user-avatar { font-size: var(--uui-size-4); } `, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-change-password/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-change-password/manifests.ts new file mode 100644 index 0000000000..a144bfcb8e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-change-password/manifests.ts @@ -0,0 +1,10 @@ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'condition', + name: 'User Allow Change Password Condition', + alias: 'Umb.Condition.User.AllowChangePassword', + api: () => import('./user-allow-change-password-action.condition.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-change-password/user-allow-change-password-action.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-change-password/user-allow-change-password-action.condition.ts new file mode 100644 index 0000000000..d82ad989ae --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-change-password/user-allow-change-password-action.condition.ts @@ -0,0 +1,15 @@ +import { UmbUserKind } from '../../utils/index.js'; +import { UmbUserActionConditionBase } from '../user-allow-action-base.condition.js'; + +export class UmbUserAllowChangePasswordActionCondition extends UmbUserActionConditionBase { + async _onUserDataChange() { + // don't allow the current user to delete themselves + if (this.userKind === UmbUserKind.DEFAULT) { + this.permitted = true; + } else { + this.permitted = false; + } + } +} + +export { UmbUserAllowChangePasswordActionCondition as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/manifests.ts index 23b03f4ec4..4851681f7c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/manifests.ts @@ -1,3 +1,4 @@ +import { manifests as userAllowChangePasswordActionManifests } from './allow-change-password/manifests.js'; import { manifests as userAllowDeleteActionManifests } from './allow-delete/manifests.js'; import { manifests as userAllowDisableActionManifests } from './allow-disable/manifests.js'; import { manifests as userAllowEnableActionManifests } from './allow-enable/manifests.js'; @@ -7,10 +8,11 @@ import { manifests as userAllowUnlockActionManifests } from './allow-unlock/mani import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const manifests: Array = [ + ...userAllowChangePasswordActionManifests, + ...userAllowDeleteActionManifests, ...userAllowDisableActionManifests, ...userAllowEnableActionManifests, - ...userAllowUnlockActionManifests, ...userAllowExternalLoginActionManifests, ...userAllowMfaActionManifests, - ...userAllowDeleteActionManifests, + ...userAllowUnlockActionManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-action-base.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-action-base.condition.ts index 161f04d1b4..bdae21f4af 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-action-base.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-action-base.condition.ts @@ -16,23 +16,44 @@ export abstract class UmbUserActionConditionBase { /** * The unique identifier of the user being edited + * @protected + * @type {string} + * @memberof UmbUserActionConditionBase */ protected userUnique?: string; /** * The state of the user being edited + * @protected + * @type {(UmbUserStateEnum | null)} + * @memberof UmbUserActionConditionBase */ protected userState?: UmbUserStateEnum | null; + /** + * The kind of user being edited + * @protected + * @type {string} + * @memberof UmbUserActionConditionBase + */ + protected userKind?: string; + + /** + * Creates an instance of UmbUserActionConditionBase. + * @param {UmbControllerHost} host The host controller + * @param {UmbConditionControllerArguments} args The condition arguments + * @memberof UmbUserActionConditionBase + */ constructor(host: UmbControllerHost, args: UmbConditionControllerArguments) { super(host, args); this.consumeContext(UMB_USER_WORKSPACE_CONTEXT, (context) => { this.observe( - observeMultiple([context.unique, context.state]), - ([unique, state]) => { + observeMultiple([context.unique, context.state, context.kind]), + ([unique, state, kind]) => { this.userUnique = unique; this.userState = state; + this.userKind = kind; this._onUserDataChange(); }, '_umbActiveUser', diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/manifests.ts index a5eb9bfeea..3eae6c756b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/manifests.ts @@ -1,24 +1,26 @@ +import { manifests as clientCredentialManifests } from './client-credential/manifests.js'; import { manifests as collectionManifests } from './collection/manifests.js'; import { manifests as conditionsManifests } from './conditions/manifests.js'; import { manifests as entityActionsManifests } from './entity-actions/manifests.js'; import { manifests as entityBulkActionManifests } from './entity-bulk-actions/manifests.js'; import { manifests as inviteManifests } from './invite/manifests.js'; import { manifests as modalManifests } from './modals/manifests.js'; +import { manifests as propertyEditorManifests } from './property-editor/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as sectionViewManifests } from './section-view/manifests.js'; -import { manifests as propertyEditorManifests } from './property-editor/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ +export const manifests: Array = [ + ...clientCredentialManifests, ...collectionManifests, ...conditionsManifests, ...entityActionsManifests, ...entityBulkActionManifests, ...inviteManifests, ...modalManifests, + ...propertyEditorManifests, ...repositoryManifests, ...sectionViewManifests, - ...propertyEditorManifests, ...workspaceManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/create-user-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/create-user-modal.element.ts index fdf1e15950..863fc88bec 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/create-user-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/create-user-modal.element.ts @@ -1,5 +1,7 @@ import { UmbUserDetailRepository } from '../../repository/index.js'; +import { UmbUserKind } from '../../utils/index.js'; import { UMB_CREATE_USER_SUCCESS_MODAL } from './create-user-success-modal.token.js'; +import type { UmbCreateUserModalData } from './create-user-modal.token.js'; import type { UmbUserGroupInputElement } from '@umbraco-cms/backoffice/user-group'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, query } from '@umbraco-cms/backoffice/external/lit'; @@ -7,7 +9,7 @@ import { UmbModalBaseElement, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/bac import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; @customElement('umb-create-user-modal') -export class UmbCreateUserModalElement extends UmbModalBaseElement { +export class UmbCreateUserModalElement extends UmbModalBaseElement { #userDetailRepository = new UmbUserDetailRepository(this); @query('#CreateUserForm') @@ -35,6 +37,7 @@ export class UmbCreateUserModalElement extends UmbModalBaseElement { const { data: userScaffold } = await this.#userDetailRepository.createScaffold(); if (!userScaffold) return; + userScaffold.kind = this.data?.user.kind ?? UmbUserKind.DEFAULT; userScaffold.name = name; userScaffold.email = email; userScaffold.userName = email; @@ -44,7 +47,11 @@ export class UmbCreateUserModalElement extends UmbModalBaseElement { const { data } = await this.#userDetailRepository.create(userScaffold); if (data) { - this.#openSuccessModal(data.unique); + if (data.kind === UmbUserKind.DEFAULT) { + this.#openSuccessModal(data.unique); + } else { + this._submitModal(); + } } } @@ -73,11 +80,8 @@ export class UmbCreateUserModalElement extends UmbModalBaseElement { } override render() { - return html` -

- Create new users to give them access to Umbraco. When a user is created a password will be generated that you - can share with the user. -

+ return html` +

${this.localize.term('user_createUserDescription', this.data?.user.kind)}

${this.#renderForm()} @@ -115,7 +119,8 @@ export class UmbCreateUserModalElement extends UmbModalBaseElement { UmbTextStyles, css` uui-input, - uui-input-password { + uui-input-password, + uui-combobox { width: 100%; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/create-user-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/create-user-modal.token.ts index d8e2edf546..4486b12f4f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/create-user-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/create-user-modal.token.ts @@ -1,7 +1,14 @@ +import type { UmbUserKindType } from '../../utils/index.js'; import { UMB_CREATE_USER_MODAL_ALIAS } from './constants.js'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; -export const UMB_CREATE_USER_MODAL = new UmbModalToken(UMB_CREATE_USER_MODAL_ALIAS, { +export interface UmbCreateUserModalData { + user: { + kind?: UmbUserKindType; + }; +} + +export const UMB_CREATE_USER_MODAL = new UmbModalToken(UMB_CREATE_USER_MODAL_ALIAS, { modal: { type: 'dialog', size: 'small', diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/create-user-success-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/create-user-success-modal.element.ts index 8185df073f..f30bf145be 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/create-user-success-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/create/create-user-success-modal.element.ts @@ -1,6 +1,7 @@ import { UmbUserItemRepository } from '../../repository/item/index.js'; import { UmbNewUserPasswordRepository } from '../../repository/new-password/index.js'; import type { UmbUserItemModel } from '../../repository/item/types.js'; +import { UMB_USER_WORKSPACE_PATH } from '../../paths.js'; import type { UmbCreateUserSuccessModalData, UmbCreateUserSuccessModalValue, @@ -69,10 +70,8 @@ export class UmbCreateUserSuccessModalElement extends UmbModalBaseElement< this._rejectModal({ type: 'createAnotherUser' }); }; - #onGoToProfile = (event: Event) => { - event.stopPropagation(); + #onGoToProfile = () => { this._submitModal(); - history.pushState(null, '', 'section/user-management/view/users/user/edit/' + this.data?.user.unique); //TODO: URL Should be dynamic }; override render() { @@ -98,7 +97,8 @@ export class UmbCreateUserSuccessModalElement extends UmbModalBaseElement< slot="actions" label="Go to profile" look="primary" - color="positive">
+ color="positive" + href=${UMB_USER_WORKSPACE_PATH + '/edit/' + this.data?.user.unique}>
`; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/user-picker/user-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/user-picker/user-picker-modal.element.ts index 57c1262614..76356d5956 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/user-picker/user-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/user-picker/user-picker-modal.element.ts @@ -58,7 +58,11 @@ export class UmbUserPickerModalElement extends UmbModalBaseElement this.#selectionManager.select(user.unique)} @deselected=${() => this.#selectionManager.deselect(user.unique)} ?selected=${this.#selectionManager.isSelected(user.unique)}> - + `, )} @@ -74,8 +78,7 @@ export class UmbUserPickerModalElement extends UmbModalBaseElement; entityType: UmbUserEntityType; + kind: UmbUserKindType; name: string; unique: string; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.server.data-source.ts index 4856549327..d435990d00 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/user-item.server.data-source.ts @@ -33,5 +33,6 @@ const mapper = (item: UserItemResponseModel): UmbUserItemModel => { entityType: UMB_USER_ENTITY_TYPE, name: item.name, unique: item.id, + kind: item.kind, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/types.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/types.ts index b092e1b3e8..cbb8fe2fe2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/types.ts @@ -1,4 +1,5 @@ import type { UmbUserEntityType } from './entity.js'; +import type { UmbUserKindType } from './utils/index.js'; import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; import { type UserConfigurationResponseModel, @@ -26,6 +27,7 @@ export interface UmbUserDetailModel extends UmbUserStartNodesModel { updateDate: string | null; userGroupUniques: Array; userName: string; + kind: UmbUserKindType; } export interface UmbUserStartNodesModel { diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/utils/index.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/utils/index.ts index 5d1478f0fa..4115ca2bbc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/utils/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/utils/index.ts @@ -1 +1,8 @@ export * from './is-user.function.js'; + +export type UmbUserKindType = 'Default' | 'Api'; + +export const UmbUserKind = Object.freeze({ + DEFAULT: 'Default', + API: 'Api', +}); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-access/user-workspace-access.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-access/user-workspace-access.element.ts index 6be3f5d9b4..7177e91909 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-access/user-workspace-access.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-access/user-workspace-access.element.ts @@ -28,7 +28,7 @@ export class UmbUserWorkspaceAccessElement extends UmbLitElement { } override render() { - return html` + return html`
Based on the assigned groups and start nodes, the user has access to the following nodes = []; - @query('#AvatarFileField') _avatarFileField?: HTMLInputElement; @@ -38,30 +35,11 @@ export class UmbUserAvatarElement extends UmbLitElement { this.#userWorkspaceContext!.data, async (user) => { this._user = user; - this.#setUserAvatarUrls(user); }, 'umbUserObserver', ); }; - #setUserAvatarUrls = async (user: UmbUserDetailModel | undefined) => { - if (!user || !user.avatarUrls || user.avatarUrls.length === 0) { - this._userAvatarUrls = []; - return; - } - - this._userAvatarUrls = [ - { - scale: '1x', - url: user.avatarUrls?.[3], - }, - { - scale: '2x', - url: user.avatarUrls?.[4], - }, - ]; - }; - #uploadAvatar = async () => { try { const selectedFile = await this.#selectAvatar(); @@ -95,35 +73,24 @@ export class UmbUserAvatarElement extends UmbLitElement { #deleteAvatar = async () => { if (!this.#userWorkspaceContext) return; - const { error } = await this.#userWorkspaceContext.deleteAvatar(); - - if (!error) { - this._userAvatarUrls = []; - } + this.#userWorkspaceContext.deleteAvatar(); }; - #getAvatarSrcset() { - let string = ''; - - this._userAvatarUrls?.forEach((url) => { - string += `${url.url} ${url.scale},`; - }); - return string; - } - #hasAvatar() { - return this._userAvatarUrls.length > 0; + if (!this._user) return false; + return this._user.avatarUrls.length > 0; } override render() { + if (!this._user) return nothing; return html`
- + .name=${this._user.name} + .kind=${this._user.kind} + .imgUrls=${this._user.avatarUrls ?? []}> ${this.#hasAvatar() @@ -143,7 +110,6 @@ export class UmbUserAvatarElement extends UmbLitElement { css` :host { display: block; - margin-bottom: var(--uui-size-space-4); } #Avatar { diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-client-credentials/user-workspace-client-credentials.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-client-credentials/user-workspace-client-credentials.element.ts new file mode 100644 index 0000000000..512d97f2d6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-client-credentials/user-workspace-client-credentials.element.ts @@ -0,0 +1,162 @@ +import { UMB_USER_WORKSPACE_CONTEXT } from '../../user-workspace.context-token.js'; +import type { + UmbDeleteUserClientCredentialRequestArgs, + UmbUserClientCredentialModel, +} from '../../../client-credential/index.js'; +import { UmbUserClientCredentialRepository } from '../../../client-credential/index.js'; +import { UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL } from '../../../client-credential/create/modal/create-user-client-credential-modal.token.js'; +import { UmbUserKind } from '../../../utils/index.js'; +import { html, customElement, state, css, nothing } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { UMB_MODAL_MANAGER_CONTEXT, umbConfirmModal } from '@umbraco-cms/backoffice/modal'; + +const elementName = 'umb-user-workspace-client-credentials'; +@customElement(elementName) +export class UmbUserWorkspaceClientCredentialsElement extends UmbLitElement { + @state() + private _userUnique?: string; + + @state() + private _userKind?: string; + + @state() + private _clientCredentials: UmbUserClientCredentialModel[] = []; + + #userWorkspaceContext?: typeof UMB_USER_WORKSPACE_CONTEXT.TYPE; + #modalManagerContext? = UMB_MODAL_MANAGER_CONTEXT.TYPE; + #userClientCredentialRepository = new UmbUserClientCredentialRepository(this); + + constructor() { + super(); + + this.consumeContext(UMB_USER_WORKSPACE_CONTEXT, (instance) => { + this.#userWorkspaceContext = instance; + + this.observe(this.#userWorkspaceContext.kind, (kind) => (this._userKind = kind), 'umbUserKindObserver'); + + this.observe( + this.#userWorkspaceContext.unique, + async (unique) => this.#onUserUniqueChange(unique), + 'umbUserUniqueObserver', + ); + }); + + this.consumeContext(UMB_MODAL_MANAGER_CONTEXT, (instance) => { + this.#modalManagerContext = instance; + }); + } + + #onUserUniqueChange(unique: string | undefined) { + if (unique && this._userUnique !== unique) { + this._userUnique = unique; + this.#loadClientCredentials(); + } + + if (!unique) { + this._userUnique = undefined; + this._clientCredentials = []; + } + } + + async #loadClientCredentials() { + if (!this._userUnique) throw new Error('User unique not available'); + + const { data } = await this.#userClientCredentialRepository.requestClientCredentials({ + user: { unique: this._userUnique }, + }); + + this._clientCredentials = data ?? []; + } + + #onAdd(event: Event) { + event.stopPropagation(); + if (!this.#modalManagerContext) throw new Error('Modal Manager Context not available'); + if (!this._userUnique) throw new Error('User unique not available'); + + const modalContext = this.#modalManagerContext.open(this, UMB_CREATE_USER_CLIENT_CREDENTIAL_MODAL, { + data: { + user: { + unique: this._userUnique, + }, + }, + }); + + modalContext.onSubmit().then(() => this.#loadClientCredentials()); + } + + async #onDelete(event: Event, client: UmbUserClientCredentialModel) { + event.stopPropagation(); + if (!this._userUnique) throw new Error('User unique not available'); + + await umbConfirmModal(this, { + headline: `Delete ${client.unique}`, + content: `Are you sure you want to delete ${client.unique}?`, + confirmLabel: 'Delete', + color: 'danger', + }); + + const payload: UmbDeleteUserClientCredentialRequestArgs = { + user: { unique: this._userUnique }, + client: { unique: client.unique }, + }; + + const { error } = await this.#userClientCredentialRepository.requestDelete(payload); + + if (!error) { + this.#loadClientCredentials(); + } + } + + override render() { + if (this._userKind !== UmbUserKind.API) return nothing; + + return html` +
Client Credentials
+ ${this._clientCredentials.map((client) => html` ${this.#renderItem(client)} `)} + +
`; + } + + #renderItem(client: UmbUserClientCredentialModel) { + return html` + + + this.#onDelete(event, client)} + label="Delete ${client.unique}" + compact + > + + `; + } + + static override styles = [ + UmbTextStyles, + css` + :host { + display: block; + } + + uui-input { + width: 100%; + } + + #add-button { + width: 100%; + } + `, + ]; +} + +declare global { + interface HTMLElementTagNameMap { + [elementName]: UmbUserWorkspaceClientCredentialsElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-info/user-workspace-info.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-info/user-workspace-info.element.ts index 471781d27e..898bea5823 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-info/user-workspace-info.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/components/user-workspace-info/user-workspace-info.element.ts @@ -2,6 +2,7 @@ import type { UmbUserDisplayStatus } from '../../../utils.js'; import { TimeFormatOptions, getDisplayStateFromUserStatus } from '../../../utils.js'; import { UMB_USER_WORKSPACE_CONTEXT } from '../../user-workspace.context-token.js'; import type { UmbUserDetailModel } from '../../../types.js'; +import { UmbUserKind } from '../../../utils/index.js'; import { html, customElement, state, css, repeat, ifDefined, nothing } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; @@ -42,6 +43,13 @@ export class UmbUserWorkspaceInfoElement extends UmbLitElement { } this._userInfo = [ + { + labelKey: 'user_kind', + value: + user.kind === UmbUserKind.API + ? this.localize.term('user_userKindApi') + : this.localize.term('user_userKindDefault'), + }, { labelKey: 'user_lastLogin', value: user.lastLoginDate @@ -65,6 +73,11 @@ export class UmbUserWorkspaceInfoElement extends UmbLitElement { { labelKey: 'user_updateDate', value: this.localize.date(user.updateDate!, TimeFormatOptions) }, { labelKey: 'general_id', value: user.unique }, ]; + + if (user.kind === UmbUserKind.API) { + const include = ['user_kind', 'user_createDate', 'user_updateDate', 'general_id']; + this._userInfo = this._userInfo.filter((item) => include.includes(item.labelKey)); + } }; override render() { @@ -84,18 +97,20 @@ export class UmbUserWorkspaceInfoElement extends UmbLitElement { #renderInfoList() { return html` - ${repeat( - this._userInfo, - (item) => item.labelKey, - (item) => this.#renderInfoItem(item.labelKey, item.value), - )} + + ${repeat( + this._userInfo, + (item) => item.labelKey, + (item) => this.#renderInfoItem(item.labelKey, item.value), + )} + `; } #renderInfoItem(labelKey: string, value?: string | number) { return html` - + `; } @@ -72,9 +73,11 @@ export class UmbUserWorkspaceEditorElement extends UmbLitElement { if (!this._user) return nothing; return html` - - - + + + + + `; } @@ -82,14 +85,11 @@ export class UmbUserWorkspaceEditorElement extends UmbLitElement { if (!this._user) return nothing; return html` - - - - - - + + + + + `; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user-workspace.context.ts index 088d944b4f..69587e191d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user-workspace.context.ts @@ -25,6 +25,7 @@ export class UmbUserWorkspaceContext readonly data = this.#currentData.asObservable(); readonly state = this.#currentData.asObservablePart((x) => x?.state); readonly unique = this.#currentData.asObservablePart((x) => x?.unique); + readonly kind = this.#currentData.asObservablePart((x) => x?.kind); readonly userGroupUniques = this.#currentData.asObservablePart((x) => x?.userGroupUniques || []); readonly documentStartNodeUniques = this.#currentData.asObservablePart( (data) => data?.documentStartNodeUniques || [], diff --git a/src/Umbraco.Web.UI.Client/tsconfig.json b/src/Umbraco.Web.UI.Client/tsconfig.json index e43e8f36d1..198d96520b 100644 --- a/src/Umbraco.Web.UI.Client/tsconfig.json +++ b/src/Umbraco.Web.UI.Client/tsconfig.json @@ -109,6 +109,7 @@ DON'T EDIT THIS FILE DIRECTLY. It is generated by /devops/tsconfig/index.js "@umbraco-cms/backoffice/store": ["./src/packages/core/store/index.ts"], "@umbraco-cms/backoffice/style": ["./src/packages/core/style/index.ts"], "@umbraco-cms/backoffice/stylesheet": ["./src/packages/templating/stylesheets/index.ts"], + "@umbraco-cms/backoffice/sysinfo": ["./src/packages/sysinfo/index.ts"], "@umbraco-cms/backoffice/tags": ["./src/packages/tags/index.ts"], "@umbraco-cms/backoffice/template": ["./src/packages/templating/templates/index.ts"], "@umbraco-cms/backoffice/temporary-file": ["./src/packages/core/temporary-file/index.ts"],